9. Pandas 数据统计与汇总分析

#AI提效·半月创作挑战赛#

Pandas 数据统计与汇总分析

在数据分析的早期阶段,我们往往需要快速了解数据的整体特征,例如:均值、方差、频次分布、变量之间的相关性等。
Pandas 提供了丰富而高效的统计与汇总分析函数,可以帮助我们从原始数据中提炼出核心信息,为后续的建模与决策提供依据。本文将系统讲解这些方法的使用与意义。


1. 常用统计函数

Pandas 的统计函数可以直接作用于 SeriesDataFrame,帮助我们高效地计算各类统计指标。

import pandas as pd

data = {
    "姓名": ["张三", "李四", "王五", "赵六", "孙七"],
    "年龄": [23, 34, 29, 40, 34],
    "销售额": [100, 150, 200, 130, 160]
}

df = pd.DataFrame(data)
print(df)
   姓名  年龄  销售额
0  张三  23  100
1  李四  34  150
2  王五  29  200
3  赵六  40  130
4  孙七  34  160

1.1 基本统计

Pandas 提供的常见统计方法包括:

  • 均值(mean):衡量数据集中趋势;
  • 最大值 / 最小值(max / min):反映取值范围;
  • 总和(sum):适合计算总销售额、总收入等指标。
print("平均值:\n", df[['年龄','销售额']].mean())
print("最大值:\n", df[['年龄','销售额']].max())
print("最小值:\n", df[['年龄','销售额']].min())
print("总和:\n", df[['年龄','销售额']].sum())
平均值:
 年龄      32.0
销售额    148.0
dtype: float64
最大值:
 年龄      40
销售额    200
dtype: int64
最小值:
 年龄      23
销售额    100
dtype: int64
总和:
 年龄     160
销售额    740
dtype: int64

这些函数都能一次性对多个列执行操作,输出结果为一个 Series 对象。

1.2 描述性统计

describe() 函数可以一键生成完整的统计摘要,包括:
样本数量(count)、均值(mean)、标准差(std)、四分位数(25%、50%、75%)等。

print("描述性统计:\n", df[['年龄','销售额']].describe())
描述性统计:
               年龄         销售额
count   5.000000    5.000000
mean   32.000000  148.000000
std     6.363961   37.013511
min    23.000000  100.000000
25%    29.000000  130.000000
50%    34.000000  150.000000
75%    34.000000  160.000000
max    40.000000  200.000000

通过该函数,用户可以快速了解数据的分布与离散程度。若希望同时查看非数值字段的统计信息(如分类数量、最频繁值等),可在参数中加入 include='all'


2. 频次统计

在探索离散型变量(如性别、地区、等级)时,频次统计可以帮助我们理解类别的分布特征。

# 查看年龄频次
print(df['年龄'].value_counts())

# 查看唯一值数量
print("唯一年龄数量:", df['年龄'].nunique())
print("唯一年龄列表:", df['年龄'].unique())
年龄
34    2
23    1
29    1
40    1
Name: count, dtype: int64
唯一年龄数量: 4
唯一年龄列表: [23 34 29 40]

value_counts() 默认按频次降序排列,支持参数 normalize=True 查看比例分布;

unique()nunique() 可帮助识别重复值与分类数量,是数据清洗和特征工程中常用工具。


3. 相关性与协方差

在多变量数据分析中,研究不同变量之间的关系是非常关键的一步。相关性(correlation)用于衡量两个变量之间的线性关系强度和方向,而协方差(covariance)则反映它们是否存在同向或反向变化的趋势。

3.1 相关性分析

Pandas 提供了多种计算相关系数的方法,其中最常用的是皮尔逊(Pearson)相关系数,它适用于线性关系数据;斯皮尔曼(Spearman)相关系数则更稳健,适用于非线性关系或含异常值的数据。

# 皮尔逊相关系数(默认)
print("相关性矩阵:\n", df[['年龄','销售额']].corr())

# 斯皮尔曼相关系数
print("斯皮尔曼相关性:\n", df[['年龄','销售额']].corr(method='spearman'))
相关性矩阵:
            年龄       销售额
年龄   1.000000  0.169813
销售额  0.169813  1.000000
斯皮尔曼相关性:
            年龄       销售额
年龄   1.000000  0.051299
销售额  0.051299  1.000000

相关系数的取值范围在 -1 到 1 之间,越接近 ±1,线性关系越强;值接近 0 则说明两者关系较弱。

3.2 计算协方差

协方差用于判断两个变量是否存在同向或反向变化的趋势。若协方差为正,说明变量总体呈同向变化;若为负,则呈反向变化。不同于相关系数,协方差的数值依赖于变量的量纲,因此不便于直接比较。

print("协方差矩阵:\n", df[['年龄','销售额']].cov())
协方差矩阵:
        年龄     销售额
年龄   40.5    40.0
销售额  40.0  1370.0

通过比较可知,相关系数是对协方差的标准化形式,更直观地揭示了变量之间的线性依赖关系。


4. 分组统计

在实际分析中,我们常常需要根据某个分类字段对数据进行分组统计,例如按年龄段计算销售额总和或平均值。此时可以使用 groupby 方法。以下示例展示了按年龄分组后的销售额汇总:

grouped = df.groupby('年龄')['销售额'].sum()
print(grouped)
年龄
23    100
29    200
34    310
40    130
Name: 销售额, dtype: int64

groupby 不仅可以实现单一统计指标的计算,还支持通过 agg() 方法对多个指标进行聚合。例如:

gr_agg = df.groupby('年龄').agg({'销售额':['mean','sum','count']})
print(gr_agg)
      销售额           
     mean  sum count
年龄                  
23  100.0  100     1
29  200.0  200     1
34  155.0  310     2
40  130.0  130     1

这种方式非常灵活,可同时计算多个统计指标,也可以实现多字段分组分析,如 groupby(['地区', '性别'])


5. 小结

  • 基础统计meansummaxmindescribe 等帮助快速了解数据特征;
  • 频次与唯一值value_countsuniquenunique 分析分类分布;
  • 变量关系分析corrcov 揭示数据之间的关联结构;
  • 分组聚合groupby 提供灵活的分层统计方式,是构建特征与业务指标的核心工具。

熟练运用这些方法,可以让我们在面对复杂的数据集时迅速发现规律、识别异常,并为后续的可视化、建模与预测提供坚实的分析支撑。


上一篇:8. Pandas 日期与时间序列数据处理
下一篇:10. Pandas 分组与聚合分析(groupby)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MoRanzhi1203

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值