关于 exploratory-data-analysis
面向科学数据分析者的探索性数据分析技能,指导识别多类科学文件、评估数据质量并生成结构化报告。涵盖从表格到组学数据的格式与领域特定检查。
主要功能
- 01识别科学文件格式与类别
- 02评估完整性、有效性和一致性
- 03执行统计与领域特定分析
- 04生成结构化 Markdown 报告
- 05提供常见格式参考
适用场景
- 01检查新收到的数据文件及其质量
- 02分析大型数据集前抽样评估
- 03为下游分析制定预处理建议
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jaechang-hits/ sciagent-skills --skill exploratory-data-analysis安装后在 Claude Code 中输入/exploratory-data-analysis确认已加载。
附带文件references/file_format_reference.md
详细介绍
科学数据探索性数据分析
概述
探索性数据分析(EDA)是指在正式分析之前,系统地检查科学数据文件,以了解其结构、内容、质量和特征。本指南介绍了检测文件类型、选择适当的分析方法、评估数据质量,以及针对所有主要科学数据领域生成全面报告的方法。
核心概念
科学数据类型类别
| 类别 | 常见格式 | 典型分析 | 主要库 |
|---|---|---|---|
| 表格数据 | CSV、TSV、XLSX、Parquet | 汇总统计、分布、相关性、缺失值 | pandas、polars |
| 序列数据 | FASTA、FASTQ、SAM/BAM | 长度分布、质量分数、GC 含量、比对统计 | BioPython、pysam |
| 图像/显微镜数据 | TIFF、ND2、CZI、DICOM | 维度(XYZCT)、强度统计、元数据、校准 | tifffile、aicsimageio、nd2reader |
| 光谱数据 | mzML、SPC、JCAMP、FID | 峰检测、基线、S/N 比、分辨率 | pymzml、nmrglue、pyteomics |
| 结构数据 | PDB、CIF、MOL、SDF | 原子计数、键验证、B 因子、完整性 | BioPython、RDKit、MDAnalysis |
| 数组/张量数据 | NPY、HDF5、Zarr、NetCDF | 形状、数据类型、取值范围、NaN/Inf 检查、分块结构 | numpy、h5py、zarr、xarray |
| 组学数据 | H5AD、MTX、VCF、BED | 特征/样本计数、稀疏度、注释完整性 | scanpy、pyranges、cyvcf2 |
格式检测策略
- 基于扩展名:将文件扩展名映射到类别(主要方法)
- 魔数:检查文件头以识别二进制格式(HDF5:
\x89HDF,GZIP:\x1f\x8b) - 内容探查:对于有歧义的扩展名(.txt、.dat、.csv),检查前几行中的分隔符、表头或格式标记
- 复合扩展名:通过从最右侧扩展名向内检查,处理
.ome.tiff、.nii.gz、.tar.gz
数据质量维度
- 完整性:缺失值、空字段、截断的记录
- 一致性:维度匹配、数据类型兼容、跨字段验证
- 有效性:值处于预期范围内、编码正确、符合格式规范
- 溯源信息:仪器元数据、软件版本、处理历史
- 唯一性:重复记录、冗余特征
决策框架
Data file received
├── What is the file type?
│ ├── Known extension → Look up in format reference
│ ├── Unknown extension → Magic bytes / content sniffing
│ └── Directory (e.g., .d, .zarr) → Check internal structure
│
├── What category does it belong to?
│ ├── Tabular → Summary stats, distributions, correlations
│ ├── Sequence → Length/quality distributions, composition
│ ├── Image → Dimensions, channels, intensity, metadata
│ ├── Spectral → Peaks, baseline, resolution, S/N
│ ├── Structural → Atom/bond validation, geometry checks
│ ├── Array → Shape, dtype, value range, sparsity
│ └── Omics → Feature counts, sample QC, annotation check
│
├── How large is the file?
│ ├── Small (<100 MB) → Load fully, comprehensive analysis
│ ├── Medium (100 MB–1 GB) → Sample or lazy evaluation
│ └── Large (>1 GB) → Stream/chunk, representative sampling
│
└── What is the analysis goal?
├── Pre-pipeline QC → Focus on completeness, format compliance
├── Data understanding → Statistics, distributions, patterns
├── Troubleshooting → Compare against expected format/values
└── Documentation → Full report with recommendations
快速参考:按数据类型选择分析方法
| 数据类型 | 首要检查项 | 核心分析 | 可视化 |
|---|---|---|---|
| 表格数据 | 数据类型、形状、空值 | describe()、相关性、离群值 | 直方图、散点图、热图 |
| 序列数据 | 记录数、格式 | 长度分布、质量、组成 | 质量图、长度直方图 |
| 图像数据 | 维度、位深 | 强度统计、通道信息 | 缩略图、直方图 |
| 光谱数据 | 扫描数、m/z 范围 | 峰检测、TIC、基线 | 光谱图、TIC 色谱图 |
| 结构数据 | 原子/残基计数 | B 因子、缺失残基 | Ramachandran 图、接触图 |
| 数组数据 | 形状、数据类型 | 统计信息、NaN 检查 | 切片可视化 |
| 组学数据 | 基因 × 细胞矩阵 | 稀疏度、QC 指标 | 小提琴图、PCA |
最佳实践
- 始终先检查文件完整性 — 在深入分析前,确认文件完整(未被截断)且可读。根据预期检查文件大小
- 先抽样再全面分析大型文件 — 对于包含数百万条记录的文件,先分析有代表性的样本(前 N 条记录、随机样本或分层样本),以便快速获取反馈
- 尽可能使用惰性/流式读取器 —
pl.scan_parquet()、h5py数据集切片和pysam索引访问可避免内存溢出 - 验证元数据与数据是否一致 — 交叉核对声明的维度与实际数据,确认列数与表头一致,并检查时间戳是否单调递增
- 以量化方式报告数据质量 — “X 列有 5.2% 的值缺失”比“有些值缺失”更有用。请包含完整率、异常值数量和格式合规评分
- 考虑数据来源 — 记录仪器类型、软件版本、处理步骤以及已应用的任何预处理。这些背景会影响后续分析方案的选择
- 提出可执行的建议 — 不要只描述数据;还要建议具体的预处理步骤(归一化方法、插补策略)、适当的分析方法,以及需要留意的潜在问题
- 确保分析可复现 — 在报告中包含库版本、参数选择和随机种子,以便复现探索性数据分析(EDA)
- 尽早检查批次效应 — 对于多样本数据集,在合并之前比较不同批次、板或运行的数据分布
- 谨慎处理厂商专有格式 — 许多仪器会生成专有格式(.nd2、.czi、.raw)。请记录所用读取器库及其版本,因为不同格式的支持情况各异
常见陷阱
-
认为 CSV 就是干净的表格数据 — CSV 文件可能使用不一致的分隔符、混杂编码、包含嵌入的换行符,或引号格式错误。避免方法:使用
pd.read_csv(engine='python')提高稳健性;使用chardet检查编码 -
忽略缺失值的表示方式 — 科学数据使用多种空值表示形式:
NA、NaN、-999、空字符串、#N/A、.。避免方法:指定na_values参数;检查数值列中的哨兵值 -
根据被截断的文件得出结论 — 大型文件传输可能会悄无声息地失败。避免方法:检查文件大小,将记录数与预期值核对,并检查 EOF 标记
-
对文件使用错误的读取器 — 有些扩展名含义不明确(.raw 可能指 Thermo MS、XRD 或图像;.d 可能指 Agilent 目录或通用数据)。避免方法:结合魔数和上下文(来源仪器)进行区分
-
大型数据集导致内存溢出 — 将 10 GB 的 CSV 加载到 pandas DataFrame 中会失败。避免方法:先检查文件大小;对于大于 100 MB 的文件,使用分块读取、惰性求值或抽样
-
忽略坐标系和单位 — 显微镜数据可能使用像素或微米;光谱数据可能使用波长、波数或能量。避免方法:从元数据中提取并报告单位;核实校准信息
-
将所有列视为相互独立 — 科学表格数据通常具有层级结构(重复样本嵌套在不同条件中)。避免方法:计算相关性之前,根据列名和元数据识别实验设计
-
跳过特定格式的质量指标 — 通用统计数据无法发现领域特有的问题(例如 FASTQ 中的 Phred 质量分数、晶体学中的 R 因子、MS 中的质量准确度)。避免方法:查阅格式参考资料,了解领域特定的 QC 指标
-
过度解读小样本 — 对前 1000 行进行 EDA,可能无法代表完整数据集的分布。避免方法:从文件的多个位置抽样;报告样本量和抽样方法
-
不检查重复项 — 合并数据集和数据库导出中常见重复记录。避免方法:尽早检查完全重复项和近似重复项;报告重复率
工作流
步骤 1:识别文件
- 提取文件扩展名(处理复合扩展名:
.ome.tiff、.nii.gz) - 在参考目录中查找格式
- 如果格式未知:检查魔数、查看前几行,并询问用户来源仪器
- 记录:格式名称、类别、典型内容、推荐的库
步骤 2:初步评估
- 文件大小、创建日期、权限
- 对于二进制格式:验证文件完整性(检查文件头和文件尾)
- 对于文本格式:检测编码、分隔符和换行符
- 对于目录:列出内容并检查预期结构
步骤 3:加载数据
- 如果缺少所需的库,则安装(提供
pip install命令) - 使用合适的读取器,并显式指定参数(dtype、编码、列)
- 对于大型文件:先加载元数据,再抽样数据
- 记录:维度(行数 × 列数,或 X×Y×Z×C×T)、数据类型、内存占用
步骤 4:质量评估
- 完整性:统计每列/字段中的空值,检查是否截断
- 有效性:检查范围、验证数据类型、检查格式合规性
- 一致性:进行跨字段验证,检测重复项
- 领域特定:Phred 分数(FASTQ)、B 因子(PDB)、质量准确度(MS)、强度范围(显微镜)
步骤 5:统计分析
- 汇总统计量(均值、中位数、标准差、最小值、最大值、四分位数)
- 分布特征(偏度、众数、异常值)
- 相关结构(适用于多变量数据)
- 领域特定指标(GC 含量、覆盖度、分辨率、S/N 比)
第 6 步:生成报告
生成结构化的 Markdown 报告,包含:
- 标题:文件名、时间戳、文件大小
- 格式信息:类型、说明、典型用例
- 数据结构:维度、数据类型、内存占用
- 质量评估:完整性评分、有效性检查、发现的问题
- 统计摘要:关键指标和分布
- 关键发现:值得注意的模式、潜在问题、异常
- 建议:预处理步骤、适当的分析方法、推荐使用的工具
保存为 {original_filename}_eda_report.md。
捆绑资源
references/file_format_reference.md— 涵盖全部 6 个类别(生物信息学、化学、显微成像、光谱学、蛋白质组学/代谢组学、通用)的最常见科学文件格式速查目录,包含每种格式的扩展名、说明、Python 库和关键 EDA 方法
未从原项目迁移:6 个按类别划分的格式目录文件(共 3,616 行)包含 200 多种格式的详细条目。捆绑的参考资料整合了约 50 种最常见的格式。对于罕见或供应商专有的格式,请查阅官方库文档。
延伸阅读
- McKinney, W. (2017). Python for Data Analysis(第 2 版)——基于 pandas 的 EDA 方法
- VanderPlas, J. (2016). Python Data Science Handbook ——使用 matplotlib 和 scikit-learn 进行 EDA
- Tukey, J. (1977). Exploratory Data Analysis ——EDA 的奠基性理念
- Bio-Formats 文档:https://www.openmicroscopy.org/bio-formats/ ——显微成像格式参考
- PSI 标准格式:https://www.psidev.info/ ——蛋白质组学/MS 数据标准
相关技能
- matplotlib-scientific-plotting ——用于 EDA 报告的可视化
- polars-dataframes ——高效的表格数据加载与分析
- scanpy-scrna-seq ——单细胞组学 EDA 工作流
- zarr-python ——大型数据集的分块数组数据访问
- pysam-genomic-files ——对 BAM/CRAM/VCF 文件进行索引访问