Website Analytics
通过 CLI 统一查询多个网站的 GA4 流量数据,支持自然语言提问。
基于CSV文件的交互式数据分析流程,支持多格式输出。
openclaw skills install @yz6214589-hash/yz6214589-hash-data-analysis命令、参数、文件名以原文为准
一个全面且交互式的数据分析工作流,将 CSV 数据转化为可操作的业务洞察。该技能引导您完成从初步探索到最终交付的专业数据分析流程,并在关键决策点设置质量检查和用户确认。
本技能遵循 7 步方法论,包含 3 个交互点:
输入 → 业务理解 → 数据检查 → 清洗策略 → 探索性分析 → 深度分析 → 洞察输出 → 输出
↓ ↓ ↓ ↓ ↓ ↓ ↓
必需 交互点 1 质量门禁 交互点 2 自动运行 自动运行 交互点 3必需:
可选:
--quick(基础统计)、--standard(默认)、或 --deep(高级建模)--auto(跳过交互,使用推荐策略)--format=markdown|html|dashboard使用示例:
"分析 sales_data.csv - 我想知道哪些渠道的转化率最高"
"帮我理解 customer_behavior.csv,特别是留存模式"
"快速分析 Q4_results.csv --quick --auto"- 提及的关键指标(收入、转化率、流失率等)
- 所需的分析类型(趋势分析、对比分析、归因分析、预测等)
- 期望的分析维度(时间、地理、客户分群、渠道等)
- 最能说明答案的图表类型
## 分析计划
**核心问题:** [用一句话重述用户的目标]
**需要计算的关键指标:**
- [指标 1:例如,按渠道划分的月度转化率]
- [指标 2:例如,订单价值的趋势]
**分析维度:**
- [例如,渠道、时间段、客户分群]
**预期交付成果:**
- [例如,展示渠道表现的对比图表]
- [例如,带有关键事件标注的趋势线]呈现你的分析计划,并询问:
这符合您的预期吗?
如果您希望我关注其他方面或补充内容,请告诉我。如果业务目标不明确,提供模板参考:
我可以协助以下常见场景:
1. 销售分析(渠道对比、趋势预测、畅销产品)
2. 用户行为分析(漏斗分析、留存分群、流失预测)
3. 运营分析(投资回报率计算、活动效果评估、资源分配)
哪一个最符合您的需求?或者您希望用其他方式描述?
等待用户确认后继续下一步。
---
## 第二步:数据检查(自动运行,带质量门禁)
### 你的操作
1. **加载 CSV 文件:**import pandas as pd
import numpy as np
# 优先尝试 UTF-8 编码,失败时回退至其他编码
try:
df = pd.read_csv(file_path, encoding='utf-8')
except UnicodeDecodeError:
df = pd.read_csv(file_path, encoding='latin-1')
2. **生成数据概览报告:**## 数据概览
📊 维度:{rows:,} 行 × {cols} 列
💾 内存占用:{size} MB
📋 列信息:
| 列名 | 数据类型 | 示例值 |
|---|---|---|
| ... | ... | ... |
🔍 前 5 行预览:
[以表格形式展示]
3. **执行质量检查:**
- **缺失值:** 按列统计缺失数量与占比
- **重复项:** 检查是否存在完全重复的行
- **数据类型:** 确认数值列未误作为字符串存储,日期列可被正确解析
- **异常值(快速检查):** 使用 IQR 方法标记存在极端值的列
4. **计算数据质量评分(0-100):**评分 = 100 - (缺失惩罚 + 重复惩罚 + 类型错误惩罚)
其中:
- 缺失惩罚 = min(40, 缺失率 × 100)
- 重复惩罚 = min(20, 重复率 × 100)
- 类型错误惩罚 = 每个类型错误列扣 10 分
### 质量门禁 1
根据评分结果,呈现检查结果:
**评分 ≥ 80(良好):**✅ 数据质量良好(评分:{score}/100)
发现少量问题:[列出具体问题]
将继续进行分析...
**评分 60–79(一般):**⚠️ 数据存在一定质量问题(评分:{score}/100)
发现问题:[列出具体问题]
仍可进行分析,但结果可能受限。是否继续?
**评分 < 60(较差):**🚨 数据质量令人担忧(评分:{score}/100)
主要问题:
建议:联系数据提供方或提供数据字典。
您希望我在此基础上进行有限分析,还是先解决这些问题?
---
## 第三步:数据清洗策略(交互点 2)
### 你的操作
**若质量评分 ≥ 80 且问题轻微**,应用自动修复并报告:🧹 已执行自动清洗:
准备就绪,可开始分析!
**若质量评分 < 80**,列出问题并提供具体处理策略选项:
## 数据清洗建议
### 问题 1:'Age' 列缺失值(20% 缺失)
**策略选项:**
A. 删除 Age 缺失的行(损失 20% 数据)← 若 Age 为关键字段,推荐使用
B. 使用中位数年龄(35 岁)填充
C. 按性别分组计算中位数进行填充
D. 保持原样,分析时排除 Age 字段
### 问题 2:'Price' 列存在异常值(3 个负值)
**策略选项:**
A. 删除这 3 行 ← 推荐
B. 将负值设为 0
C. 设为有效价格的最小值
### 问题 3:'PurchaseDate' 列日期格式不一致
**策略选项:**
A. 统一为 YYYY-MM-DD 格式 ← 推荐(可自动处理)
---
### 交互点 2
请用户选择:请为每个问题选择策略(例如:“1A, 2A, 3A”),
或输入“recommended”以使用所有推荐策略,
或输入“auto”由我来决定。
**自动模式(`--auto` 标志):** 跳过此交互,直接使用所有推荐策略。
---
### 执行清洗
1. 应用所选策略
2. 记录所有已执行的更改
3. 输出结果报告:✅ 清洗完成:
- Age:使用中位数(35)填充了 1,234 个缺失值
- Price:移除了 3 条含负值的记录
- PurchaseDate:对全部 6,000 行完成格式标准化
📊 最终数据集:{final_rows:,} 行 × {cols} 列(原数据为 {original_rows:,} 行)
4. **保存清洗后数据:**cleaned_path = output_dir / 'cleaned_data.csv'
df_clean.to_csv(cleaned_path, index=False)
---
## 第 4 步:探索性数据分析(自动运行)
### 你的操作
1. **描述性统计:**
- 数值型列:均值、中位数、标准差、最小值、最大值、四分位数
- 分类型列:各类别频数、唯一值数量、众数
2. **单变量分析:**
- **数值型:** 生成直方图,识别分布形态(正态、偏态、多峰)
- **分类型:** 生成条形图,展示各类别频率分布
3. **多变量分析:**
- **相关性矩阵:** 对所有数值型列进行分析(使用热力图可视化)
- **交叉表:** 针对第 1 步中确定的关键分类型维度
- **散点图:** 选取与业务问题相关的前 3 对高相关性变量
4. **生成初步洞察:**
提取 3-5 条初步发现,例如:
- “渠道 A 的转化率是渠道 B 的 3 倍”
- “自 3 月以来销售额呈现明显上升趋势”
- “年龄与购买金额呈弱负相关(-0.23)”
### 输出
将所有可视化图表保存为 PNG 文件:import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots(figsize=(10, 6))
sns.histplot(data=df, x='Age', bins=30, ax=ax)
plt.title('年龄分布')
plt.savefig(output_dir / 'age_distribution.png', dpi=300, bbox_inches='tight')
plt.close()
以结构化格式报告发现:📊 可视化文件已保存:age_distribution.png, correlation_heatmap.png, channel_comparison.png
---
## 第 5 步:深度分析(自动运行)
### 你的操作
根据第 1 步中识别出的业务问题类型,自动选择并应用相应的分析方法:
| 业务问题类型 | 分析方法 |
|--------------|----------|
| **时间趋势** | 时间序列分析(移动平均、季节性检测) |
| **归因/因果** | 分组对比、贡献度分解(例如:哪个因素导致 80% 方差) |
| **用户行为** | 漏斗分析(各环节转化率)、留存率分析(按用户群组) |
| **客户价值** | RFM 模型(最近购买、购买频率、消费金额),聚类划分客户群体 |
| **预测** | 简单线性回归或指数平滑法进行趋势外推 |
### 示例:趋势分析df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values('Date')
df['7d_MA'] = df['Revenue'].rolling(window=7).mean()
from scipy.stats import linregress
slope, intercept, r_value, p_value, std_err = linregress(
df['Date'].map(pd.Timestamp.toordinal),
df['Revenue']
)
if p_value < 0.05:
trend = "increasing" if slope > 0 else "decreasing"
print(f"检测到显著的 {trend} 趋势(p={p_value:.4f})")
### 示例:RFM 分析current_date = df['PurchaseDate'].max()
rfm = df.groupby('CustomerID').agg({
'PurchaseDate': lambda x: (current_date - x.max()).days, # 近期性
'OrderID': 'count', # 频繁性
'Amount': 'sum' # 金额
}).rename(columns={
'PurchaseDate': 'Recency',
'OrderID': 'Frequency',
'Amount': 'Monetary'
})
rfm['R_Score'] = pd.qcut(rfm['Recency'], 5, labels=[5, 4, 3, 2, 1])
rfm['F_Score'] = pd.qcut(rfm['Frequency'].rank(method='first'), 5, labels=[1, 2, 3, 4, 5])
rfm['M_Score'] = pd.qcut(rfm['Monetary'], 5, labels=[1, 2, 3, 4, 5])
rfm['Segment'] = rfm['R_Score'].astype(str) + rfm['F_Score'].astype(str) + rfm['M_Score'].astype(str)
### 输出
## 深度分析结果
### [分析类型:例如“渠道绩效归因”]
**核心指标计算:** [例如“各渠道转化率”]
| 渠道 | 订单数 | 转化率 | 对收入的贡献 |
|------|--------|--------|--------------|
| A | 5,234 | 8.5% | 45% |
| B | 3,102 | 3.7% | 28% |
| C | 1,876 | 2.1% | 27% |
**统计发现:**
渠道 A 的转化率是渠道 B 的 2.3 倍(p < 0.001),表明其在用户定位或用户体验方面具有显著优势。
📊 可视化图表已保存:channel_performance.png
---
## 步骤 6:洞察生成(自动执行)
### 你的操作
将所有发现整合为结构化的叙述,遵循“是什么 → 说明什么 → 接下来做什么”的框架:基于数据的事实陈述:
解读与影响分析:
- 影响:[尽可能量化,例如“可能提升收入 15%”]
- 根本原因假设:[对现象发生原因的推测]
- 影响:[...]
- 根本原因假设:[...]
优先级排序的下一步行动:
- 时间安排:[立即 / 本季度 / 长期]
- 责任方:[负责团队]
- 时间安排:[...]
- 责任方:[...]
### 图表选择建议
针对每个发现,选择最有效的可视化方式:
- **时间趋势** → 带注释的折线图
- **对比分析** → 条形图(类别较多时使用横向条形图)
- **占比关系** → 饼图或堆叠条形图
- **相关性分析** → 带趋势线的散点图
- **分布情况** → 直方图或箱线图
确保所有图表满足以下要求:
- 标题清晰,明确传达核心信息(不要仅写“销售图表”)
- 坐标轴标注单位
- 多系列时添加图例
- 关键数据点添加标签
---
## 步骤 7:输出交付(交互点 3)
### 交互点 3
**若用户在初始请求中指定了格式**(例如 `--format=html`),则跳过此步骤,直接使用指定格式。
**否则,提供以下选项:**您的分析已准备就绪。请选择输出格式:
- 适用场景:邮件分享、文档记录、GitHub 提交
- 生成耗时:约 10 秒
- 适用场景:演示展示、数据动态探索
- 生成耗时:约 30 秒
- 适用场景:向利益相关方共享、持续监控
- 生成耗时:约 2 分钟
请输入 1、2 或 3:
### 输出生成
#### 选项 1:快速报告(Markdown)import shutil
report_path = output_dir / 'analysis_report.md'
with open(report_path, 'w', encoding='utf-8') as f:
f.write(f"# 数据分析报告\n\n")
f.write(f"数据集: {csv_filename}\n")
f.write(f"分析日期: {datetime.now().strftime('%Y-%m-%d')}\n\n")
f.write(f"---\n\n")
f.write(f"## 业务问题\n\n{business_question}\n\n")
f.write(f"## 数据概览\n\n{data_overview}\n\n")
f.write(f"## 发现\n\n{findings}\n\n")
f.write(f"## 洞察\n\n{insights}\n\n")
f.write(f"## 建议\n\n{recommendations}\n\n")
f.write(f"---\n\n")
f.write(f"## 附录:可视化图表\n\n")
for chart in chart_files:
f.write(f"\n\n")
for chart in chart_files:
shutil.copy(chart, output_dir)
#### 选项 2:交互式报告(单页 HTML)
使用以下模板结构:
markdown
---
name: Data Analysis
version: 1.0.0
description: 从数据中提取洞察,生成可交互的分析报告。
summary: 提供结构化数据分析与可视化报告,支持多种输出格式。
tags:
- data-analysis
- visualization
- report-generation
- dashboard
---
# 数据分析
## 概述
本技能用于对数据集进行深入分析,生成包含关键发现、可视化图表和建议的完整报告。支持静态 Markdown 报告、带样式的 HTML 报告以及可交互的多页仪表盘。
---
## 功能特性
### ✅ 核心能力
- 自动检测数据质量并提示问题
- 识别业务目标并引导用户明确分析需求
- 生成结构化分析报告(含图表与建议)
- 支持大文件与宽表数据的优化处理
- 输出多种格式:Markdown、HTML、JSON、CSV
### 📊 可视化支持
- 条形图、折线图、饼图等基础图表
- 使用 Chart.js 实现交互式图表
- 基于 Tailwind CSS 的现代化样式布局
- 支持动态数据加载与响应式设计
### 📁 输出格式
| 格式 | 文件名示例 | 说明 |
|------|------------|------|
| 报告 | `analysis_report.html` | 可直接在浏览器打开的交互式报告 |
| 简报 | `analysis_report.md` | 轻量级文本报告,适合快速阅读 |
| 数据 | `cleaned_data.csv` | 经清洗后的可用数据 |
| 代码 | `analysis_notebook.ipynb` | Jupyter Notebook 分析脚本(可选) |
---
## 工作流程
### 第一步:输入数据
提供一个 CSV 或 JSON 格式的数据文件,系统将自动读取并分析其结构。
### 第二步:明确分析目标
若未指定具体问题,系统将引导用户提出业务问题,例如:
- 哪个维度在某指标上表现最佳?
- 某指标随时间如何变化?
- 哪些因素与结果相关?
- 请给出数据的整体概览
### 第三步:数据预处理
根据数据质量评估结果,执行以下操作:
- 缺失值处理
- 重复项删除
- 异常值识别
- 类型转换与标准化
### 第四步:分析与建模
- 描述性统计分析
- 相关性分析
- 分组聚合(如按时间、类别)
- 假设检验(使用 scipy)
### 第五步:生成报告
自动生成包含以下部分的报告:
#### 1. 业务问题
> [在此插入用户提出的分析问题]
#### 2. 关键发现
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<div class="bg-blue-50 p-4 rounded-lg">
<div class="text-3xl font-bold text-blue-600">[指标1]</div>
<div class="text-sm text-gray-600">[描述]</div>
</div>
<!-- 其他指标卡片 -->
</div>
#### 3. 可视化图表
<div class="mb-6">
<canvas id="chart1"></canvas>
</div>
#### 4. 建议
1. [建议1]
2. [建议2]
---
## 高级功能
### 选项 3:完整仪表盘(多页面)
创建如下文件结构:dashboard/
├── index.html (概览页)
├── data.html (详细数据探索页)
├── insights.html (发现与建议页)
└── assets/
├── data.json (导出数据,支持交互)
└── styles.css (自定义样式)
该仪表盘支持:
- 多页面导航
- 动态数据渲染
- 本地存储与状态管理(通过 JavaScript)
---
## 最终交付您的分析已保存至:{output_directory}
analysis_report.{md|html}cleaned_data.csvanalysis_notebook.ipynb(可选)[如果为 HTML/仪表盘]
您可以在浏览器中打开 {report_filename} 查看交互式报告。
是否需要我进一步解释某个分析环节,或对报告内容进行修改?
---
## 异常处理机制
### 大数据集(> 10万行)
检测到数据量较大时,提供以下选项:此数据集包含 {rows:,} 行。为提升分析速度,我可以:
请选择您偏好的方式?
### 宽表数据(> 50 列)
当列数过多时,提示用户聚焦分析范围:此数据集有 {cols} 列。为集中分析重点,我可以:
哪种方式更适合您?
### 业务目标不明确
当用户仅说“分析这个 CSV”而无具体问题时:我可以为您分析这份数据!为了使结果更有价值,请问您想了解什么?
常见场景:
也可以用您自己的话描述想要解决的问题。
### 数据质量差(评分 < 40)
若数据质量得分低于 40,发出警告:⚠️ 此数据存在显著质量问题(评分:{score}/100):
建议:
您希望如何继续?
---
## 技术栈
**数据处理:**
- `pandas` —— 主要数据操作工具
- `numpy` —— 数值计算支持
- `scipy` —— 统计检验与建模
**可视化:**
- `matplotlib` —— 生成静态图表(PNG 输出)
- `seaborn` —— 统计图形美化
- Chart.js(通过 CDN 加载)—— 实现网页端交互式图表
**报告生成:**
- Markdown —— 快速生成简洁报告
- HTML + Tailwind CSS —— 美观且响应式的报告页面
- Chart.js —— 支持动态更新与用户交互
技能:数据分析
版本:1.0.0
分块:5/5
**如果缺少依赖包,请始终安装:**import subprocess
import sys
def ensure_package(package):
try:
__import__(package)
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
for pkg in ['pandas', 'numpy', 'scipy', 'matplotlib', 'seaborn']:
ensure_package(pkg)
---
## 质量原则
1. **始终解释“原因”**:不要只报告数字,要解读这些数据对业务的实际意义
2. **使用具体数值**:例如“渠道 A 的转化率为 8.5%”比“渠道 A 转化率更高”更清晰
3. **有效可视化**:选择能立即凸显模式的图表类型
4. **承认不确定性**:若数据质量较差或样本量过小,应明确说明
5. **优先排序建议**:将行动建议标记为高/中/低优先级,并说明预期影响
6. **保存中间结果**:始终保存清洗后的数据和分析代码,以确保可复现性
---
## 工作目录
所有输出均保存至:`./data-analysis-results/{timestamp}/`
目录结构:data-analysis-results/
└── 2024-03-29_14-30-45/
├── analysis_report.md (或 .html)
├── cleaned_data.csv
├── charts/
│ ├── age_distribution.png
│ ├── correlation_heatmap.png
│ └── channel_comparison.png
└── analysis_notebook.ipynb (如请求生成)
在开始时创建时间戳目录:from datetime import datetime
from pathlib import Path
timestamp = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
output_dir = Path(f'./data-analysis-results/{timestamp}')
output_dir.mkdir(parents=True, exist_ok=True)
(output_dir / 'charts').mkdir(exist_ok=True)
---
## 成功建议
- **尽早读取 CSV 文件**:不要等待——在第一步就加载文件,验证其存在且可读
- **持续向用户通报进展**:每完成一个步骤后,提供简要的状态更新
- **避免过度设计**:若数据干净且问题简单,无需强行使用复杂分析方法
- **复用代码模式**:常见操作(如加载 CSV、数据质量检查、生成图表)应遵循一致的模式,以保证可靠性
- **测试可视化效果**:始终确认图表清晰可读,主要信息能在一瞥中被理解已收录 1 个 Skill