前置要求
pip install pandas numpy matplotlib
1. CSV 数据清洗工具
目标:清洗销售数据,处理缺失值和异常值
import pandas as pd
# 读取数据
df = pd.read_csv('sales_data.csv')
# 查看数据概况
print(df.info())
print(df.describe())
# 清洗步骤
df = df.drop_duplicates() # 去重
df['price'] = df['price'].fillna(df['price'].median()) # 填充缺失值
df = df[df['price'] > 0] # 过滤异常值
# 保存清洗后的数据
df.to_csv('sales_data_cleaned.csv', index=False)
print(f"清洗完成,剩余 {len(df)} 条记录")
知识点:pandas 数据读取、去重、缺失值处理、条件过滤
2. 销售数据可视化
目标:用 Matplotlib 生成销售趋势图表
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_csv('sales_data_cleaned.csv')
df['date'] = pd.to_datetime(df['date'])
# 按月汇总
monthly = df.groupby(df['date'].dt.to_period('M'))['amount'].sum()
# 绘制折线图
plt.figure(figsize=(10, 6))
monthly.plot(kind='line', marker='o')
plt.title('月度销售额趋势')
plt.xlabel('月份')
plt.ylabel('销售额')
plt.grid(True)
plt.savefig('sales_trend.png')
plt.show()
知识点:groupby 聚合、to_datetime 转换、matplotlib 绘图
3. 数据报表自动生成
目标:汇总统计并生成 HTML 报表
import pandas as pd
def generate_report(data_file, output_file='report.html'):
df = pd.read_csv(data_file)
summary = {
'总记录数': len(df),
'平均价格': f"{df['price'].mean():.2f}",
'最高价格': f"{df['price'].max():.2f}",
'最低价格': f"{df['price'].min():.2f}",
}
html = f"""
<html>
<head><title>数据报表</title></head>
<body>
<h1>销售数据报表</h1>
<table border="1">
{''.join(f'<tr><td>{k}</td><td>{v}</td></tr>' for k, v in summary.items())}
</table>
</body>
</html>
"""
with open(output_file, 'w', encoding='utf-8') as f:
f.write(html)
print(f"报表已生成: {output_file}")
generate_report('sales_data_cleaned.csv')
知识点:数据统计、字符串格式化、HTML 生成
4. 股票数据走势分析
目标:使用 Matplotlib 绘制 K 线简化图
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 模拟 30 天股票数据
np.random.seed(42)
dates = pd.date_range('2026-01-01', periods=30)
prices = 100 + np.cumsum(np.random.randn(30) * 2)
volume = np.random.randint(1000, 5000, 30)
df = pd.DataFrame({'date': dates, 'price': prices, 'volume': volume})
# 双轴图表
fig, ax1 = plt.subplots(figsize=(12, 6))
color = '#7ec8e3'
ax1.set_xlabel('日期')
ax1.set_ylabel('价格', color=color)
ax1.plot(df['date'], df['price'], color=color, linewidth=2)
ax1.tick_params(axis='y', labelcolor=color)
ax2 = ax1.twinx()
ax2.bar(df['date'], df['volume'], alpha=0.3, color='#98d8c8')
ax2.set_ylabel('成交量')
plt.title('股票价格与成交量')
plt.tight_layout()
plt.savefig('stock_analysis.png')
plt.show()
知识点:双轴图表、twinx、随机数据模拟、cumsum
5. 数据透视表分析
目标:使用 Pandas pivot_table 分析销售数据
import pandas as pd
# 创建示例数据
data = {
'日期': ['1月','1月','1月','2月','2月','2月','3月','3月','3月'],
'产品': ['A','B','C','A','B','C','A','B','C'],
'区域': ['东','东','西','西','东','西','东','西','东'],
'销量': [100, 150, 200, 120, 180, 160, 140, 170, 190]
}
df = pd.DataFrame(data)
# 数据透视表
pivot = df.pivot_table(
values='销量',
index='产品',
columns='月份',
aggfunc='sum',
fill_value=0
)
print("按产品和月份汇总:")
print(pivot)
# 交叉表
cross = pd.crosstab(df['产品'], df['区域'], values=df['销量'], aggfunc='sum')
print("\n按产品和区域汇总:")
print(cross)
知识点:pivot_table、crosstab、数据重塑
6. 用户行为漏斗分析
目标:分析用户转化漏斗
import pandas as pd
import matplotlib.pyplot as plt
# 漏斗数据
stages = ['访问', '注册', '加购', '下单', '付款']
users = [10000, 6000, 3000, 1500, 1200]
df = pd.DataFrame({'阶段': stages, '用户数': users})
df['转化率'] = df['用户数'] / df['用户数'].shift(1)
df['总转化率'] = df['用户数'] / df['用户数'].iloc[0]
# 水平柱状图
fig, ax = plt.subplots(figsize=(10, 6))
colors = ['#7ec8e3', '#98d8c8', '#f6d186', '#d5a6bd', '#ffb7b2']
bars = ax.barh(df['阶段'][::-1], df['用户数'][::-1], color=colors[::-1])
for bar, val in zip(bars, df['用户数'][::-1]):
ax.text(bar.get_width() + 100, bar.get_y() + bar.get_height()/2,
f'{val}', va='center', fontsize=12)
plt.title('用户转化漏斗')
plt.xlabel('用户数')
plt.tight_layout()
plt.savefig('funnel.png')
plt.show()
知识点:漏斗分析、水平柱状图、数据标签