前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >拟南芥的基因ID批量转换?差异基因,GO/KEGG数据库注释(转录组直接送你全套流程)

拟南芥的基因ID批量转换?差异基因,GO/KEGG数据库注释(转录组直接送你全套流程)

作者头像
生信技能树
发布于 2019-07-04 08:55:35
发布于 2019-07-04 08:55:35
8.2K00
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

新手遇到的问题都是类似的,比如批量ID转换

虽然我写过大量的教程:ID转换大全 不过都需要R基础,因为是大批量转换啊!

但热心肠的植物生物信息学教学大佬还是友善的给出了解决方案

我也狗尾续貂制作了一个网页工具教程:

简单的3个步骤,不会代码也可以很容易把ID批量转换啦!

不过有趣的是我搜索电脑资料,看到了2年前写的拟南芥教程。

不过我为什么会花时间写拟南芥教程呢?

1 首先加载必要的包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(stringr)
# source("https://bioconductor.org/biocLite.R")
# biocLite("clusterProfiler")
# biocLite("org.At.tair.db")
library(clusterProfiler)
library(org.At.tair.db)

2 然后导入数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
deg1=read.table('https://raw.githubusercontent.com/jmzeng1314/my-R/master/DEG_scripts/tair/DESeq2_DEG.Day1-Day0.txt')
deg1=na.omit(deg1)
head(deg1)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##              baseMean log2FoldChange    lfcSE      stat       pvalue
## AT3G01430   22.908929      18.989990 2.148261  8.839704 9.597263e-19
## AT1G47405   20.709551      20.958806 2.434574  8.608820 7.381677e-18
## AT2G33830 1938.159722      -2.560609 0.312663 -8.189678 2.619266e-16
## AT5G28627    8.118376     -21.131318 2.875691 -7.348257 2.008078e-13
## AT2G33750    9.789740     -19.989301 2.847513 -7.019915 2.220033e-12
## AT3G54500 2238.314652       2.720430 0.386305  7.042182 1.892517e-12
##                   padj
## AT3G01430 1.858318e-14
## AT1G47405 7.146571e-14
## AT2G33830 1.690562e-12
## AT5G28627 9.720602e-10
## AT2G33750 7.164418e-09
## AT3G54500 7.164418e-09
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
prefix='Day1-Day0'

3 然后判断显著差异基因

很明显,这个时候用padj来挑选差异基因即可,不需要看foldchange了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
table(deg1$padj<0.05)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 
## FALSE  TRUE 
## 19166   197
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
table(deg1$padj<0.01)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 
## FALSE  TRUE 
## 19303    60
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diff_geneList = rownames(deg1[deg1$padj<0.05,])
up_geneList = rownames(deg1[deg1$padj<0.05 & deg1$log2FoldChange >0,])
down_geneList = rownames(deg1[deg1$padj<0.05 & deg1$log2FoldChange <0,])
length(diff_geneList)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## [1] 197
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
length(up_geneList)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## [1] 89
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
length(down_geneList)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## [1] 108
3.1 画个火山图看看挑选的差异基因合理与否
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
colnames(deg1)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## [1] "baseMean"       "log2FoldChange" "lfcSE"          "stat"          
## [5] "pvalue"         "padj"
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log2FoldChange_Cutof = 0
## 这里我不准备用log2FoldChange来挑选差异基因,仅仅是用padj即可
deg1$change = as.factor(ifelse(deg1$padj < 0.05 & 
                                       abs(deg1$log2FoldChange) > log2FoldChange_Cutof,
                                     ifelse(deg1$log2FoldChange > log2FoldChange_Cutof ,'UP','DOWN'),'NOT'))
this_tile <- paste0('Cutoff for log2FoldChange is ',round(log2FoldChange_Cutof,3),
                    '\nThe number of up gene is ',nrow(deg1[deg1$change =='UP',]) ,
                    '\nThe number of down gene is ',nrow(deg1[deg1$change =='DOWN',])
)
g_volcano = ggplot(data=deg1, aes(x=log2FoldChange, y=-log10(padj), color=change)) +
  geom_point(alpha=0.4, size=1.75) +
  theme_set(theme_set(theme_bw(base_size=20)))+
  xlab("log2 fold change") + ylab("-log10 p-value") +
  ggtitle( this_tile  ) + 
  theme(plot.title = element_text(size=15,hjust = 0.5))+
  scale_colour_manual(values = c('blue','black','red'))  ## corresponding to the levels(res$change)
print(g_volcano)

4 GO/KEGG注释

4.1 首先进行KEGG注释
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diff.kk <- enrichKEGG(gene         = diff_geneList,
                      organism     = 'ath',
                      pvalueCutoff = 0.99,
                      qvalueCutoff=0.99
)
kegg_diff_dt <- as.data.frame(setReadable(diff.kk,org.At.tair.db,keytype = 'TAIR'))

up.kk <- enrichKEGG(gene         = up_geneList,
                    organism     = 'ath',
                    pvalueCutoff = 0.99,
                    qvalueCutoff=0.99
)
kegg_up_dt <- as.data.frame(setReadable(up.kk,org.At.tair.db,keytype = 'TAIR'))

down.kk <- enrichKEGG(gene         = down_geneList,
                      organism     = 'ath',
                      pvalueCutoff = 0.99,
                      qvalueCutoff=0.99
)
kegg_down_dt <- as.data.frame(setReadable(down.kk,org.At.tair.db,keytype = 'TAIR'))
4.2 可视化看看KEGG注释结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## KEGG patheay visulization: 

  down_kegg<-kegg_down_dt[kegg_down_dt$pvalue<0.05,];down_kegg$group=-1
  up_kegg<-kegg_up_dt[kegg_up_dt$pvalue<0.05,];up_kegg$group=1
  dat=rbind(up_kegg,down_kegg)
  colnames(dat)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##  [1] "ID"          "Description" "GeneRatio"   "BgRatio"     "pvalue"     
##  [6] "p.adjust"    "qvalue"      "geneID"      "Count"       "group"
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  dat$pvalue = -log10(dat$pvalue)
  dat$pvalue=dat$pvalue*dat$group 

  dat=dat[order(dat$pvalue,decreasing = F),]

  g_kegg<- ggplot(dat, aes(x=reorder(Description,order(pvalue, decreasing = F)), y=pvalue, fill=group)) + 
    geom_bar(stat="identity") + 
    scale_fill_gradient(low="blue",high="red",guide = FALSE) + 
    scale_x_discrete(name ="Pathway names") +
    scale_y_continuous(name ="-log10P-value") +
    coord_flip() +
    ggtitle("Pathway Enrichment")
  print(g_kegg)
4.3 接着进行GO注释
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (onto in c('CC','BP','MF')){

  ego <- enrichGO(gene         = diff_geneList,
                  OrgDb         = org.At.tair.db, 
                  keyType = 'TAIR',
                  ont           =  onto ,
                  pAdjustMethod = "BH",
                  pvalueCutoff  = 0.2,
                  qvalueCutoff  = 0.9)
  ego <- setReadable(ego, org.At.tair.db,keytype = 'TAIR')
  write.csv(as.data.frame(ego),paste0(prefix,"_",onto,".csv"))
  #ego2 <- gofilter(ego,4)
  ego2=ego
  pdf(paste0(prefix,"_",onto,'_barplot.pdf'))
  p=barplot(ego2, showCategory=12)+scale_x_discrete(labels=function(x) str_wrap(x,width=20))
  print(p)
  dev.off() 

}
ggsave(filename = paste0(prefix,"_volcano_plot.pdf"),g_volcano)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Saving 7 x 5 in image
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggsave(filename = paste0(prefix,"_kegg_plot.pdf"),g_kegg)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Saving 7 x 5 in image
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
write.csv(x = kegg_diff_dt,file = paste0(prefix,"_kegg_diff.csv"))
write.csv(x = kegg_up_dt,file = paste0(prefix,"_kegg_up.csv"))
write.csv(x = kegg_down_dt,file = paste0(prefix,"_kegg_down.csv"))

5 基因ID注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(org.At.tair.db)
ls('package:org.At.tair.db')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##  [1] "org.At.tair"             "org.At.tair.db"         
##  [3] "org.At.tairARACYC"       "org.At.tairARACYCENZYME"
##  [5] "org.At.tairCHR"          "org.At.tairCHRLENGTHS"  
##  [7] "org.At.tairCHRLOC"       "org.At.tairCHRLOCEND"   
##  [9] "org.At.tairENTREZID"     "org.At.tairENZYME"      
## [11] "org.At.tairENZYME2TAIR"  "org.At.tairGENENAME"    
## [13] "org.At.tairGO"           "org.At.tairGO2ALLTAIRS" 
## [15] "org.At.tairGO2TAIR"      "org.At.tairMAPCOUNTS"   
## [17] "org.At.tairORGANISM"     "org.At.tairPATH"        
## [19] "org.At.tairPATH2TAIR"    "org.At.tairPMID"        
## [21] "org.At.tairPMID2TAIR"    "org.At.tairREFSEQ"      
## [23] "org.At.tairREFSEQ2TAIR"  "org.At.tairSYMBOL"      
## [25] "org.At.tair_dbInfo"      "org.At.tair_dbconn"     
## [27] "org.At.tair_dbfile"      "org.At.tair_dbschema"
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Then draw GO/kegg figures:
deg1$gene_id=rownames(deg1)
id2symbol=toTable(org.At.tairSYMBOL) 
deg1=merge(deg1,id2symbol,by='gene_id')
## 可以看到有一些ID是没有gene symbol的,这样的基因,意义可能不大,也有可能是大部分人漏掉了
head(deg1)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##     gene_id   baseMean log2FoldChange     lfcSE       stat    pvalue
## 1 AT1G01010   58.25657     1.13105335 0.8000274  1.4137683 0.1574300
## 2 AT1G01010   58.25657     1.13105335 0.8000274  1.4137683 0.1574300
## 3 AT1G01020  542.64394    -0.05745554 0.3721650 -0.1543819 0.8773086
## 4 AT1G01030   48.77442    -1.09845263 1.2875862 -0.8531100 0.3935983
## 5 AT1G01040 1708.68949     0.32421734 0.2777530  1.1672865 0.2430947
## 6 AT1G01040 1708.68949     0.32421734 0.2777530  1.1672865 0.2430947
##        padj change  symbol
## 1 0.6008903    NOT ANAC001
## 2 0.6008903    NOT  NAC001
## 3 0.9805661    NOT    ARV1
## 4 0.8144858    NOT    NGA3
## 5 0.6992279    NOT    DCL1
## 6 0.6992279    NOT   EMB60

可以看到基因的ID和symbol的对应关系就出来了,根使用网页工具是类似的,感兴趣的朋友可以试试看网页工具和R代码的ID批量转换差别有多大。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Storage关键字SqlRowIdProperty,SqlTableNumber,State,StreamLocation,Type
对于串行(嵌入式)类,此关键字指示使用哪个数据定义来定义对象的序列化状态(序列化时对象属性的排列方式)。这也是默认数据定义,默认结构生成器将向其添加未存储的属性。
用户7741497
2022/07/07
2970
多维存储的SQL和对象使用(二)
持久化类可以定义一个或多个索引;其他数据结构用于提高操作(如排序或条件搜索)的效率。InterSystems SQL在执行查询时使用这些索引。InterSystems IRIS对象和SQL在执行INSERT、UPDATE和DELETE操作时自动维护索引内的正确值。
用户7741497
2022/06/09
7510
定义和构建索引(一)
索引是由持久类维护的结构,InterSystems IRIS®数据平台可以使用它来优化查询和其他操作。
用户7741497
2022/06/07
6470
类关键字SqlTableName,StorageStrategy,System,ViewQuery
通常,当类名是SQL保留字(并不少见)或希望SQL表包含类名不支持的字符(如“_”字符)时,可以使用此关键字。
用户7741497
2022/07/06
3960
定义和构建索引(二)
与典型的SQL一样,InterSystems IRIS支持惟一键和主键的概念。 InterSystems IRIS还能够定义IdKey,它是类实例(表中的行)的唯一记录ID。 这些特性是通过Unique、PrimaryKey和IdKey关键字实现的:
用户7741497
2022/06/07
7160
SQL定义表(二)
InterSystems IRIS提供了两种方法来唯一标识表中的行:RowID和主键。
用户7741497
2022/06/06
1.6K0
使用多维存储(全局变量)(一)
在全局节点中存储数据很简单:像对待任何其他变量一样对待全局变量。 区别在于对全局变量的操作是自动写入数据库的。
用户7741497
2022/06/08
8350
SQL修改数据库
可以对现有的表使用SQL语句,也可以对相应的持久化类使用ObjectScript操作来修改InterSystems IRIS®数据平台数据库的内容。 不能修改定义为只读的持久类(表)。
用户7741497
2022/06/06
2.5K0
SQL查询数据库(二)
InterSystems SQL允许您在SQL查询中调用类方法。这为扩展SQL语法提供了强大的机制。
用户7741497
2022/06/06
2.4K0
使用多维存储(全局变量)(四)
InterSystems IRIS提供了使用全局变量实现完整事务处理所需的基本操作。 InterSystems IRIS对象和SQL自动利用这些特性。 如果直接将事务性数据写入全局变量,则可以使用这些操作。
用户7741497
2022/06/09
5790
定义和构建索引(三)
位图索引是一种特殊类型的索引,它使用一系列位串来表示与给定索引数据值相对应的一组ID值。
用户7741497
2022/06/07
1K0
关键字触发器定义,扩展数据块,类关键字Abstract,ClassType
触发器是在SQL中发生特定事件时执行的代码段。InterSystems IRIS支持基于执行INSERT、UPDATE和DELETE命令的触发器。根据触发器定义,指定的代码将在相关命令执行之前或之后立即执行。每个事件可以有多个触发器,只要它们被分配了执行顺序。
用户7741497
2022/07/06
8240
存储和使用流数据(BLOBs和CLOBs)
Intersystems SQL支持将流数据存储为Intersystems Iris ®DataPlatform数据库中的 BLOBs(二进制大对象)或 CLOBs(字符大对象)的功能。
用户7741497
2022/06/07
1.4K0
类关键字NoExtent,OdbcType,Owner,ProcedureBlock
如果该关键字为真,则该类没有 extent。不能创建此类的实例。通常,这样的类会扩展或覆盖从%Library.Persistent继承的标准持久接口。
用户7741497
2022/07/06
2850
SQL排序(一)
排序规则指定值的排序和比较方式,并且是InterSystems SQL和InterSystemsIRIS®数据平台对象的一部分。有两种基本排序规则:数字和字符串。
用户7741497
2022/06/06
1.5K0
重新定义读取器处理相关对象的方式
当%XML.Reader找到与启用了XML的类相关的XML元素时,读取器会调用该类的XMLNew()方法,后者又会在默认情况下调用%New()。也就是说,当读取器找到相关元素时,它会创建相关类的新对象。新对象由从XML文档读取的数据填充。
用户7741497
2022/07/05
4710
【设计模式】学习JS设计模式?先掌握面向对象!
一个模式就是一个可重用的方案,可应用于在软件设计中的常见问题,另一种解释就是一个我们如何解决问题的模板 - 那些可以在许多不同的情况里使用的模板。 --w3cschool
一尾流莺
2022/12/10
4620
将XML导入到对象中
注意:使用的任何XML文档的XML声明都应该指明该文档的字符编码,并且文档应该按照声明的方式进行编码。如果未声明字符编码, IRIS将使用前面的“输入和输出的字符编码”中描述的默认值。如果这些默认值不正确,请修改XML声明,使其指定实际使用的字符集。
用户7741497
2022/07/04
1.8K0
SQL定义表(一)
可以通过定义表(使用CREATE TABLE)或通过定义投影到表的持久类来创建表:
用户7741497
2022/06/06
1.4K0
SQL定义表(三)
调用此方法时,它将尝试创建Sample.Employee表(以及相应的Sample.Employee类)。如果成功,则将SQLCODE变量设置为0。如果失败,则SQLCODE包含指示错误原因的SQL错误代码。
用户7741497
2022/06/06
1.3K0
相关推荐
Storage关键字SqlRowIdProperty,SqlTableNumber,State,StreamLocation,Type
更多 >
LV.8
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档