mcpField
T
tcga-bulk-data-preprocessing-with-omicverse

tcga-bulk-data-preprocessing-with-omicverse

github.com/omicverse数据与数据库1.4k39 次安装2 天前更新
代码仓库

关于 tcga-bulk-data-preprocessing-with-omicverse

这是面向使用 GDC 下载和临床数据的研究者的 OmicVerse TCGA bulk 数据处理 Skill,指导构建 AnnData、初始化元数据及 Kaplan–Meier 生存分析,并注明准确的 API 方法名。

主要功能

  1. 01读取 GDC 表达与临床文件
  2. 02构建含计数及标准化层的 AnnData
  3. 03添加基因与患者元数据
  4. 04运行单基因 Kaplan–Meier 分析
  5. 05筛查生存显著相关基因
  6. 06保存和重新载入 H5AD 结果

适用场景

  1. 01准备 TCGA 表达数据集
  2. 02绘制单个基因的生存曲线
  3. 03重新载入数据并添加生存注释
  4. 04筛查与生存相关的基因

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/omicverse/omicverse --skill tcga-bulk-data-preprocessing-with-omicverse

安装后在 Claude Code 中输入/tcga-bulk-data-preprocessing-with-omicverse确认已加载。

附带文件reference.md

详细介绍

使用 OmicVerse 预处理 TCGA 批量数据

概述

使用此技能从 GDC 下载内容加载 TCGA 数据、构建标准化表达矩阵、附加临床元数据,并通过 ov.bulk.pyTCGA 运行生存分析。

说明

1. 收集所需下载内容

确认用户已从 GDC Data Portal 下载以下三个项目:

  • gdc_sample_sheet.<date>.tsv — 样本表导出文件
  • 已解压的 gdc_download_xxxxx/ 目录,其中包含表达数据压缩包
  • clinical.cart.<date>/ 目录,其中包含临床 XML/JSON 文件
2. 初始化 TCGA 辅助工具
import omicverse as ov
import scanpy as sc
ov.plot_set()

aml_tcga = ov.bulk.pyTCGA(sample_sheet_path, download_dir, clinical_dir)
aml_tcga.adata_init()  # Builds AnnData with raw counts, FPKM, and TPM layers
3. 保存并重新加载
aml_tcga.adata.write_h5ad('data/ov_tcga_raw.h5ad', compression='gzip')

# To reload later:
new_tcga = ov.bulk.pyTCGA(sample_sheet_path, download_dir, clinical_dir)
new_tcga.adata_read('data/ov_tcga_raw.h5ad')
4. 初始化元数据和生存信息
aml_tcga.adata_meta_init()   # Gene ID → symbol mapping, patient info
aml_tcga.survial_init()      # NOTE: "survial" spelling — see Critical API Reference below
5. 运行生存分析
# Single gene
aml_tcga.survival_analysis('MYC', layer='deseq_normalize', plot=True)

# All genes (can take minutes for large gene sets)
aml_tcga.survial_analysis_all()  # NOTE: "survial" spelling
6. 导出结果
aml_tcga.adata.write_h5ad('data/ov_tcga_survival.h5ad', compression='gzip')

关键 API 参考

重要:方法名称拼写不一致

pyTCGA API 中有意保留了拼写不一致。其中两个方法使用了“survial”(漏掉了“v”),另一个方法使用了正确的“survival”:

方法拼写用途
survial_init()survial(没有“v”)初始化生存元数据列
survival_analysis(gene, layer, plot)survival(正确)单基因 Kaplan-Meier 曲线
survial_analysis_all()survial(没有“v”)对所有基因进行生存显著性检验
# CORRECT — use the exact method names as documented
aml_tcga.survial_init()                    # "survial" — no 'v'
aml_tcga.survival_analysis('MYC', layer='deseq_normalize', plot=True)  # "survival" — correct
aml_tcga.survial_analysis_all()            # "survial" — no 'v'

# WRONG — these will raise AttributeError
# aml_tcga.survival_init()                 # AttributeError! Use survial_init()
# aml_tcga.survival_analysis_all()         # AttributeError! Use survial_analysis_all()
生存分析方法

survival_analysis() 执行 Kaplan-Meier 分析:

  1. 使用中位数作为阈值,将患者分为高表达组和低表达组
  2. 计算 log-rank 检验 p 值,以评估显著性
  3. 如果 plot=True,则绘制带置信区间的生存曲线

图层选择很重要:建议使用 layer='deseq_normalize',因为 DESeq2 标准化会校正文库大小和组成偏差,使不同样本间的表达量具有可比性。另一种选择是使用经过 TPM 标准化的值:layer='tpm'。

防御性验证模式

import os

# Before pyTCGA init: verify all paths exist
for name, path in [('sample_sheet', sample_sheet_path),
                    ('downloads', download_dir),
                    ('clinical', clinical_dir)]:
    if not os.path.exists(path):
        raise FileNotFoundError(f"TCGA {name} path not found: {path}")

# After adata_init(): verify expected layers were created
expected_layers = ['counts', 'fpkm', 'tpm']
for layer in expected_layers:
    if layer not in aml_tcga.adata.layers:
        print(f"WARNING: Missing layer '{layer}' — check if TCGA archives are fully extracted")

# Before survival analysis: verify metadata is initialized
if 'survial_init' not in dir(aml_tcga) or aml_tcga.adata.obs.shape[1] < 5:
    print("WARNING: Run adata_meta_init() and survial_init() before survival analysis")

故障排除

  • AttributeError: 'pyTCGA' object has no attribute 'survival_init':使用拼写错误的名称 survial_init()(漏掉“v”)。survial_analysis_all() 也是如此。请参阅上面的关键 API 参考。
  • adata_meta_init() 期间出现 KeyError:表达矩阵中的基因 ID 与预期格式不匹配。TCGA 使用 ENSG ID;该方法会在内部将其映射为基因符号。请确保压缩包来自同一次 GDC 下载。
  • 生存图为空或 p 值为 NaN:临床 XML 文件缺少日期字段(days_to_death、days_to_last_follow_up)。请检查 clinical.cart.* 目录中是否包含完整的 XML 文件,而不只是元数据 JSON 文件。
  • survial_analysis_all() 运行非常缓慢:该方法会逐一检验每个基因。对于包含约 20,000 个基因的基因组,预计需要 5–15 分钟。可以先筛选出感兴趣的基因。
  • 样本表列不匹配:确认 TSV 使用制表符分隔,且表头行符合 GDC 的预期格式。如果列名不同,请从 GDC 重新下载。
  • 缺少 deseq_normalize 图层:该图层会在 adata_meta_init() 期间创建。如果缺失,请重新运行元数据初始化步骤。

示例

  • “读取我的 TCGA OV 下载内容,初始化元数据,并使用 DESeq 标准化计数绘制 MYC 生存曲线。”
  • “重新加载已保存的 AnnData 文件,附加生存注释,并导出更新后的 .h5ad。”
  • “对所有基因运行生存分析,并保存富集后的数据集。”

参考资料

  • 教程笔记本:t_tcga.ipynb
  • 可快速复制粘贴的命令:reference.md

评论

支持 Markdown