☰
SenseNova-Skills Excel 数据分析编排器:从多 Sheet 读取到报告导出的全流程实战指南
2026/10/12 3:07:58 网站建设 项目流程
  • AI 技能
  • 人工智能
  • 深度研究
  • 数据分析
  • 媒体生成

【免费下载链接】SenseNova-Skills

Modular SenseNova skills for building AI-powered office assistants and productivity workflows

项目地址:https://gitcode.com/gh_mirrors/se/SenseNova-Skills
点击查看免费下载

导读

本文围绕开源仓库 SenseNova-Skills 中的sn-da-excel-workflow技能展开,它是一个面向 AI Agent 的 Excel 数据分析多步编排器,将「读取 → 大文件检测 → 数据清洗 → 条件筛选 → 跨 Sheet 聚合 → 导出报告」的完整链路拆解为 6 个可编排步骤,每一步都映射到独立的 capability 子技能。读完本文,你将掌握如何按行数阈值(10k / 100k)动态选择读取策略、如何用 openpyxl 流式读取避免内存溢出、如何用 Parquet 缓存加速重复分析,以及如何通过read_file按需加载子技能模板,在 Agent 环境中稳定地完成从原始 Excel 到带样式、带图表的可下载报告的全流程任务。

一、技能定位:何时触发,何时不触发

sn-da-excel-workflow在仓库中的定位是Excel Analysis Orchestration(Excel 分析编排),详见 README.md 与技能自身的description元数据(skills/sn-da-excel-workflow/SKILL.md)。它的触发条件非常明确,Agent 遇到以下任一情况就应主动加载本技能,而不是自行写几行 pandas 应付了事:

  • 用户出现触发词:Excel 分析 / 表格分析 / 数据分析 / 数据清洗 / 数据统计 / 数据筛选 / 数据可视化 / 数据导出 / 汇总统计 / 透视表 / 分组统计 / 交叉分析 / 趋势分析 / 对比分析 / 异常值检测 / 去重 / 缺失值处理 / Excel 报告 / 生成报表,以及英文关键词 analyze Excel / data analysis / data cleaning / pivot table;
  • 用户上传或指定了.xlsx/.xls/.csv文件并要求分析、清洗、统计或可视化;
  • 任务涉及多 Sheet 读取、条件筛选、分类汇总、图表生成中的任意一项;
  • 用户要求导出带格式的 Excel 报告或下载链接。

同时它明确划定了不适用场景:不涉及表格数据的纯文本处理、图片分析(应交给sn-da-image-caption)、单个公式计算的简单问答。这种「触发词 + 文件类型 + 任务类型」的三重判定,是 Agent Skills 规范中"clear triggers"的典型实践(仓库 README 的 Contributing 一节也强调了这一点)。

二、工作流总览:6 步编排,能力逐步下沉

整个工作流以主文档 skills/sn-da-excel-workflow/SKILL.md 为导航骨架,每一步在需要详细代码模式时,通过read_file按需加载对应子技能。6 个步骤为:

步骤目标对应 capability 类别
Step 1跨 Sheet 统计行数(轻量、不整表加载)excel-reading/multi-sheet-reading
Step 2大文件闸门:按行数选择读取策略excel-reading/large-excel-reading
Step 3检查 Schema 与数据类型excel-reading/range-reading
Step 4数据清洗(缺失值、文本标准化、无效字符)excel-data-cleaning/*
Step 5条件筛选与分类提取excel-data-filtering/*
Step 6导出 Excel/CSV 并提供下载链接excel-result-export/*

下面逐步骤展开,完整继承主文档的代码与参数,并深入各子技能与底层源码验证实现细节。

Step 1:跨 Sheet 统计行数(轻量,不整表加载)

第一步永远是用openpyxlread_only模式逐 Sheet 统计行数,绝不能用pd.read_excel()来数行——后者会把全部数据载入内存,在大文件上会直接 OOM。

import openpyxl, gc wb = openpyxl.load_workbook(file_path, read_only=True, data_only=True) total_rows = 0 sheet_info = {} for name in wb.sheetnames: ws = wb[name] row_count = sum(1 for _ in ws.iter_rows(min_row=2, values_only=True)) total_rows += row_count sheet_info[name] = row_count print(f"Sheet '{name}': {row_count} rows") wb.close() print(f"总行数={total_rows}")

关键点说明:

  • read_only=True让 openpyxl 以流式方式读取工作簿,不把整个 XML 解析进内存;
  • data_only=True返回单元格的缓存值(公式计算结果);
  • min_row=2跳过表头行,统计的是纯数据行;
  • 循环结束后必须wb.close()释放句柄。

该步对应的子技能excel-reading/multi-sheet-reading提供了另一种等价的统计实现(skills/sn-da-excel-workflow/capability/excel-reading/multi-sheet-reading/SKILL.md),即用ws.max_row直接取行数后减 1,但主文档强调的iter_rows流式计数方式对任意文件大小都安全,是最稳妥的轻量方案。若需要同时探查列名与行数,可参考上层大文件技能中的inspect_excel()函数(见下文第六节)。

Step 2:大文件闸门(关键——按行数选择策略)

统计出total_rows后,按以下决策表选择后续所有操作的读取策略:

total_rows策略具体做法
< 10k直接读取df = pd.read_excel(file_path, sheet_name=target_sheet)
10k – 100kParquet 缓存pd.read_excel()读一次 →df.to_parquet()→ 之后所有读取都走 Parquet
>= 100k停止,加载sn-da-large-file-analysis技能先读其 SKILL.md,再按它的流式读取 + Parquet 模式处理,全程不得使用pd.read_excel()——在 10 万行以上会 OOM 或超时

对于 >= 100k 行的文件,主文档明确要求先执行:

read_file(path="<skills_base>/sn-da-large-file-analysis/SKILL.md")

然后使用该技能中的stream_excel_to_parquet()函数——它通过 openpyxliter_rows以 50k 行一个 chunk 流式写入 Parquet,内存占用恒定(详见第六节源码剖析)。

对于 10k – 100k 行(仅此区间),使用 Parquet 缓存模式:

import pandas as pd parquet_path = "/tmp/_auto_parquet.parquet" df = pd.read_excel(file_path, sheet_name=target_sheet) df.to_parquet(parquet_path, engine="pyarrow") del df; gc.collect() df = pd.read_parquet(parquet_path)

这段代码的精髓在于:pd.read_excel()只在首次转换时调用一次,转换成功后立即del df; gc.collect()释放内存,后续所有分析都从列式存储、带压缩的 Parquet 读取,速度与内存都大幅优于反复读 xlsx。del df; gc.collect()这一内存释放习惯,在 skills/sn-da-large-file-analysis/SKILL.md 的 Best Practices 中被列为第 3 条强制项。

子技能excel-reading/large-excel-reading(skills/sn-da-excel-workflow/capability/excel-reading/large-excel-reading/SKILL.md)完整演示了这一流程:先统计总行数,超过 1 万行即转 Parquet,随后用 openpyxl 生成带条件高亮和自定义样式的格式化 Excel 报告,并在末尾以sandbox:{output_path}格式输出下载链接。

Step 3:检查 Schema 与数据类型

在正式分析前,先预览目标 Sheet 的结构。对大文件(>= 10k 行)只读少量样本,绝不为检查而全量加载:

# For any file size — read only first N rows for inspection df_head = pd.read_excel(file_path, sheet_name=target_sheet, nrows=20) print(f"Columns: {df_head.columns.tolist()}") print(f"Dtypes:\n{df_head.dtypes}") print(df_head.head(10))

nrows=20只拉取前 20 行,既能看到列名、dtype 与样例数据,又不会造成内存压力。如果文件已经走完 Step 2 转成了 Parquet,也可以直接pd.read_parquet(parquet_path)后取head()。对应子技能为excel-reading/range-reading(特定区域数据提取,根据数据量动态选择处理策略)。

Step 4:数据清洗

清洗阶段处理三类典型问题:缺失值、文本标准化、无效字符。主文档给出最小可用的清洗骨架:

# Missing values null_count = df[col].isna().sum() # Text cleaning: keep only Chinese characters import re def clean_text(val): if pd.isna(val): return val return "".join(re.findall(r"[\u4e00-\u9fff]", str(val))) or "" df[col] = df[col].apply(clean_text)

⚠️大文件规则:当total_rows >= 100k时,不得使用df.apply(lambda...),应改用向量化操作或np.where(),具体可查sn-da-large-file-analysis技能的向量化速查表(见第六节)。

在子技能层面,清洗能力被细分为 6 个方向,各有更完整的实现:

  • excel-data-cleaning/missing-value-handling(SKILL.md):深度清洗包含合并单元格 ffill 填充、正则去除数字前缀(re.sub(r'^\d+[\.\s\-]+', '', text))、仅保留中英文字符(re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9]', '', text))、RGB 三通道数值化与黑色像素筛选,最后做跨 Sheet 合计核对与pd.crosstab交叉占比分析;
  • excel-data-cleaning/text-normalization(SKILL.md):对含前缀符号(.,I,■,一,_等)的数值字段逐个剥离前缀并转int,转换失败返回np.nan;对文本列仅保留 Unicode 中文字符区间[\u4e00-\u9fff],结果以新列{原列名}_清洗后追加;
  • excel-data-cleaning/invalid-data-cleaning:正则清洗指定文本列,大文件自动 Parquet 加速;
  • excel-data-cleaning/numeric-format-normalization(SKILL.md):pd.to_numeric(col, errors='coerce')强制数值化,随后把计算合计与汇总 Sheet 中的"合 计"行做一致性核对(用abs(total - expected) < 1e-6处理浮点精度),结果同时导出 xlsx 与 utf-8-sig 编码的 CSV;
  • excel-data-cleaning/duplicate-removal(SKILL.md):基于关键词逐行提取记录、用set()高效去重,输出"唯一项总数"摘要与详细清单两个文件;
  • excel-data-cleaning/outlier-detection(SKILL.md):IQR 方法(Q1 - 1.5*IQR/Q3 + 1.5*IQR)识别异常值,配合偏度/峰度判定分布形态(右偏/左偏/对称、尖峰/平峰/正态趋向),并给出盖帽法clip()或删除法的处理骨架。

Step 5:条件筛选与分类提取

对清洗后的数据应用条件筛选或分类筛选,再进行聚合:

# Condition filter mask = df[col].astype(str).str.strip() == target_value filtered = df[mask] # Category extraction (for headerless layouts) df_raw = pd.read_excel(file_path, sheet_name=sheet, header=None) # Walk rows to find category markers, collect items until next marker

两种典型场景:

  1. 条件筛选:先把目标列转字符串并strip()去除首尾空格,再做精确等值匹配,避免空格导致的匹配失败;
  2. 无表头布局的分类提取:header=None读取后用位置索引逐行扫描,遇到分类标记行就开启一个新分组,收集直到下一个标记出现——这类"表头不标准"的场景正是excel-data-filtering/category-filtering的处理对象。

子技能层面对筛选能力的拆解(skills/sn-da-excel-workflow/capability/excel-data-filtering/):

  • condition-filtering(SKILL.md):多维度清洗与筛选组合拳——同义列名自动识别、RGB 通道过滤、字符串前缀筛选(str.startswith('TXL3'))、pd.to_numeric(errors='coerce')处理脏数据、正则匹配提取(str.contains(r'--pct-')),最后用 openpyxlPatternFill对整行标红后导出;
  • category-filtering(SKILL.md):自定义分类映射 + value_counts 分布统计 + 交叉分析堆叠柱状图,还包含文本内容的多维度评分分级算法(长度 × 30% + 术语密度 × 20% + 是否含数值 × 15% + 复杂概念 × 35%);
  • range-filtering:多维数值条件筛选并导出,支持大规模数据自动性能优化;
  • threshold-filtering(SKILL.md):pd.to_numeric清洗数值列 →dropna剔除无效行 → 阈值比较筛选(如df[col] > 10)→ openpyxl 对命中单元格做样式标记。

Step 6:导出结果

将筛选/清洗后的数据保存为 Excel 或 CSV,并提供下载链接:

output_path = "/mnt/data/result.xlsx" result_df.to_excel(output_path, index=False) print(f"Download")

导出层在子技能中细分为 4 个方向(skills/sn-da-excel-workflow/capability/excel-result-export/):

  • single-sheet-export(SKILL.md):多 Sheet 数据探查 → 条件过滤 → 字段重命名映射(rename_mapping字典)→ 统计各分类数量与占比 → 追加"总计"行 → 导出带下载链接的 Excel;
  • formatted-export(SKILL.md):跨 Sheet 模糊匹配目标列,筛选空值与无效字符(nan/纯空格)记录,导出后对整行标红(PatternFill红色填充);
  • chart-embedded-export:分类分布清洗统计 + 多维交叉分析 + 高分辨率嵌入式图表报告;
  • report-generation-export(SKILL.md):从 Excel 提取多类型数据,分类映射 + 占比/总计行 + 交叉分析 crosstab + 超限值反向搜索(在"限值"行附近正则提取数值做超限判定与严重度分级)+ 饼图报告与sandbox:下载链接。

三、关键规则:Agent 必须遵守的硬性约束

主文档以 Key rules 一节总结了整个工作流的不可违背原则,整理如下:

  1. 永远先数行数——以 10k 阈值为大文件逻辑的分界;
  2. >= 100k 行必须加载sn-da-large-file-analysis技能——不得用pd.read_excel()硬扛;
  3. 列名可能包含空格(如'是否通 过')——必须用精确字符串索引,不能假设列名无空格;
  4. 无表头 Sheet——用header=None+ 位置索引;
  5. 大文件(>= 100k 行)禁用清单:
    • pd.read_excel()全量加载(应改为流式读取 → Parquet);
    • df.apply(lambda...)或df.iterrows()(应改为向量化操作或itertuples());
    • fc-list、find ... fonts、subprocess搜字体、pip install(应使用下文固定的字体路径);
    • 打印全部唯一值或完整 DataFrame(应使用.head()、.value_counts().head())。

这些禁令并非教条:pd.read_excel()全量加载在 10 万行以上必然 OOM 或超时;df.apply(lambda)逐行调用 Python 函数比向量化慢 10~100 倍;动态搜字体和装包会拖垮整个会话,且环境未必允许联网安装。以禁止df.iterrows()为例,skills/sn-da-large-file-analysis/SKILL.md 的向量化速查表给出了完整替代:df['col'] * 2替代apply(lambda x: x*2),df.itertuples(index=False)替代df.iterrows(),np.where(df['a']>0,'Y','N')替代map(lambda),df.groupby('a').agg(...)替代groupby.apply(custom_func)。

四、CJK 字体配置(图表生成强制项)

用 matplotlib 生成图表时,必须原样复制下面这段字体配置,禁止用fc-list、find、subprocess或glob去搜索字体——固定路径逐个探测,命中即用:

import os import matplotlib import matplotlib.pyplot as plt import matplotlib.font_manager as fm _FONT_PATHS = [ '/mnt/afs_agents/SimHei.ttf', '/mnt/afs_agents/mnt/data/SimHei.ttf', os.path.expanduser('~/.fonts/SimHei.ttf'), '/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc', '/usr/share/fonts/SimHei.ttf', ] for _p in _FONT_PATHS: if os.path.exists(_p): fm.fontManager.addfont(_p) matplotlib.rcParams['font.family'] = fm.FontProperties(fname=_p).get_name() break matplotlib.rcParams['axes.unicode_minus'] = False

这段代码同时覆盖了 5 个可能的字体安装位置(SimHei 与文泉驿正黑),一旦命中就将其注册进 matplotlib 字体管理器并设为全局族名;axes.unicode_minus = False解决负号显示为方块的问题。整个仓库的可视化子技能(柱状图、饼图、折线图、散点图、堆叠图、箱线图、热力图)无一例外都以plt.rcParams['font.sans-serif'] = ['SimHei', ...]开头,例如 skills/sn-da-excel-workflow/capability/excel-data-visualization/pie-chart-visualization/SKILL.md 中的['SimHei', 'DejaVu Sans']、category-statistics 中的['SimHei', 'WenQuanYi Zen Hei', 'Noto Sans CJK JP', 'DejaVu Sans'],读者可以按实际环境选择更宽的回退链。

五、如何加载子技能(按需加载,节省上下文)

主文档的定位是"顶层工作流导航图",子技能才提供每一步的详细实现模板。加载规则如下:

read_file(path="<base_path>/<category>/<sub-skill-name>/SKILL.md")

三条硬性规则:

  • 只加载当前步骤需要的子技能;
  • 不要一次性加载全部子技能——浪费上下文窗口;
  • 顶层工作流(本文档)是导航,子技能是实现细节。

子技能的基准路径为:<skills_root>/sn-da-excel-workflow/capability/{category}/{sub-skill}/SKILL.md。目前仓库共收录 9 大类 35 个子技能,各分类与其功能对应如下(完整清单见 skills/sn-da-excel-workflow/capability/):

excel-reading — 读取与解析(7 个)

  • single-sheet-reading:读取单个工作表,支持合并单元格处理、交叉分析及多维度可视化
  • multi-sheet-reading:读取多工作表,动态评估数据量启用 Parquet 优化,支持正则清洗、分类汇总与线性拟合
  • range-reading:特定区域数据提取,根据数据量动态选择处理策略
  • large-excel-reading:大型 Excel 文件处理,支持 Parquet 转换提速,生成带条件高亮的格式化报告
  • multi-file-reading:多文件读取与统计,支持大文件 Parquet 转换与可视化报告
  • specific-sheet-reading:跨 Sheet 特定字段统计、数据清洗与交叉分析,生成带下载链接的汇总报告
  • structured-header-reading:动态识别目标列进行统计,正则清洗文本字段提取中文字符

excel-data-cleaning — 数据清洗(6 个)

  • missing-value-handling:多 Sheet 智能清洗、跨表核对与可视化分析
  • duplicate-removal:多 Sheet 去重统计,生成摘要与明细报表
  • invalid-data-cleaning:正则清洗指定文本列(如保留中文字符),大文件自动 Parquet 加速
  • text-normalization:文本标准化清洗(去除异常前缀、提取纯中文字符等)
  • numeric-format-normalization:数值格式标准化,支持关键指标合计核对与结果文件导出
  • outlier-detection:IQR 异常值检测,结合偏度/峰度分析数据分布,适用于非正态数据预处理

excel-data-filtering — 数据筛选(4 个)

  • condition-filtering:根据数据规模动态选择处理策略进行条件筛选
  • category-filtering:自定义分类统计、交叉分析,支持文本长度/术语密度/正则匹配等综合评分与分级
  • range-filtering:根据多维数值条件筛选并导出,支持大规模数据自动性能优化
  • threshold-filtering:数值列清洗、条件过滤,使用 openpyxl 对符合条件的单元格进行样式标记

excel-data-analysis — 数据分析(6 个)

  • comparison-analysis:两类分类数据对比分析,统计数量差异与比例关系并生成可视化
  • group-by-analysis:多 Sheet 数据清洗及分组聚合分析,生成带样式标记的统计表与图表
  • kpi-metric-analysis:提取关键指标进行单位一致性验证与排序分析
  • pivot-table-analysis:交叉表与热力图进行多维度占比分析,适用于奖项分布/绩效评估/市场占有率
  • time-series-analysis:时间序列趋势分析、百分比清洗、绩效分级建模与预测,生成高分辨率可视化报告
  • trend-analysis:多维度分级评估与趋势预测,差异化增长率计算,适用于绩效评估/目标设定

excel-data-statistics — 统计计算(4 个)

  • basic-statistics:基础统计,支持按条件筛选计算均值,指定行区间提取数据去重求和
  • category-statistics:各类别数量与占比统计,生成柱状图/饼图等组合可视化报告
  • grouped-statistics:多 Sheet 数据合并与前向填充,分组统计
  • percentage-calculation:逐行扫描或列匹配提取关键指标并计算占比/均值,输出结构化报告及图表

excel-data-visualization — 数据可视化(6 个)

  • bar-chart-visualization:处理合并单元格,交叉分组统计,生成支持中英文字体的美化柱状图
  • histogram-visualization:数值型分布分析与异常值检测,支持正则提取误差项,生成箱线图与直方图
  • line-chart-visualization:特征清洗与聚类分析,生成趋势对比/分布特征/参数敏感性多维度图表
  • pie-chart-visualization:分类汇总统计,自动识别关键字段生成包含占比/数值的美化饼图
  • scatter-plot-visualization:多维度统计分析与散点图可视化
  • stacked-chart-visualization:百分比字符串数据处理,补全缺失维度,生成堆叠柱状图展示构成变化趋势

excel-cell-coloring — 单元格着色(5 个)

  • category-coloring:提取目标指标计算最大值,对特定行进行高亮标注
  • duplicate-value-coloring:对比多表中的特定系数并对异常值进行颜色标记
  • outlier-coloring:识别超限数值与错误单元格并进行高亮标注
  • threshold-cell-coloring:计算时间序列平均值,使用 openpyxl 输出带条件格式(如低于均值标绿)的报告
  • top-value-coloring:根据数据规模动态选择策略,多表合并、统计筛选,关键指标自动化样式高亮

excel-conditional-formatting — 条件格式(1 个)

  • data-bar-formatting:从带单位字符串列提取数值并清洗,生成直方图/饼图/条形图/累积分布图

excel-result-export — 结果导出(4 个)

  • single-sheet-export:多 Sheet 数据探查与条件过滤导出,重命名字段后生成带下载链接的 Excel
  • formatted-export:条件筛选记录并以整行标红格式导出 Excel
  • chart-embedded-export:分类分布清洗与统计,生成多维度交叉分析与高分辨率嵌入式图表报告
  • report-generation-export:从 Excel 提取多类型数据,生成包含可视化图表与下载链接的综合分析报告

excel-table-styling — 表格样式(1 个)

  • table-theme-styling:大文件 Parquet 加速读取,条件筛选/分类汇总与结果导出

六、源码级支撑:与 sn-da-large-file-analysis 的分工与底层实现

sn-da-excel-workflow的 Step 2 明确约定:>= 100k 行必须转交 skills/sn-da-large-file-analysis/SKILL.md。这个上游技能为编排器提供了几个可复用的核心函数,理解其实现能帮助你把握整个工作流在大数据量下的性能边界:

1.inspect_excel()— 不加载数据探查结构。它同样以openpyxl.load_workbook(read_only=True, data_only=True)打开文件,iter_rows(values_only=True)首行作为表头(空值自动命名Col_{j}),其余行计数,返回{sheet_name: {rows, columns}}。这印证了主文档 Step 1"轻量计数"的设计原则。

2.stream_excel_to_parquet()— 10 万行以上的安全通道。函数以chunk_size=50000为界,每攒满一个 chunk 就用 PyArrow 构建全字符串类型的表(避免混合类型列在某 chunk 全为 None 时导致 schema 推断漂移),通过pq.ParquetWriter追加写入,每批写入后gc.collect()回收内存。这就是主文档 Step 2 表格中"openpyxl iter_rows 50k-row chunks with constant memory"的完整实现。

3.convert_excel_to_parquet()— 10k–100k 行的缓存模式。先检查目标 Parquet 是否已存在(存在则直接复用,不做重复转换),否则pd.read_excel()读一次、列名统一转字符串、以snappy压缩写出并清理内存。

4.optimize_dtypes()— 内存压榨。对整型按值域自动降级到 int8/int16/int32,浮点统一转 float32,低基数字符串列(nunique/len < 0.5)转 category,通常可节省 50%–80% 内存。

5.write_large_excel()— 大结果写出策略。超过 100 万行自动转 CSV(Excel 单 Sheet 上限 1,048,576 行);单元格总数超过 5 万用openpyxl Workbook(write_only=True)逐行追加;否则走常规df.to_excel()。

6. 内存估算公式:估算 MB ≈ 行 × 列 × 8 / 1024²(纯数值列),含文本列按 ×50 估算;当估算值超过可用内存 80% 时,应改用pd.read_parquet(columns=[...])按需选列或分块处理。

这套"行数闸门 + 分层读取 + 内存回收"的设计,也直接体现在仓库的端到端示例中:examples/employee-performance-analysis通过sn-da-excel-workflow把 10 份月度绩效 xlsx 对齐列结构合并为一张纵向表,再做月度均线、得分箱线图、38 角色排名等聚合视图;examples/memory-price-end2end-analysis则从报价 CSV 出发完成字段画像、类别与时间戳归一化后再进入深层研究。这两个示例(README.md)可作为本工作流在真实任务中的验收参考。

七、组合使用建议与最佳实践

把主文档的编排思想与仓库内的实现证据结合起来,推荐以下落地顺序:

  1. 先探测,再决策:无论文件多大,都先用 openpyxlread_only数清各 Sheet 行数(Step 1),把total_rows作为后续所有分支的唯一依据;
  2. 按量级选通道:<10k 直接读;10k–100k 一次性转 Parquet 缓存;>=100k 必须切换到sn-da-large-file-analysis的流式通道,全程禁碰pd.read_excel()全量加载;
  3. 清洗用向量化:缺失值、文本标准化、无效字符清理尽量用pd.to_numeric(errors='coerce')、str访问器、np.where等向量化手段,禁止对大数据框apply(lambda)/iterrows();
  4. 可视化先配字体:任何 matplotlib 图表生成前,先原样执行主文档的 CJK 字体块,避免中文乱码与负号方块;
  5. 导出三件套:result_df.to_excel(output_path, index=False)+print(f"Download"),保证结果可追溯、可下载;
  6. 按需加载子技能:当前步骤需要哪个模板就读哪个SKILL.md,一次只读一个,避免上下文浪费。

需要特别说明的是,本技能设计运行在 Agent Skills 兼容的运行时中,仓库 README 建议将其部署到 OpenClaw(~/.openclaw/skills/)或 hermes-agent(~/.hermes/skills/),并配合 SenseNova Platform API 使用(安装全流程见 INSTALL.md)。sandbox:前缀的下载链接约定与/mnt/data、/mnt/afs_agents等路径,均以 Agent 沙箱环境的实际挂载为准,读者在自建环境中应替换为可写目录并保持链接格式一致。

结语

sn-da-excel-workflow的价值在于把"Excel 数据分析"这件看似简单、实则极易踩坑的事,固化成了一条以行数为纲、按量级分流的确定性流水线:轻量计数避免内存灾难,Parquet 缓存换来重复分析的常数级提速,流式读取兜底十万行以上场景,再配合 35 个按需加载的 capability 子技能覆盖清洗、筛选、统计、可视化、着色与导出的每一个细分环节。对任何需要在 Agent 中稳定交付 Excel 分析任务的开发者而言,这套"顶层编排 + 子技能下沉"的架构本身就是一份可直接复用的工程模板。

  • AI 技能
  • 人工智能
  • 深度研究
  • 数据分析
  • 媒体生成

【免费下载链接】SenseNova-Skills

Modular SenseNova skills for building AI-powered office assistants and productivity workflows

项目地址:https://gitcode.com/gh_mirrors/se/SenseNova-Skills
点击查看免费下载

相关推荐

上一篇:解决RevokeMsgPatcher v1.9安装权限问题:3步轻松修复「拒绝访问」错误
下一篇:突破10TB壁垒:ScyllaDB开源与商业版核心差异解析

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询