# Group By Analysis

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

- Repository: https://github.com/OpenSenseNova/SenseNova-Skills (6002 stars)
- Category: Documents
- License: MIT
- Last updated: 2026-10-29
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add OpenSenseNova/SenseNova-Skills --skill group-by-analysis -g -a claude-code -y`
Codex: `npx skills add OpenSenseNova/SenseNova-Skills --skill group-by-analysis -g -a codex -y`
Cursor: `npx skills add OpenSenseNova/SenseNova-Skills --skill group-by-analysis -g -a cursor -y`
Gemini CLI: `npx skills add OpenSenseNova/SenseNova-Skills --skill group-by-analysis -g -a gemini-cli -y`

## Description

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

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

Step1 对数据进行清洗与预处理，包括处理合并单元格、正则过滤以及分类映射。
```python
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 执行分组统计，计算频数、占比，并添加总计行。
```python
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 生成可视化柱状图，配置中文字体、数值标签及网格美化。
```python
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 报告，并提供下载。
```python
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side

The rest: https://github.com/OpenSenseNova/SenseNova-Skills/blob/HEAD/skills/sn-da-excel-workflow/capability/excel-data-analysis/group-by-analysis/SKILL.md
