用DeepSeek+Python自动化数据处理:从Excel清洗到可视化报告一键生成

📅 2026/7/8 ✍️ 小文 📖 约 1 分钟

一个完整的实操教程:利用DeepSeek API结合Python,实现从原始Excel数据清洗、分析到生成可视化报告的全自动流程。

场景:每周都在做的重复性数据工作

如果你是运营、财务或产品经理,大概率每周都在做类似的事:从系统导出Excel → 在表里做筛选、透视、公式 → 复制到PPT → 写分析结论。这个过程耗时且容易出错。

本文将教你用 DeepSeek API + Python + Jinja2模板 搭建一个全自动的数据处理管线。

系统架构

原始Excel → [DeepSeek理解需求] → Python清洗脚本 → 统计计算

                              HTML报告 ← [DeepSeek生成分析结论]

核心思路:用DeepSeek处理需要理解语义的部分(字段映射、异常识别、分析结论撰写),用Python处理计算部分(统计、聚合、图表渲染)。

第一步:智能列名映射(DeepSeek处理)

原始Excel有一堆不规则中文列名,比如”下单日期(勿删)""商品名称(必填)""金额¥”。

import openai
import pandas as pd

client = openai.OpenAI(
    base_url="https://api.deepseek.com/v1",
    api_key="sk-your-key"
)

df = pd.read_excel("raw_sales.xlsx")

# 让DeepSeek理解列名含义并生成映射
response = client.chat.completions.create(
    model="deepseek-v4",
    messages=[{
        "role": "user",
        "content": f"""
这是某电商平台的销售数据列名:{list(df.columns)}
请将其映射为标准字段名(英文小写),格式为JSON:
{{
    "下单日期(勿删)": "order_date",
    "商品名称(必填)": "product_name",
    ...
}}
输出纯JSON,不要其他文字。
"""
    }]
)

import json
mapping = json.loads(response.choices[0].message.content)
df = df.rename(columns=mapping)

实测效果:DeepSeek对95%以上的列名能正确映射。遇到不确定的列(如”备注123”),它会在JSON中以”remark”命名——你可以手动调整边界情况。

第二步:数据清洗Pipeline

def clean_data(df):
    # 1. 删除完全空的行列
    df = df.dropna(how="all").dropna(axis=1, how="all")
    
    # 2. 统一日期格式
    df["order_date"] = pd.to_datetime(df["order_date"], errors="coerce")
    
    # 3. 金额转浮点数(处理 ¥1,234.56 这类格式)
    df["amount"] = df["amount"].astype(str).str.replace("¥", "").str.replace(",", "")
    df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
    
    # 4. 用DeepSeek检查异常值
    anomalies = detect_anomalies_with_ai(df)
    
    return df, anomalies

def detect_anomalies_with_ai(df):
    """让AI识别数据中的异常"""
    stats = df.describe().to_dict()
    resp = client.chat.completions.create(
        model="deepseek-v4",
        messages=[{
            "role": "user",
            "content": f"""
数据统计摘要:{json.dumps(stats, ensure_ascii=False)}
请指出3个最可能的异常数据问题(返回JSON数组)。
例如:[{{"field": "amount", "issue": "存在0元订单", "suggestion": "确认是否为退款"}}]
"""
        }]
    )
    return json.loads(resp.choices[0].message.content)

第三步:AI分析结论生成

def generate_insights(df):
    """让DeepSeek根据数据生成分析结论"""
    
    # 提取关键指标
    metrics = {
        "total_orders": len(df),
        "total_revenue": float(df["amount"].sum()),
        "avg_order_value": float(df["amount"].mean()),
        "top_product": df.groupby("product_name")["amount"].sum().nlargest(3).to_dict(),
        "daily_trend": df.groupby(df["order_date"].dt.date)["amount"].sum().head(30).to_dict()
    }
    
    resp = client.chat.completions.create(
        model="deepseek-v4",
        messages=[{
            "role": "system",
            "content": "你是一个数据分析师。基于数据给出简洁的分析结论,指出关键趋势和行动建议。"
        }, {
            "role": "user",
            "content": f"分析以下数据并生成300字以内的业务洞察:{json.dumps(metrics, ensure_ascii=False)}"
        }]
    )
    
    return resp.choices[0].message.content

第四步:生成HTML报告

使用Jinja2模板将分析结果渲染为美观的HTML:

from jinja2 import Template
import matplotlib.pyplot as plt
import base64
from io import BytesIO

def generate_report(df, insights):
    # 生成图表(转base64嵌入HTML)
    fig, ax = plt.subplots(figsize=(10, 5))
    df.groupby(df["order_date"].dt.date)["amount"].sum().plot(ax=ax)
    buf = BytesIO()
    plt.savefig(buf, format="png", dpi=120)
    chart_b64 = base64.b64encode(buf.getvalue()).decode()
    
    template = Template("""
    <!DOCTYPE html>
    <html><head><title>销售周报</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    </head><body>
    <div class="container mt-4">
        <h1>📊 销售周报</h1>
        <div class="row">
            <div class="col-md-3"><div class="card"><div class="card-body">
                <h5>总订单</h5><p class="display-6">{{ metrics.total_orders }}</p>
            </div></div></div>
            <div class="col-md-3"><div class="card"><div class="card-body">
                <h5>总营收</h5><p class="display-6">¥{{ "%.2f"|format(metrics.total_revenue) }}</p>
            </div></div></div>
        </div>
        <img src="data:image/png;base64,{{ chart }}" class="img-fluid my-4" />
        <div class="alert alert-info"><h5>💡 AI分析结论</h5><p>{{ insights }}</p></div>
    </div></body></html>
    """)
    
    html = template.render(metrics=metrics, chart=chart_b64, insights=insights)
    with open("report.html", "w", encoding="utf-8") as f:
        f.write(html)

一键运行

将以上所有步骤封装为 auto_report.py,然后:

python auto_report.py raw_sales.xlsx

执行后自动生成 report.html,浏览器打开即可看到包含图表和AI分析结论的完整报告。整个过程不到10秒。

扩展思路

  • 接入钉钉/飞书机器人:自动发送报告到工作群
  • 定时任务:crontab 每天6点自动跑
  • 对比分析:上周vs本周趋势变化,AI自动标注异常波动

这套方案最妙的地方是:把AI用在最需要”理解”的地方,把计算留给Python。 不追求100%自动化,而是让AI做它擅长的事,你只需要检查结果即可。

📤 分享到