Skills

Group By Analysis

对多 Sheet 的 Excel 文件进行行数统计、大文件 Parquet 转换预处理、数据清洗及分组聚合分析,并生成带样式标记的统计表与可视化图表。

Install

npx skills add OpenSenseNova/SenseNova-Skills --skill group-by-analysis -g -a claude-code -y
Category
Documents
Updated
6d ago
License
MIT
Context cost
Lightabout 752 tokens
Runs scripts
No, instructions only

What it does

对多 Sheet 的 Excel 文件进行行数统计、大文件 Parquet 转换预处理、数据清洗及分组聚合分析,并生成带样式标记的统计表与可视化图表。

Step1 对数据进行清洗与预处理,包括处理合并单元格、正则过滤以及分类映射。

import re

# 1. 处理合并单元格:向前填充
target_col = 'category_column'
df[target_col] = df[target_col].ffill()

# 2. 正则清洗:去除无效字符或筛选特定格式
def clean_text(text):
    if pd.isna(text): return text
    return re.sub(r'[^\w\s]', '', str(text)).strip()

df[target_col] = df[target_col].apply(clean_text)

# 3. 分类映射函数骨架
def map_categories(value):
    mapping = {
        'example_key_1': 'Group_A',
        'example_key_2': 'Group_B'
    }
    return mapping.get(value, 'Others')

df['group_tag'] = df[target_col].apply(map_categories)

Step2 执行分组统计,计算频数、占比,并添加总计行。

group_col = 'group_tag'
value_col = 'value_column'

# 分组聚合:计数与求和
summary = df.groupby(group_col)[value_col].agg(['count', 'sum']).reset_index()

# 计算占比
total_sum = summary['sum'].sum()
summary['percentage'] = (summary['sum'] / total_sum).map(lambda x: f"{x:.2%}")

# 添加总计行
total_row = pd.DataFrame({
    group_col: ['Total'],
    'count': [summary['count'].sum()],
    'sum': [total_sum],
    'percentage': ['100.00%']
})
summary_final = pd.concat([summary, total_row], ignore_index=True)

print(summary_final)

Step3 生成可视化柱状图,配置中文字体、数值标签及网格美化。

import matplotlib.pyplot as plt

# 配置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False

plt.figure(figsize=(10, 6), dpi=100)
bars = plt.bar(summary[group_col], summary['sum'], color='#4472C4')

# 添加数值标签
for bar in bars:
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2., height,
             f'{height:,.0f}', ha='center', va='bottom', fontsize=10)

plt.title("Distribution Analysis", fontsize=14)
plt.xlabel(group_col)
plt.ylabel("Values")
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()

chart_path = "analysis_chart.png"
plt.savefig(chart_path)

Step4 使用 openpyxl 生成带样式和条件格式的 Excel 报告,并提供下载。

from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
Read the whole SKILL.md on GitHub

More in Documents