Python 数据聚合
数据聚合是数据分析中不可或缺的一环,它允许我们从原始数据中提取有意义的统计信息和模式。通过聚合操作,我们可以将大量的数据点压缩成更容易理解的摘要信息,帮助我们做出更明智的决策。
什么是数据聚合?
数据聚合指的是将多个数据条目组合成一个单一的汇总值的过程。常见的聚合操作包括:
- 计算总和(sum)
- 计算平均值(mean)
- 查找最大值或最小值(max/min)
- 计算数量(count)
- 分组统计(group by)
在Python中,我们有多种工具可以进行数据聚合,从基础的Python内置功能到专业的数据分析库如NumPy、Pandas等。
使用内置函数进行简单聚合
Python的内置函数已经可以满足基本的聚合需求:
numbers = [4, 8, 15, 16, 23, 42]
# 计算总和
total = sum(numbers)
print(f"总和: {total}") # 输出: 总和: 108
# 计算平均值
average = sum(numbers) / len(numbers)
print(f"平均值: {average}") # 输出: 平均值: 18.0
# 最大值和最小值
maximum = max(numbers)
minimum = min(numbers)
print(f"最大值: {maximum}, 最小值: {minimum}") # 输出: 最大值: 42, 最小值: 4
# 计数
count = len(numbers)
print(f"数量: {count}") # 输出: 数量: 6
使用NumPy进行数值聚合
NumPy提供了更高效的数值计算功能,特别适合处理大型数据集:
import numpy as np
# 创建一个NumPy数组
numbers = np.array([4, 8, 15, 16, 23, 42])
# 基本统计量
print(f"总和: {np.sum(numbers)}") # 输出: 总和: 108
print(f"平均值: {np.mean(numbers)}") # 输出: 平均值: 18.0
print(f"最大值: {np.max(numbers)}") # 输出: 最大值: 42
print(f"最小值: {np.min(numbers)}") # 输出: 最小值: 4
print(f"标准差: {np.std(numbers)}") # 输出: 标准差: 13.266499161421599
print(f"方差: {np.var(numbers)}") # 输出: 方差: 176.0
print(f"中位数: {np.median(numbers)}") # 输出: 中位数: 15.5
NumPy的优势在于它不仅提供了基本统计函数,还能高效处理多维数组:
# 创建一个2D数组
data = np.array([
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
])
# 沿着不同轴进行聚合
print(f"每列的总和: {np.sum(data, axis=0)}") # 输出: 每列的总和: [120 150 180]
print(f"每行的总和: {np.sum(data, axis=1)}") # 输出: 每行的总和: [ 60 150 240]
使用Pandas进行强大的数据聚合
Pandas是Python中最强大的数据处理库之一,提供了丰富的聚合功能:
import pandas as pd
# 创建一个简单的DataFrame
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
'年龄': [25, 30, 22, 28, 32],
'部门': ['销售', '技术', '市场', '技术', '销售'],
'薪资': [8000, 12000, 7500, 11000, 9000]
}
df = pd.DataFrame(data)
print(df)
输出:
姓名 年龄 部门 薪资
0 张三 25 销售 8000
1 李四 30 技术 12000
2 王五 22 市场 7500
3 赵六 28 技术 11000
4 钱七 32 销售 9000
基本描述性统计
# 查看基本统计信息
print(df.describe())
输出:
年龄 薪资
count 5.000000 5.000000
mean 27.400000 9500.000000
std 3.847077 1936.490535
min 22.000000 7500.000000
25% 25.000000 8000.000000
50% 28.000000 9000.000000
75% 30.000000 11000.000000
max 32.000000 12000.000000
分组聚合
Pandas的groupby
功能是数据聚合的强大工具:
# 按部门分组,计算平均薪资和年龄
dept_stats = df.groupby('部门').agg({
'薪资': 'mean',
'年龄': 'mean'
})
print(dept_stats)
输出:
薪资 年龄
部门
市场 7500.0 22.0
技术 11500.0 29.0
销售 8500.0 28.5
多重聚合
Pandas允许对同一列应用多个聚合函数:
# 对薪资进行多种统计
salary_stats = df.groupby('部门')['薪资'].agg(['min', 'max', 'mean', 'sum'])
print(salary_stats)
输 出:
min max mean sum
部门
市场 7500 7500 7500.0 7500
技术 11000 12000 11500.0 23000
销售 8000 9000 8500.0 17000
自定义聚合函数
我们也可以使用自定义函数进行聚合:
# 自定义函数:计算最大值与最小值的差
def range_diff(x):
return x.max() - x.min()
# 应用自定义聚合函数
custom_agg = df.groupby('部门')['薪资'].agg([range_diff])
print(custom_agg)
输出:
range_diff
部门
市场 0
技术 1000
销售 1000