OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  data-analyst:全能数据分析:SQL 查询、电子表格处理及数据可视化

data-analyst:全能数据分析:SQL 查询、电子表格处理及数据可视化

 
  merge ·  2026-02-05 21:00:27 · 3 次点击  · 0 条评论  

名称: data-analyst
版本: 1.0.0
描述: "数据可视化、报告生成、SQL查询与电子表格自动化。将您的AI助手转变为精通数据的分析师,将原始数据转化为可执行的见解。"
作者: openclaw


数据分析师技能 📊

将您的AI助手打造成数据分析利器。

查询数据库、分析电子表格、创建可视化图表,并生成驱动决策的深刻见解。


技能功能

SQL查询 — 编写并执行数据库查询
电子表格分析 — 处理CSV、Excel、Google Sheets数据
数据可视化 — 创建图表、图形和仪表板
报告生成 — 自动生成包含见解的报告
数据清洗 — 处理缺失值、异常值和格式问题
统计分析 — 描述性统计、趋势分析、相关性分析


快速开始

  1. TOOLS.md 中配置您的数据源:
    ```markdown
    ### 数据源

    • 主数据库: [连接字符串或描述]
    • 电子表格: [Google Sheets URL / 本地路径]
    • 数据仓库: [BigQuery/Snowflake/等]
      ```
  2. 设置您的工作空间:
    bash ./scripts/data-init.sh

  3. 开始分析!


SQL查询模式

常用查询模板

基础数据探索

-- 行数统计
SELECT COUNT(*) FROM table_name;

-- 数据抽样
SELECT * FROM table_name LIMIT 10;

-- 列统计
SELECT 
    column_name,
    COUNT(*) as count,
    COUNT(DISTINCT column_name) as unique_values,
    MIN(column_name) as min_val,
    MAX(column_name) as max_val
FROM table_name
GROUP BY column_name;

基于时间的分析

-- 每日聚合
SELECT 
    DATE(created_at) as date,
    COUNT(*) as daily_count,
    SUM(amount) as daily_total
FROM transactions
GROUP BY DATE(created_at)
ORDER BY date DESC;

-- 月度环比
SELECT 
    DATE_TRUNC('month', created_at) as month,
    COUNT(*) as count,
    LAG(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', created_at)) as prev_month,
    (COUNT(*) - LAG(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', created_at))) / 
        NULLIF(LAG(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', created_at)), 0) * 100 as growth_pct
FROM transactions
GROUP BY DATE_TRUNC('month', created_at)
ORDER BY month;

队列分析

-- 按注册月份划分的用户队列
SELECT 
    DATE_TRUNC('month', u.created_at) as cohort_month,
    DATE_TRUNC('month', o.created_at) as activity_month,
    COUNT(DISTINCT u.id) as users
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY cohort_month, activity_month
ORDER BY cohort_month, activity_month;

漏斗分析

-- 转化漏斗
WITH funnel AS (
    SELECT
        COUNT(DISTINCT CASE WHEN event = 'page_view' THEN user_id END) as views,
        COUNT(DISTINCT CASE WHEN event = 'signup' THEN user_id END) as signups,
        COUNT(DISTINCT CASE WHEN event = 'purchase' THEN user_id END) as purchases
    FROM events
    WHERE date >= CURRENT_DATE - INTERVAL '30 days'
)
SELECT 
    views,
    signups,
    ROUND(signups * 100.0 / NULLIF(views, 0), 2) as signup_rate,
    purchases,
    ROUND(purchases * 100.0 / NULLIF(signups, 0), 2) as purchase_rate
FROM funnel;

数据清洗

常见数据质量问题

问题 检测方法 解决方案
缺失值 IS NULL 或空字符串 填充、删除或标记
重复项 GROUP BY 配合 HAVING COUNT(*) > 1 根据规则去重
异常值 Z分数 > 3 或 IQR方法 调查、封顶或排除
格式不一致 抽样和模式匹配 通过转换标准化
无效值 范围检查、参照完整性 验证并纠正

数据清洗SQL模式

-- 查找重复项
SELECT email, COUNT(*)
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

-- 查找空值
SELECT 
    COUNT(*) as total,
    SUM(CASE WHEN email IS NULL THEN 1 ELSE 0 END) as null_emails,
    SUM(CASE WHEN name IS NULL THEN 1 ELSE 0 END) as null_names
FROM users;

-- 标准化文本
UPDATE products
SET category = LOWER(TRIM(category));

-- 移除异常值 (IQR方法)
WITH stats AS (
    SELECT 
        PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY value) as q1,
        PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY value) as q3
    FROM data
)
SELECT * FROM data, stats
WHERE value BETWEEN q1 - 1.5*(q3-q1) AND q3 + 1.5*(q3-q1);

数据清洗清单

# 数据质量审计: [数据集]

## 行级检查
- [ ] 总行数: [X]
- [ ] 重复行: [X]
- [ ] 包含空值的行: [X]

## 列级检查
| 列名 | 类型 | 空值数 | 唯一值数 | 最小值 | 最大值 | 问题 |
|--------|------|-------|--------|-----|-----|--------|
| [col] | [type] | [n] | [n] | [v] | [v] | [notes] |

## 数据谱系
- 来源: [数据来源]
- 最后更新: [日期]
- 已知问题: [列表]

## 已执行的清洗操作
1. [操作及原因]
2. [操作及原因]

电子表格分析

使用Python处理CSV/Excel

import pandas as pd

# 加载数据
df = pd.read_csv('data.csv')  # 或 pd.read_excel('data.xlsx')

# 基础探索
print(df.shape)  # (行数, 列数)
print(df.info())  # 列类型和空值
print(df.describe())  # 数值统计

# 数据清洗
df = df.drop_duplicates()
df['date'] = pd.to_datetime(df['date'])
df['amount'] = df['amount'].fillna(0)

# 分析
summary = df.groupby('category').agg({
    'amount': ['sum', 'mean', 'count'],
    'quantity': 'sum'
}).round(2)

# 导出
summary.to_csv('analysis_output.csv')

常用Pandas操作

# 筛选
filtered = df[df['status'] == 'active']
filtered = df[df['amount'] > 1000]
filtered = df[df['date'].between('2024-01-01', '2024-12-31')]

# 聚合
by_category = df.groupby('category')['amount'].sum()
pivot = df.pivot_table(values='amount', index='month', columns='category', aggfunc='sum')

# 窗口函数
df['running_total'] = df['amount'].cumsum()
df['pct_change'] = df['amount'].pct_change()
df['rolling_avg'] = df['amount'].rolling(window=7).mean()

# 合并
merged = pd.merge(df1, df2, on='id', how='left')

数据可视化

图表选择指南

数据类型 最佳图表 适用场景
时间趋势 折线图 展示随时间变化的模式
类别比较 柱状图 比较离散类别
部分与整体 饼图/环形图 展示比例 (≤5个类别)
分布情况 直方图 理解数据分布
相关性 散点图 两个变量间的关系
多类别 横向条形图 排名或比较多个项目
地理数据 地图 基于位置的数据

使用Matplotlib/Seaborn进行Python可视化

import matplotlib.pyplot as plt
import seaborn as sns

# 设置样式
plt.style.use('seaborn-v0_8-whitegrid')
sns.set_palette("husl")

# 折线图 (趋势)
plt.figure(figsize=(10, 6))
plt.plot(df['date'], df['value'], marker='o')
plt.title('时间趋势')
plt.xlabel('日期')
plt.ylabel('数值')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('trend.png', dpi=150)

# 柱状图 (比较)
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='category', y='amount')
plt.title('按类别统计金额')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('comparison.png', dpi=150)

# 热力图 (相关性)
plt.figure(figsize=(10, 8))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm', center=0)
plt.title('相关性矩阵')
plt.tight_layout()
plt.savefig('correlation.png', dpi=150)

ASCII图表 (快速终端可视化)

无法生成图片时,可使用ASCII图表:

月度营收 (单位:千美元)
========================
一月: ████████████████ 160
二月: ██████████████████ 180
三月: ████████████████████████ 240
四月: ██████████████████████ 220
五月: ██████████████████████████ 260
六月: ████████████████████████████ 280

报告生成

标准报告模板

# [报告名称]
**周期:** [日期范围]
**生成时间:** [日期]
**作者:** [AI助手/人员]

## 执行摘要
[2-3句话总结关键发现]

## 关键指标

| 指标 | 当前值 | 前值 | 变化 |
|--------|---------|----------|--------|
| [指标] | [数值] | [数值] | [+/-X%] |

## 详细分析

### [部分 1]
[分析及支持数据]

### [部分 2]
[分析及支持数据]

## 可视化
[插入图表]

## 见解
1. **[见解]**: [支持证据]
2. **[见解]**: [支持证据]

## 建议
1. [可执行的建议]
2. [可执行的建议]

## 方法论
- 数据源: [来源]
- 日期范围: [范围]
- 应用的过滤器: [过滤器]
- 已知限制: [限制]

## 附录
[支持数据表]

自动化报告脚本

#!/bin/bash
# generate-report.sh

# 拉取最新数据
python scripts/extract_data.py --output data/latest.csv

# 运行分析
python scripts/analyze.py --input data/latest.csv --output reports/

# 生成报告
python scripts/format_report.py --template weekly --output reports/weekly-$(date +%Y-%m-%d).md

echo "报告已生成: reports/weekly-$(date +%Y-%m-%d).md"

统计分析

描述性统计

统计量 含义 使用场景
均值 平均值 集中趋势
中位数 中间值 对异常值稳健
众数 最常见值 分类数据
标准差 围绕均值的离散程度 变异性
最小值/最大值 范围 数据边界
百分位数 分布形状 基准测试

使用Python快速统计

# 完整的描述性统计
stats = df['amount'].describe()
print(stats)

# 附加统计量
print(f"中位数: {df['amount'].median()}")
print(f"众数: {df['amount'].mode()[0]}")
print(f"偏度: {df['amount'].skew()}")
print(f"峰度: {df['amount'].kurtosis()}")

# 相关性
correlation = df['sales'].corr(df['marketing_spend'])
print(f"相关性: {correlation:.3f}")

统计检验速查表

检验 使用场景 Python
T检验 比较两个均值 scipy.stats.ttest_ind(a, b)
卡方检验 分类变量独立性 scipy.stats.chi2_contingency(table)
方差分析 比较3个及以上均值 scipy.stats.f_oneway(a, b, c)
皮尔逊相关 线性相关性 scipy.stats.pearsonr(x, y)

分析工作流

标准分析流程

  1. 定义问题

    • 我们试图回答什么问题?
    • 这将为哪些决策提供信息?
  2. 理解数据

    • 有哪些可用数据?
    • 数据结构和质量如何?
  3. 清洗与准备

    • 处理缺失值
    • 修正数据类型
    • 移除重复项
  4. 探索

    • 描述性统计
    • 初步可视化
    • 识别模式
  5. 分析

    • 深入探究发现
    • 必要时进行统计检验
    • 验证假设
  6. 沟通

    • 清晰的可视化
    • 可执行的见解
    • 建议

分析请求模板

# 分析请求

## 问题
[我们试图回答什么问题?]

## 背景
[为什么这很重要?将影响什么决策?]

## 可用数据
- [数据集 1]: [描述]
- [数据集 2]: [描述]

## 预期输出
- [交付物 1]
- [交付物 2]

## 时间线
[何时需要?]

## 备注
[任何限制或注意事项]

脚本

data-init.sh

初始化数据分析工作空间。

query.sh

快速执行SQL查询。

# 从文件运行查询
./scripts/query.sh --file queries/daily-report.sql

# 运行内联查询
./scripts/query.sh "SELECT COUNT(*) FROM users"

# 保存输出到文件
./scripts/query.sh --file queries/export.sql --output data/export.csv

analyze.py

Python分析工具包。

# 基础分析
python scripts/analyze.py --input data/sales.csv

# 指定分析类型
python scripts/analyze.py --input data/sales.csv --type cohort

# 生成报告
python scripts/analyze.py --input data/sales.csv --report weekly

集成提示

与其他技能集成

技能 集成方式
市场营销 分析活动表现、内容指标
销售 销售管道分析、转化分析
业务拓展 市场研究数据、竞争对手分析

常见数据源

  • 数据库: PostgreSQL, MySQL, SQLite
  • 数据仓库: BigQuery, Snowflake, Redshift
  • 电子表格: Google Sheets, Excel, CSV
  • API: REST端点, GraphQL
  • 文件: JSON, Parquet, XML

最佳实践

  1. 始于问题 — 明确要回答的问题
  2. 验证数据 — 垃圾进,垃圾出
  3. 记录一切 — 查询、假设、决策
  4. 恰当可视化 — 为数据选择合适的图表
  5. 展示过程 — 方法论很重要
  6. 见解先行 — 不仅仅是数据堆砌
  7. 使其可执行 — "那又如何?" → "现在如何?"
  8. 版本化查询 — 跟踪随时间的变化

常见错误

确认偏误 — 寻找支持结论的数据
相关≠因果 — 谨慎做出因果论断
选择性呈现 — 仅使用有利数据
忽视异常值 — 移除前先调查
过度复杂化 — 简单的分析往往更有效
缺乏上下文 — 没有比较的数字毫无意义


许可证

许可证: MIT — 可自由使用、修改、分发。


"目标是将数据转化为信息,将信息转化为见解。" — 卡莉·菲奥莉娜

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor