对时间序列或分类数据进行多维度趋势分析、百分比清洗、绩效分级建模与预测,并生成高分辨率的可视化综合报告,适用于业务指标监控与预测场景。
65
77%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/sn-da-excel-workflow/capability/excel-data-analysis/time-series-analysis/SKILL.mdStep1 加载并检查原始数据,配置中文字体以确保图表正常显示。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
# 设置中文字体,兼容不同操作系统
plt.rcParams['font.sans-serif'] = ['SimHei', 'WenQuanYi Zen Hei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
# 加载Excel文件
file_path = 'data.xlsx'
df = pd.read_excel(file_path)
print(f"数据形状: {df.shape}")
print(f"列名: {list(df.columns)}")Step2 提取时间序列或分类维度数据,处理百分比格式,并计算变化趋势。
def convert_percentage(pct_str):
"""将百分比字符串转换为数值,处理空值和非字符串类型"""
if pd.isna(pct_str):
return None
if isinstance(pct_str, str) and '%' in pct_str:
try:
return float(pct_str.replace('%', ''))
except ValueError:
return None
return pct_str
time_col = '时间列' # 占位示例
target_cols = ['指标1占比', '指标2占比', '指标3占比'] # 占位示例
# 转换百分比字符串为数值并提取数据
ts_df = df[[time_col] + target_cols].copy() if time_col in df.columns else df.copy()
for col in target_cols:
if col in ts_df.columns:
ts_df[col] = ts_df[col].apply(convert_percentage)
# 计算变化趋势并识别状态
diff_col = f'{col}_变化'
trend_col = f'{col}_趋势'
ts_df[diff_col] = ts_df[col].diff()
ts_df[trend_col] = ['上升' if x > 0 else '下降' if x < 0 else '稳定' for x in ts_df[diff_col]]Step3 基于数值进行多维度分级算法建模,映射差异化增长率并计算预测值。
group_col = '分组列' # 占位示例,如'部门'
value_col = '数值列' # 占位示例,如'销售额'
# 聚合计算总和并排序
grouped_df = df.groupby(group_col, as_index=False)[value_col].sum()
grouped_df = grouped_df.sort_values(by=value_col, ascending=False).reset_index(drop=True)
# 多维度分级算法结构:前30%为高,中间40%为中,后30%为低
total_rows = len(grouped_df)
high_threshold = int(total_rows * 0.3)
mid_threshold = int(total_rows * 0.7)
grouped_df['等级'] = np.where(
grouped_df.index < high_threshold, '高',
np.where(grouped_df.index < mid_threshold, '中', '低')
)
# 分类映射函数骨架:为不同等级设定差异化增长率
growth_rates = {'高': 0.15, '中': 0.08, '低': 0.03}
grouped_df['增长率'] = grouped_df['等级'].map(growth_rates)
# 计算预测值与增长量
grouped_df['预测值'] = grouped_df[value_col] * (1 + grouped_df['增长率'])
grouped_df['增长量'] = grouped_df['预测值'] - grouped_df[value_col]Step4 生成多维度可视化图表(堆叠面积图、柱状图、条形图),并保存为高分辨率图像。
output_path = 'trend_analysis_report.png'
plt.figure(figsize=(14, 10))
# 子图1:堆叠面积图(时间序列占比变化)
plt.subplot(2, 2, 1)
sns.set_style('whitegrid')
if time_col in ts_df.columns and all(c in ts_df.columns for c in target_cols):
plt.stackplot(ts_df[time_col],
*[ts_df[c] for c in target_cols],
labels=target_cols, alpha=0.8)
plt.title('各指标占比变化趋势', fontsize=14, fontweight='bold')
plt.xlabel(time_col)
plt.ylabel('占比 (%)')
plt.legend(loc='upper left')
plt.xticks(rotation=45)
# 子图2:当前 vs 预测对比(柱状图)
plt.subplot(2, 2, 2)
x = np.arange(len(grouped_df))
width = 0.35
plt.bar(x - width/2, grouped_df[value_col], width, label='当前值', alpha=0.8)
plt.bar(x + width/2, grouped_df['预测值'], width, label='预测值', alpha=0.8)
plt.xlabel(group_col)
plt.ylabel('数值')
plt.title('当前与预测值对比')
plt.xticks(x, grouped_df[group_col], rotation=45)
plt.legend()
# 子图3:增长率分布(条形图)
plt.subplot(2, 2, 3)
plt.barh(grouped_df[group_col], grouped_df['增长率'], color='skyblue')
plt.xlabel('增长率')
plt.title('各组增长率分布')
plt.gca().invert_yaxis()
# 子图4:增长量分布(柱状图)
plt.subplot(2, 2, 4)
plt.bar(grouped_df[group_col], grouped_df['增长量'], color='lightcoral')
plt.xlabel(group_col)
plt.ylabel('增长量')
plt.title('各组增长量分析')
plt.xticks(rotation=45)
plt.tight_layout()
# 图表美化与高分辨率保存
plt.savefig(output_path, dpi=300, bbox_inches='tight')
plt.close()Step5 生成综合分析报告,汇总核心指标并输出趋势结论。
# 总体预测汇总
total_current = grouped_df[value_col].sum()
total_forecast = grouped_df['预测值'].sum()
total_growth = grouped_df['增长量'].sum()
overall_growth_rate = (total_forecast - total_current) / total_current if total_current else 0
print("=" * 60)
print("📊 综合趋势分析报告")
print("=" * 60)
print(f"当前总值: {total_current:,.2f}")
print(f"预测总值: {total_forecast:,.2f}")
print(f"总增长量: {total_growth:,.2f}")
print(f"整体增长率: {overall_growth_rate:.2%}")
print("\n📈 分析结论:")
if overall_growth_rate > 0.1:
print(" - 整体趋势向好,预计实现显著增长。")
elif overall_growth_rate > 0:
print(" - 呈温和增长态势,建议加强低等级组支持。")
else:
print(" - 预测下滑,需深入分析原因并制定应对策略。")
print("=" * 60)179fea1
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.