在数据驱动的时代,数据分析已成为企业决策和科研创新的核心能力。Python凭借其丰富的开源库(如Pandas和Matplotlib)成为数据分析领域的首选工具。本文将通过源码解析与实战案例,深入探讨如何利用Pandas进行数据清洗与统计分析,并结合Matplotlib实现高效的数据可视化。
一、Pandas:数据清洗与统计分析的基石
Pandas是基于NumPy构建的开源库,提供了Series(一维标签数组)和DataFrame(二维表格)两种核心数据结构,支持高效的数据清洗、转换和聚合操作。
1. 数据读取与预处理
python
1import pandas as pd
2
3# 读取CSV文件
4df = pd.read_csv('sales_data.csv')
5
6# 检查缺失值
7print("缺失值统计:\n", df.isnull().sum())
8
9# 处理缺失值:删除或填充
10df.dropna(inplace=True) # 删除缺失值行
11# 或 df['column'].fillna(df['column'].mean(), inplace=True) # 用均值填充
12
13# 处理重复值
14df.drop_duplicates(inplace=True)
15
2. 数据转换与聚合
python
1# 类型转换:将字符串转换为数值
2df['price'] = pd.to_numeric(df['price'], errors='coerce')
3
4# 按类别分组统计
5grouped = df.groupby('category')['sales'].agg(['mean', 'sum', 'count'])
6print("按类别统计结果:\n", grouped)
7
8# 创建新列(如计算利润)
9df['profit'] = df['sales'] - df['cost']
10
3. 时间序列分析
python
1# 生成日期范围
2dates = pd.date_range('2023-01-01', periods=12, freq='M')
3df = pd.DataFrame({'date': dates, 'sales': [100, 120, ..., 200]})
4
5# 按月重采样并求和
6monthly_sales = df.resample('M', on='date')['sales'].sum()
7print("月度销售额:\n", monthly_sales)
8
二、Matplotlib:数据可视化的利器
Matplotlib是Python中最常用的2D绘图库,支持折线图、柱状图、散点图等多种图表类型,可高度定制化以满足专业需求。
1. 基础图表绘制
折线图:展示趋势变化
python
1import matplotlib.pyplot as plt
2
3# 绘制月度销售额折线图
4plt.figure(figsize=(10, 6))
5plt.plot(monthly_sales.index, monthly_sales.values,
6 marker='o', linestyle='-', color='b', label='销售额')
7plt.title('2023年月度销售额趋势')
8plt.xlabel('月份')
9plt.ylabel('销售额(万元)')
10plt.legend()
11plt.grid(True)
12plt.show()
13
柱状图:对比分类数据
python
1# 绘制按类别统计的销售额柱状图
2categories = grouped.index
3sales_mean = grouped['mean']
4
5plt.figure(figsize=(10, 6))
6plt.bar(categories, sales_mean, color='skyblue', label='平均销售额')
7plt.title('各品类平均销售额对比')
8plt.xlabel('品类')
9plt.ylabel('平均销售额(万元)')
10plt.xticks(rotation=45) # 旋转x轴标签
11plt.legend()
12plt.tight_layout() # 自动调整布局
13plt.show()
14
2. 高级可视化技巧
散点图:探索变量关系
python
1# 绘制销售额与利润的散点图
2plt.figure(figsize=(10, 6))
3plt.scatter(df['sales'], df['profit'], c='green', alpha=0.6, label='数据点')
4plt.title('销售额与利润关系散点图')
5plt.xlabel('销售额(万元)')
6plt.ylabel('利润(万元)')
7plt.legend()
8plt.grid(True)
9plt.show()
10
箱线图:检测异常值
python
1# 绘制各品类销售额的箱线图
2plt.figure(figsize=(10, 6))
3df.boxplot(column='sales', by='category', grid=False)
4plt.title('各品类销售额分布箱线图')
5plt.suptitle('') # 隐藏自动生成的标题
6plt.xlabel('品类')
7plt.ylabel('销售额(万元)')
8plt.xticks(rotation=45)
9plt.tight_layout()
10plt.show()
11
三、实战案例:企业销售数据分析
1. 数据准备与清洗
python
1# 读取数据并检查
2df = pd.read_csv('enterprise_sales.csv')
3print("数据前5行:\n", df.head())
4print("数据描述性统计:\n", df.describe())
5
6# 处理缺失值与异常值
7df['sales'] = pd.to_numeric(df['sales'], errors='coerce')
8df.dropna(subset=['sales'], inplace=True)
9df = df[df['sales'] > 0] # 删除销售额为负的异常值
10
2. 统计分析
python
1# 按地区分组统计
2region_stats = df.groupby('region')['sales'].agg(['mean', 'sum', 'count'])
3print("各地区销售统计:\n", region_stats)
4
5# 计算销售增长率
6df['date'] = pd.to_datetime(df['date'])
7df['month'] = df['date'].dt.month
8monthly_growth = df.groupby('month')['sales'].mean().pct_change() * 100
9print("月度销售增长率(%):\n", monthly_growth)
10
3. 可视化报告
趋势分析
python
1# 绘制年度销售趋势折线图
2annual_sales = df.groupby(df['date'].dt.year)['sales'].sum()
3plt.figure(figsize=(12, 6))
4plt.plot(annual_sales.index, annual_sales.values,
5 marker='s', linestyle='--', color='r', label='年度销售额')
6plt.title('企业年度销售趋势(2020-2025)')
7plt.xlabel('年份')
8plt.ylabel('销售额(亿元)')
9plt.legend()
10plt.grid(True)
11plt.show()
12
地域分布
python
1# 绘制各地区销售占比饼图
2region_sum = df.groupby('region')['sales'].sum()
3plt.figure(figsize=(10, 8))
4plt.pie(region_sum, labels=region_sum.index, autopct='%1.1f%%',
5 startangle=90, colors=['gold', 'lightcoral', 'lightskyblue', 'lightgreen'])
6plt.title('各地区销售占比')
7plt.axis('equal') # 保证饼图为圆形
8plt.show()
9
四、总结与优化建议
- 数据质量优先:在分析前务必检查缺失值、异常值和重复值,确保数据可靠性。
- 可视化设计原则:
- 选择合适的图表类型(如趋势用折线图、对比用柱状图)。
- 添加标题、轴标签和图例,避免信息缺失。
- 使用
tight_layout()防止标签重叠。
- 性能优化:
- 对大数据集使用
chunksize参数分块读取。 - 利用
numpy向量化操作替代循环(如df['new_col'] = df['col1'] + df['col2'])。
- 对大数据集使用
- 扩展性:
- 结合
Seaborn库实现更美观的统计图表。 - 使用
Plotly或Pyecharts生成交互式可视化报告。
- 结合
通过掌握Pandas的数据处理能力和Matplotlib的可视化技巧,您可以高效完成从数据清洗到洞察呈现的全流程分析,为业务决策提供有力支持。