ByteFisher AI 编程实战(十五):AI数据分析与可视化

数据分析也是 AI 的强项。不懂 Python 的 Excel 用户可以用自然语言分析数据,而开发者则可以用 AI 把数据分析效率提升数倍。

一、AI 数据分析的核心场景

场景 传统方式 AI 辅助方式
数据清洗 手写正则和替换规则,耗时长 自然语言描述清洗规则,AI 生成完整代码
统计分析 记忆各种统计函数和参数 描述分析目标即可,AI 选择合适方法
图表生成 查阅 Matplotlib 文档逐行写代码 AI 生成完整绘图代码,含中文配置
SQL 查询 手写复杂 SQL,多层嵌套容易出错 自然语言转 SQL,准确率>90%
报告生成 手动整理结论和图表 AI 综合分析结果,自动生成报告

二、CSV/Excel 数据处理

2.1 用 AI 加载和预览数据

1
2
3
4
5
6
7
8
9
# AI 生成的代码:
import pandas as pd
df = pd.read_csv("sales.csv")
print("数据集形状:", df.shape)
print("列名:", df.columns.tolist())
print("前 5 行:", df.head())
print("数据类型:", df.dtypes)
print("基本统计:", df.describe())
print("非空值统计:", df.count())

2.2 数据清洗

1
2
3
4
5
对 sales.csv 进行数据清洗:
1. 删除"备注"列(全是空值)
2. "金额"列中的符号去掉,转为浮点数
3. "日期"列转为 datetime 类型
4. "数量"列中的负值替换为 0

AI 生成的清洗代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
import re

df = pd.read_csv("sales.csv")

# 1. 删除全空列
df = df.drop(columns=["备注"])

# 2. 金额列去符号转浮点
df["金额"] = df["金额"].apply(
lambda x: float(re.sub(r'[¥$,]', '', str(x)))
)

# 3. 日期列转换
df["日期"] = pd.to_datetime(df["日期"], format="%Y-%m-%d")

# 4. 负数量替换为 0
df["数量"] = df["数量"].clip(lower=0)

print("清洗完成,剩余行数:", len(df))

2.3 高级数据操作

1
2
3
4
5
对清洗后的数据做聚合分析:
1. 按月份统计总销售额和订单数
2. 找出销售额前 5 的产品
3. 计算每个用户的平均订单金额
4. 标注每个用户的消费等级(高/中/低)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. 月度统计
df["月份"] = df["日期"].dt.to_period("M")
monthly = df.groupby("月份").agg(
总销售额=("金额", "sum"),
订单数=("订单ID", "count")
).reset_index()

# 2. 热销产品
top_products = df.groupby("产品名称").agg(
销售额=("金额", "sum"),
销量=("数量", "sum")
).sort_values("销售额", ascending=False).head(5)

# 3. 用户平均消费
user_avg = df.groupby("用户ID")["金额"].mean().reset_index()
user_avg.columns = ["用户ID", "平均订单金额"]

# 4. 消费等级
df["消费等级"] = pd.qcut(df["金额"], q=3, labels=["低", "中", "高"])

三、图表生成

3.1 基础图表

1
2
3
4
5
6
基于 sales.csv 生成以下图表:
1. 折线图:每月销售额趋势
2. 柱状图:各产品销量对比
3. 饼图:各分类销售额占比

要求:使用 Matplotlib,中文标签,保存为 PNG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

# 1. 每月销售额折线图
plt.figure(figsize=(10, 5))
plt.plot(monthly["月份"].astype(str), monthly["总销售额"],
marker='o', linewidth=2, color='#4F46E5')
plt.title("每月销售额趋势")
plt.xlabel("月份"); plt.ylabel("销售额(元)")
plt.xticks(rotation=45)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.savefig("monthly_sales.png", dpi=150)

# 2. 产品销量柱状图(略)
# 3. 分类占比饼图(略)

3.2 高级可视化

1
2
3
4
5
生成一个仪表盘风格的图表组合:
- 左上方:KPI 卡片(总销售额、订单数、客单价、同比)
- 左下方:销售额趋势折线图
- 右上方:产品销量排行柱状图
- 右下方:分类占比环形图

AI 会生成多子图的组合图表代码,使用 plt.subplotsGridSpec 实现仪表盘布局。在 Cursor 中,你可以直接用自然语言描述想看到的可视化效果,AI 会生成对应的 Python 代码。

四、自然语言查询数据

4.1 SQL 生成

1
2
3
4
5
6
7
8
表结构:
orders(id, user_id, product_id, amount, created_at, status)
products(id, name, category, price)

查询:
1. 每个分类的销售总额(按金额降序)
2. 过去 30 天每天的下单人数
3. 购买次数最多的前 10 名用户

AI 生成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 1. 分类销售总额
SELECT p.category, SUM(o.amount) AS total_sales
FROM orders o JOIN products p ON o.product_id = p.id
GROUP BY p.category ORDER BY total_sales DESC;

-- 2. 过去 30 天每日下单人数
SELECT DATE(created_at) AS day, COUNT(DISTINCT user_id) AS users
FROM orders
WHERE created_at >= DATE('now', '-30 days')
GROUP BY DATE(created_at) ORDER BY day;

-- 3. 购买次数最多的前 10 名用户
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id
ORDER BY order_count DESC
LIMIT 10;

4.2 自然语言转 pandas

如果你更习惯 Python 而非 SQL,也可以用自然语言描述后让 AI 生成 pandas 代码:

1
2
用 pandas 实现:找出过去 30 天复购率最高的商品分类
(复购率 = 购买超过 1 次的用户数 / 总购买用户数)
1
2
3
4
5
6
recent = df[df["日期"] >= df["日期"].max() - pd.Timedelta(days=30)]
repurchase = recent.groupby(["分类", "用户ID"]).size().reset_index(name="购买次数")
repurchase["是否复购"] = repurchase["购买次数"] > 1
repurchase_rate = repurchase.groupby("分类")["是否复购"].mean().sort_values(ascending=False)
print("复购率最高的分类:")
print(repurchase_rate)

五、报告生成

1
2
3
4
5
6
基于上面的分析结果,生成一份中文分析报告:
1. 数据概况(数据量、时间范围、整体趋势)
2. 核心发现(3-5 个关键结论)
3. 建议措施

风格:给业务负责人看的,避免专业术语

AI 生成的不仅仅是代码,还有可直接使用的文字内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## 销售数据分析报告

### 数据概况
- 分析周期:2025年1月 - 2025年12月
- 总订单数:12,847 笔
- 总销售额:¥3,285,690
- 平均客单价:¥255.7

### 核心发现
1. **Q4 销售额增长 35%**:受双十一和年终促销推动
2. **电子配件类贡献最大**:占总销售额的 42%
3. **复购率持续提升**:老用户贡献了 65% 的订单
4. **高价值用户集中在北上广深**:客单价高于均值 2.1 倍
5. **退货率偏高**:服装类退货率达 12%,需关注

### 建议
1. 增加高价值用户的专属优惠
2. 优化服装类商品详情页,降低退货率
3. 拓展二三线城市市场

六、进阶:时间序列分析

1
2
3
4
5
分析过去 12 个月的销售趋势,并预测下 3 个月的销售额:
- 使用 statsmodels 或 Prophet
- 标注节假日效应
- 输出预测区间
- 可视化实际 vs 预测
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.holtwinters import ExponentialSmoothing

# 月度销售额时间序列
ts = monthly.set_index("月份")["总销售额"]

# 季节性分解
decomp = seasonal_decompose(ts, model='multiplicative')
decomp.plot()

# 预测
model = ExponentialSmoothing(ts, seasonal_periods=12,
trend='add', seasonal='mul')
fitted = model.fit()
forecast = fitted.forecast(3)
print("下三个月预测销售额:")
print(forecast)

本章小结

  • 数据处理(清洗、筛选、聚合)是 AI 的强项,描述清楚规则即可
  • 自然语言转 SQL 能大幅降低数据查询门槛,准确率超过 90%
  • AI 能生成美观的可视化图表,只需描述意图和要求
  • 让 AI 生成代码再运行,比直接给结论更可靠——代码可审计、可复现
  • 进阶用法包括时间序列分析、预测建模等,AI 能选择合适的算法
  • 数据分析中 AI 最大的价值是缩短”想法 → 结果”的反馈周期

下一篇看 AI 如何实现自动化工作流。

ByteFisher
分享编程技术 · 记录钓鱼乐趣
扫码关注
▸ 扫码关注 ◂
分享: