【Hermes Agent场景】数据分析师的瑞士军刀
前言
声明:本文仅介绍一款开源的开发工具和效率工具,旨在帮助开发者提高工作效率。文章内容仅供学习和研究使用,请勿将此工具用于任何商业营销、群发推广或违反平台规定的用途。
数据分析师的工作涉及数据清洗、分析、可视化、报告生成等多个环节。传统工具如Excel、Python(pandas、numpy)、R等虽然强大,但需要大量的手工操作和编程。
Hermes Agent可以为数据分析师提供强大的辅助,从数据导入到报告生成,全流程自动化,大幅提高工作效率。
为什么数据分析师需要Hermes Agent?
传统工作流的痛点
传统流程:
- ❌ 手工编写代码处理数据
- ❌ 反复调试和优化
- ❌ 手工生成图表
- ❌ 撰写分析报告
- ❌ 重复性工作多
效率问题:
- 简单任务也需编写代码
- 数据清洗耗时耗力
- 可视化需要反复调整
- 报告格式不统一
- 知识无法复用
Hermes Agent的优势
自动化能力:
- ✅ 自动生成数据处理代码
- ✅ 智能数据清洗
- ✅ 自动创建可视化
- ✅ 自动生成报告
- ✅ 可复用的技能
智能辅助:
- ✅ 自然语言交互
- ✅ 上下文理解
- ✅ 最佳实践建议
- ✅ 错误自动修复
- ✅ 性能优化建议
核心技能加载
数据分析必备技能
bash
hermes skills install jupyter-live-kernel
hermes skills install python-data-analysis
hermes skills install visualization
在会话中加载
/skill jupyter-live-kernel
/skill python-data-analysis
/skill visualization
数据导入和加载
1. 从CSV导入
你: 帮我读取sales_data.csv文件,显示前10行,并给出数据概览
Hermes Agent会自动:
python
import pandas as pd
import numpy as np
# 读取CSV
df = pd.read_csv('sales_data.csv')
# 显示前10行
print(df.head(10))
# 数据概览
print("\n数据概览:")
print(f"行数: {len(df)}")
print(f"列数: {len(df.columns)}")
print(f"\n列名: {df.columns.tolist()}")
print(f"\n数据类型:")
print(df.dtypes)
print(f"\n基本统计:")
print(df.describe())
2. 从Excel导入
你: 读取report.xlsx的所有sheet,合并成一个DataFrame
python
import pandas as pd
# 读取所有sheet
excel_file = pd.ExcelFile('report.xlsx')
dfs = [excel_file.parse(sheet) for sheet in excel_file.sheet_names]
# 合并DataFrame
df = pd.concat(dfs, ignore_index=True)
3. 从数据库导入
你: 从PostgreSQL数据库读取orders表,最近30天的数据
python
import pandas as pd
import psycopg2
from datetime import datetime, timedelta
# 连接数据库
conn = psycopg2.connect(
host="localhost",
database="mydb",
user="user",
password="password"
)
# 查询最近30天数据
query = """
SELECT *
FROM orders
WHERE order_date >= %s
ORDER BY order_date DESC
"""
thirty_days_ago = datetime.now() - timedelta(days=30)
df = pd.read_sql(query, conn, params=(thirty_days_ago,))
conn.close()
4. 从API导入
你: 从这个API获取数据:https://api.example.com/data
python
import requests
import pandas as pd
# 获取数据
response = requests.get('https://api.example.com/data')
data = response.json()
# 转换为DataFrame
df = pd.DataFrame(data)
数据清洗
1. 处理缺失值
你: 检查数据中的缺失值,并给出处理建议
Hermes Agent会分析并建议:
python
# 检查缺失值
print("缺失值统计:")
print(df.isnull().sum())
# 缺失值比例
print("\n缺失值比例:")
print(df.isnull().sum() / len(df) * 100)
# 处理建议
# 1. 数值列:用均值或中位数填充
# 2. 分类列:用众数填充
# 3. 时间列:用前后值填充
# 4. 缺失比例高:考虑删除
# 自动处理
df.fillna({
'numeric_column': df['numeric_column'].median(),
'category_column': df['category_column'].mode()[0]
}, inplace=True)
2. 数据类型转换
你: 检查数据类型,将日期列转换为datetime类型
python
# 检查数据类型
print("数据类型:")
print(df.dtypes)
# 转换日期列
df['date_column'] = pd.to_datetime(df['date_column'])
# 转换数值列
df['numeric_column'] = pd.to_numeric(df['numeric_column'], errors='coerce')
# 转换分类列
df['category_column'] = df['category_column'].astype('category')
3. 处理重复值
你: 检查并处理重复值
python
# 检查重复值
print("重复值数量:")
print(df.duplicated().sum())
# 显示重复行
print("\n重复行:")
print(df[df.duplicated()])
# 删除重复值
df.drop_duplicates(inplace=True)
4. 异常值处理
你: 检测数值列的异常值,给出处理建议
python
# 使用IQR方法检测异常值
def detect_outliers(df, column):
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df[column] < lower_bound) | (df[column] > upper_bound)]
return outliers
# 检测所有数值列的异常值
for col in df.select_dtypes(include=[np.number]).columns:
outliers = detect_outliers(df, col)
if not outliers.empty:
print(f"\n{col}的异常值:")
print(outliers)
数据探索和分析
1. 描述性统计
你: 生成详细的描述性统计报告
Hermes Agent会生成:
python
# 基本统计
print("基本统计:")
print(df.describe())
# 分类变量统计
for col in df.select_dtypes(include=['object', 'category']).columns:
print(f"\n{col}的分布:")
print(df[col].value_counts())
# 相关性矩阵
print("\n相关性矩阵:")
print(df.corr())
2. 数据分布分析
你: 分析各列的数据分布
python
import matplotlib.pyplot as plt
import seaborn as sns
# 数值列分布
for col in df.select_dtypes(include=[np.number]).columns:
plt.figure(figsize=(10, 6))
sns.histplot(df[col], kde=True)
plt.title(f'{col}的分布')
plt.show()
# 分类列分布
for col in df.select_dtypes(include=['object', 'category']).columns:
plt.figure(figsize=(10, 6))
df[col].value_counts().plot(kind='bar')
plt.title(f'{col}的分布')
plt.show()
3. 时间序列分析
你: 分析销售额的时间趋势,按月和季度聚合
python
# 设置日期为索引
df = df.set_index('date_column')
# 按月聚合
monthly_sales = df.resample('M').sum()
print("月度销售额:")
print(monthly_sales)
# 按季度聚合
quarterly_sales = df.resample('Q').sum()
print("\n季度销售额:")
print(quarterly_sales)
# 可视化趋势
plt.figure(figsize=(12, 6))
monthly_sales['sales'].plot()
plt.title('月度销售额趋势')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.show()
4. 分组分析
你: 按产品类别分组分析销售额
python
# 按类别分组
category_sales = df.groupby('category')['sales'].agg([
('total', 'sum'),
('mean', 'mean'),
('count', 'count'),
('std', 'std')
]).round(2)
print("按类别分组的销售额分析:")
print(category_sales)
# 可视化
category_sales['total'].plot(kind='bar', figsize=(10, 6))
plt.title('各品类总销售额')
plt.ylabel('销售额')
plt.show()
数据可视化
1. 基础图表
你: 创建销售额的趋势图和分布图
python
import matplotlib.pyplot as plt
import seaborn as sns
# 设置风格
sns.set_style("whitegrid")
# 趋势图
fig, axes = plt.subplots(2, 1, figsize=(12, 10))
# 1. 时间趋势
axes[0].plot(df.index, df['sales'])
axes[0].set_title('销售额时间趋势')
axes[0].set_xlabel('日期')
axes[0].set_ylabel('销售额')
# 2. 分布图
sns.histplot(df['sales'], kde=True, ax=axes[1])
axes[1].set_title('销售额分布')
plt.tight_layout()
plt.show()
2. 组合图表
你: 创建一个组合图表,显示销售额和利润的趋势
python
fig, ax1 = plt.subplots(figsize=(12, 6))
# 销售额(左轴)
color = 'tab:blue'
ax1.set_xlabel('日期')
ax1.set_ylabel('销售额', color=color)
ax1.plot(df.index, df['sales'], color=color)
ax1.tick_params(axis='y', labelcolor=color)
# 利润(右轴)
ax2 = ax1.twinx()
color = 'tab:red'
ax2.set_ylabel('利润', color=color)
ax2.plot(df.index, df['profit'], color=color)
ax2.tick_params(axis='y', labelcolor=color)
plt.title('销售额和利润趋势')
plt.show()
3. 交互式图表
你: 使用Plotly创建交互式可视化
python
import plotly.graph_objects as go
from plotly.subplots import make_subplots
# 创建子图
fig = make_subplots(
rows=2, cols=2,
subplot_titles=('销售额趋势', '类别分布', '地区销售', '客户年龄分布')
)
# 添加图表
fig.add_trace(
go.Scatter(x=df.index, y=df['sales'], name='销售额'),
row=1, col=1
)
fig.add_trace(
go.Bar(x=df['category'].value_counts().index,
y=df['category'].value_counts().values,
name='类别'),
row=1, col=2
)
fig.update_layout(height=800, showlegend=False)
fig.show()
4. 热力图
你: 创建相关性矩阵的热力图
python
# 计算相关性
corr_matrix = df.corr()
# 绘制热力图
plt.figure(figsize=(12, 10))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0)
plt.title('相关性矩阵热力图')
plt.show()
机器学习分析
1. 预测模型
你: 构建一个销售额预测模型
python
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 准备数据
features = ['price', 'quantity', 'discount']
X = df[features]
y = df['sales']
# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"均方误差: {mse:.2f}")
print(f"R²分数: {r2:.2f}")
# 特征重要性
print("\n特征系数:")
for feature, coef in zip(features, model.coef_):
print(f"{feature}: {coef:.4f}")
2. 聚类分析
你: 使用K-means对客户进行聚类分析
python
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# 准备数据
features = ['age', 'income', 'spending_score']
X = df[features]
# 标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# K-means聚类
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_scaled)
# 添加聚类标签
df['cluster'] = clusters
# 分析聚类结果
for cluster in range(3):
print(f"\n聚类 {cluster}:")
print(df[df['cluster'] == cluster][features].describe())
3. 异常检测
你: 使用Isolation Forest检测异常数据点
python
from sklearn.ensemble import IsolationForest
# 训练模型
iso_forest = IsolationForest(contamination=0.1, random_state=42)
outliers = iso_forest.fit_predict(df.select_dtypes(include=[np.number]))
# 标记异常点
df['outlier'] = outliers
# 显示异常点
print("异常数据点:")
print(df[df['outlier'] == -1])
报告生成
1. 自动生成分析报告
你: 生成一份完整的数据分析报告,包括摘要、方法、结果和建议
Hermes Agent会自动生成:
python
# 生成报告
report = f"""
# 销售数据分析报告
## 执行摘要
- 分析期间:{df.index.min()} 至 {df.index.max()}
- 总销售额:{df['sales'].sum():,.2f}
- 平均销售额:{df['sales'].mean():,.2f}
- 销售增长率:{((df['sales'].iloc[-1] / df['sales'].iloc[0] - 1) * 100):.2f}%
## 数据概览
- 记录数:{len(df):,}
- 产品类别数:{df['category'].nunique()}
- 地区数:{df['region'].nunique()}
## 主要发现
1. 销售趋势
- 整体趋势:{'上升' if df['sales'].iloc[-1] > df['sales'].iloc[0] else '下降'}
- 月均增长率:{(df['sales'].pct_change().mean() * 100):.2f}%
2. 产品表现
- 最佳产品:{df.groupby('product')['sales'].sum().idxmax()}
- 销量最差产品:{df.groupby('product')['sales'].sum().idxmin()}
3. 地区分析
- 最佳地区:{df.groupby('region')['sales'].sum().idxmax()}
- 潜力地区:{df.groupby('region')['sales'].mean().idxmax()}
## 建议
1. 重点关注表现最佳的产品和地区
2. 对销量下降的产品进行深入分析
3. 开拓潜力地区的市场
## 附录
详细数据和图表见附件。
"""
# 保存报告
with open('sales_analysis_report.md', 'w', encoding='utf-8') as f:
f.write(report)
print("报告已生成:sales_analysis_report.md")
2. 生成Excel报告
你: 生成一个Excel报告,包含数据表格和图表
python
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
# 创建Excel文件
wb = Workbook()
ws = wb.active
ws.title = '销售数据'
# 写入数据
ws.append(['日期', '产品', '类别', '销售额'])
for _, row in df.head(100).iterrows():
ws.append([row['date'], row['product'], row['category'], row['sales']])
# 添加图表
chart = BarChart()
data = Reference(ws, min_col=4, min_row=1, max_row=101)
cats = Reference(ws, min_col=3, min_row=1, max_row=101)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws.add_chart(chart, "E2")
# 保存
wb.save('sales_report.xlsx')
print("Excel报告已生成:sales_report.xlsx")
3. 生成HTML报告
你: 生成一个交互式HTML报告
python
import pandas as pd
import plotly.express as px
from jinja2 import Template
# 创建可视化
fig_trend = px.line(df, x=df.index, y='sales', title='销售趋势')
fig_dist = px.histogram(df, x='sales', title='销售额分布')
fig_category = px.bar(df.groupby('category')['sales'].sum().reset_index(),
x='category', y='sales', title='类别销售')
# HTML模板
template = Template('''
<!DOCTYPE html>
<html>
<head>
<title>销售数据分析报告</title>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
.chart { margin: 20px 0; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>销售数据分析报告</h1>
<h2>执行摘要</h2>
<p>总销售额:{{ total_sales }}</p>
<p>平均销售额:{{ avg_sales }}</p>
<h2>数据表格</h2>
{{ data_table }}
<h2>可视化</h2>
<div class="chart" id="chart-trend"></div>
<div class="chart" id="chart-dist"></div>
<div class="chart" id="chart-category"></div>
<script>
{{ trend_plot }}
{{ dist_plot }}
{{ category_plot }}
</script>
</body>
</html>
''')
# 生成HTML
html = template.render(
total_sales=f"{df['sales'].sum():,.2f}",
avg_sales=f"{df['sales'].mean():,.2f}",
data_table=df.head(10).to_html(index=False),
trend_plot=fig_trend.to_html(full_html=False, include_plotlyjs=False),
dist_plot=fig_dist.to_html(full_html=False, include_plotlyjs=False),
category_plot=fig_category.to_html(full_html=False, include_plotlyjs=False)
)
# 保存HTML
with open('sales_report.html', 'w', encoding='utf-8') as f:
f.write(html)
print("HTML报告已生成:sales_report.html")
自动化工作流
1. 定时分析
你: 创建一个定时任务,每天早上8点自动分析前一天的数据,生成报告并发送邮件
使用Hermes Agent的cronjob工具:
python
# 定时任务脚本
import pandas as pd
import smtplib
from email.mime.text import MIMEText
from datetime import datetime, timedelta
def daily_analysis():
# 1. 读取数据
yesterday = datetime.now() - timedelta(days=1)
df = pd.read_csv(f'sales_data_{yesterday.strftime("%Y%m%d")}.csv')
# 2. 数据分析
total_sales = df['sales'].sum()
avg_sales = df['sales'].mean()
# 3. 生成报告
report = f"""
日期:{yesterday.strftime("%Y-%m-%d")}
总销售额:{total_sales:,.2f}
平均销售额:{avg_sales:,.2f}
"""
# 4. 发送邮件
msg = MIMEText(report)
msg['Subject'] = f'每日销售报告 - {yesterday.strftime("%Y-%m-%d")}'
msg['From'] = 'hermes@example.com'
msg['To'] = 'manager@example.com'
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login('user', 'password')
server.send_message(msg)
print(f"报告已发送:{yesterday.strftime("%Y-%m-%d")}")
# 配置定时任务
# 在Hermes Agent中
# 你: 创建一个定时任务,每天早上8点执行daily_analysis函数
2. 监控和告警
你: 设置监控,当销售额低于阈值时发送告警
python
def monitor_sales():
df = pd.read_csv('current_sales.csv')
avg_sales = df['sales'].mean()
threshold = 10000 # 阈值
if avg_sales < threshold:
# 发送告警
send_alert(f"销售额告警:当前平均销售额 {avg_sales:,.2f} 低于阈值 {threshold:,.2f}")
3. 批量处理
你: 批量处理多个CSV文件,合并分析
python
import os
import glob
# 读取所有CSV文件
files = glob.glob('data/*.csv')
dfs = [pd.read_csv(f) for f in files]
# 合并数据
combined_df = pd.concat(dfs, ignore_index=True)
# 统一分析
# ... 分析代码 ...
# 生成报告
generate_report(combined_df)
最佳实践
1. 数据质量检查
python
def check_data_quality(df):
"""数据质量检查"""
issues = []
# 检查缺失值
missing = df.isnull().sum()
if missing.any():
issues.append(f"缺失值:{missing.to_dict()}")
# 检查重复值
duplicates = df.duplicated().sum()
if duplicates > 0:
issues.append(f"重复值:{duplicates}条")
# 检查异常值
# ... 异常值检测 ...
return issues
2. 代码复用
python
# 创建常用函数
def load_data(filepath):
"""加载数据"""
return pd.read_csv(filepath)
def clean_data(df):
"""数据清洗"""
# 标准化清洗流程
df = df.drop_duplicates()
df = df.fillna(df.mean())
return df
def analyze_data(df):
"""数据分析"""
# 标准化分析流程
return df.describe()
# 使用这些函数
df = load_data('data.csv')
df = clean_data(df)
result = analyze_data(df)
3. 文档化
python
# 为分析脚本添加文档
"""
销售数据分析脚本
作者:Hermes Agent
日期:2026-04-16
版本:1.0
功能:
1. 数据加载和清洗
2. 探索性数据分析
3. 可视化
4. 报告生成
使用方法:
python sales_analysis.py
"""
# 函数文档
def analyze_sales(data):
"""
分析销售数据
参数:
data (pd.DataFrame): 销售数据
返回:
dict: 分析结果
"""
pass
实战案例
案例1:电商销售分析
场景: 分析电商平台的销售数据,找出增长点和问题。
步骤:
你: 加载ecommerce_sales.csv,进行完整的销售分析
Hermes Agent会:
- 加载数据
- 数据清洗
- 探索性分析
- 可视化
- 生成报告
案例2:客户行为分析
场景: 分析客户购买行为,进行客户细分。
你: 分析customer_data.csv,使用聚类方法对客户进行细分
案例3:销售预测
场景: 预测未来30天的销售额。
你: 基于历史销售数据,使用时间序列模型预测未来30天的销售额
总结
Hermes Agent为数据分析师提供了强大的支持:
核心优势:
- ✅ 自然语言交互,无需编程
- ✅ 自动生成代码,提高效率
- ✅ 智能数据处理,减少错误
- ✅ 自动生成报告,节省时间
- ✅ 可复用技能,积累经验
主要功能:
- ✅ 数据导入和加载
- ✅ 数据清洗和预处理
- ✅ 探索性数据分析
- ✅ 可视化
- ✅ 机器学习
- ✅ 报告生成
- ✅ 自动化工作流
最佳实践:
- ✅ 数据质量检查
- ✅ 代码复用
- ✅ 文档化
- ✅ 自动化
- ✅ 可视化
通过Hermes Agent,数据分析师可以:
- 更快地完成数据分析任务
- 更专注于业务洞察
- 更容易分享分析结果
- 更好地复用分析经验
Hermes Agent真正成为数据分析师的瑞士军刀!
如果你在数据分析中有任何疑问或想分享使用经验,欢迎在评论区讨论!
相关链接:
- 上一篇文章:常见问题和解决方案大全
- 官方文档:https://hermes-agent.nousresearch.com/docs/
- Pandas文档:https://pandas.pydata.org/docs/
- Plotly文档:https://plotly.com/python/