Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

原始数据下载专题 | datasets——基因与基因组数据查询和获取的NCBI官方解决方案 #6256

Closed
ixxmu opened this issue Jan 2, 2025 · 1 comment

Comments

@ixxmu
Copy link
Owner

ixxmu commented Jan 2, 2025

https://mp.weixin.qq.com/s/3NZ26pV7ZEPVawoMYe9Ztg

@ixxmu
Copy link
Owner Author

ixxmu commented Jan 2, 2025

原始数据下载专题 | datasets——基因与基因组数据查询和获取的NCBI官方解决方案 by 萌哥与生信

背景 

原始数据下载专题到最后一个工具啦,前面介绍的很多工具都是下载原始的测序数据的,而这个则不同,它是NCBI官方推出的用于查询和获取基因、基因组数据的工具。

NCBI的官方工具大家有印象的可能是Entrez,但是今天要介绍的这个datasets是一套新的更现代化的工具:

简单介绍Entrez

EntrezNCBI的综合搜索和检索系统,涵盖多个数据库,如PubMed、基因、核酸序列和蛋白质序列等。它允许用户通过固定的URL语法进行搜索、链接和检索操作。这些工具使研究人员能够以编程方式自动访问NCBI的各种数据库。

简单介绍Datasets

Datasets是NCBI推出的现代化工具,旨在简化基因组、分类和基因信息的访问和下载。它提供了一个统一的入口,用户可以通过Web界面命令行界面获取所需的数据集。NCBI已宣布,Datasets将取代传统的Genome和Assembly资源,提供更流畅的用户体验。

安装 

conda一键完成:

conda install ncbi-datasets-cli

这个工具还在活跃的开发中,基本上半个月就更新一个小版本,目前最新版是16.39.0

如果你直接搜索datasets,那个是huggingface旗下的用于机器学习模型训练的数据集,跟咱们今天介绍的不是一个东西,要分清楚哦。

使用 

datasets主要的三个子程序分别是:

  • summary: 打印包含基因、基因组、分类学或病毒元数据的数据报告
  • download:以zip压缩包形式下载一个基因、基因组或者病毒的数据集
  • rehydrate:解除冻结已下载的冻结数据集
Data Retrieval Commands
  summary     Print a data report containing gene, genome, taxonomy or virus metadata
  download    Download a gene, genome or virus dataset as a zip file
  rehydrate   Rehydrate a downloaded, dehydrated dataset

前两个功能大家应该好理解,我解释一下第三个rehydrate:

在NCBI的datasets命令行工具中,rehydrate命令用于处理之前下载的“脱水”数据集。

当您使用datasets download命令并添加--dehydrated标志下载数据集时,系统会创建一个包含元数据和数据文件位置的压缩包,但不包含实际的数据文件。

这种方法适用于需要下载大量数据的情况,因为初始下载的文件较小,便于传输和管理。

下载并解压缩该压缩包后,您可以使用rehydrate命令根据元数据中的文件位置下载实际的数据文件,从而“重新填充”数据集。这种两步下载过程提高了大规模数据集的下载效率和灵活性。

下载这个功能比较常用咱们先来使用这个。 下载一共能下载四个方面的内容:

  • gene:下载一个基因的蛋白质和DNA序列
  • genome:下载一个基因组的组装注释数据
  • taxonomy:根据进化分类下载数据,例如taxon human,sars-cov-2
  • virus: 下载病毒相关的数据

场景1:下载基因组数据

基因组文件下载

在大多数的生信分析的准备工作里都有要下载基因组这一步,以前都是打开网页不断地查询之后复制链接地址然后下载,现在直接一行命令就可以完成了。

genome这个子程序里,又分为通过taxon或者accession来下载。

例如官方给的案例:

datasets download genome accession GCF_000001405.40 --chromosomes X,Y --include genome,gff3,rna
datasets download genome taxon "bos taurus" --dehydrated
datasets download genome taxon human --assembly-level chromosome,complete --dehydrated
datasets download genome taxon mouse --search C57BL/6J --search "Broad Institute" --dehydrated

taxon途径下载一下拟南芥Arabidopsis thaliana)的基因组文件。

datasets可以不仅仅是把参考基因组文件下了,还把一整套的基因组注释文件也一起下载下来:

datasets download genome taxon  "Arabidopsis thaliana" --reference --include genome,gff3,gtf,rna,cds,protein --filename Arabidopsis.genome.zip
  • 如果不指定--filename则默认会使用ncbi_dataset.zip作为输出的文件名。
  • --reference用于指定NCBI官方打了reference标记的版本,也就是官方认定的参考基因组版本,如果不加这个参数,默认会下载所有的基因组版本。
  • --include用于指定要下载的内容,genome,gff3,gtf,rna,cds,protein,gbff,seq-report都是可选的,默认是仅下载genome
  • 像一些常见的物种有nickname,例如humanmouse就可以不用写拉丁名直接用常用名词下载了。

下载一个物种的所有基因组组装版本

当涉及到大量数据下载的时候就可以用--dehydrated这个参数先脱水, 也就是先获取信息,然后再rehydrate下载想要的信息。

datasets download genome taxon "Arabidopsis thaliana" --dehydrated --filename Arabidopsis.genome.all.zip

下载下来之后解压开,有文件里有一个叫ncbi_dataset/fetch.txt,这个文件大概长这样:

https://api.ncbi.nlm.nih.gov/datasets/fetch_h/R2V0UmVtb3RlRGF0YWZpbGU/eNqTyuRKz0tOytROKymw0tdPT83Lz00t1k_MydF3d3bUNzAwAGJDfXNjUxA_3gAEDIE8PaP4EEfPIEMDPUOcEvFg0zKT9dLyEvXSqwwYLRgBs5Ud6A        0            data/GCA_000001735.2/GCA_000001735.2_TAIR10.1_genomic.fna
https://api.ncbi.nlm.nih.gov/datasets/fetch_h/R2V0UmVtb3RlRGF0YWZpbGU/eNqTyuXKzktOytROKymw0tdPT83Lz00t1k_MydF3d3bUNzAw0DcyNNQ3MjcF8eOBfCAXyNMzjHcM9gWzywzxSMWDTcxM1kvLS9RLrzJgtGAEADJ9Hx4       0            data/GCA_000211275.1/GCA_000211275.1_ASM21127v1_genomic.fna

看起来是一个三列的文件,第一列是要下载的文件的URL地址,第二列是个文件大小,显示为0,这可能表示文件大小未知或未指定。

第三列表示文件在本地存储时的路径。 我把前两行的内容代替掉整个fetch.txt文件,然后运行下面这个

datasets rehydrate --directory .
萌哥吐槽时间:

它这个功能有点傻,是自动匹配*/ncbi_dataset/fetch.txt这样一个地址的,如果重命名了文件夹就找不到了,会报下载失败。

也不能在上面的命令里指定datasets rehydrate --directory ncbi_dataset/,因为它会去找ncbi_dataset/ncbi_dataset/fetch.txt这样的一个地址然后告诉你找不到这个地址而下载失败。不够智能啊。

下载下来的文件会存放在./ncbi_dataset/data以各自的accession id命名的文件夹里。

场景2:下载基因数据

可以用以下的方式下载gene数据

datasets download gene gene-id 672
datasets download gene symbol brca1 --taxon "mus musculus"
datasets download gene accession NP_000483.3
datasets download gene gene-id 2778 --fasta-filter NC_000020.11,NM_001077490.3,NP_001070958.1

gene支持下面这四种方式:

  • gene-id: 是一串纯数字,例如著名的人类的tp53基因7157
  • symbol:基因的名称,比如brca1tp53
  • accession:基因的NCBI编号
  • taxon:NCBI的Taxonomy ID,拉丁名或者是常用名。

有的时候做进化树,会使用到特定的基因,比如酵母(saccharomyces cerevisiae)的RPO21基因。

这个基因的gene id851415,而RPO21则是Official SymbolYDL140C是这个基因的Locus tag(不支持这个关键字)。 但是我尝试了几次:

datasets download gene symbol rpo21
datasets download gene symbol RPO21 #试了试大写

得到的结果都是

Error: No genes found that match selection
Use datasets download gene symbol <command> --help for detailed help about a command.

看起来这个symbol的功能可能目前只适用于人类的Official Symbol,感觉可以去提一个issue。

Symbol下载tp53倒是非常丝滑

datasets download gene symbol tp53 --ortholog all --filename tp53.zip
  • --ortholog是把所有物种中含有这个symbol的基因都下载下来。感觉很适合用在做系统发育树的分析上。

gene-id的方法去下载数据倒是很容易。

datasets download gene gene-id 851415 --filename RPO21.zip

下载下来的压缩文件默认情况下会同时包含DNA序列和蛋白质序列。

如果你想下载时同时包含5' UTR或者3' UTR的信息,也可以也可以用--include来指定。

萌哥碎碎念 

也没想到自己真能把这个系列写完,之后可能还想再更新一个大道至简的原始数据下载方法,介绍一下https://sra-explorer.info/ 这个工具结合wget或者curl或者axel的下载方式作为这个专题的收尾,然后再整理成一个大合集推文方便大家横向比较。

接下来距离我毕业大概还有五百多天,一半年,说长不长说短不短,要开始转变重心从咔咔分析数据到开始学习如何写文章了。我也收集了一些关于如何写学术论文的文章,到时候可以分享读文献笔记作为一个“从零开始学习学术论文写作”的专题给大家。总的框架是输入,模仿,输出,大家敬请期待哈。

说起来似乎是明白写公众号的意义了,其实还是主要是服务我自己,除非你是广告主来约投放,那么可以为了你写东西,否则绝大多数的内容都是为我自己服务的。当然包括给粉丝回答问题修复bug这也是一种为我服务。写推文的过程也是我自己整理学习和内化的一个过程,挺好。


@ixxmu ixxmu changed the title archive_request 原始数据下载专题 | datasets——基因与基因组数据查询和获取的NCBI官方解决方案 Jan 2, 2025
@ixxmu ixxmu closed this as completed Jan 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant