前言

今天又和NCBI数据库干上了。由于NCBI奇奇怪怪的格式,导致我们下载特定物种(某个科、某个属)比较麻烦,手动一条条下载肯定是不现实的,而对于部分很少涉及干实验的生物研究人员来讲写代码也不容易。在此我分享一个思路,能够较为方便的下载数据:

工具

  • Linux(wsl 也可以)
  • python3
  • rsync(NCBI推荐的下载方式)

代码与解析

我们使用bash来调用python脚本 RefseqDataDownload.py
RefseqDataDownload.py 需要两个物种分类学文件,数据来自于GTDB ,物种分类学文件可以自行准备或是使用附带文件A_Species_taxonomy.csv和B_Species_taxonomy.csv。请注意附带文件难以做到实时更新
RefseqDataDownload.py 需要三个参数:

  1. 原核生物类型,输入 archaea/bacteria。
  2. 下载数据的名称,例如属名Methanosarcina,注意如果是要下载某个种,请输入种属名(Methanosarcina_mazei,注意两者中间有下划线)。
  3. 下载数据的分类学地位,其中 Domain=1, Phylum=2, Class=3, Order=4, Family=5, Genus=6, Species=7。

RefseqDataDownload.py 产生Contex.txt文件,包含对应物种的下载连接,进行接下来调用 rsync 下载

import os
import subprocess
import re
import argparseclass NameException(Exception): pass
subprocess.call("pip3 install pandas",shell=True)
subprocess.call("pip3 install numpy",shell=True)
subprocess.call("pip3 install requests",shell= True)import pandas as pd
import numpy as np
import requestsdef loadcsv(type):if type == 'archaea':csvname = 'A_Species_taxonomy.csv'elif type == 'bacteria':csvname = 'B_Species_taxonomy.csv'else:raise NameException("Error: please input archaea/bacteria!")SpeciesTaxonomy = pd.read_csv(csvname,names=['ID','Domain','Phylum','Class','Order','Family','Genus','Species'])return SpeciesTaxonomyif __name__ == "__main__":ap = argparse.ArgumentParser(description = "按照分类地位下载NCBI Refseq的faa数据,数据来源例子:https://ftp.ncbi.nlm.nih.gov/genomes/refseq/archaea/Methanosarcina_mazei/representative/GCF_000007065.1_ASM706v1/GCF_000007065.1_ASM706v1_protein.faa.gz")ap.add_argument("-t", help = "原核生物的类型,输入 archaea/bacteria", required = True)ap.add_argument("-n", help = "下载数据的名称", required = True)ap.add_argument("-l", help = "分类等级, Domain=1, Phylum=2, Class=3, Order=4, Family=5, Genus=6, Species=7", required = True)opts = ap.parse_args()type = opts.tinputName = opts.nlevel = int(opts.l)SName = inputName.replace("_"," ")SpeciesTaxonomy = loadcsv(type)ColumnIndex = SpeciesTaxonomy.columns[level]IDinfo = (SpeciesTaxonomy.ID[SpeciesTaxonomy[ColumnIndex] == SName][0:][:3]== "GCF")OutputFrame = pd.DataFrame({'ID':SpeciesTaxonomy.ID[SpeciesTaxonomy[ColumnIndex] == SName],'Species':SpeciesTaxonomy.Species[SpeciesTaxonomy[ColumnIndex] == SName]})OutputFrame = OutputFrame[OutputFrame['ID'].apply(lambda x:x[0:3]) ==  'GCF']OutputFrame = OutputFrame.drop_duplicates(subset= ["Species"],keep='first')count = 0ContextFilename = inputName + 'Context.txt'with open(ContextFilename, "w") as f:for i in OutputFrame.Species:SpeciesName = i.replace(" ",'_')archaea_url = "https://ftp.ncbi.nlm.nih.gov/genomes/refseq/"+ type +"/"+SpeciesName+"/representative/"request = requests.get(archaea_url)raw_list = re.compile(r'<a.*?>(.*?)</a>').finditer(request.text.strip())for i in raw_list:x = i.group(1)if x[0:3] == 'GCF':count = count + 1faafile = x[:-1] + "_protein.faa.gz"finalUrl_https = archaea_url + x + faafilefinalUrl_rsync = finalUrl_https.replace("https","rsync")f.write(finalUrl_rsync)f.write('\n')#print(finalUrl_rsync)print("完成搜索:",inputName,"\t序列总数:",count)

使用download.sh 完成下载:

#!/bin/bashpython3 RefseqDataDownload.py -t $1 -n $2 -l $3#echo download data from NCBIwhile read line
do rsync --copy-links --recursive --times --verbose $line $2/
done < $2Context.txt

rsync下载速度一般,能翻墙的话速度会快些。

使用例子

# 在Linux系统上输入如下命令
bash download.sh archaea Methanosarcina 6
# 先产生一个MethanosarcinaContext.txt 文本文件
# 之后产生一个 Methanosarcina 文件夹。存放下载的 protein.faa.gz 数据

建议

如果想要下载其他的数据(.gbff,.fna,)可以修改RefseqDataDownload.py 代码,将faafile = x[:-1] + "_protein.faa.gz"改为对应的其他格式:fnafile = x[:-1] + "_genomic.fna.gz "
如果要下载原核生物的所有基因组数据,方法请参照 从NCBI 上下载 gbff 文件并得到 CDS 信息。

代码下载

https://download.csdn.net/download/LSD_1943/86711079?spm=1001.2014.3001.5501

从NCBI refseq 中下载特定物种的蛋白质数据相关推荐

  1. Chrome浏览器中清除特定网站的Cookie数据

    背景:当我们在网站上遇到错误时,经常会用到的一个方法就是清除Cookie,清除网站的Cookie和网站数据来重置本地的缓存,很多客户端引起的错误都可以使用该方法修复, 但是在清除Cookie时有一个问 ...

  2. ncbi-genome-download在NCBI上批量下载基因组

    ncbi-genome-download在NCBI上批量下载基因组 1.简介 2. 安装 3. 使用 1.简介 ncbi-genome-download是一个可以直接从NCBI上批量下载序列的软件,数 ...

  3. 论文系统Step1:从日志记录中提取特定信息

    论文系统Step1:从日志记录中提取特定信息 前言 论文数据需要,需要实现从服务器日志中提取出用户的特定交互行为信息.日志内容如下: 自己需要获取"请求数据包一行的信息"及&quo ...

  4. 利用sentinel hub Python开发包查询和下载Sentinel-2等卫星遥感数据

    利用sentinel hub Python开发包查询和下载Sentinel-2等卫星遥感数据 1. 描述   sentinelhub Python包支持用户利用两种方式进行卫星遥感数据的下载和处理.第 ...

  5. 从NCBI当中SRA数据库中下载高通量测序数据

    从NCBI当中SRA数据库中下载高通量测序数据 NCBI sra 数据下载 用迅雷替代官方的prefetch批量下载SRA测序数据,更快更稳定! 用别人的数据,发自己的文章 由于大多数杂志在文章发表前 ...

  6. android开发微博搜索,一款帮助用户自动提取微博热搜、知乎热榜、百度实时热点条目中与特定领域...

    HotDetector(全网热门探测仪) 全网热门探测仪一款帮助用户自动提取微博热搜.知乎热榜.百度实时热点条目中与特定领域(科技.娱乐.体育.自定义)有关内容的实用App. 它使用Java SE 8 ...

  7. linux命令行学习游戏,如何在Linux命令行中下载GOG游戏

    如果你是一个游戏玩家同时也是一个Linux用户,你可能很高兴在GOG在几个月前宣布它会在你最喜欢的操作系统上推出游戏.如果你之前从来没有听说过GOG,我鼓励你看看他们的产品目录中的"很棒的老 ...

  8. python3 下载特定网页上的文件

    python3 下载特定网页上的文件 参考:https://blog.csdn.net/csdn86868686888/article/details/82108146 https://www.cnb ...

  9. NCBI RefSeq命名格式的详细说明

    转自:http://liucheng.name/379/ NCBI RefSeq (美国国立生物技术信息中心参考序列库) 是目前世界上最具有权威性的序列数据库.NCBI的参考序列计划(RefSeq)将 ...

最新文章

  1. jQuery插件开发--(转)
  2. 【java设计模式】-00目录
  3. 二级考试java模拟考试_2017年计算机二级考试Java模拟试题及答案
  4. 浅谈开发模式及架构发展
  5. 5个层次的赚钱模式,看看你是哪一种?
  6. 【重识 HTML + CSS】盒子模型相关知识点
  7. 全球高精度5米 12.5米 30米地形(DEM)高程数据(tif格式)下载
  8. Consider revisiting the entries above or defining a bean of type in your configuration.
  9. 亚马逊Amazon广告API如何申请注册?
  10. SMA :Structured Multimodal Attentions for TextVQA --- 论文阅读笔记
  11. 用计算机如何计算投资回收期,动态投资回收期怎么算的?
  12. C. Range Increments(差分)
  13. oracle范围分区合并,ORACLE 范围分区 partition-range分区
  14. 北航计算机复试英语,考研并不困难:北航计算机考研之路
  15. 【epoll】epoll使用详解(精髓)--研读和修正
  16. python乌龟画五角星_使用Python的turtle模块画五角星
  17. 【Linux命令学习3】创建目录(mkdir)和删除空目录(rmdir),创建普通文件(touch),对目录或文件进行复制(cp)。
  18. Lua中,泛型for循环遍历table时,ipairs和pairs的区别
  19. 这次财报,同程艺龙又沾了腾讯的光
  20. Matlab:实现光波偏振态仿真

热门文章

  1. V神赞许的Aztec,如何让以太坊更隐私?
  2. c语言72%10等于,“72法则”和“115法则”说的什么?
  3. 电脑怎么压缩jpg图片?上传jpg图片过大怎么办?
  4. 2021年河南省高考数据统计:河南省参加考试人数占报名人数的83.7%,本土156所高校(1所211大学)
  5. 用C语言写钢琴小程序的代码,用C语言编写钢琴小程序
  6. iPhone手机忘记了ID账号密码怎么办
  7. 前沿分享|数澜科技联合创始人副总裁 江敏:基于云原生数据仓库AnalyticDB PostgreSQL的最佳实践
  8. biu biu biu
  9. 洛谷2448 无尽的生命[树状数组 离散化]
  10. CVPR 2021 | Involution:超越卷积和自注意力的神经网络新算子