搜索
查看: 13583|回复: 7

ID转换大全

[复制链接]

633

主题

1182

帖子

4030

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4030
发表于 2017-2-12 15:23:18 | 显示全部楼层 |阅读模式
实际上掌握了编程的思维,任何一门语言都可以做id转换!
对于初学者来说,这个是非常实用的一个,很多人当初就是因为要做这个转换,才慢慢走入了编程的道路。
使用大部分软件的时候,第一步就是文件数据准备,基本上都是数据的拆分和整合,这个拿id转换做基础练习也挺好的!
本来应该作为第一讲,但是当初认为太基础了,而忽略掉了,放在这里也好,大部分同学已经跟我们学习两个月了,可以拿这个题目来检验自己的水平了!
ID转换简单来说,就是找到对应关系表,然后用hash或者字典对应一下即可。但也可以很复杂:
为什么要转换id?
有多少种ID?
什么id权威?
id是一一对应的吗?
ID是什么生信组织维护?
id有版本吗?
id一定正确吗?
什么情况下选择什么id?
不同数据库下载的id对应表一定一样吗?

你们看我的博客,就知道,我是如何重视ID转换的:

用R的shiny包写一个基因的ID转换小程序

gene的各种ID转换终结者-bioconductor系列包

gene的symbol与entrez ID并不是绝对的一一对应的

还有论坛里面的:生信人必须了解的各种ID表示方式


当然,我们时间有限,不可能面面俱到,很多东西都是需要自己去慢慢挖掘的!
需要集中学习的是 entrez gene ID, HUGO symbol, refseq ID, ensembl ID

作业,就是用perl,python,R 来把1~1000 这1000个 entrez gene ID转为另外3个吧,如果该entrez gene ID不存在,就不用转了。

请自己下载基因ID的对应关系文件,参考,http://www.bio-info-trainee.com/75.html  

最后:
请务必把下面的代码运行一下,把输出的all_gene_bioconductor.html文件好好看看!
[AppleScript] 纯文本查看 复制代码
rm(list=ls())
library(org.Hs.eg.db)
eg2symbol=toTable(org.Hs.egSYMBOL)
eg2name=toTable(org.Hs.egGENENAME)
eg2alias=toTable(org.Hs.egALIAS2EG)
eg2alis_list=lapply(split(eg2alias,eg2alias$gene_id),function(x){paste0(x[,2],collapse = ";")})
GeneList=mappedLkeys(org.Hs.egSYMBOL)
if( GeneList[1] %in% eg2symbol$symbol ){
  symbols=GeneList
  geneIds=eg2symbol[match(symbols,eg2symbol$symbol),'gene_id']
}else{
  geneIds=GeneList
  symbols=eg2symbol[match(geneIds,eg2symbol$gene_id),'symbol']
}
geneNames=eg2name[match(geneIds,eg2name$gene_id),'gene_name']
geneAlias=sapply(geneIds,function(x){ifelse(is.null(eg2alis_list[[x]]),"no_alias",eg2alis_list[[x]])})

createLink <- function(base,val) {
   sprintf('<a href="%s" class="btn btn-link" target="_blank" >%s</a>',base,val) ##target="_blank" 
}
gene_info=data.frame(   symbols=symbols,
                        geneIds=createLink(paste0("http://www.ncbi.nlm.nih.gov/gene/",geneIds),geneIds),
                        geneNames=geneNames,
                        geneAlias=geneAlias,
                        stringsAsFactors = F
)  
#library("xtable") 
#print(xtable(gene_info), type="html",include.rownames=F, file='all_gene.anno',sanitize.text.function = force)
file='all_gene_bioconductor.html'
y <- DT::datatable(gene_info,escape = F,rownames=F)
DT::saveWidget(y,file) 









上一篇:孤独而坚强的Y染色体
下一篇:生信编程直播第10题:根据指定染色体及坐标得到位置信息
你这个问题很复杂,需要打赏,请点击 http://www.bio-info-trainee.com/donate 进行打赏,谢谢
回复

使用道具 举报

7

主题

26

帖子

790

积分

版主

Rank: 7Rank: 7Rank: 7

积分
790
发表于 2017-3-13 21:17:22 | 显示全部楼层
生信人必须了解的各种ID表示方式(加个链接http://www.biotrainee.com/thread-43-1-1.html)话说里面那张图片为啥看不了
回复 支持 反对

使用道具 举报

0

主题

4

帖子

49

积分

新手上路

Rank: 1

积分
49
发表于 2017-3-19 21:05:11 | 显示全部楼层
R
[AppleScript] 纯文本查看 复制代码
rm(list=ls())

library("hgu95av2.db")
ls('package:hgu95av2.db')
probe2entrezID=toTable(hgu95av2ENTREZID)
probe2symbol=toTable(hgu95av2SYMBOL)
probe2genename=toTable(hgu95av2GENENAME)

my_probe = sample(unique(mappedLkeys(hgu95av2ENTREZID)),30)

tmp1 = probe2symbol[match(my_probe,probe2symbol$probe_id),]
tmp2 = probe2entrezID[match(my_probe,probe2entrezID$probe_id),]
tmp3 = probe2genename[match(my_probe,probe2genename$probe_id),]

write.table(my_probe,'my_probe.txt',quote = F,col.names = F,row.names =F)
write.table(tmp1$symbol,'my_symbol.txt',quote = F,col.names = F,row.names =F)
write.table(tmp2$gene_id,'my_geneID.txt',quote = F,col.names = F,row.names =F)




python
[Python] 纯文本查看 复制代码
os.chdir("Z:/Python/生信技能树 第八讲 ID转换")
import time
import re
import os
from collections import OrderedDict
mapping = OrderedDict()
with open("geneid2symbol.txt",'rt') as f:
    for l in f:
        l_list = l.strip('\n').split(' ')
        mapping[l_list[1]]=l_list[0]
        
mapping['PTEN']
with open("my_symbol.txt",'r') as f:
     for l in f:
        gene = l.strip('\n')
        if (gene in mapping):
            print (gene,mapping[gene])
回复 支持 反对

使用道具 举报

11

主题

50

帖子

275

积分

版主

Rank: 7Rank: 7Rank: 7

积分
275
发表于 2017-3-29 02:38:23 | 显示全部楼层
学习了。我直接sort两份annotation, 再一行join完事。个人觉得R慢
回复 支持 反对

使用道具 举报

3

主题

43

帖子

212

积分

中级会员

Rank: 3Rank: 3

积分
212
发表于 2017-4-6 13:35:08 | 显示全部楼层
Mint 发表于 2017-3-29 02:38
学习了。我直接sort两份annotation, 再一行join完事。个人觉得R慢

就你能
回复 支持 反对

使用道具 举报

0

主题

8

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2017-5-1 17:32:05 | 显示全部楼层

求助各位大神,我用affy分析数据,下载了一个affyPLM,但是‘hgu133plus2cdf这个包一直安装不了,请大家指点指点!
installing the source package ‘hgu133plus2cdf’

试开URL’http://bioconductor.org/packages ... s2cdf_2.18.0.tar.gz
Content type 'application/x-gzip' length 4353300 bytes (4.2 MB)
downloaded 12 KB

Error in setwd(exdir) : 无法改变工作目录

The downloaded source packages are in
        ‘C:\Users\zz\AppData\Local\Temp\RtmpGCguAD\downloaded_packages’
Error in getCdfInfo(object) :
  Could not obtain CDF environment, problems encountered:
Specified environment does not contain HG-U133_Plus_2
Library - package hgu133plus2cdf not installed
Library - package hgu133plus2cdf not installed
此外: Warning messages:
1: In download.file(url, destfile, method, mode = "wb", ...) :
  downloaded length 12288 != reported length 4353300
2: 运行命令'"C:/PROGRA~1/R/R-33~1.3/bin/x64/R" CMD INSTALL -l "d:\Documents\R\win-library\3.3" C:\Users\zz\AppData\Local\Temp\RtmpGCguAD/downloaded_packages/hgu133plus2cdf_2.18.0.tar.gz'的状态是1
3: In install.packages(cdfname, lib = lib, repos = biocinstallRepos(),  :
  installation of package ‘hgu133plus2cdf’ had non-zero exit status
回复 支持 反对

使用道具 举报

3

主题

20

帖子

156

积分

注册会员

Rank: 2

积分
156
发表于 2017-10-16 17:56:47 | 显示全部楼层
Mint 发表于 2017-3-29 02:38
学习了。我直接sort两份annotation, 再一行join完事。个人觉得R慢

简单粗暴给力
回复 支持 反对

使用道具 举报

2

主题

23

帖子

409

积分

中级会员

Rank: 3Rank: 3

积分
409
发表于 2018-1-6 10:23:48 | 显示全部楼层
感谢前辈!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-11-21 02:11 , Processed in 0.031628 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.