Source
Ensembl 的人类基因注释,用 evanverse::download_gene_ref("human") 导出,脚本只做两件事:核对十二个列都在,然后按固定顺序写出 CSV。所以这份数据的口径完全等于 Ensembl release 115 的口径。
ensembl_id 不是唯一键。 91703 行里只有 86369 个不同的 ID——5334 行是扇出来的,原因只有一个:同一个 Ensembl 基因映射到多个 Entrez ID(除 entrez_id 外其余列完全相同)。拿它做 join 会静默地把左表放大,而且不报错。只要 Entrez 那一列,就先 distinct(ensembl_id, .keep_all = TRUE);要保留全部映射,就明确知道自己在做一对多。
symbol 缺 40268 个。 四成多的条目没有基因符号——大量 lncRNA、假基因、TEC 条目在 Ensembl 里只有 ID 没有 symbol。拿 symbol 做 ID 转换会静默丢掉这四成,这是这份数据最大的坑。做映射前先看有效行数。entrez_id 缺得更多,六成——Ensembl 到 Entrez 的映射本来就不是满射,别指望 join 得上。
chromosome 有 528 个不同值。 不是 25 个——除了 1–22、X、Y、MT,还有几百条 scaffold(KI270728.1 那种)。这一列也因此是字符型不是整数,排序时 "10" 会排在 "2" 前面。
species / ensembl_version / download_date 三列是常量,join 时无用,但留着能让人知道这份快照的来路。
Use cases
它主要是查表用的,能画的图不多但有几个很典型:
- 排序条形图:
gene_type的构成,38 类,protein_coding 只占一小部分 - 染色体密度图:按
chromosome分组、用start定位的基因密度 - 直方图:基因长度(
end − start)的分布,跨度极大,要取对数
按染色体作图前必须先筛掉 scaffold,否则 x 轴会长出几百个刻度。gene_type 的 38 类也超出任何一套定性配色的容量——画之前先合并成几大类(编码 / 假基因 / 非编码 RNA / 其他),否则颜色不够用,图也读不了。