Install
openclaw skills install @thcjp/data-toolkit-freeopenclaw skills install @thcjp/data-toolkit-free本工具箱覆盖数据处理的完整生命周期:从多源数据提取,到清洗转换,再到探索性分析与基础可视化。无论你是写 SQL 查询、清洗脏数据、生成统计摘要还是制作图表,本工具均能提供标准化流程与优秀实践指导. 免费版聚焦核心数据处理能力,适合个人开发者的日常数据分析需求。专业版在此基础上扩展统计检验、数据质量监控、工作流自动化与高级可视化.
| 能力域 | 说明 | 输入/输出 |
|---|---|---|
| 查询提取 | SQL 生成、API 拉取、文件读取 | 数据源 → 结构化数据 |
| 清洗转换 | 空值、去重、标准化、连接 | 脏数据 → 干净数据 |
| 探索分析 | 描述统计、分布、相关性 | 数据 → 洞察摘要 |
| 基础可视化 | 柱状图、折线图、饼图 | 数据 → 图表文件 |
| 模式适配 | 按角色提供差异化入口 | 用户角色 → 推荐流程 |
技术实现要点:核心能力基于input_params参数与output_format配置实现,支持创建/查询/修改/删除等操作模式,通过config_options进行运行时配置. |
用input_params参数进行配置.
处理: 解析核心功能执行的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回核心功能执行的响应数据,包含状态码、结果和日志.
input_params参数,支持创建/查询/导出操作用config_options参数进行配置.
处理: 解析参数配置与调用的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回参数配置与调用的响应数据,包含状态码、结果和日志.
config_options参数,支持修改/重置/导入操作用output_format参数进行配置.
处理: 解析结果处理与输出的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回结果处理与输出的响应数据,包含状态码、结果和日志.
output_format参数,支持导出/保存/转换操作
能力覆盖范围:本skill的核心能力覆盖以下场景关键词:数据全生命周期工、覆盖提取、分析与基础可视化、数据工具箱免费版、是一款面向个人开、发者的数据全生命、周期处理工具、覆盖数据提取、探索性分析与基础、可视化四大核心环、Use、when、需要数据分析、报表生成、统计洞察、数据可视化时使用、不适用于实时流数、据处理、适用于独立开发者、企业团队和自动化、工作流场景等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持.分析师拿到一份新的销售数据 CSV,需要快速了解数据全貌。Agent 引导完成首次探索:
用户:"这份 sales.csv 里有什么有意思的模式?"
Agent:
1. 加载数据,检查形状与类型
2. 生成描述性统计(均值、中位数、分位数)
3. 检查数据质量(空值率、重复率、异常值)
4. 分析时间趋势与品类分布
5. 输出关键发现摘要
工程师需要将一份脏数据清洗后加载至数据库。Agent 生成完整的清洗脚本:
import pandas as pd
# ...
# 加载数据
df = pd.read_csv('raw_data.csv')
# ...
# 空值处理:数值列填充中位数,分类列填充众数
df['amount'] = df['amount'].fillna(df['amount'].median())
df['category'] = df['category'].fillna(df['category'].mode()[0])
# ...
# 去重
df = df.drop_duplicates(subset=['order_id'])
# ...
# 标准化日期格式
df['date'] = pd.to_datetime(df['date'], errors='coerce')
# ...
# 输出清洗报告
print(f"原始行数: {len(pd.read_csv('raw_data.csv'))}")
print(f"清洗后行数: {len(df)}")
print(f"空值率: {df.isnull().sum().sum() / df.size * 100:.2f}%")
业务用户需要对比本季度与上季度的关键指标。Agent 用自然语言解释数据:
用户:"本季度和上季度比怎么样?"
Agent:"本季度收入 1280 万,环比增长 15.3%,主要驱动因素为新用户增长 22%..."
直接向 Agent 描述你的数据任务,无需安装额外依赖(基础功能使用 Python 内置库与 pandas). 示例提问:
帮我写一个 SQL 查询,统计过去 30 天每日注册用户数
这份 CSV 有哪些空值和重复数据?帮我清洗
帮我画一个最近 7 天收入趋势的折线图
| 角色 | 关注重点 | 典型触发语 |
|---|---|---|
| 分析师 | SQL、探索、洞察 | "这份数据说明了什么?" |
| 工程师 | 管道、转换、质量 | "清洗后加载到数据库" |
| 业务 | KPI、看板、通俗解释 | "和上季度比怎么样?" |
| 研究员 | 统计严谨、可复现 | "这个差异显著吗?" |
| 开发者 | Schema、API、类型 | "从这个 JSON 生成类型" |
响应解析: 完成完成后,查看输出响应确认任务状态。成功时输出包含解析摘要和响应数据;失败时根据错误信息排查问题,查阅错误解析章节获取恢复步骤.
-- 统计过去 30 天每日注册用户数
SELECT
DATE(created_at) AS day,
COUNT(*) AS signups
FROM users
WHERE created_at >= NOW() - INTERVAL '30 days'
GROUP BY DATE(created_at)
ORDER BY day;
# 空值策略
# 数值列:填充中位数(抗异常值)
# 分类列:填充众数(保留分布)
# 时间列:标记为 NaT 后按业务规则处理
# ...
# 去重策略
# 基于业务主键去重,保留最新记录
df = df.sort_values('updated_at').drop_duplicates('id', keep='last')
# ...
# 异常值检测
# 使用 IQR 方法识别极端值
Q1, Q3 = df['amount'].quantile([0.25, 0.75])
IQR = Q3 - Q1
outliers = df[(df['amount'] < Q1 - 1.5*IQR) | (df['amount'] > Q3 + 1.5*IQR)]
import matplotlib.pyplot as plt
# ...
# 折线图:趋势
df.plot(x='date', y='revenue', kind='line', title='收入趋势')
plt.savefig('revenue_trend.png', dpi=150, bbox_inches='tight')
# ...
# 柱状图:对比
df.groupby('category')['amount'].sum().plot(kind='bar', title='品类销售')
plt.savefig('category_sales.png', dpi=150, bbox_inches='tight')
# ...
# 饼图:占比
df.groupby('channel')['amount'].sum().plot(kind='pie', autopct='%1.1f%%')
plt.savefig('channel_share.png', dpi=150, bbox_inches='tight')
应用任何转换前先预览将受影响的行,确认后再执行。避免盲目操作导致数据丢失:
# 预览将被删除的行
to_drop = df[df['amount'].isnull()]
print(f"将删除 {len(to_drop)} 行空值记录")
print(to_drop.head())
# 确认后执行
df = df.dropna(subset=['amount'])
每个转换操作记录来源、操作与理由,确保可追溯:
transformations = []
transformations.append({
'step': 1,
'source': 'raw_data.csv',
'operation': 'fill_null',
'field': 'amount',
'strategy': 'median',
'reason': '金额字段空值率 3.2%,中位数抗异常值'
})
分析前必须校验数据类型与取值范围,避免"垃圾进垃圾出":
# 类型检查
assert df['amount'].dtype in ['float64', 'int64']
# 范围检查
assert df['amount'].min() >= 0 # 金额不应为负
| 数据类型 | 推荐图表 | 示例 |
|---|---|---|
| 时间序列 | 折线图 | 每日收入趋势 |
| 分类对比 | 柱状图 | 各品类销售额 |
| 占比构成 | 饼图 | 渠道分布 |
| 分布形态 | 直方图 | 用户年龄分布 |
| 相关关系 | 散点图 | 广告投入与转化 |
检查执行计划,关注全表扫描与缺失索引。常见优化:为 WHERE/JOIN/GROUP BY 字段添加索引、避免 SELECT *、使用分区表。对于 PostgreSQL,可使用 EXPLAIN ANALYZE 查看实际执行计划.
使用分块读取:pd.read_csv('big.csv', chunksize=10000)。或使用 Dask 等并行框架处理超大数据集.
取决于空值率与业务含义。空值率低于 5% 可考虑删除;5%-30% 建议填充(数值用中位数、分类用众数);超过 30% 需评估字段是否可用.
常用 IQR 方法:超出 Q1-1.5×IQR 或 Q3+1.5×IQR 的为异常值。也可结合业务规则(如金额为负、年龄超过 150)综合判断.
matplotlib 默认字体不支持中文,需指定中文字体:
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| pandas | Python 库 | 必需 | pip install pandas |
| matplotlib | Python 库 | 可视化必需 | pip install matplotlib |
| psql | 数据库客户端 | 数据库源推荐 | apt install postgresql-client |
| LLM API | API | 必需 | 由 Agent 平台内置 LLM 提供 |
DATABASE_URL)本免费体验版限制以下高级功能:
解锁全部功能请使用专业版:data-toolkit-pro
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 | 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案 |
{
"success": true,
"data": {
"result": "数据工具箱(免费版)处理结果",
"execution_time": "0.5s",
"metadata": {
"version": "1.0",
"processor": "datakit"
}
},
"execution_log": ["解析输入参数", "执行核心处理", "格式化输出结果"],
"error": null
}