给大家分享一个大模型分析工作流,从取数到出报告全自动
日常我做月度经营分析报告的时候基本都在2-3个小时左右,取数四十分钟,清洗半小时,画图二十分钟,写分析文字一个小时。数据计算对我们来说得心应手,但怎么把一堆数字变成领导们看得懂的结论,才是最费脑子的事。
取数和清洗Python自动化可以精确处理了,那能不能把"写结论"这步也交给大模型?
我试了一段时间基本搭出来了,今天给大家分享一下简单的流程
整体思路:三步搞定
工作流分三步:
第一步,Python连数据库自动取数,存成DataFrame。
第二步,pandas做基础清洗和聚合,算出核心指标。
第三步,把指标喂给大模型API,让它生成分析文字,拼成完整报告。
说白了,前两步是我们做数据分析师的老本行,第三步是把大模型当"实习生"用,它不会判断对错,但能把数据翻译成人话,然后我们在他的基础上进行二次总结。
第一步:自动取数
用Python连MySQL,执行写好的SQL,拿到的数据直接进DataFrame:
import pandas as pd
import pymysql
def fetch_data(sql):
conn = pymysql.connect(
host='127.0.0.1',
user='root',
password='your_pwd',
database='shop_db',
charset='utf8mb4'
)
df = pd.read_sql(sql, conn)
conn.close()
return df
# 月度销售汇总
sql = """
SELECT
DATE_FORMAT(order_time, '%Y-%m') as month,
COUNT(*) as order_cnt,
SUM(amount) as total_sales,
COUNT(DISTINCT user_id) as user_cnt
FROM orders
WHERE order_time >= '2026-01-01'
GROUP BY DATE_FORMAT(order_time, '%Y-%m')
ORDER BY month
"""
df = fetch_data(sql)
print(df)
代码很简单,按大家日常的取数标准走就行。
第二步:清洗+算指标
拿到原始数据后,算环比同比这些核心指标:
def calc_metrics(df):
df['sales_mom'] = df['total_sales'].pct_change()
df['sales_yoy'] = df['total_sales'].pct_change(periods=12)
df['avg_order'] = df['total_sales'] / df['order_cnt']
return df
df = calc_metrics(df)
pct_change算环比,periods=12算同比,客单价用总销售额除以订单数。
数据已经OK了,但领导不会看DataFrame的,他们想看的是"本月销售XX万,环比**%,同比**%,***原因"这种文字。
第三步:调大模型生成分析
把算好的指标拼成一段prompt,调API让它写分析:
import requests
import json
def generate_report(df):
# 把DataFrame转成文字描述
latest = df.iloc[-1]
prev = df.iloc[-2]
data_summary = f"""
本月数据:
- 月份:{latest['month']}
- 总销售额:{latest['total_sales']:.0f}元
- 订单数:{latest['order_cnt']}
- 客单价:{latest['avg_order']:.1f}元
- 环比变化:{latest['sales_mom']:.1%}
- 活跃用户:{latest['user_cnt']}人
上月数据:
- 总销售额:{prev['total_sales']:.0f}元
- 订单数:{prev['order_cnt']}
- 活跃用户:{prev['user_cnt']}人
"""
prompt = f"""你是数据分析师,根据以下数据写一段经营分析,
200字以内,包括:关键指标变化、可能的原因分析、下一步建议。
用口语化的风格,不要用专业术语堆砌。
{data_summary}
"""
resp = requests.post(
"https://api.example.com/v1/chat/completions",
headers={"Authorization": "Bearer your_api_key"},
json={
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.3
}
)
result = resp.json()
return result['choices'][0]['message']['content']
report_text = generate_report(df)
print(report_text)
temperature设0.3,不要它发挥创意,老老实实看数据说话就行。
拼成完整报告
最后一步,把数据和文字拼到一起,存成文件:
def build_report(df, analysis_text):
report = f"""
=== 月度经营分析报告 ===
一、核心指标
{df[['month','total_sales','order_cnt','avg_order','sales_mom']].to_string(index=False)}
二、分析与建议
{analysis_text}
三、数据来源:shop_db.orders
生成时间:{pd.Timestamp.now().strftime('%Y-%m-%d %H:%M')}
"""
with open('/tmp/monthly_report.txt', 'w') as f:
f.write(report)
print("报告已生成: /tmp/monthly_report.txt")
build_report(df, report_text)
跑完之后,/tmp目录下就多了一个报告文件。从取数到出报告,全程不到30秒。
三个坑,警惕
第一个坑,prompt别写太长,我一开始把整张表的数据全塞进去,输出结果乱七八糟的,后来精简到只给当月和上月的关键指标,效果反而好很多。
第二个坑,temperature别调太高,建议0.3到0.5之间,超过0.7它就开始"创作"了,结果就完全跑偏了。
第三个坑,大模型写的分析必须人工过一遍,它只是个刚入门的实习生,会算错百分比,会把"下降"写成"上升",各种各样的错误。可以让它先出初稿,你再花几分钟检查数据和结论,确认无误后,再发出去。
大模型在这个工作流里的角色就是个"实习生"。你可以让它把重复的文字活儿干了,但最终的判断和决策必须你自己来。整个过程省下来的时间,你就可以多想想下一个层面的问题:这些数字变化背后的业务逻辑是什么,下个月该怎么调整。
这才是分析师该干的活。
最后再强调一句,千万别直接引用相信AI的结论,我见了太多的胡诌乱扯了,它出了错给你道个歉就行了,你拿它能咋样?但你在领导那边可是要担责的......