一、告别人工手动分析报表
每位数据分析师都经历过这样的场景:收到一份CSV数据文件,被问及「本次业务表现如何」,随后耗费一下午时间清洗数据、制作图表、撰写分析结论。
如今,我们可以将这套繁琐流程完全自动化。本文将手把手搭建一套轻量化Python自动化流程:读取原始销售CSV数据、完成数据清洗、统计核心指标、绘制可视化图表、调用AI生成分析洞察。本次使用 Claude Opus 4.8 模型,可在数秒内完成分析文案初稿撰写,最终由人工把控结论真实性与业务准确性。
所有分析报告都必须围绕核心业务问题展开。本次分析的核心目标:五周周期内,企业实际留存营收为多少?流失营收去向及原因是什么?
整套流程的每一步都服务于该核心问题:数据清洗筛选有效营收数据、聚合统计定位营收流失的时间与场景、AI将枯燥数字转化为高管可读的专业分析结论。
全套代码可直接复用,适配绝大多数数据集,标准化流程如下:
CSV原始数据 → 数据清洗 → 探索性分析 → 可视化图表 → AI智能洞察 → 业务优化建议 → 完整报告输出
二、数据集介绍
本文采用 product_sales.csv销售数据集,共包含45条交易记录,数据源自StrataScratch平台实战案例。本次分析不局限于原案例需求,聚焦营收留存与流失分析。
每条数据对应一笔交易事件(购买/退款),核心字段包含:国家、交易日期、交易金额、交易状态、交易类型、原始交易编号。
数据核心特征:退款记录以负数金额存储,且并非所有交易都为有效成交,这两个关键点直接决定最终营收数据的准确性。
通过Pandas读取数据集:
import pandas as pd
df = pd.read_csv("product_sales.csv")
三、数据清洗:保障营收统计精准性
数据清洗是报表精准的核心。原始数据中存在3条待处理、交易失败的无效记录,不计入有效营收,需过滤剔除;同时统一数据格式,规范字段类型。
df["transaction_date"] = pd.to_datetime(df["transaction_date"])
df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
settled = df[df["status"] == "completed"].copy()
settled["is_refund"] = settled["type"].eq("refund")
清洗后:45条原始数据保留42条有效成交记录。若直接使用原始数据统计,会将失败交易误统计为有效销售额,导致分析结果失真。
四、探索性数据分析:挖掘核心业务指标
1. 整体营收指标统计
区分有效购买订单与退款订单,统计总销售额、总退款金额、净营收、退款率四大核心指标(退款数据已为负值)。
gross = settled.loc[~settled["is_refund"], "amount"].sum()
refunds = settled.loc[settled["is_refund"], "amount"].sum()
net = settled["amount"].sum()
refund_rate = -refunds / gross
print(f"总销售额:{gross:,.0f}")
print(f"总退款金额:{refunds:,.0f}")
print(f"净营收:{net:,.0f}")
print(f"退款率:{refund_rate:.0%}")
输出结果:
总销售额:12,975 美元
总退款金额:-4,875 美元
净营收:8,100 美元
退款率:38%
核心结论:五周内总销售额约1.3万美元,退款损失4875美元,最终净营收8100美元。38%的高退款率是核心业务问题,若仅统计正向销售额,会完全忽略该关键风险。
2. 分国家营收拆解
按国家维度聚合数据,定位各市场营收贡献与异常情况:
by_country = (settled.groupby("country")["amount"]
.agg(净营收="sum", 交易笔数="count")
.sort_values("净营收", ascending=False))
print(by_country)
输出结果:
美国:净营收7199.84美元,38笔交易
英国:净营收449.99美元,1笔交易
墨西哥:净营收449.99美元,1笔交易
加拿大:净营收0美元,2笔交易
异常亮点:加拿大2笔交易全部退款,最终营收归零,是重点异常市场。
3. 周度营收趋势拆解
按周拆分购买、退款、净营收数据,挖掘营收趋势变化:
settled["week"] = settled["transaction_date"].dt.to_period("W").dt.start_time
weekly = settled.pivot_table(index="week", columns="is_refund",
values="amount", aggfunc="sum").fillna(0)
weekly.columns = ["销售额", "退款额"]
weekly["净营收"] = weekly.sum(axis=1)
print(weekly)
输出核心趋势:
4月中、4月下旬、4月末三周持续正向营收;进入5月后营收断崖下跌,连续三周净营收为负。核心原因:5月初后新增购买订单基本停滞,但退款订单持续产生。
4. 退款周期分析
统计订单成交至退款的间隔时长,解释营收滞后流失问题:
purch_dates = (settled.loc[~settled["is_refund"], ["transaction_id", "transaction_date"]]
.set_index("transaction_id")["transaction_date"])
ref = settled[settled["is_refund"]].copy()
ref["间隔天数"] = (ref["transaction_date"]
- ref["original_transaction_id"].map(purch_dates)).dt.days
print(ref["间隔天数"].median())
关键结论:订单成交后,退款中位间隔时长为20天。4月产生的大量订单,退款集中在5月,直接导致5月营收持续为负。
五、数据可视化:制作核心业务图表
基于Matplotlib绘制三张核心图表,直观呈现业务趋势与结构问题,自动保存为PNG格式,可直接嵌入最终报告。
1. 周度销售额与退款对比图
import matplotlib.pyplot as plt
weekly[["销售额", "退款额"]].plot(kind="bar", color=["#2a9d8f", "#e76f51"])
plt.axhline(0, color="black", linewidth=0.8)
plt.title("周度销售额与退款金额对比")
plt.tight_layout()
plt.savefig("chart_weekly.png")
图表直观体现:4月销售额充足、退款较少;5月退款规模反超销售额,业务由盈转亏。
2. 累计净营收趋势图
settled.groupby("transaction_date")["amount"].sum().sort_index().cumsum().plot()
plt.title("累计净营收时间趋势")
plt.tight_layout()
plt.savefig("chart_cumulative.png")
3. 各国净营收分布图
by_country["净营收"].plot(kind="barh", color="#2a9d8f")
plt.title("各国市场净营收分布")
plt.tight_layout()
plt.savefig("chart_country.png")
六、AI 智能生成业务洞察与优化建议
将清洗后的聚合指标整理为精简文本,通过提示词交给 Claude Opus 4.8 模型,自动生成3条核心业务洞察+3条落地优化建议。全程仅传输聚合统计数据,原始明细数据不会外泄,保障数据安全。
weekly_net = {d.date().isoformat(): round(v) for d, v in weekly["净营收"].items()}
summary = f"""产品销售统计周期:{settled['transaction_date'].min().date()} 至 {settled['transaction_date'].max().date()}
总销售额:${gross:,.0f} 总退款金额:${-refunds:,.0f} 净营收:${net:,.0f}
整体退款率:{refund_rate:.0%}
各国净营收:{by_country['净营收'].round(0).to_dict()}
周度净营收:{weekly_net}
订单成交至退款中位间隔天数:20天"""
prompt = (
"你是一名专业的数据分析师,面向企业高管撰写分析报告。"
"基于以下数据汇总信息,输出3条核心业务洞察、3条可落地的业务优化建议。"
"分析需严谨具体,同时注意本次样本量较小,结论需谨慎表述。\n\n"
+ summary
)
print(prompt)
输入模型的完整提示词:
你是一名专业的数据分析师,面向企业高管撰写分析报告。基于以下数据汇总信息,输出3条核心业务洞察、3条可落地的业务优化建议。分析需严谨具体,同时注意本次样本量较小,结论需谨慎表述。
产品销售统计周期:2025-04-15 至 2025-05-22
总销售额:4,875 净营收:$8,100
整体退款率:38%
各国净营收:{'US': 7200.0, 'GB': 450.0, 'MX': 450.0, 'CA': 0.0}
周度净营收:{'2025-04-14': 4200, '2025-04-21': 3975, '2025-04-28': 3600, '2025-05-05': -1350, '2025-05-12': -1425, '2025-05-19': -900}
订单成交至退款中位间隔天数:20天
人工校验要点:AI可快速生成专业文案,但无法识别业务场景与样本局限性(仅单产品、5周、42条数据)。所有AI输出结论均为初稿,必须由人工二次审核、修正后,方可用于正式业务汇报。
七、自动组装完整高管报告
最后通过脚本自动整合核心指标卡片、三张可视化图表、AI分析洞察与优化建议,一键生成独立完整的 report.html 网页报告,可直接在浏览器打开、分享、汇报使用。
成品报告演示文件可通过谷歌网盘查看。
八、总结
这套自动化报表流程逻辑极简、复用性极强:通过标准化数据清洗保证数据准确性,依托聚合统计挖掘核心业务问题,用可视化图表直观呈现趋势,借助AI替代人工完成文案撰写,大幅节省分析师重复性工作时间。
Claude Opus 4.8 可基于聚合数据输出严谨、克制、贴合高管视角的分析内容,且能主动提示样本量不足的局限性。由于AI无法校验数据真实性、无法理解深层业务背景,其输出仅为初稿,需人工优化完善。
只需简单修改字段名称,该套流程即可适配任意CSV业务数据,快速实现自动化数据分析与高管报表输出。
推荐学习书籍 《CDA一级教材》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~ !