信息速览
ARCHS4 是「All RNA-seq and ChIP-seq sample and signature Search」的缩写,由西奈山伊坎医学院 Ma’ayan 实验室维护,2018 年发表于《Nature Communications》。它做的事情一句话就能说完:把 GEO 与 SRA 里人类和小鼠能拿到 FASTQ 的 RNA-seq 实验全部下载下来,用同一套 kallisto 流程重算一遍,再把结果压成几个可以整块下载、也可以按行列切片读取的 HDF5 矩阵。论文发表时是十八万余个样本,今天的基因矩阵已经是人类逾一百零九万、小鼠逾一百二十二万。
它与一般的数据库不同。它不重新组织数据,也不补充注释,只是把散落在成千上万个互不相关的实验里、彼此口径不一的表达量,换算成同一把尺子的读数。因此它最大的价值不在「有多少样本」,而在「这些样本可以放在同一张表里做矩阵运算」,同一批数据在 GEO 上是几万个压缩包,在这里是几个文件。
与之配套的是一套检索层:三维样本空间用于快速看样本聚集、签名相似性检索用于把一份基因列表反查成最相近的实验、基因页给出一个基因在各组织与细胞系里的平均表达与共表达伙伴。下面先给一屏速览,再逐层拆开。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全称 | All RNA-seq and ChIP-seq sample and signature Search |
| 维护方 | 西奈山伊坎医学院 Ma’ayan 实验室 |
| 首发年份 | 2018 年,《Nature Communications》第 9 卷 1366 号 |
| 上游来源 | NCBI GEO 与 SRA,全球研究者自行上传的公共实验 |
| 定量工具 | kallisto,容器化后在云端并行运行 |
| 参考注释 | Ensembl 107;人类 GRCh38、小鼠 GRCm38(官网正文另写 GRCm39) |
| 物种范围 | 人类与小鼠为主,另有约三万五千个秀丽隐杆线虫、果蝇等物种样本 |
| 当前样本量 | 人类基因矩阵逾一百零九万,小鼠逾一百二十二万(下载页口径) |
| 输出层级 | 基因计数、转录本计数、转录本 TPM 三层,另有阵列数据 |
| 文件格式 | HDF5 单一文件,内含表达矩阵与样本元数据两组节点 |
| 单体体量 | 基因矩阵数十 GB 量级,转录本与 TPM 矩阵可达数百 GB |
| 下载方式 | 官网下载页直链,或 archs4py / archs4r 自动下载 |
| 检索工具 | 网页三维样本空间、签名检索、基因页;另有 Chrome 扩展 |
| 使用限制 | 元数据为上传者原样,单细胞样本混入,无 ChIP-seq |
| 许可 | 数据可自由下载;官方未标注统一许可,以原始 GEO 条目许可为界 |
§1 它要解决的具体麻烦
1.1 同一个基因,在不同的文章里有十个不同的数字
公共转录组数据的问题从来不是数量不够。GEO 上累积的 RNA-seq 实验早已超过十万量级,SRA 里躺着的读段更多。问题是这些实验由不同实验室在不同年代、用不同测序仪、不同建库试剂盒、不同比对工具、不同注释版本做出来,同一个基因在 A 文章里叫一个数,在 B 文章里叫另一个数,甚至单位都不是一回事:有的给 RPKM,有的给 FPKM,有的给 TPM,有的只给归一化后的芯片强度。
这种情况下,想做一个跨实验的比较,常规做法是挑几十个看起来最相关的系列,逐个下载、逐个重跑、逐个对齐注释版本,然后才能开始分析。这个前置工程的成本常常超过分析本身。更麻烦的是,重跑一次是几十小时的计算,跑完了发现某个系列质量不行,又得从头来。
ARCHS4 的切入点就在这里。它不解决「数据质量参差」的问题,它解决的是「重复劳动」的问题:在你想比较之前,已经有人把能拿到的东西全部用同一套流程跑完了,你只需要下载,或者干脆在线切片取。代价是所有样本都被强行放进一个平均口径里,原始实验的精细设计信息在这一步被抹平。
1.2 三条常见的错误期待
| 常见期待 | 实际情况 |
|---|---|
| 以为它是一个经过人工整理、标注干净的数据库 | 它不做人工整理,元数据是把 GEO 字段原样搬过来,缺什么就是缺什么 |
| 以为名称里有 ChIP-seq 就附带表观遗传数据 | 只处理 RNA-seq,ChIP-seq 从未出现在产出里 |
| 以为样本越多,能做越细的条件比较 | 样本来自互不相关的实验,除同一系列内部外,条件对照几乎无法成立 |
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 一张能整块载入的基因表达表 | 单个 HDF5 文件,行列可按需切片 | 够,这是它的主场 |
| 某个基因在人体各组织的平均表达 | 基因页给出组织与细胞系的聚合结果 | 够看趋势,不够做定量结论 |
| 一份基因列表最像哪些实验 | 签名相似性检索,返回排序后的样本 | 够做探索,不代替严格统计 |
| 同一系列内部的组间差异 | 同一 GSE 的样本在矩阵里连续存在 | 够,但要用系列内子矩阵 |
| 剪接异构体、外显子、覆盖度 | 只给转录本级计数与 TPM,没有剪接事件与覆盖层 | 不够,需换 recount3 或原始数据处理 |
| 可追溯的处理日志与项目元数据 | 只给版本号与流程说明,不给逐样本日志 | 不够 |
| 完整的临床或表型字段 | 无 | 不够 |
| 原始 FASTQ | 不给,需回 SRA 取 | 不够 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 要训练一个表达谱基础模型,缺大规模语料 | 直接给出一张百万列级别的基因矩阵,列即样本 | 下载基因矩阵,按单细胞概率字段过滤,做分块读取 |
| 手上有一份几十个基因的列表,想知道它在哪些组织或疾病里共同上调 | 签名检索按共表达相似度返回最贴近的样本 | 用返回的 GSE 编号回 GEO 查实验设计,确认生物学解释 |
| 想给自己的新样本找一个参照背景 | 把新样本用同一 kallisto 索引跑一遍,即可放进同一坐标系 | 使用 archs4py 的对齐模块,保持索引版本一致 |
| 写综述需要一份公共表达数据的总览 | 三维样本空间与元数据检索可以快速定位大类 | 引用时写清版本号与下载日期 |
| 要做某个癌种的预后模型 | 矩阵不含临床终点,无法直接建模 | 转向 TCGA 或 CPTAC 一类带随访的资源 |
| 要研究可变剪接 | 只有转录本级汇总,没有剪接定量 | 转向 recount3 的剪接位点文件或自行定量 |
1.5 一句话判断
如果你要的是一张能立刻放进 numpy 或 pandas 里算的、覆盖极广的公共表达表,ARCHS4 是目前最省事的选择之一;如果你要的是能追溯每个数字怎么来的数据,它的诚实程度只到「版本号 + 流程说明」这一层。
1.6 不适合谁:四条边界
第一,不适合把公共数据当作受控实验的人。矩阵里每个样本的 RNA 提取、文库制备、测序深度都由上传者自行决定,这些差异在纳入矩阵时没有做任何校正。任何跨实验的组间比较,都会把批次效应当成生物学信号。
第二,不适合需要临床终点的人。ARCHS4 不携带生存期、分期、疗效一类的随访字段。元数据里能拿到的只是 GEO 上传者填写的样本特征,绝大多数实验根本没有随访。
第三,不适合需要原始读段做新分析的人。它只给汇总后的计数,不给 BAM、不给 FASTA、不给 FASTQ。想换比对工具或做新剪接分析,必须回 SRA 从头取数。
第四,不适合需要审计级溯源的人。想回答「这个样本的计数是用哪个版本的索引、哪一次发布算出来的」,只能靠矩阵文件名里的版本号,逐样本级别的处理记录是不公开的。
§2 数据构成与规格
2.1 四类产物:三层表达加一类阵列
ARCHS4 的下载页把产物分成若干组,组与组之间的定位差别很大,混在一起谈容易出错。
第一组是基因计数矩阵,按基因符号(Entrez Gene Symbol)存放,是使用最广的一层。官方说明里明确,为了压缩,kallisto 的伪计数被四舍五入成整数。这一层的行数是基因符号数,列数是样本数,文件在数十 GB 量级。
第二组是转录本计数矩阵,按 Ensembl 转录本标识存放,同样是四舍五入后的整数。行数比基因层多一个数量级左右,文件体量也随之放大数倍,人类一侧达到一百八十 GB 以上。
第三组是转录本 TPM 矩阵,同样是转录本级,但存放的是每百万转录本数,有效长度取 kallisto 的估计值。TPM 是浮点数,压缩效率低,因此人类一侧的 TPM 矩阵达到三百六十 GB 以上,是全部产物里最大的单个文件。
第四组是Affymetrix 阵列数据,与前三层性质完全不同。它收录的是芯片平台(GPL570、GPL96、GPL571、GPL6244 等)上已有的表达值,原样取自 GEO,为了压缩存成十六位浮点。官方称这一集合含二十六万余人类样本与八万余小鼠样本。它不是 kallisto 的产物,不能与 RNA-seq 矩阵直接混合运算。
此外还有一些派生件:样本与基因的三维坐标(t-SNE 结果)、基因间两两相关矩阵(pickle 与 feather 两种格式)、由相关矩阵做功能预测的 PrismExp 输出、以及两套 kallisto 索引文件本身。
2.2 字段与节点的完整字典
HDF5 文件的结构是「组 + 数据集」的两级组织。下表汇总了官方客户端文档中出现的路径与用途。
| 路径 / 字段 | 类型 | 含义 | 可否用于筛选 |
|---|---|---|---|
data/expression |
二维数值矩阵 | 表达矩阵主体,行基因、列样本 | 否,这是载荷 |
meta/genes/genes |
字符串数组 | 与矩阵行对齐的基因符号 | 否 |
meta/genes/ensembl_gene_id |
字符串数组 | 与行对齐的 Ensembl 基因号 | 否 |
meta/samples/geo_accession |
字符串数组 | 与列对齐的 GSM 号 | 是,主键 |
meta/samples/series_id |
字符串数组 | 所属 GSE 号 | 是,分组首选 |
meta/samples/title |
字符串数组 | 样本标题 | 是,文本检索 |
meta/samples/source_name_ch1 |
字符串数组 | 样本来源名称 | 是,常含组织名 |
meta/samples/characteristics_ch1 |
字符串数组 | 上传者自填特征 | 是,最常用的条件字段 |
meta/samples/extract_protocol_ch1 |
字符串数组 | 提取与建库协议 | 是,可用于识别平台 |
meta/samples/library_strategy |
字符串数组 | 建库策略 | 是 |
meta/samples/instrument_model |
字符串数组 | 测序仪型号 | 是 |
meta/samples/singlecellprobability |
浮点数组 | 单细胞概率(零到一) | 是,最常用过滤条件 |
meta/transcripts/transcripts |
字符串数组 | 转录本层行名 | 否 |
这张表里真正每天都用得到的只有三列:geo_accession、series_id、singlecellprobability。前者用于精确取样本,中者用于保证组内一致性,后者用于把单细胞样本从批量数据里剔出去。
2.3 一条记录的完整解剖
取一个样本,它在文件里的样子如下。左侧是元数据节点的同下标元素,右侧是表达矩阵的同一列。
#-- 假设该样本在矩阵中的列下标为 i,它的样子由三部分拼成
meta/samples/geo_accession[i] -> "GSM2679484"
meta/samples/series_id[i] -> "GSE100000"
meta/samples/title[i] -> "liver, wild type, rep1"
meta/samples/source_name_ch1[i] -> "mouse liver"
meta/samples/characteristics_ch1[i] -> "genotype: wild type; tissue: liver"
meta/samples/instrument_model[i] -> "Illumina HiSeq 2500"
meta/samples/singlecellprobability[i]-> 0.03
data/expression[0:3, i] -> [ 1420, 89, 0 ] #-- 前三个基因的计数
meta/genes/genes[0:3] -> ["A1BG", "A1CF", "A2M"]
整条记录并不是一个对象,而是分散在十来个并列数组里的同下标元素。这种「列式存储」的设计正是 HDF5 适合这种数据的原因:读一列只碰一列的数据块,不会把整个文件读进内存。代价是任何一次查询都要在几组数组之间做下标对齐,手工做很容易错位,这也是官方要提供封装库的原因。
2.4 四条产物线的规模对照
为了把「体量」这件事说清楚,把下载页上各产物的样本数与文件大小并列如下。数字都在同一次浏览中读取,彼此可比。
| 产物 | 物种 | 样本数 | 文件体量 | 数据日期 |
|---|---|---|---|---|
| 基因计数 | 人类 | 一百零九万八千七百七十一 | 58 GB | 2026-07-05 |
| 基因计数 | 小鼠 | 一百二十二万五千零四十四 | 47 GB | 2026-07-05 |
| 转录本计数 | 人类 | 一百一十一万五千四百一十一 | 182 GB | 2026-09-03 |
| 转录本计数 | 小鼠 | 一百二十二万七千三百二十三 | 109 GB | 2026-09-03 |
| 转录本 TPM | 人类 | 一百零九万四千零五十三 | 368 GB | 2026-05-14 |
| 转录本 TPM | 小鼠 | 一百一十九万零三百一十五 | 208 GB | 2026-05-12 |
| Affymetrix 阵列 | 人鼠合计 | 约三十四万八千 | 二十余 GB | 2021-05 |
| 基因相关矩阵 | 人类 | 基因两两 | 6.8 GB | 2024-06 |
| kallisto 索引 | 人类 | 不适用 | 3.2 GB | 2023-04 |
从这张表能读出一件容易被忽略的事:同一物种的四条产物线,样本数并不相同,而且不同步更新。人类的基因矩阵与 TPM 矩阵相差约四千样本,小鼠的基因矩阵与转录本矩阵相差两千余样本。这不是错误,而是分批重跑的结果,但意味着跨层合并时要按下标或按 GSM 号做交集,不能想当然认为第 i 列在三层里是同一个样本。
2.5 与同类资源的字段差异
同样是「公共表达数据统一重处理」,不同资源的字段侧重差别很大。
| 维度 | ARCHS4 | recount3 | Expression Atlas |
|---|---|---|---|
| 组织单元 | 样本(列),按 GEO 号对齐 | 项目与 run,带完整元数据表 | 策展后的实验 |
| 表达层级 | 基因、转录本、TPM 三层 | 基因、外显子、剪接位点、覆盖层 | 基因级汇总 |
| 元数据来源 | GEO 字段原样搬运 | 从 SRA 与 GEO 重建,字段更完整 | 人工按 SDRF 策展 |
| 是否人工筛选 | 不筛,能跑就跑 | 不筛,但会标注失败原因 | 强筛,只收合格实验 |
| 交付形态 | 单一大文件整体下载 | 分项目分块,R 包按需取 | 网页与 FTP,按实验切分 |
| 研究设计信息 | 基本丢失 | 保留在元数据表中 | 完整保留且结构化 |
2.6 文件里那些不在文档里的坑
除了官方文档写明的结构,还有几件事必须在使用前知道。
其一,基因符号有重复行。这不是数据错误,而是 Ensembl 注释本身会造成多个基因条目共用一个符号。官方客户端因此专门提供一个合并重复基因的函数,默认不合并时,任何按基因做的聚合都会重复计数。
其二,伪计数被四舍五入成整数,意味着低表达基因的分数部分被系统性丢掉。做需要连续值的模型时,这一点与使用原始 kallisto 输出会有可见差异。
其三,TPM 矩阵的行是转录本,但 TPM 是按转录本算的,若要回到基因级,官方并不提供现成的基因级 TPM 文件,需要自行按基因汇总,而这一步会因有效长度的加权方式不同而产生分歧。
其四,相关矩阵是成对皮尔逊相关,内存占用与基因数的平方成正比,即使只取一个子矩阵,也要先知道行的排列方式。
§3 它的身份:谁的矩阵,对谁负责
3.1 三个名称,一个东西
ARCHS4 有三个层面的名字,用法各不相同。全称是「All RNA-seq and ChIP-seq sample and signature Search」,这是 2018 年立项时的表述,其中「ChIP-seq」一项从未落实为数据;简称 ARCHS4 是所有人日常用的;在代码里它是 archs4,在 R 与 Python 的官方包里是 archs4r 与 archs4py。
名称里的「signature Search」是它真正的差异化部分,也是它长期被误读成「只是个矩阵下载站」的原因。样本矩阵和签名检索是两件事:前者是素材,后者是对素材的解释层。多数使用者只用前者,这也是为什么讨论 ARCHS4 时往往只谈样本量与文件大小,很少谈它究竟怎么判断两个实验相似。
3.2 维护方与利益结构
维护方是西奈山伊坎医学院的 Ma’ayan 实验室,这是一个以生物信息学工具与知识图谱见长的课题组,历史上产出了大量面向公共数据的整合工具。这条线索决定了 ARCHS4 的气质:它更像一个工程产物而不是一个策展数据库,关注的是吞吐、成本与可编程访问,不是注释的精细度。
论文里有一组数字很能说明这种取向:按当时估算,重跑同样一批数据的总成本,ARCHS4 是一千七百余美元,同期的 Toil 是两万五千余美元,recount 是四万四千余美元。单样本成本约一美分。这种量级的成本差直接决定了它可以「全收而不挑」,也解释了为什么它不做人工策展——人工策展的成本与计算成本不在一个数量级上。
3.3 对谁负责:三种责任边界
| 责任对象 | 它承担的部分 | 它不承担的部分 |
|---|---|---|
| 上游上传者 | 保证读段被如实下载与比对,不改动原始 FASTQ | 不核验上传者填写的元数据是否准确 |
| 下游使用者 | 保证同一版本内所有样本用同一索引、同一流程 | 不保证跨版本可比,也不保证跨层样本一一对应 |
| 学术共同体 | 提供可引用的论文、版本号与开源客户端 | 不提供逐样本处理日志与失败样本清单 |
把这三条摆在一起看,能提炼出一条使用准则:把 ARCHS4 当作「一个可版本化的批量转换器」,不要当作「一个可信度分层的数据库」。它不给你每一条记录的置信度,它只给你一个统一的坐标系。
3.4 坐标系的三根轴
ARCHS4 建立的坐标系有三根轴:基因轴、样本轴、时间轴。
基因轴由 Ensembl 注释版本定义。当前版本用注释 107,人类参考的 cDNA 是 GRCh38 版本,小鼠是 GRCm38 版本。注释版本一旦更换,行的顺序与数量都会变,跨版本合并必须先按基因符号取交集。
样本轴由 GEO 样本号定义。同一份生物材料在不同实验里可能被上传成多个样本,ARCHS4 不会去重,因此「样本数」衡量的是档案条目数,不是独立个体数。这一点在任何涉及「多少个人、多少只鼠」的表述里都必须点明。
时间轴由发布版本定义。数据是滚动更新的,每次发布都会把新进入 GEO 的实验补进来,也会把重跑成功的旧样本更新。因此同一个 GSM 号在不同版本里的计数值可能不同,差异来自比对与注释而不是生物学。
§4 它的手艺:统一重跑如何做到又便宜又能用
4.1 为什么选 kallisto 而不是 STAR
转录组定量的主流路线有两条:以 STAR 为代表的比对式流程,和以 kallisto、Salmon 为代表的伪比对流程。前者把读段逐碱基比对回参考基因组,能给出剪接连接与覆盖度;后者把读段拆成 k-mer,直接对转录本集合做兼容性匹配,速度与内存占用都低一个到两个数量级。
ARCHS4 选了后者,理由在论文里有明确交代:kallisto 的内存需求约四 GB,STAR 约三十 GB。这个差别在单机上无关紧要,在成千上万个容器并行的云端就是成本的分水岭。论文报告单份 FASTQ 平均处理约十一分钟,这样的速度才能支撑百万量级的重跑。
论文同时给出了代价:在一千七百余个人类样本的对照实验里,kallisto 检出的基因数反而多于 STAR,两者 z 分数化后的平均皮尔逊相关为零点七七,而用两者各自的结果去预测基因本体生物学过程,平均 AUC 都是零点六九。换句话说,在「做下游功能预测」这个目标上,伪比对的精度损失几乎不可见。这是它敢用伪比对替代比对式的实证依据。
4.2 云端流水线的骨架
流程本身不复杂,复杂的是调度。整体是:抓取 GEO 中带 SRA 关联的系列,按样本解析出 FASTQ 下载地址,把每个样本打包成一个任务,在容器里跑 kallisto,把输出回收,汇总进矩阵。
几个工程细节值得记住。容器镜像固定了 kallisto 版本、索引与后处理脚本,保证同样的输入得到同样的输出。索引按物种预建,人类与小鼠各一份,随注释版本升级而重建。任务级别有重试,部分样本因为网络或文件损坏会失败,失败的样本直接缺席而不是占位。最后一步是把所有单样本输出拼成矩阵,这一步是纯 I/O,也是发布耗时的主要来源。
4.3 案例:从 GSE100000 到一张子矩阵
用一个具体的系列走一遍,能看清「矩阵检索」与「元数据检索」是怎么配合的。假设研究者关心某个小鼠肝脏处理实验,已经知道系列号是 GSE100000,要取出全部样本的基因计数做组内比较。
第一步是确认这个系列是否在矩阵里。ARCHS4 的收录粒度是样本,一个系列只要有一个样本入库,系列号就会出现。查询按 series_id 做字符串匹配,得到列下标列表。
第二步是检查这些样本的质量红旗。单细胞概率是一个,测序仪型号是一个,提取协议文本里是否含「单细胞」「液滴」之类的词是另一个。这三步里任何一步发现异常,都应把对应样本剔掉而不是硬算。
第三步才是取数。取数的结果是一张小矩阵,行是全部基因,列是几十个样本。此时矩阵里保留的仍是以同一索引算出的原始计数值,后续的过滤、归一化与统计,全部在这一小块上做。
这个案例说明了一件事:ARCHS4 的正确用法不是「先下全量再筛」,而是「先在矩阵里定位列,再取小块」。前者要几百 GB 的磁盘与内存,后者只要几十兆。§4.3 的案例在后面的检索路径与使用指引里会被反复用到。
#-- 用官方 Python 包按系列号取出一个小矩阵
import archs4py as a4
file = a4.download.counts("mouse", version="latest")
meta = a4.meta.series(file, "GSE100000",
meta_fields=["geo_accession", "title", "instrument_model"])
print(len(meta), "个样本")
#-- 取全部样本的基因计数,得到 行=基因、列=样本 的 DataFrame
mat = a4.data.series(file, "GSE100000")
print(mat.shape)
4.4 签名检索:它真正的差异化
样本矩阵谁都可以做,签名检索是它的独特之处。逻辑很简单:把一份基因列表编码成向量,在样本空间中计算它与每个样本表达谱的相似度,返回排序结果。
方法上有两处必须交代。其一是降维。直接在一万多个基因的维度上做相似度计算,计算与存储都不划算,论文用 Johnson-Lindenstrauss 变换把维度压到一千,论文报告压缩后原始相关系数仍能保持在零点九九左右。其二是相似度的解释。检索返回的是「表达谱最相近的样本」,这是一种统计相似,与「生物学上同义」不是一回事。
因此签名检索的正确用法是生成假设,不是验证假设。检索到一个高分样本,还要回到原始实验看它到底做了什么处理,才能判断相似性的来源。
4.5 基因页与共表达
基因页是检索层的另一个入口。给定一个基因符号,页面会给出三样东西:该基因在各组织与细胞系里的表达分布、排在最前面的共表达基因、以及基于先验知识加共表达推断出的功能与相互作用。
论文报告的功能预测在小鼠一侧 GO 生物学过程的中位 AUC 为零点七四五,KEGG 通路中位 AUC 为零点七九七;蛋白互作预测的 AUC 在 hu.MAP 上为零点八五,BioGRID 上为零点六六,BioPlex 上为零点六四。这些数字说明它给出的功能提示是有信息量的,但远不是定论。
组织与细胞系的覆盖,论文时期是五十余种组织与六十余种细胞系。官方帮助页对这种聚合有一个值得注意的说明:同一组织的样本来自许多不同实验室,样本制备条件不一致,组织亚型可能混在一起,因此它反映的是样本群内部的真实变异,而不是像 GTEx 那样在统一协议下的参考表达。这既是优点也是缺点:优点是不会把噪声抹平,缺点是这个分布不能当作「正常生理值」来用。
§5 取数:从网页点击到代码切片
5.1 四条取数路径的取舍
| 路径 | 适合的人 | 代价 | 边界 |
|---|---|---|---|
| 网页下载直链 | 有磁盘与带宽的人 | 数十到数百 GB 下载 | 只能整文件下,不能先挑样本 |
| 网页动态取子集 | 只想看几十个样本的人 | 需等后台切片,耗时不定 | 每次取数有限额,不适合批量 |
| archs4py | 用 Python 做分析的人 | 第一次要下全量文件 | 内存要够,宽查询容易撑爆 |
| archs4r | 用 R 做分析的人 | 同上 | 功能略少于 Python 包 |
四条路径背后是同一批文件,区别只在「先在服务器上切」还是「先下到本地再切」。前者省磁盘但慢且受限额,后者慢一次但之后都快。
5.2 纯 HTTP 直取
如果想验证某个文件是否可访问、或者只想读一个很小的区间,可以直接用 HTTP 区间请求配 h5py 的驱动。HDF5 本身不支持区间随机读,但 h5py 的 fileobj 驱动可以在一个支持 seek 的文件对象上工作,fsspec 的 HTTP 实现就满足这个条件。
#-- 不下全量文件,直接用 HTTP 读 H5 的一个小区间
import fsspec, h5py
url = "https://s3.k8s.maayanlab.cloud/archs4/files/human_gene_v2.latest.h5"
f = fsspec.open(url, "rb").open()
h5 = h5py.File(f, "r", driver="fileobj", backing_store=False)
#-- 先看单细胞概率,拿到前 200 个样本的下标
scp = h5["meta/samples/singlecellprobability"][0:200]
keep = [i for i, v in enumerate(scp) if v < 0.5]
#-- 再只取这些列的前 50 个基因
sub = h5["data/expression"][0:50, keep]
print(sub.shape)
这种写法适合交互式探索,不适合批量生产:每个切片都是一次网络往返,列的跨度大时会退化成大量请求。
5.3 本地切片:按基因取
下载到本地之后,最常见的动作有两个:按基因取一列,和按样本取一行。按基因取时,因为基因在行,操作是「取一段行、全部列或部分列」。
#-- 本地取出某几个基因在全部人类样本中的表达
import h5py
with h5py.File("human_gene_v2.latest.h5", "r") as h5:
genes = h5["meta/genes/genes"][:]
idx = [i for i, g in enumerate(genes) if g in {"TP53", "MYC", "EGFR"}]
rows = h5["data/expression"][idx, :]
print(rows.shape, "行=基因,列=样本")
5.4 先筛元数据再取数
批量场景下,正确的顺序是先读元数据,在内存里算出列下标,再一次性取表达。这样可以把一次网络或磁盘访问的粒度做大。
#-- 先筛元数据,再取数,避免把百万列全读进内存
import h5py, numpy as np
with h5py.File("human_gene_v2.latest.h5", "r") as h5:
src = h5["meta/samples/source_name_ch1"][:]
scp = h5["meta/samples/singlecellprobability"][:]
keep = [i for i, s in enumerate(src)
if s is not None and b"liver" in s.lower() and scp[i] < 0.5]
print(len(keep), "个肝脏 Bulk 样本")
sub = h5["data/expression"][:, keep]
genes = h5["meta/genes/genes"][:]
np.save("liver_genes.npy", genes)
np.save("liver_expr.npy", sub)
这段代码里有一个不显眼但重要的选择:singlecellprobability 小于零点五才留。阈值是可以调的,官方文档给的就是这个默认值。留得太宽会把单细胞数据混进来,这些样本的基因检出模式与批量数据差别很大,会污染共表达结构。
5.5 用 R 走的路径
R 用户有两条路:用官方 archs4r 包,或者用 rhdf5 手工读。官方帮助页给出的自动生成脚本就是后者,它在本地下载整个文件后用路径取数。手工写时注意一点:h5read 的索引顺序与 Python 相反,矩阵读出后需要转置。
#-- 用 rhdf5 读取指定样本的基因计数
library(rhdf5)
file <- "human_gene_v2.latest.h5"
samples <- h5read(file, "meta/samples/geo_accession")
genes <- h5read(file, "meta/genes/genes")
want <- c("GSM1158284", "GSM1482938")
cols <- which(samples %in% want)
expr <- t(h5read(file, "data/expression", index = list(cols, seq_along(genes))))
H5close()
rownames(expr) <- genes
5.6 跨层对齐与版本固定
当需要同时用基因层与转录本层时,必须显式对齐。两层样本数不同,且不同步更新,正确做法是按 geo_accession 做交集,而不是按下标。
#-- 取两层共有的样本,而不是假设第 i 列相同
import h5py, numpy as np
with h5py.File("human_gene_v2.latest.h5", "r") as g, \
h5py.File("human_transcript_v2.latest.h5", "r") as t:
g_id = g["meta/samples/geo_accession"][:]
t_id = t["meta/samples/geo_accession"][:]
common = sorted(set(g_id) & set(t_id))
print("交集样本数:", len(common))
还有一条容易被忽略的实践:把版本号写死在脚本里,不要用 latest。latest 指向的软链接会在每次发布后变化,同一份脚本隔一个月跑出来的结果可能不同,而这在复现性上是不能接受的。正确的做法是先查一次版本,把具体文件名与哈希写进脚本。
§6 与库内条目的关系
6.1 关系图谱
ARCHS4 在库内的位置,可以用「原料仓、加工厂、成品柜」三层来理解。SRA 与 GEO 是原料仓,ARCHS4 与 recount3 是两座加工路线不同的厂,GTEx、TCGA、Expression Atlas 是专柜。
| 库内相关词条 | 与本词条的关系 | 一句话区隔 |
|---|---|---|
| recount3 | 最近的同侪,同一批原料的另一条产线 | recount3 做多粒度量化加完整元数据表,ARCHS4 做基因级整合矩阵加签名检索 |
| Expression Atlas | 同为统一重处理,选样逻辑相反 | Atlas 人工策展少数高质量实验,ARCHS4 不筛几乎全收 |
| GTEx | 上游来源之一,也是参照系 | GTEx 是统一协议下的组织参考,ARCHS4 把 GTEx 样本拉进平均口径以换取与其他实验的可比性 |
| TCGA | 上游来源之一,也以平行矩阵形式附赠 | TCGA 携带临床终点,ARCHS4 的 TCGA 矩阵来自 recount2,不含任何临床字段 |
| NCBI SRA | 最大上游来源 | SRA 存读段,ARCHS4 存读数 |
| ENCODE | 名称里提过 ChIP-seq,实际无交集 | ENCODE 有表观遗传与功能实验,ARCHS4 只做 RNA-seq |
| 单细胞表达图谱类条目 | 部分样本重叠 | 单细胞图谱按实验组织、带细胞级注释,ARCHS4 只有带单细胞概率的样本级汇总 |
这两条产线的差别不是「新旧」,而是「用途」。recount3 的设计目标是把公共 RNA-seq 重跑到「每个数字都能追溯到具体 run 与具体注释」,因此交付的是分项目、分粒度的文件与一张完整的元数据表。ARCHS4 的设计目标是把公共 RNA-seq 重跑到「所有数字能放进同一个矩阵」,因此交付的是几个巨大文件与一套检索界面。用一句话概括:recount3 面向「我要知道这个数怎么来的」,ARCHS4 面向「我要一个足够大的矩阵」。
6.2 检索路径
| 你的问题 | 该去哪个词条或入口 | 理由 |
|---|---|---|
| 想要一张能直接训练的基因表达大表 | 本词条 | 这是它为唯一目标设计出来的产物 |
| 想知道某个 GSE 有没有被处理过 | 本词条,按系列号检索 | 收录粒度是样本,系列号可直接匹配 |
| 想要某个 run 的完整元数据 | recount3 词条 | recount3 从 SRA 重建元数据,字段更全 |
| 想研究可变剪接 | recount3 词条 | 那边有剪接位点与外显子层 |
| 想要正常组织的参考表达 | GTEx 词条 | 统一协议下的参考值,ARCHS4 的组织分布不能当参考用 |
| 想做肿瘤预后 | TCGA 词条 | ARCHS4 无随访字段 |
| 想要 ChIP-seq 峰 | ENCODE / Roadmap Epigenomics | ARCHS4 无表观遗传数据 |
| 想要原始 FASTQ 自己做流程 | SRA 词条 | ARCHS4 不供读段 |
6.3 与 recount3 的逐项区隔
本批同期发布的 recount3 与 ARCHS4 高度相似,二者都用公共 SRA 读段、都主张「统一流程」,因此必须把差别逐项写清。
| 对比项 | ARCHS4 | recount3 | 对使用者的实际影响 |
|---|---|---|---|
| 一句话定位 | 基因水平的整合矩阵加同表达签名检索 | 多粒度原始量化加完整元数据 | 前者是成品表,后者是原料加原料清单 |
| 定量工具 | kallisto,伪比对 | STAR,全基因组比对 | ARCHS4 快而省,recount3 能拿剪接信息 |
| 参考注释 | Ensembl 107,cDNA 集合 | GENCODE,基因组加注释 | ARCHS4 改注释要整体重建矩阵,recount3 可换注释重算 |
| 输出粒度 | 基因计数、转录本计数、转录本 TPM | 基因、外显子、剪接位点、碱基覆盖 | ARCHS4 只有汇总值,没有位置信息 |
| 元数据 | GEO 字段原样搬运,随矩阵存放 | 从 SRA 与 GEO 重建的完整表,按项目组织 | 想按条件筛,ARCHS4 需要自己解析文本字段 |
| 组织单元 | 样本(GSM)为列,整文件一次交付 | 项目与研究为单位,可按需取 | ARCHS4 适合整体载入,recount3 适合按项目拉取 |
| 检索界面 | 三维样本空间、签名检索、基因页 | 基于覆盖层的跨项目查询 | 前者面向「找相似样本」,后者面向「找相似区间」 |
| 交付体量 | 单文件数十到数百 GB | 分块,按项目与粒度取 | ARCHS4 首次使用成本高,之后低 |
| 更新方式 | 滚动补样本,版本号递增 | 分版本整批发布 | 两者都要写清版本 |
| 典型任务 | 表达预训练、共表达、签名反查 | 差异表达、剪接分析、覆盖度可视 | 任务不同,选型不同 |
一句话记住:ARCHS4 把多样性换成了可计算性,recount3 把可计算性让位给了可追溯性。§6.3 的分工在后面的选型建议里会再次用到。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
评估 ARCHS4 时最容易犯的误判,是拿评估策展数据库的尺子来量它:问它元数据完整率多少、注释准确率多少、有没有人工复核。这些维度上它必然低分,因为它的设计从一开始就不承担这些工作。正确的评估框架是:在「把公共数据转成可计算矩阵」这个任务上,它的成本、覆盖率与一致性如何,以及这些优势换来了哪些不可逆的损失。
换句话说,下面每一处扣分都应理解为「它的取舍带来的代价」,而不是「它没做好」。把这一点校正过来,后面五维评分才不会读歪。
7.1 五维评分
| 维度 | 分数 | 依据 |
|---|---|---|
| 规模 | 5 / 5 | 人类与小鼠各逾百万样本,覆盖远超任何策展型资源 |
| 一致性 | 4 / 5 | 同一版本内流程与注释统一;扣分在跨层样本不同步与跨版本不可比 |
| 可用性 | 5 / 5 | 单文件 HDF5,两个官方客户端,Python 与 R 都有一行取数的接口 |
| 可追溯性 | 2 / 5 | 只到版本号与流程说明,无逐样本日志与失败清单 |
| 注释质量 | 2 / 5 | 元数据为上传者原样,无核验,字段参差 |
7.2 DAIMS 视角下的四条线
DAIMS 关注的是数据从采集到使用的链条是否可解释。按这四条线看 ARCHS4:
| DAIMS 线 | ARCHS4 的表现 |
|---|---|
| 数据获取与处理 | 云端容器化流程有文档,但单样本处理记录不公开 |
| 数据建模 | 矩阵 + 同下标元数据数组,模型极其简单,无模式演进机制 |
| 数据溯源 | 版本号 + 文件名 + 哈希,粒度到文件而非样本 |
| 数据使用与治理 | 无统一许可声明,以原始 GEO 条目许可为界,使用者需自行判定 |
四条线里最弱的是溯源,最稳的是建模。简单模型的代价是无法表达「一个样本有多条处理记录」这类复杂关系,好处是任何工具都能读。
7.3 已知的、可枚举的偏差
偏差不止一类,逐条列出比笼统说「数据有偏」有用得多。
第一,物种偏差。人类与小鼠占绝对多数,其他物种只有约三万五千个样本,且分布在下载页的独立分区。做跨物种比较时,非模式生物几乎没有可用样本。
第二,平台偏差。早期实验的测序仪与建库方式与近年不同,读长、深度、链特异性都不同。矩阵不做平台校正,因此「同样的组织、不同年代」会在表达空间里分开,这与生物学无关。
第三,技术偏差。单细胞样本混入是明确已知的。官方用机器学习给每个样本标注单细胞概率以缓解,但这是一个预测值,不是标签,阈值设在零点五只是默认,不是校准过的分界。
第四,地理与团队偏差。GEO 的上传者集中在少数国家与少数大型实验室,样本构成反映的是「谁在做公共数据上传」,不是「疾病或组织在人群中的分布」。
第五,注释偏差。Ensembl 版本更迭会导致基因集合变化,旧版有、新版无的基因在新矩阵里消失,这类断崖式变化在时间序列分析里会造成假信号。
7.4 外部验证矩阵
| 验证角度 | 外部证据 | 结论 |
|---|---|---|
| 与比对式流程的一致性 | 论文报告 kallisto 与 STAR 的 z 分数相关零点七七 | 在功能预测层面差异不可见 |
| 功能预测的可靠性 | GO 生物学过程中位 AUC 零点七四五,KEGG 中位零点七九七 | 有信息量,不能替代实验 |
| 互作预测的可靠性 | hu.MAP 上 AUC 零点八五,BioGRID 零点六六 | 强证据源上更准,弱证据源上退化 |
| 成本可复现性 | 论文报告单样本约一美分 | 使全量重跑在经济上可行 |
| 长期可用性 | 2018 年至今持续发布,客户端仍在维护 | 停更风险较低 |
7.5 它为何能持续:把重跑成本压到别人愿意重跑第二遍
一个公共数据重处理项目能不能活下来,取决于两件事:跑一次的成本是否低到有人愿意重复跑,以及成果是否好用到大到有人愿意持续用。ARCHS4 在这两点上都做到了:单样本不足一美分的成本让滚动重跑变成例行公事,单个 HDF5 文件的形态让入门门槛低到几乎为零。它靠的不是策展质量,而是极低的边际成本与极简的交付形态。
§8 生态位与历史
8.1 历史沿革
| 时间 | 事件 |
|---|---|
| 2018 年 2 月 | 论文数据截止,共十八万余样本,人类八万余、小鼠十万余 |
| 2018 年 4 月 | 论文发表于《Nature Communications》 |
| 2020 年前后 | 通过 Toil 路线重跑的 recount2 矩阵被并入,作为 GTEx 与 TCGA 的补充 |
| 2023 年 7 月 | 第二版发布,注释升级到 Ensembl 107 |
| 2023 年 9 月 | 官方 Python 包 archs4py 上线 |
| 2024 年 7 月 | 样本量越过人类八十八万、小鼠九十八万 |
| 2024 年 9 月 | 转录本级数据开始提供 |
| 2024 年 12 月 | 第二点六版发布,样本量跃至人类九十二万、小鼠一百零四万;新版网站在线,加入签名检索与相关性查询 |
| 2025 年 3 月 | 官方 R 包 archs4r 上线 |
| 2026 年年中 | 基因矩阵越过人类一百零九万、小鼠一百二十二万 |
从这条时间线能读出两件事。其一是增长曲线:2018 年到 2024 年六年增长约五倍,2024 年之后一年内又增了两成,公共数据本身的累积速度在加快。其二是定位漂移:早期它主要是一个下载站,2024 年新版网站把签名检索与相关性查询放到前台,说明维护方判断「只要矩阵」的用户已经饱和,增量在检索层。
8.2 三座同代加工厂的分工
同期出现的三座公共转录组加工厂各有侧重。recount 与 recount2 以 R 包分发、强调可复现的对齐流程;Toil 强调可移植的工作流引擎,直接服务于大型联盟的内部需求;ARCHS4 强调吞吐与交付形态,服务的是「想拿现成矩阵」的长尾用户。三者的成本差异(论文里的对比是 ARCHS4 一千七百余美元、Toil 两万五千余美元、recount 四万四千余美元)不是工程质量差异,而是目标函数差异。
这条线索延续到今天:recount3 继承了 recount 的路线并大幅扩展元数据,ARCHS4 继承了吞吐路线并加上检索层。两条线至今没有合并,因为服务的人群不同。
8.3 在 AI 时代的再定位
表达矩阵作为一种预训练数据,在近两年重新受到关注。原因不难理解:单细胞数据虽然精细,但总量与组织覆盖不及批量数据;批量数据虽然批次效应重,但样本量在百万量级,且覆盖了大量疾病与处理条件。ARCHS4 的形态恰好适合这件事——一张表,列是样本,可以直接切成批次喂进模型。
这也带来一种新的误用风险:把矩阵当成「已经清理干净」的训练集。实际上它没有做任何清理,重复样本、单细胞混入、平台差异都在。任何把它当预训练语料的工作,都必须自行完成这三步过滤,并在方法里写清过滤规则。
8.4 与策展型资源的互补关系
有一种看法是策展型资源终将取代批量重处理资源,这个判断在可预见的范围内不成立。策展型资源(如 Expression Atlas)的价值在于「小样本、好注释、可直接下结论」,批量资源的价值在于「大样本、弱注释、只能生成假设」。前者回答「这个基因在这个组织里高不高」,后者回答「这个基因在哪些条件下会被一起带动」。
两者是上下游关系:用批量资源生成假设,用策展资源或自己的实验验证。§7.5 提到的「低成本重跑」正是这条链的第一环。
§9 使用指引
9.1 三种角色的路径
算法研究者的路径最短:下载基因矩阵,读 singlecellprobability 剔除单细胞样本,按基因做一次低表达过滤并合并重复符号,然后直接切块。这个流程可以完全脚本化,不需要碰网页界面。
生物医学研究者的路径是反的:从问题出发,先在网页的签名检索里输入一份基因列表,看返回的高分样本集中在哪些组织或疾病;再拿回系列号,回 GEO 看实验设计是否支持这个解释;最后才决定要不要下载矩阵做定量。
数据工程师的路径最重:需要把矩阵接入现有的数据处理栈。要点有三:一是把 HTTP 区间读或本地 HDF5 读封装成统一接口;二是把版本号与文件哈希写进元数据表;三是在入库时就把元数据字段的解析规则定下来,尤其是 characteristics_ch1 这种自由文本。
9.2 一条最短的可用流程
下面这条流程从零到一个可用的小矩阵,是 §4.3 的案例在命令行上的完整版本。
#-- 第一步:安装官方客户端
pip3 install archs4py h5py
#-- 第二步:下载最新版人类基因矩阵(数十 GB,视网络而定)
python3.11 -c "import archs4py as a4; print(a4.download.counts('human', version='latest'))"
#-- 第三步:确认版本号,并把文件名与哈希写进实验记录
python3.11 -c "import archs4py as a4; print(a4.versions())"
#-- 第四步:按条件取一个小矩阵,并完成最低限度的清理
import archs4py as a4
file = "human_gene_v2.latest.h5"
mat = a4.data.meta(file, "hepatocyte", remove_sc=True) #-- 已剔除单细胞
print(mat.shape)
#-- 合并 Ensembl 注释带来的重复基因符号
mat = a4.utils.aggregate_duplicate_genes(mat)
#-- 过滤低表达基因:至少 50 条读段、覆盖 2% 的样本
mat = a4.utils.filter_genes(mat, readThreshold=50, sampleThreshold=0.02,
deterministic=True, aggregate=True)
#-- 归一化到可比尺度
norm = a4.normalize(mat, method="log_quantile")
print(norm.shape)
这段流程里每一步都有理由。剔除单细胞是防止非批量协议污染;合并重复基因是防止特征共线;低表达过滤是去掉大部分在多数样本里为零的行;对数分位归一化是为了后续做相关与降维时不被深度差异主导。四步之后得到的矩阵,其行列结构与 GEO 原实验的对应关系仍然可以按 GSM 号追回,这才算完成一次可复现的取数。
9.3 引用方式
引用要写到三层,缺一层都会让复现打折扣。
第一层是方法学论文。标准写法是 Lachmann 等人 2018 年发表于《Nature Communications》第 9 卷、文章号 1366 的那篇。注意论文的 DOI 与任务卡里给的不一致,官方页面与论文页互相链接的 DOI 均为以 03751 结尾的一个,引用时应以论文页为准。
第二层是版本。写明具体版本号(如第二点六版)与下载日期,必要时附文件哈希。只写「ARCHS4」而不写版本,读者无法判断你用的是哪一批样本。
第三层是原始数据。如果分析涉及具体系列,应在补充材料里列出所用的 GSE 或 GSM 清单,让原始实验的设计可以被核对。这三层合起来,才构成一次可被审计的引用。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 本页 AI 参与程度 | 由 AI 助手依据官方页面与论文摘要起草,人工核对数字与结论 |
| 数字来源层级 | 见附录 B,官方页面为一级,论文摘要为二级 |
| 未核实项 | 基因符号总数未在官方页面给出,仅论文提及降维前的维度 |
| 版本信息 | 以 2026 年 9 月至 10 月间读取的下载页为准 |
| 已知不一致 | 小鼠参考基因组在官网正文写 GRCm39,下载页与索引说明写 GRCm38 |
| DOI 不一致 | 任务所指 DOI 与官方页面、论文页两处给出的 DOI 不同,正文以论文页为准 |
| 适用边界 | 本文描述的是数据集本身,不含对具体研究结论的评价 |
| 更新机制 | 数据集滚动更新,本文不承诺随版本同步刷新 |
常见误读(避坑清单)
| 常见说法 | 实际 | 证据 |
|---|---|---|
| 「名字里有 ChIP-seq,所以有 ChIP-seq 峰」 | 完全没有,只处理 RNA-seq | 官网关于段、下载页、论文摘要均只描述 RNA-seq |
| 「它是九十多万样本,网上有写」 | 新闻条目在 2024 年 7 月写的是八十八万人类、九十八万小鼠,12 月写九十二万、一百零四万 | 官网新闻列表两条相邻记录口径不同 |
| 「一百多万样本,就是一个受控队列」 | 是大量互不相关的独立实验拼接 | 矩阵以 GEO 样本号为列,无统一实验设计字段 |
| 「用 kallisto 所以精度不如 STAR」 | 功能预测层面两者 AUC 相同 | 论文报告两者 GO 预测平均 AUC 均为零点六九 |
| 「它是人工整理过的干净数据」 | 元数据原样搬运,单细胞样本混入 | 官方客户端文档说明用单细胞概率自行剔除 |
| 「基因矩阵和转录本矩阵的列一一对应」 | 两层样本数不同,且不同步更新 | 下载页人类基因矩阵与转录本矩阵样本数不一致 |
| 「可以拿整张矩阵做差异分析」 | 跨实验批次效应会压过条件效应 | 流程不包含批次校正步骤 |
| 「它是 GTEx 那种正常组织参考」 | 官方明说组织样本混杂亚型与制备条件 | 帮助页关于组织图谱的说明段 |
| 「下载链接是稳定的,可以用 latest」 | 软链接随发布变化,复现性差 | 下载页各文件日期不同,latest 指向最新 |
| 「它就是 recount3 的另一个名字」 | 两者是不同流程、不同产物的两条线 | 见 §6.3 的逐项对照 |
FAQ
Q1:ARCHS4 现在到底有多少样本?
官方下载页在最近一次读取时给出人类基因矩阵一百零九万八千余、小鼠一百二十二万五千余。但同一站点的新闻条目、转录本矩阵与 TPM 矩阵的数字各不相同,因为这些产物分批重跑、不同步更新。引用时务必写明用的是哪一条产物线。
Q2:它有没有单细胞数据?
有,但被混在批量数据里。官方用机器学习为每个样本预测单细胞概率,取值在零到一之间,惯例是滤掉大于零点五的样本。这是预测值不是标签,因此在单细胞与批量交界处的样本需要人工复核。
Q3:能把 GTEx 或 TCGA 的样本拿来一起算吗?
可以,但要意识到来源不同。下载页附带的两份矩阵来自 recount2 的另一套流程,官方自己就提示这条读段对齐路线与 ARCHS4 的流程差异显著。合并时应把它们当作外部参照,而不是当作 ARCHS4 的一部分。
Q4:基因数是多少?
官方下载页没有直接给出当前版本的基因符号总数。论文提到降维前使用的维度是三万四千一百九十八,这个数字可以作为量级参照。实际使用时建议直接从文件里读行数,而不是引用旧数字。
Q5:它支持哪些物种?
以人类与小鼠为主。另有约三万五千个其他物种样本,官方举例提到秀丽隐杆线虫与黑腹果蝇,这些样本在下载页的独立分区,不在主矩阵里。
Q6:签名检索的原理是什么?
把基因列表编码成向量,在与样本空间的相似度上排序。为了计算可行,原始的高维表达被 Johnson-Lindenstrauss 变换压到一千维,论文报告压缩后相关系数保持稳定。检索结果适合生成假设,不适合当作结论。
Q7:能不能只下载我关心的几千个样本?
网页端提供动态取子集,官方客户端也支持先按元数据筛再取。但底层仍要访问整个 HDF5 文件,网页端的动态取数受限额,批量场景建议还是下载本地文件后切片。
Q8:更新频率如何?
不固定,从历史新闻看大约每几个月一次。每次更新都会补入新样本,也可能因重新注释而改变旧样本的值。做长期项目时应在项目开始时锁定版本。
Q9:有必要用官方客户端吗?
如果只是读一两个子集,h5py 或 rhdf5 足够。如果要做元数据检索、归一化、过滤与对齐,用官方包能省掉大量下标对齐的错误,这些错误在实际使用中非常常见。
Q10:数据可以商用吗?
官方没有给出统一的许可声明。数据本身来自 GEO 的公开条目,商用前应逐个确认原始条目的使用条款。软件部分(客户端与建站代码)遵循各自仓库的开源许可,与数据许可分开。
Q11:为什么组织表达分布和 GTEx 对不上?
因为两者的样本构成不同。GTEx 在统一协议下采集有限供体,ARCHS4 的组织分布来自成千上万个不同实验室,制备条件不一、亚型混杂。官方认为后者反映的是真实变异,但这种变异里包含了大量技术因素。
Q12:它和 Expression Atlas 怎么选?
看你要广度还是深度。要几万个组织与疾病条件下的大规模样本,选 ARCHS4;要少量已人工策展、注释结构化的实验,选 Atlas。两者常常一前一后使用。
术语表
| 术语 | 含义 |
|---|---|
| RNA-seq | 转录组测序,测的是样本中全部 RNA 的序列片段 |
| kallisto | 伪比对定量工具,把读段拆成 k-mer 直接匹配转录本集合 |
| 伪比对 | 不做逐碱基比对,只判断读段与转录本的兼容性 |
| 伪计数 | kallisto 输出的估计计数,含小数,表示推断的读段归属量 |
| TPM | 每百万转录本数,按长度与深度双向归一化后的表达量 |
| FPKM / RPKM | 按片段或读段数的归一化表达量,现多被 TPM 取代 |
| HDF5 / H5 | 一种层级文件格式,支持压缩与按切片读取 |
| Ensembl | 基因组注释数据库,提供基因与转录本的标识体系 |
| GRCh38 / GRCm38 | 人类与小鼠的参考基因组组装版本 |
| cDNA 参考 | 把所有转录本序列拼起来的参考,kallisto 索引即建立在其上 |
| GSM | GEO 样本号,ARCHS4 矩阵的列主键 |
| GSE | GEO 系列号,一个实验的组织单位 |
| SRA | 序列读取档案,存原始读段 |
| 单细胞概率 | 官方模型对样本是否为单细胞数据的预测值,零到一 |
| 共表达 | 两个基因在众多样本中表达量同步变动的现象 |
| 签名 | 一份基因列表,用于在样本空间中检索相似的表达模式 |
| Johnson-Lindenstrauss 变换 | 一种近似保距的随机降维方法 |
| t-SNE | 一种非线性降维方法,用于在低维展示高维样本关系 |
| 批次效应 | 由技术因素而非生物学因素造成的样本间系统差异 |
| 策展 | 由人工挑选、核对与结构化注释的过程 |
| DAIMS | 数据档案与信息管理系统的一套评估框架,看采集、建模、溯源与治理四条线 |
| 皮尔逊相关 | 衡量两组数值线性相关程度的指标 |
| AUC | 受试者工作特征曲线下面积,衡量分类或排序的区分能力 |
| 软链接 latest | 始终指向最新版本的路径,内容随发布变化 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 论文时期总样本 | 十八万余 | 论文摘要 | 二级 |
| 论文时期人类样本 | 八万余 | 论文摘要 | 二级 |
| 论文时期小鼠样本 | 十万余 | 论文摘要 | 二级 |
| 当前人类基因矩阵样本 | 一百零九万八千余 | 官网下载页 | 一级 |
| 当前小鼠基因矩阵样本 | 一百二十二万五千余 | 官网下载页 | 一级 |
| 当前人类转录本矩阵样本 | 一百一十一万五千余 | 官网下载页 | 一级 |
| 其他物种样本 | 约三万五千 | 官网关于段 | 一级 |
| 基因矩阵体量(人类) | 58 GB | 官网下载页 | 一级 |
| 转录本矩阵体量(人类) | 182 GB | 官网下载页 | 一级 |
| TPM 矩阵体量(人类) | 368 GB | 官网下载页 | 一级 |
| 注释版本 | Ensembl 107 | 官网关于段 | 一级 |
| 单细胞概率默认阈值 | 零点五 | 官方客户端文档 | 一级 |
| kallisto 与 STAR 相关性 | 零点七七 | 论文正文 | 二级 |
| 功能预测 AUC(GO) | 零点七四五 | 论文正文 | 二级 |
| 基因符号总数 | 未核实 | 无官方当前值 | 三级 |
附录 B:数字的来源分层
一级:官方页面。 包括官网首页的关于段与新闻条目、下载页的各文件样本数与体积、官方客户端文档里的字段与默认值、帮助页的流程描述。本文所有样本量、文件体量、注释版本与字段名均取自这一层。
二级:论文摘要与正文。 包括论文发表时的样本量、kallisto 与 STAR 的对比指标、成本对比、功能与互作预测的 AUC。这些数字反映的是 2018 年的状态,用于说明方法论取舍,不能用于描述当前规模。
三级:未核实。 基因符号的当前总数未在官方页面公布,本文只给出论文时期的维度作量级参照,并明确标注为未核实。小鼠参考基因组的确切版本在两处页面存在冲突,本文并列两说而不下判断。
附录 C:完整参考文献
- Lachmann A, Torre D, Keenan AB, Jagodnik KM, Lee HJ, Wang L, Silverstein MC, Ma’ayan A. Massive mining of publicly available RNA-seq data from human and mouse. Nature Communications, 2018, 9: 1366. 官方页面与论文页给出的文献编号以 03751 结尾。
- ARCHS4 官方站点,关于段与新闻列表,https://archs4.org/ ,2026 年 10 月访问。
- ARCHS4 下载页,基因计数、转录本计数、TPM、阵列、相关矩阵与索引各文件的样本数与体积,https://archs4.org/download ,2026 年 10 月访问。
- ARCHS4 帮助页,流程描述、基因页说明、组织图谱说明与自动生成脚本,https://maayanlab.cloud/archs4/help ,2026 年 10 月访问。
- archs4py 官方仓库文档,数据读取接口、元数据字段、归一化与过滤函数、对齐模块,https://github.com/MaayanLab/archs4py ,2026 年 10 月访问。
- Wilks C 等,recount3 论文,用于 §6.3 的对照,https://rna.recount.bio/ 。
- EMBL-EBI Expression Atlas 官方站点,用于 §2.5 与 §6.1 的对照。
附录 D:取数代码
#-- 完整的最小可用脚本:定位、取数、清理、存盘
import archs4py as a4
VERSION = "latest" #-- 正式项目请替换为具体版本号
file = a4.download.counts("human", version=VERSION)
#-- 一、在元数据里定位样本
meta = a4.meta.meta(file, "hepatocyte",
meta_fields=["geo_accession", "series_id", "source_name_ch1"])
print("命中样本:", len(meta))
#-- 二、取数,同时剔除单细胞
mat = a4.data.meta(file, "hepatocyte", remove_sc=True)
#-- 三、清理:合并重复符号、过滤低表达
mat = a4.utils.aggregate_duplicate_genes(mat)
mat = a4.utils.filter_genes(mat, readThreshold=50, sampleThreshold=0.02,
deterministic=True)
#-- 四、归一化并存盘
norm = a4.normalize(mat, method="log_quantile")
norm.to_csv("hepatocyte_log_quantile.tsv", sep="\t")
#-- 五、把版本与样本清单一起存下,保证可复现
meta.to_csv("hepatocyte_samples.tsv", sep="\t", index=False)
print("完成:", norm.shape)
附录 E:如果只记五件事
第一,它是人类与小鼠公共 RNA-seq 的统一重处理矩阵,人类与小鼠各逾一百万样本,形态是一个 HDF5 文件。
第二,它用 kallisto 伪比对加 Ensembl 107 注释,输出基因计数、转录本计数与转录本 TPM 三层,另附一批阵列数据。
第三,它与 recount3 的分工是:它给整合矩阵与签名检索,recount3 给多粒度量化与完整元数据。
第四,它不做任何人工策展与批次校正,单细胞样本混入,元数据为上传者原样,使用前必须自己清理。
第五,它没有 ChIP-seq,尽管名字里有;也没有临床终点,想建模预后要另找资源。
编辑说明
本篇的核验时间为 2026 年 10 月 29 日。核验方式为直接读取 ARCHS4 官方站点的关于段、下载页与帮助页,以及 archs4py 官方仓库文档,并对照论文页面上的摘要与正文数字。所有样本量、文件体积与字段名称以官方页面为一级依据;论文数字仅用于说明方法论取舍与历史演进,不用于描述当前规模。
未覆盖的内容包括:基因符号的当前总数(官方未公布)、逐样本级别的处理日志(官方不公开)、以及小鼠参考基因组的确切版本(官方两处页面表述冲突,本文并列而不裁决)。任务所指的论文文献编号与官方两处页面给出的编号不一致,本文以论文页为准,并在附录 C 中说明。
本页描述的只是数据集本身的结构、规模与边界,不涉及对任何具体研究结论的评价,也不构成使用建议的法律意见。数据许可需按原始 GEO 条目逐项确认。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- geo — 共享标签:基因组学与多组学 / 转录组 / 测序数据
- fantom5 — 共享标签:基因组学与多组学 / 转录组 / 测序数据
- gencode — 共享标签:基因组学与多组学 / 转录组 / 测序数据
- astra — 共享标签:基因组学与多组学 / 转录组 / 测序数据
- recount3 — 共享标签:基因组学与多组学 / 转录组 / 测序数据
- ddbj-gea — 共享标签:基因组学与多组学 / 转录组 / 测序数据
- tcga-luad — 共享标签:基因组学与多组学 / 转录组 / 测序数据
- gtex-legacy — 共享标签:基因组学与多组学 / 转录组 / 测序数据
- gtex — 共享标签:基因组学与多组学 / 转录组 / 测序数据
- cellxgene-census — 共享标签:基因组学与多组学 / 转录组 / 测序数据
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

