学习使用 Python 汇总数据的不同方法。
数据就是力量。我们拥有的数据越多,我们创造的产品就越好、越强大。然而,处理大量数据也存在挑战。我们需要软件工具和软件包来获得洞察力,例如在 Python 中创建数据摘要。
大量基于数据的解决方案和产品使用表格数据,即以表格形式存储的数据,其中行和列均有标签。每行代表一个观察结果(即一个数据点),列代表该观察结果的特征或属性。
随着行数和列数的增加,手动检查数据变得越来越困难。由于我们几乎总是处理大型数据集,因此使用软件工具来汇总数据是一项基本要求。
数据摘要对于各种任务都很有用:
- 学习数据集的底层结构。
- 了解特征(即列)的分布。
- 探索性数据分析。
的 库。用于此目的的最流行和最常用的库是 pandas。LearnPython 有一 门“数据科学 Python 简介” 课程,其中详细介绍了 pandas 库。
pandas 是 Python 的一个数据分析和处理库。在本文中,我们将通过几个示例来演示如何使用 pandas 创建和显示数据摘要。
开始使用 pandas
让我们从导入熊猫开始。
import pandas as pd
考虑一个 CSV 格式的销售数据集,其中包含某些产品及其产品组的销售和库存数量。我们为此文件中的数据创建一个 pandas DataFrame,并显示前 5 行,如下所示:
df = pd.read_csv(âsales.csvâ)
df.head()
输出:
产品组 | 产品代码 | 销售数量 | 库存数量 | |
---|---|---|---|---|
0 | A | 1000 | 337 | 791 |
1 | C | 1001 | 502 | 757 |
2 | A | 1002 | 402 | 827 |
3 | A | 1003 | 411 | 1227 |
4 | C | 1004 | 186 | 361 |
pandas 中的数据汇总首先检查数据的大小。该
shape
方法返回一个包含 DataFrame 的行数和列数的元组。
>>> df.shape
(300, 4)
它包含 300 行和 4 列。这是一个干净的数据集,可以进行分析。但是,大多数现实生活中的数据集都需要清理。这里有一篇文章解释了 最有用的 Python 数据清理模块。
我们继续通过分别关注每一列来总结数据。pandas 有两种主要数据结构:DataFrame 和 Series。DataFrame 是二维数据结构,而 Series 是一维数据结构。DataFrame 中的每一列都可以被视为一个 Series。
由于分类数据和数字数据的特点非常不同,因此最好分别介绍它们。
分类列
如果某一列包含分类数据(如 DataFrame 中的产品组列),我们可以检查其中不同值的数量。我们使用
unique()
或
nunique()
函数来执行此操作。
>>> df["product_group"].unique()
array(['A', 'C', 'B', 'G', 'D', 'F', 'E'], dtype=object)
>>> df["product_group"].nunique()
7
函数
nunique()
返回不同值的计数,而函数
unique()
显示不同值。分类列上另一个常用的汇总函数是
value_counts()
。它显示列中的不同值及其出现的计数。因此,我们可以概览数据的分布。
>>> df["product_group"].value_counts()
A 102
B 75
C 63
D 37
G 9
F 8
E 6
Name: product_group, dtype: int64
A 组的产品数量最多,其次是 B 组,有 75 种产品。函数的输出
value_counts()
按出现次数降序排列。
数字列
处理数字列时,我们需要不同的方法来汇总数据。例如,检查销售数量列的不同值的数量是没有意义的。相反,我们会计算统计指标,例如平均值、中位数、最小值和最大值。
我们先来计算一下销售数量列的平均值。
>>> df["sales_qty"].mean()
473.557
我们只需选择感兴趣的列并应用该
mean()
函数即可。我们也可以对多列执行此操作。
>>> df[["sales_qty","stock_qty"]].mean()
sales_qty 473.557
stock_qty 1160.837
dtype: float64
从 DataFrame 中选择多列时,请确保将它们指定为列表。否则,pandas 会产生键错误。
就像我们可以通过一次操作计算多个列上的单个统计数据一样,我们也可以一次计算多个统计数据。一种选择是使用
apply()
以下函数:
>>> df[["sales_qty","stock_qty"]].apply(["mean","median"])
输出:
销售数量 | 库存数量 | |
---|---|---|
意思是 | 473.556667 | 1160.836667 |
中位数 | 446.000000 | 1174.000000 |
这些函数写在一个列表中,然后传递给
apply()
。中位数是值排序后位于中间的值。比较平均值和中位数可以让我们了解分布的偏度。
在 Pandas 中,我们有很多方法可以创建数据摘要。例如,我们可以使用字典来计算不同列的单独统计数据。以下是示例:
df[["sales_qty","stock_qty"]].apply(
{
"sales_qty":["mean","median","max"],
"stock_qty":["mean","median","min"]
}
)
输出:
销售数量 | 库存数量 | |
---|---|---|
意思是 | 473.556667 | 1160.836667 |
中位数 | 446.000000 | 1174.000000 |
最大限度 | 999.000000 | 南 |
分钟 | 南 | 302.000000 |
字典的键表示列名,值表示要为该列计算的统计数据。
函数而不是 来
agg()
执行相同的操作
apply()
。语法是相同的,因此如果您遇到使用 函数的教程,请不要感到惊讶
agg()
。
pandas 在很多方面都是一个非常有用和实用的库。例如,我们只需一个函数就可以计算所有数字列的各种统计数据
describe()
:
>>> df.describe()
输出:
销售数量 | 库存数量 | |
---|---|---|
数数 | 300.000000 | 300.000000 |
意思是 | 473.556667 | 1160.836667 |
标准 | 295.877223 | 480.614653 |
分钟 | 4.000000 | 302.000000 |
25% | 203.000000 | 750.500000 |
50% | 446.000000 | 1174.000000 |
75% | 721.750000 | 1590.500000 |
最大限度 | 999.000000 | 1988.000000 |
此 DataFrame 中的统计数据为我们提供了值分布的总体概述。计数是值(即行)的数量。“25%”、“50%”和“75%”分别表示第一、第二和第三四分位数。第二四分位数(即 50%)也称为中位数。最后,“std”是列的标准差。
在 Python 中,可以针对 DataFrame 的特定部分创建数据摘要。我们只需在应用函数之前过滤相关部分即可。
例如,我们仅描述产品组 A 的数据如下:
df[df["product_group"]=="A"].describe()
我们首先选择产品组值为 A 的行,然后使用该
describe()
函数。输出的格式与上一个示例相同,但仅针对产品组 A 计算值。
我们也可以在数字列上应用过滤器。例如,以下代码行计算库存大于 500 的产品的平均销售数量。
df[df["stock_qty"]>500]["sales_qty"].mean()
输出:
476.951
pandas 可以非常高效地创建更复杂的过滤器。这里有一篇文章详细解释了 如何使用 pandas 根据行和列进行过滤 .
汇总数据组
我们可以为数据中的不同组分别创建数据摘要。这与我们在上一个示例中所做的非常相似。唯一的不同是对数据进行分组。
我们用函数按列中的不同值对行进行分组
groupby()
。以下代码按产品组对行进行分组。
df.groupby("product_group")
一旦分组形成,我们就可以计算任何统计数据并描述或总结数据。让我们计算每个产品组的平均销售量。
df.groupby("product_group")["sales_qty"].mean()
输出:
product_group
A 492.676471
B 490.253333
C 449.285714
D 462.864865
E 378.666667
F 508.875000
G 363.444444
Name: sales_qty, dtype: float64
我们还可以在单个操作中执行多个聚合。除了平均销售量之外,我们还要计算每个组中的产品数量。我们使用函数
agg()
,它还允许为聚合列分配名称。
df.groupby("product_group").agg(
avg_sales_qty = ("sales_qty", "mean"),
number_of_products = ("product_code","count")
)
输出:
产品组 | 平均销售数量 | 产品数量 |
---|---|---|
A | 492.676471 | 102 |
乙 | 490.253333 | 75 |
C | 449.285714 | 63 |
德 | 462.864865 | 三十七 |
和 | 378.666667 | 6 |
F | 508.875000 | 8 |
G | 363.444444 | 9 |
使用 Matplotlib 直方图呈现数据分布
数据可视化是另一种高效的数据汇总技术。Matplotlib 是 Python 中用于可视化探索和汇总数据的流行库。
数据可视化有很多种类型。直方图用于检查数字列的数据分布。它将整个值范围划分为离散的箱体,并计算每个箱体中的值数量。因此,我们可以概览数据的分布。
让我们创建销售数量列的直方图。
import matplotlib.pyplot as plt
plt.figure(figsize=(10,6))
plt.hist(df["sales_qty"], bins=10)
第一行我们引入了
pyplot
Matplotlib 的接口,第二行创建一个指定大小的空的图形对象,第三行在对象上绘制销售数量列的直方图
figure
,bins 参数决定了 bins 的数量。
以下是该代码生成的图表:
x 轴上的值表示箱边界。y 轴上的值表示每个箱中的值的数量。例如,有超过 40 种产品的销售数量在 100 到 200 之间。
Python 中的数据汇总
在着手创建基于数据的产品之前,了解手头的数据至关重要。你可以从 Python 中的数据摘要开始。在本文中,我们回顾了几个使用 pandas 和 Matplotlib 库来汇总数据的示例。
Python 拥有丰富的库选择,可加快和简化数据科学中的任务。Python 数据科学 课程是您数据科学之旅的良好开端。
发表评论 取消回复