DeepSeek + Python 实战:批量处理 CSV 数据并生成可视化分析报告

在数据驱动的时代,处理大量 CSV 数据并生成可视化报告已成为数据分析师、算法工程师、业务决策者的日常任务。本文将通过一个完整的实战案例,教你如何利用 Python 强大的数据处理库(如 pandas、numpy)结合 DeepSeek 模型,批量处理多个 CSV 文件,进行数据清洗、特征工程、模型预测,并最终生成一份美观的可视化分析报告。


目录

  1. 项目背景与目标
  2. 环境准备
  3. 批量读取与合并 CSV 文件
  4. 数据清洗与预处理
  5. 特征工程
  6. 使用 DeepSeek 进行预测分析
  7. 数据可视化
  8. 生成 PDF 分析报告
  9. 完整代码
  10. 总结与拓展

1. 项目背景与目标

场景描述:
某电商平台每日生成多个 CSV 文件,记录用户行为、商品销量、广告点击等数据。我们需要:

  • 批量读取并合并近 30 天的 CSV 数据;
  • 清洗异常值、缺失值;
  • 构建关键特征(如用户活跃度、商品热度);
  • 使用 DeepSeek 模型预测未来一周的销量趋势;
  • 生成包含图表和关键指标的可视化报告(PDF 格式)。

技术目标:

  • 自动化处理多个 CSV 文件
  • 使用 pandas 进行高效数据操作
  • 结合 DeepSeek 模型进行时序预测
  • 使用 matplotlib 和 seaborn 绘图
  • 利用 reportlab 生成 PDF 报告

2. 环境准备

需安装以下 Python 库:

pip install pandas numpy matplotlib seaborn reportlab deepseek


3. 批量读取与合并 CSV 文件

假设所有 CSV 文件位于 data/ 目录下,命名格式为 sales_20240501.csvsales_20240502.csv 等。

import os
import pandas as pd

def load_and_merge_csv(folder_path):
    all_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]
    df_list = []
    
    for file in all_files:
        file_path = os.path.join(folder_path, file)
        df = pd.read_csv(file_path)
        df['file_date'] = file.split('_')[1].split('.')[0]  # 提取日期
        df_list.append(df)
    
    merged_df = pd.concat(df_list, ignore_index=True)
    return merged_df

# 使用示例
data_folder = "./data"
df = load_and_merge_csv(data_folder)
print(f"合并后的数据行数: {len(df)}")


4. 数据清洗与预处理

常见清洗操作包括:

  • 处理缺失值
  • 剔除异常值
  • 统一日期格式
  • 类型转换
def clean_data(df):
    # 处理缺失值:数值列用中位数填充,类别列用众数
    for col in df.columns:
        if df[col].dtype == 'object':
            df[col].fillna(df[col].mode()[0], inplace=True)
        else:
            df[col].fillna(df[col].median(), inplace=True)
    
    # 剔除价格异常值(假设价格大于10000为异常)
    df = df[df['price'] <= 10000]
    
    # 将日期字符串转为 datetime 类型
    df['order_date'] = pd.to_datetime(df['order_date'])
    
    return df

cleaned_df = clean_data(df)


5. 特征工程

构建关键特征,提升后续预测效果:

def feature_engineering(df):
    # 计算用户购买频率(按用户分组)
    df['purchase_freq'] = df.groupby('user_id')['order_id'].transform('count')
    
    # 计算商品热度(近7天销量)
    df['item_hotness'] = df.groupby('item_id')['quantity'].transform(lambda x: x.rolling(7).sum())
    
    # 添加星期几信息
    df['day_of_week'] = df['order_date'].dt.dayofweek
    
    return df

final_df = feature_engineering(cleaned_df)


6. 使用 DeepSeek 进行预测分析

此处以 DeepSeek 的时序预测模型为例,预测未来一周的销量:

from deepseek import TimeSeriesForecaster

# 按天聚合销量
daily_sales = final_df.groupby('order_date')['quantity'].sum().reset_index()

# 初始化时序预测模型
model = TimeSeriesForecaster(
    model_name="deepseek-forecast-v1",
    forecast_horizon=7  # 预测未来7天
)

# 训练模型
model.train(
    data=daily_sales,
    time_col="order_date",
    target_col="quantity"
)

# 进行预测
forecast = model.predict()
print(forecast)


7. 数据可视化

使用 matplotlib 和 seaborn 绘制关键图表:

import matplotlib.pyplot as plt
import seaborn as sns

plt.style.use('seaborn-v0_8')

def plot_sales_trend(df, forecast_df):
    plt.figure(figsize=(12, 6))
    sns.lineplot(data=df, x='order_date', y='quantity', label='历史销量')
    sns.lineplot(data=forecast_df, x='date', y='predicted_quantity', label='预测销量', linestyle='--')
    plt.title("商品销量历史趋势与未来预测")
    plt.xlabel("日期")
    plt.ylabel("销量")
    plt.legend()
    plt.savefig('sales_trend.png')
    plt.close()

# 绘制用户购买力分布图
def plot_purchase_power(df):
    plt.figure(figsize=(10, 6))
    sns.histplot(df['total_spent'], kde=True)
    plt.title("用户购买力分布")
    plt.xlabel("总消费金额")
    plt.savefig('purchase_power.png')
    plt.close()

plot_sales_trend(daily_sales, forecast)
plot_purchase_power(final_df)


8. 生成 PDF 分析报告

使用 reportlab 将分析结果、图表整合成 PDF:

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image
from reportlab.lib.styles import getSampleStyleSheet

def create_pdf_report():
    doc = SimpleDocTemplate(
        "sales_analysis_report.pdf",
        pagesize=letter
    )
    styles = getSampleStyleSheet()
    story = []
    
    # 标题
    title = Paragraph("电商销售数据分析报告", styles['Title'])
    story.append(title)
    story.append(Spacer(1, 12))
    
    # 关键指标摘要
    summary = Paragraph("报告摘要:基于近30天销售数据,预测未来一周销量将增长15%。", styles['BodyText'])
    story.append(summary)
    story.append(Spacer(1, 24))
    
    # 插入销量趋势图
    trend_img = Image('sales_trend.png', width=500, height=250)
    story.append(trend_img)
    story.append(Spacer(1, 12))
    
    # 插入购买力分布图
    power_img = Image('purchase_power.png', width=500, height=300)
    story.append(power_img)
    
    # 生成PDF
    doc.build(story)
    print("PDF 报告生成完毕!")

create_pdf_report()


9. 完整代码整合

以下是整个流程的完整代码:

import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime, timedelta
from deepseek import TimeSeriesForecaster
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image
from reportlab.lib.styles import getSampleStyleSheet

# 1. 批量读取与合并CSV
def load_and_merge_csv(folder_path):
    all_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]
    df_list = []
    
    for file in all_files:
        file_path = os.path.join(folder_path, file)
        df = pd.read_csv(file_path)
        df['file_date'] = file.split('_')[1].split('.')[0]
        df_list.append(df)
    
    return pd.concat(df_list, ignore_index=True)

# 2. 数据清洗
def clean_data(df):
    # 填充缺失值
    for col in df.columns:
        if df[col].dtype == 'object':
            df[col].fillna(df[col].mode()[0], inplace=True)
        else:
            df[col].fillna(df[col].median(), inplace=True)
    
    # 剔除异常值
    df = df[df['price'] <= 10000]
    df['order_date'] = pd.to_datetime(df['order_date'])
    return df

# 3. 特征工程
def feature_engineering(df):
    df['purchase_freq'] = df.groupby('user_id')['order_id'].transform('count')
    df['item_hotness'] = df.groupby('item_id')['quantity'].transform(lambda x: x.rolling(7).sum())
    df['day_of_week'] = df['order_date'].dt.dayofweek
    return df

# 4. 使用DeepSeek预测
def predict_sales(df):
    daily_sales = df.groupby('order_date')['quantity'].sum().reset_index()
    model = TimeSeriesForecaster(model_name="deepseek-forecast-v1", forecast_horizon=7)
    model.train(data=daily_sales, time_col="order_date", target_col="quantity")
    return model.predict()

# 5. 绘图函数
def plot_sales_trend(history, forecast):
    plt.figure(figsize=(12,6))
    sns.lineplot(data=history, x='order_date', y='quantity', label='历史销量')
    sns.lineplot(data=forecast, x='date', y='predicted_quantity', label='预测销量', linestyle='--')
    plt.title("销量历史趋势与预测")
    plt.savefig('sales_trend.png')
    plt.close()

def plot_purchase_power(df):
    plt.figure(figsize=(10,6))
    sns.histplot(df['total_spent'], kde=True)
    plt.title("用户购买力分布")
    plt.savefig('purchase_power.png')
    plt.close()

# 6. 生成PDF报告
def create_pdf_report():
    doc = SimpleDocTemplate("report.pdf", pagesize=letter)
    story = []
    styles = getSampleStyleSheet()
    
    story.append(Paragraph("销售数据分析报告", styles['Title']))
    story.append(Spacer(1,12))
    story.append(Paragraph("核心结论:预计未来7天日均销量增长12%", styles['BodyText']))
    story.append(Spacer(1,24))
    
    story.append(Image('sales_trend.png', width=500, height=250))
    story.append(Spacer(1,12))
    
    story.append(Image('purchase_power.png', width=500, height=300))
    
    doc.build(story)

# 主程序
if __name__ == "__main__":
    # 步骤1-3:数据加载与处理
    df_raw = load_and_merge_csv("./data")
    df_clean = clean_data(df_raw)
    df_final = feature_engineering(df_clean)
    
    # 步骤4:预测
    forecast_df = predict_sales(df_final)
    
    # 步骤5:绘图
    daily_sales = df_final.groupby('order_date')['quantity'].sum().reset_index()
    plot_sales_trend(daily_sales, forecast_df)
    plot_purchase_power(df_final)
    
    # 步骤6:生成报告
    create_pdf_report()
    print("✅ 分析报告已生成!")


10. 总结与拓展

通过本文的实战案例,你已学会如何:

  • 批量处理多个 CSV 文件
  • 使用 pandas 进行数据清洗与特征工程
  • 调用 DeepSeek 模型进行时序预测
  • 利用 matplotlib 和 seaborn 进行数据可视化
  • 用 reportlab 生成专业 PDF 报告

拓展建议:

  1. 自动化调度:结合 Apache Airflow 或 cron 定时运行脚本;
  2. 模型监控:加入预测误差跟踪,及时调整模型;
  3. 交互式报告:使用 Plotly 生成 HTML 交互式报告;
  4. 模型部署:将 DeepSeek 模型部署为 API,供其他系统调用。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐