| name | data-analyst-cn |
| version | 1.0.23 |
| description | 数据分析助手 - 数据清洗、统计分析、可视化建议。适合:数据分析师、产品经理、运营。 |
| metadata | {"openclaw":{"emoji":"📊","requires":{"bins":["python3"]}}} |
数据分析助手 Skill
快速进行数据清洗、统计分析和可视化。
核心功能
| 功能 | 描述 |
|---|
| 数据清洗 | 去重、填充、格式化 |
| 统计分析 | 描述统计、相关分析 |
| 可视化 | 图表建议、代码生成 |
| 报告生成 | 自动生成分析报告 |
使用方法
分析数据
分析这个 CSV 文件:sales.csv
数据清洗
清洗这个数据集,处理缺失值和异常值
生成图表
为这些数据生成折线图代码
Python 数据分析模板
读取数据
import pandas as pd
df = pd.read_csv('data.csv')
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
df = pd.read_json('data.json')
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table', conn)
import requests
response = requests.get('https://api.example.com/data')
df = pd.DataFrame(response.json())
数据预览
print(df.shape)
print(df.columns)
print(df.dtypes)
print(df.info())
print(df.head())
print(df.tail())
print(df.sample(5))
print(df.describe())
print(df.describe(include='all'))
数据清洗
df.isnull().sum()
df.dropna()
df.fillna(0)
df.fillna(df.mean())
df['col'].fillna(df['col'].mode()[0])
df.duplicated().sum()
df.drop_duplicates()
df.drop_duplicates(subset=['col'])
df['date'] = pd.to_datetime(df['date'])
df['price'] = df['price'].astype(float)
df['category'] = df['category'].astype('category')
Q1 = df['col'].quantile(0.25)
Q3 = df['col'].quantile(0.75)
IQR = Q3 - Q1
df = df[(df['col'] >= Q1 - 1.5*IQR) & (df['col'] <= Q3 + 1.5*IQR)]
df['name'] = df['name'].str.strip()
df['name'] = df['name'].str.lower()
df['name'] = df['name'].str.replace('old', 'new')
统计分析
df['col'].mean()
df['col'].median()
df['col'].mode()
df['col'].std()
df['col'].var()
df['col'].max() - df['col'].min()
df['col'].skew()
df['col'].kurt()
df['col'].quantile([0.25, 0.5, 0.75])
df.corr()
df.corr()['target']
df.groupby('category').agg({
'sales': ['sum', 'mean', 'count'],
'profit': 'mean'
})
pd.crosstab(df['col1'], df['col2'])
时间序列分析
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')
df.resample('D').sum()
df.resample('W').mean()
df.resample('M').sum()
df['rolling_mean'] = df['col'].rolling(window=7).mean()
df['rolling_std'] = df['col'].rolling(window=7).std()
df['diff'] = df['col'].diff()
df['pct_change'] = df['col'].pct_change()
from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(df['col'], model='additive', period=12)
result.plot()
可视化代码
基础图表
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10, 6))
plt.plot(df['date'], df['value'])
plt.title('趋势图')
plt.xlabel('日期')
plt.ylabel('数值')
plt.show()
plt.bar(df['category'], df['value'])
plt.xticks(rotation=45)
plt.show()
plt.scatter(df['x'], df['y'], alpha=0.5)
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
plt.hist(df['value'], bins=20, edgecolor='black')
plt.xlabel('数值')
plt.ylabel('频数')
plt.show()
sns.boxplot(data=df, x='category', y='value')
plt.show()
sns.heatmap(df.corr(), annot=True, cmap='coolwarm', center=0)
plt.show()
高级图表
df_grouped = df.groupby(['category', 'type'])['value'].sum().unstack()
df_grouped.plot(kind='bar', figsize=(12, 6))
plt.legend(title='类型')
plt.show()
sns.violinplot(data=df, x='category', y='value')
plt.show()
sns.pairplot(df[['col1', 'col2', 'col3', 'category']], hue='category')
plt.show()
fig, ax = plt.subplots(figsize=(14, 6))
ax.plot(df.index, df['value'], label='实际值')
ax.plot(df.index, df['rolling_mean'], label='7日均值', linestyle='--')
ax.fill_between(df.index, df['lower'], df['upper'], alpha=0.2)
ax.legend()
plt.show()
分析报告模板
def generate_report(df):
"""生成数据分析报告"""
report = f"""
# 数据分析报告
## 1. 数据概览
- 数据量:{len(df)} 行 × {len(df.columns)} 列
- 时间范围:{df['date'].min()} 至 {df['date'].max()}
- 缺失值:{df.isnull().sum().sum()} 个
## 2. 关键指标
- 总销售额:¥{df['sales'].sum():,.2f}
- 平均订单:¥{df['sales'].mean():,.2f}
- 最高订单:¥{df['sales'].max():,.2f}
- 最低订单:¥{df['sales'].min():,.2f}
## 3. 分布特征
- 偏度:{df['sales'].skew():.2f}
- 峰度:{df['sales'].kurt():.2f}
- 标准差:{df['sales'].std():,.2f}
## 4. Top 5 类别
{df.groupby('category')['sales'].sum().sort_values(ascending=False).head().to_markdown()}
## 5. 趋势分析
- 环比增长:{df['sales'].pct_change().mean()*100:.2f}%
- 月均销售额:¥{df.resample('M', on='date')['sales'].sum().mean():,.2f}
## 6. 建议
1. 重点推广 Top 3 类别
2. 优化低转化品类
3. 关注季节性波动
"""
return report
注意事项
- 大数据集注意内存使用
- 处理前备份数据
- 结果需要业务验证
- 可视化要简洁清晰
创建:2026-03-12
版本:1.0