# Range Reading And Large File 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 range-reading-and-large-file-analysis -g -a claude-code -y`
Codex: `npx skills add OpenSenseNova/SenseNova-Skills --skill range-reading-and-large-file-analysis -g -a codex -y`
Cursor: `npx skills add OpenSenseNova/SenseNova-Skills --skill range-reading-and-large-file-analysis -g -a cursor -y`
Gemini CLI: `npx skills add OpenSenseNova/SenseNova-Skills --skill range-reading-and-large-file-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)

> **Note**: This sub-skill covers one step of the Excel analysis workflow. For the full pipeline (file reading, row counting, large-file optimization, export), see the parent workflow SKILL.md.

Step1 针对特定 Sheet 进行数据清洗与空值统计。支持处理带空格的列名，并计算关键指标的缺失率。
```python
target_sheet = "Sheet2"
target_col = "是否通过"  # 示例列名，实际根据需求替换

# 读取指定 Sheet
df_target = pd.read_excel(file_path, sheet_name=target_sheet)

# 清洗列名：去除首尾空格
df_target.columns = [str(col).strip() for col in df_target.columns]

if target_col in df_target.columns:
    null_count = df_target[target_col].isna().sum()
    print(f"'{target_col}' 列为空的数量: {null_count}")
    
    # 统计占比
    stats = df_target[target_col].value_counts(dropna=False)
    print("分类统计结果：\n", stats)
else:
    print(f"未找到目标列: {target_col}")
```

Step2 大文件优化处理：将 Excel 转换为 Parquet 格式以提升后续读取速度，并提取特定行/列范围的数据进行结构化转换。
```python
import numpy as np

output_dir = "output_results"
os.makedirs(output_dir, exist_ok=True)

if is_large_file:
    # 转换为 Parquet 格式
    parquet_path = os.path.join(output_dir, "temp_data.parquet")
    # 注意：大文件读取建议分块或指定关键列
    df_full = pd.read_excel(file_path)
    df_full.to_parquet(parquet_path, engine='pyarrow', index=False)
    df = pd.read_parquet(parquet_path)
else:
    df = pd.read_excel(file_path)

# 提取特定区域数据（例如：行 40-50，特定两列）
# 模拟从非规范表格中提取数值对
data_rows = []
x_col_idx, y_col_idx = 0, 1 # 假设目标数据在第0列和第1列

for i in range(40, min(50, len(df))):
    row = df.iloc[i]
    try:
        # 清洗字符串并转换为浮点数
        val_x = float(str(row.iloc[x_col_idx]).replace(' ', ''))
        val_y = float(str(row.iloc[y_col_idx]).replace(' ', ''))
        if pd.notna(val_x) and pd.notna(val_y):
            data_rows.append((val_x, val_y))
    except (ValueError, TypeError):
        continue

analysis_df = pd.DataFrame(data_rows, columns=['target_x', 'target_y'])
```

Step3 执行高级统计分析与可视化。包含线性回归拟合、中英文字体配置、高分辨率图表保存及下载链接生成。
```python
import matplotlib.pyplot as plt

The rest: https://github.com/OpenSenseNova/SenseNova-Skills/blob/HEAD/skills/sn-da-excel-workflow/capability/excel-reading/range-reading/SKILL.md
