# 数据分析

> 数据分析 is an Agent Skill for documents published in the maka-agent/maka-agent repository on GitHub: a SKILL.md instruction file an AI agent can load to do this task.

当用户有本地数据文件（CSV/JSON/Excel）需要做统计分析、探索、可视化或建模时使用。典型问法："帮我分析这份销售数据"、"看看这个 CSV 有什么规律"、"做个用户分群/RFM 分析"、"跑个 A/B 检验"、"把这份数据画成图并给结论"。

- Skill name: `数据分析`
- Category: [Documents](https://www.openparable.com/skill/documents/1)
- Source: https://github.com/maka-agent/maka-agent/blob/HEAD/apps/desktop/resources/bundled-skills/data-analysis/SKILL.md
- Repository: maka-agent/maka-agent (675 GitHub stars when collected)

## SKILL.md

# 数据分析

## 目标

读取本地数据文件（CSV / JSON / Excel），用 Python（pandas + numpy + matplotlib 等）完成从数据清洗、探索性分析、统计检验/建模到可视化的全流程，最终产出**有业务含义的结论与建议**，而不只是一堆图表和数字。核心是：让数据说话，把统计结果翻译成决策者能用的洞察。

适用场景：业务数据分析（销售/运营/KPI）、客户细分与画像（RFM/聚类）、A/B 测试统计分析、预测建模与机器学习、以及任何"我有数据但需要有人帮我看出门道"的问题。

## 工作流步骤

### 1. 理解数据与分析目标

先搞清楚要回答什么问题，再动手：

- **业务问题**：用户想弄清什么？（趋势？占比？分群？因果？预测？）分析目标决定方法选择。
- **数据现状**：文件路径、格式、大致规模、关键字段含义、时间范围。让用户简述，或先读取样本自行探查。
- **成功标准**：用户要的是探索性洞察、一个明确结论、还是一个可用的模型/预测。

先用 Read 或一小段 Python 读取文件头部，摸清列名、数据类型、行数、是否有表头，再规划分析路径。

### 2. 搭建分析环境

分析用 Bash 调用 Python 完成。先确认环境可用：

- 检查 python 与依赖：`python3 -c "import pandas, numpy, matplotlib"`。若缺失，用 `pip install pandas numpy matplotlib openpyxl scipy scikit-learn` 安装（openpyxl 用于 Excel，scipy 用于统计检验，scikit-learn 用于建模/聚类）。
- 图表用 matplotlib 的非交互后端：脚本开头设 `import matplotlib; matplotlib.use("Agg")`，把图保存为 PNG 文件而非弹窗显示。
- 中文图表需设置中文字体避免乱码，例如 `plt.rcParams["font.sans-serif"] = ["Arial Unicode MS", "PingFang SC", "SimHei"]` 和 `plt.rcParams["axes.unicode_minus"] = False`。

把分析脚本用 Write 写成 `.py` 文件再用 Bash 执行，便于复用、检查和让用户复现；不要把长逻辑塞进一行行命令。所有产出（清洗后数据、图表 PNG）保存到与源数据同目录或用户指定目录。

### 3. 数据加载与清洗

- **加载**：CSV 用 `pd.read_csv`（注意分隔符、编码，中文文件常需 `encoding="utf-8"` 或 `gbk`）；JSON 用 `pd.read_json` 或 `pd.json_normalize`（嵌套结构需展平）；Excel 用 `pd.read_excel`（注意 sheet 名、表头行）。
- **体检**：打印 `df.shape`、`df.dtypes`、`df.head()`、`df.describe()`、`df.isnull().sum()`，先了解数据全貌。
- **清洗**：处理缺失值（删除/填充/标记，说明理由）、去重、纠正数据类型（日期解析、数值转换）、处理异常值与离群点（先识别，再决定保留/剔除/截断，并说明依据）、统一分类字段的取值。
- **记录**：清洗每一步都说明做了什么、影响了多少行、为什么这么处理。清洗决策会影响结论，必须透明。

### 4. 分析与建模

根据目标选择方法，从简单到复杂：

- **描述性统计与探索（EDA）**：分组聚合（`groupby`）、透视表（`pivot_table`）、分布、相关性。先看清数据的基本规律。
- **趋势与对比**：时间序列趋势、类别占比、地区/维度对比、同比环比。
- **客户/样本细分**：RFM 分析（按最近购买、频次、金额打分分层）、聚类（KMeans 等，先做特征标准化，用轮廓系数等评估簇数合理性）。
- **假设检验（A/B 测试）**：先验证分组随机性与样本量；选对检验方法（均值比较用 t 检验，比率比较用卡方/比例检验）；报告 p 值、效应量、置信区间，并解释统计显著是否等于业务显著。
- **预测建模**：明确特征与目标；做特征工程；划分训练/验证集（时间序列按时间切分，勿随机打乱）；对比多个算法；用合适指标评估（回归看 MAE/RMSE/R²，分类看准确率/精确率/召回/AUC）；给出预测的不确定性/置信区间；警惕过拟合与数据泄露。

每一步都验证中间结果是否合理（数字量级对不对、有没有异常），发现异常回头查数据。

### 5. 可视化

用图表让结论一目了然，图服务于结论而非装饰：

- 选对图表类型：趋势用折线、对比用柱状、占比用饼图/堆叠柱、分布用直方图/箱线图、关系用散点、相关性用热力图、分群结果用散点+颜色。
- 每张图都要有标题、坐标轴标签、必要的图例与单位；关键结论可在图上标注。
- 保存为 PNG（`plt.savefig("xxx.png", dpi=150, bbox_inches="tight")`），在报告中引用文件路径。

### 6. 结论与建议

把分析结果翻译成业务语言：

- 提炼 3-5 条关键发现，每条都有数据支撑（引用具体数字和图表）。
- 给出可执行的建议，说明依据。
- 诚实标注局限：数据质量问题、样本偏差、未能验证的假设、结论的适用边界。

## 输出格式约定

除非用户另有指定，交付包含：

1. **分析脚本**：写成可复现的 `.py` 文件，保存到用户目录，注释清晰。
2. **Markdown 分析报告**，结构为：
   - **数据概况**：数据来源、规模、字段说明、时间范围。
   - **数据清洗说明**：做了哪些处理及其影响。
   - **关键发现**：分主题呈现，每条发现配数据与图表引用。核心指标用表格呈现。
   - **图表**：引用生成的 PNG 文件路径，附一句话解读每张图说明了什么。
   - **结论与建议**：可执行建议 + 依据。
   - **局限与后续**：数据/方法的局限，以及建议的下一步分析。

数字规范：报告里每个结论性数字都应来自实际运行代码的输出，不凭印象估计。

## 边界与注意事项

- **数字来自真实计算，绝不编造**。所有统计量、图表数据必须是脚本实际跑出来的结果。如果代码没跑通，先修脚本，不要凭空写数字。运行后核对输出量级是否合理。
- **清洗透明**。缺失值、异常值、去重的处理方式都会影响结论，必须显式说明，让用户能判断是否认同你的处理。
- **统计严谨**。相关不等于因果；统计显著不等于业务重要；小样本结论要谨慎。检验前确认前提假设（分布、独立性、样本量）。
- **避免数据泄露与过拟合**（建模时）：特征工程和标准化只能基于训练集拟合；时间序列不能随机划分；用验证集诚实评估。
- **保护数据隐私**：本地数据可能含敏感信息（用户手机号、身份证等）。分析中不外传数据，报告中对个体标识做脱敏，不把原始个人信息写进结论。
- **大数据量注意性能**：文件很大时先抽样探查、分块读取（`chunksize`），或只加载需要的列，避免内存溢出。
- **可复现**：脚本应当能被用户重新运行得到相同结果；固定随机种子（`random_state`）以保证聚类/划分的可复现性。

---

Source: https://www.openparable.com/skill/documents/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90 (OpenParable). Cite the canonical URL above.
