利用python快速转换GenBank和RefSeq的染色体号
1.解决问题:在NCBI中参考基因组的GenBank和RefSeq sequence拥有不同的染色体号(如下图),某些情况下需要进行染色体号的相互转化。故自己写一个python脚本,进行简易的转化。
Molecule name | GenBank sequence | RefSeq sequence |
Unlocalized sequences count |
|
---|---|---|---|---|
Chromosome 1 | CM000812.5 | = | NC_010443.5 | 0 |
Chromosome 2 | CM000813.5 | = | NC_010444.4 | 0 |
Chromosome 3 | CM000814.5 | = | NC_010445.4 | 0 |
2.文件准备:
2.1 ID_list:记录有转换信息的list列表,以 \t 作为分隔符,左右一一对应。
$ cat ID_list
CM000812.5 NC_010443.5
CM000813.5 NC_010444.4
CM000814.5 NC_010445.4
CM000815.5 NC_010446.5
CM000816.5 NC_010447.5
CM000817.5 NC_010448.4
CM000818.5 NC_010449.5
...
2.2 pig_gene.bed:需要转化的bed文件,标准bed文件前6列格式,以 \t 作为分隔符,bed文件可以自己用awk手动从GFF中提取(推荐)或者利用python模块jcvi等其它方法进行提取。
# 此处利用awk从猪的参考基因组GFF文件中提取对应gene的bed文件
less GCF_000003025.6_Sscrofa11.1_genomic.gff.gz | grep -v "#" | \awk '$3=="gene" {print$0}' | \awk 'BEGIN{OFS=FS="\t"}{split($9,x,";");for(i in x){n=split(x[i],y,"=");if(n==2)INFO[y[1]]= y[2];}printf("%s\t%d\t%d\t%s\t%s\t%s\n",$1,$4-1,$5,INFO["Name"],$6,$7);delete INFO;}'|less > pig_gene.bed
$ cat pig_gene.bed
...
NC_010443.5 262243224 262258186 NDUFA8 . -
NC_010443.5 262258132 262295132 MORN5 . +
NC_010443.5 262297556 262322777 LHX6 . -
NC_010443.5 262333528 262356280 RBM18 . -
NC_010443.5 262355993 262416116 MRRF . +
...
NC_010460.4 7242377 7279345 KEL . +
NC_010460.4 7279559 7282874 C18H7orf34 . -
NC_010460.4 7285185 7341965 TRPV5 . +
NC_010460.4 7332252 7348383 TRPV6 . +
NC_010460.4 7346792 7419859 EPHB6 . -
...
2.3 Chr_Convert.py:自己写的转换的python脚本,可处理多个不同文件,用python的argpase包简单的包装了下,便于重复使用外部传参,写的比较简洁,还有待改进^-^。
# -*- coding: UTF-8 -*-
# import os
import pandas as pd
import argparse # 1、导入argpase包def parse_args():parse = argparse.ArgumentParser(description='Convert GenBank sequence and RefSeq sequence of chr ID') # 2、创建参数对象parse.add_argument('-b', '--bed', type=str,help='bed file need to convert ') # 3、往参数对象添加参数1parse.add_argument('-l', '--clist', type=str,help='Chromosome conversion corresponding list') # 3、往参数对象添加参数2parse.add_argument('-o', '--output', type=str,help='output file path') # 3、往参数对象添加参数3args = parse.parse_args() # 4、解析参数对象return args# 加载文件
def load_file(file):data = pd.read_csv(str(file), sep='\t', header=None)
# print(data)return data# 保存文件
def save_file(dataframe, file_path):dataframe.to_csv(file_path, sep='\t' ,index=False,header=None)print("数据已保存:", file_path)# 主函数
def main():if args.clist:data1 = load_file(args.clist) # 5、使用解析对象.参数获取使用命令行参数if args.bed:data2 = load_file(args.bed)data3 = data2.copy()ID_dict = dict((data1.iloc[n, 0], data1.iloc[n, 1]) #制作字典for n in range(len(data1)))ID_res_dict = {v: k for k, v in ID_dict.items()} #转换键和值,可根据情况调整for n in range(len(data3)):if data3.iloc[n, 0] in list(ID_res_dict.keys()):data3.iloc[n, 0] = ID_res_dict[data3.iloc[n, 0]] #进行转化if args.output:save_file(data3, args.output)if __name__ == '__main__':args = parse_args()main()
效果展示:python Chr_Convert.py -h
$ python Chr_Convert.py -h
usage: Chr_Convert.py [-h] [-b BED] [-l CLIST] [-o OUTPUT]Convert GenBank sequence and RefSeq sequence of chr IDoptional arguments:-h, --help show this help message and exit-b BED, --bed BED bed file need to convert-l CLIST, --clist CLISTChromosome conversion corresponding list-o OUTPUT, --output OUTPUToutput file path
共设置了三个可选参数:
-b 对应需要转换的bed文件
-l 对应转换的ID list
-o 对应输出文件的名称/路径
3.测试使用:
$ python Chr_Convert.py -l ID_list -b pig_gene.bed -o pig_gene_fix.bed
...
CM000812.5 513363 540948 ERMARD . -
CM000812.5 541009 552018 TCTE3 . +
CM000812.5 555648 576781 PHF10 . +
CM000812.5 575717 578441 C1H6orf120 . -
...
CM000830.5 87315354 87319580 RIPPLY1 . -
CM000830.5 87352694 87355724 CLDN2 . +
CM000830.5 87369310 87427296 MORC4 . -
CM000830.5 87512886 87575118 RBM41 . -
...
成功转化!自己写的小脚本,作为解决问题和代码练习,略微有些粗糙,其实还可以在此基础上再改进改进,加油研究生!
利用python快速转换GenBank和RefSeq的染色体号相关推荐
- python批量读取图片并复制入word_提取出 Word 文档里的图片 并利用 python 批量转换格式...
日常工作中,你是否遇到过这样的场景,领导发来一份 Word 文档,要求你将文档中的图片存储到一个文件夹内,并且还要将图片都改成 .jpg 或者 .png,你会怎么办?你是不是一边内心崩溃,一边开始一张 ...
- 教你一招利用Python快速去除图片水印
大家好,我是IT界搬运工. 相信大家都有在网上下载好图片但是有水印的烦恼,那么问题就来了:看到心爱的图片想要"占为己有".怎么把图片上的水印去除呢?今天我就来教你一招利用Pytho ...
- windows和Linux利用Python快速搭建一个网站
windows和Linux利用Python快速搭建一个网站 一.windows 步骤1:安装Python3(自行百度) 步骤2:在cmd窗口输入ipconfig查看本机ip地址,IPV4那一行.如:1 ...
- 钉钉一行代码_利用Python快速搭建钉钉和邮件数据推送系统
前面的文章我们写到了利用Python实现钉钉和邮件的数据推送,在数据处理这一块实现了对mysql和odps的数据获取和处理,可以满足常规业务大部分数据场景需求,在一家初创公司数据基础建设还不完善的时候 ...
- 利用Python快速绘制海报级别地图
利用Python快速绘制海报级别地图 1.简介 2.利用prettymaps快速制作海报级地图 2.1 prettymaps的几种使用方式 2.1.1 圆形模式 2.1.2 圆角矩形模式 2.1.3 ...
- [爬虫实战]利用python快速爬取NCBI中参考基因组assembly的相关信息
1.问题导向 最近在做某个课题的时候,按老师的要求需要从NCBI中批量下载不同物种的参考基因组,同时收集相应参考基因组的一些组装信息,基因组非常多,导致工作量巨大,一个一个手动收集的话,既费时又费力, ...
- python 播放视频 ftp_利用Python快速搭建HTTPFTP服务器
用 Python 快速实现 FTP 服务器 有时当你想快速搭建一个 FTP 服务器来临时实现文件上传下载时,这是特别有用的.我们这里利用 Python 的Pyftpdlib 模块可以快速的实现一个 F ...
- 【Python数据分析】利用Python快速对两个EXCEL表格进行内容比较并找出差异
如何快速找到两个EXCEL表格的数据差异?今天就与大家分享如何利用Python数据分析3分钟搞定,不管EXCEL表格有多少行数据,代码总是那么几行.不多说了,上案例(文末附Python数据分析案例下载 ...
- 利用python快速将一个工作表拆分成多个工作簿
利用python提高工作效率的一个小技巧 很多人会在日常的工作中遇到这样的工作需求:需要将一个总表按"分公司/按月份"等拆分成多个工作簿,分发给对应的人员.一开始想到的方法是:第一 ...
最新文章
- intellij idea 怎么全局搜索--转
- Nginx——反向代理路径重写重定向实践示例
- educoder 使用线程锁(lock)实现线程同步_线程间的通信(一)
- NOIP2017年11月9日赛前模拟
- c语言 字符串分隔,c语言字符串分割–strtok | 逗号分隔-huangea的博客
- Android中的IPC机制
- linux环境用tar报错,Linux环境使用TAR命令快速部署安装Oracle
- label用js,jquery取值赋值,以及怎么在后台取值
- Facebook开源项目:我们为什么要用Fresco框架?
- FTP连接成功但是无法显示目录的解决方式
- 一起来学FPGA(vhdl)三:分频器实验
- ( 教程 ) 微信公众号做淘宝优惠券自动查券返利机器人怎么设置?
- 《网络攻防》第二周作业
- 刚性捆绑,无线运营新模式
- python做一个网页多少钱_网站建设平台_
网站建设多少钱_
_做一个企业网站需要多少钱_64岁的Python之父表示退休后太无聊 正式加入微软...
- 三十七、缓存注解@Cacheable、@CacheEvict、@CachePut详解
- OSChina 周一乱弹 ——我秃我长寿?
- 天猫精灵接入ESP8266+DHT11(blink)
- ratingbar 的使用
- LeetCode代码刷题(17~24)
热门文章
- py2neo.database.work.ClientError: [Procedure.ProcedureNotFound]
- SVN出现黄色感叹号,红绿双箭头
- 虚拟现实和增强现实技术_增强现实和虚拟现实在NBA中的作用
- 视频标清、高清、超清、1080P(这么多不同规格)
- 【C++实训】基于MVC模型开发的高校教务管理系统【附完整报告+示例程序+日记+源码】
- Linux内核在中国大发展的黄金十年-写于中国Linux存储、内存管理和文件系统峰会十周年之际...
- 计算机中丢失swr.dll,initpki.dll加载失败找不到指定的模块0x80004005错误代码怎么办win10...
- javaweb_会话管理(sessionCookie)
- luogu P4233 射命丸文的笔记
- mysql微擎用户名密码_微擎后台管理员密码忘记怎么办?教你一个简单的方法