背景介绍
今天要介绍的ffq
和昨天的gget
是同一个lab出品的,都是加州理工学院的pachterlab
,我研究了一下这个实验室的PI,Dr. Lior Pachter
,不看不知道,一看好家伙,直呼好家伙。
他参与过最早的转录组比对软件TopHat
,
并且他还是kallisto
的通讯作者(10.1038/nbt.3519
),也是cufflinks
的通讯作者(10.1038/nbt.1621
),总引用超过11w次
,妥妥的大牛。
他去年发表的splitcode
我也用过(是一个高效的用来从测序数据中拆分信息用的工具),依稀记得似乎就是因为这个软件才发现的ffq
和gget
这两个工具。
言归正传,聊聊ffq
这个软件。一句话介绍:
ffq 接收一个登录号(accession),并返回该登录号的元数据(metadata),以及通过 GEO、SRA、EMBL-EBI、DDBJ 和 Biosample 之间的连接,获取的所有下游登录号的元数据
这个软件主要是从以下的数据库里下载原始测序数据用的,属于最符合我这个专题的一集了:
- GEO: Gene Expression Omnibus,
- SRA: Sequence Read Archive,
- EMBL-EBI: European Molecular BIology Laboratory’s European BIoinformatics Institute,
- DDBJ: DNA Data Bank of Japan,
- NIH Biosample: Biological source materials used in experimental assays,
- ENCODE: The Encyclopedia of DNA Elements.
实现原理
ffq总体的架构图如下:
[图片上传失败...(image-5916ff-1735253481938)]
输入一个GEO数据的登录号,可以找到对应的sample
的编号进而找到下面对应的实验号(Experiments
)和Runs
的编号,当然,也接受Study
和sample
的编号。ENCODE
的每一级编号也是支持的(当然这个我不太熟悉,有需要的朋友可以自己试试哈)
安装
conda或者pip都可以的:
conda
conda install ffq
pip
python -m pip install ffq
当前最新版的版本号是0.3.1
使用
打印出帮助文档看一眼:
ffq --help
usage: ffq [-h] [-o OUT] [-l LEVEL] [--ftp] [--aws] [--gcp] [--ncbi] [--split] [--verbose] [--version] IDs [IDs ...]
ffq 0.3.1: A command line tool to find sequencing data from SRA / GEO / ENCODE / ENA / EBI-EMBL / DDBJ / Biosample.
positional arguments:
IDs One or multiple SRA / GEO / ENCODE / ENA / EBI-EMBL / DDBJ / Biosample accessions, DOIs, or paper titles
optional arguments:
-h, --help Show this help message and exit
-o OUT Path to write metadata (default: standard out)
-l LEVEL Max depth to fetch data within accession tree
--ftp Return FTP links
--aws Return AWS links
--gcp Return GCP links
--ncbi Return NCBI links
--split Split output into separate files by accession (`-o` is a directory)
--verbose Print debugging information
--version show program's version number and exit
支持各大数据库,比较神奇的功能是还能根据论文的DOI号来下载数据。
一句话介绍什么是DOI号:
DOI号(数字对象标识符,Digital Object Identifier)是用于唯一标识学术论文、图书、报告等数字内容的永久链接,便于在学术领域中快速检索和引用相关资源。
DOI号就像学术论文的“身份证号”,用来标记和定位每篇论文,方便别人快速找到和引用它。
场景1:根据GEO编号查找数据下载地址
ffq --ftp GSE241397 -o GSE241397.txt
使用起来蛮简单的,程序会返回一个很大的json列表,可以结合jq来解析(jq这个命令也可以用conda安装哈):
ffq --ftp GSE241397 -o GSE241397.txt
cat GSE241397.txt | jq -r '.[].url'
得到
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR257/050/SRR25724550/SRR25724550_1.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR257/050/SRR25724550/SRR25724550_2.fastq.gz
...
-
-r
:以原始格式输出,去掉双引号。 -
.[].url
:表示从 JSON 文件的每个对象中提取 url 字段的值。
如果你想同时把样品名称也整理出来,可以这样:
cat GSE241397.txt | jq -r '.[] | "\(.accession)\t\(.url)"'
就能得到
SRR25724550 ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR257/050/SRR25724550/SRR25724550_1.fastq.gz
SRR25724550 ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR257/050/SRR25724550/SRR25724550_2.fastq.gz
SRR25724549 ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR257/049/SRR25724549/SRR25724549_1.fastq.gz
...
拿到url之后就可以自己去写个循环下载了。
是的ffq
是不支持内置的下载的。
这一点吧,完全不如fastq-dl
和gget
。
当然下载的时候用其他的编号也是可以的,比如SRA的Runs
编号(SRR, ERR, DRR
)或者Experiments
编号(ERX, DRX, SRX
)。
具体的列表可以看一下我前面介绍的fastq-dl
工具。
萌哥碎碎念:
很好笑的是ffq居然不支持
BioProject
的编号,例如PRJNA483730
,直接就会error,告诉你这个编号不合规。emmm,坐等ffq更新吧。毕竟才
0.3.1
版本,它还是个孩子啊
场景2:根据论文的ID或者DOI号下载数据
这个功能看起来是真的蛮好的, 有的时候想要复现文章,下载数据的时候要费点功夫才能找到论文对应的数据的编号。
但是这个功能需要改进,并不是所有的论文提供DOI号都能成功。
比如我测试了我们lab之前师姐发表的论文的DOI号:
ffq 10.1101/gr.245456.118
[2024-12-26 16:12:19,226] WARNING Searching by DOI may result in missing information.
[2024-12-26 16:12:19,226] INFO Searching for DOI '10.1101/GR.245456.118'
[2024-12-26 16:12:19,419] INFO Searching for Study SRP with title 'Pervasive and dynamic transcription initiation in <i>Saccharomyces cerevisiae</i>'
[2024-12-26 16:12:19,963] WARNING No studies found with the given title. Searching Pubmed for DOI '10.1101/GR.245456.118'
[2024-12-26 16:12:20,293] INFO Searching for GEO record linked to Pubmed ID '31076411'
[2024-12-26 16:12:20,571] WARNING No GEO records are linked to the Pubmed ID '31076411'. Searching for SRA record linked to this Pubmed ID.
[2024-12-26 16:12:21,828] ERROR No SRA records are linked to Pubmed ID '31076411'
usage: ffq [-h] [-o OUT] [-l LEVEL] [--ftp] [--aws] [--gcp] [--ncbi] [--split] [--verbose] [--version] IDs [IDs ...]
ffq: error: For possible failure modes, please see https://github.com/pachterlab/ffq#failure-modes
直接就报错了。我看了一眼,他的实现原理应该是根据DOI
号去查找Pubmed
的ID
,然后根据Pubmed
的ID
去查找与之相关的SRA
或者相关的记录值。但是如果pubmed
没有对应的记录,那么也就无从查起了。
但是有的论文是可以的:
ffq 10.1016/j.cell.2018.08.067
就能够查找到对应的数据,再用上面的命令一通解析,就相对轻松地得到你想要的数据啦。
萌哥碎碎念
相对于前两款软件,这个工具的能力稍弱了一点,如果下载原始数据我目前首选还是fastq-dl
。
让子弹再飞一会儿吧。
网友评论