前置要求

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_tablecrosstab、数据重塑


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()

知识点:漏斗分析、水平柱状图、数据标签