零根本入门转录组数据分析——数据处置惩罚(GEO数据库——芯片数据) ...

瑞星  论坛元老 | 2024-8-17 05:15:48 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1810|帖子 1810|积分 5430

零根本入门转录组数据分析——数据处置惩罚(GEO数据库——芯片数据)


  


GEO数据库全称GENE EXPRESSION OMNIBUS,是由美国国立生物技术信息中心NCBI创建并维护的基因表达数据库。它创建于2000年,收录了天下各国研究机构提交的高通量基因表达数据,也就是说只要是目前已经发表的论文,论文中涉及到的基因表达检测的数据都可以通过这个数据库中找到。
并且GEO网站这个网站作为各种高通量实验数据的公共存储库。这些数据包罗基于单通道和双通道微阵列的实验,检测mRNA,基因组DNA和卵白质丰度,以及非阵列技术,如基因表达系列分析(SAGE),质谱卵白质组学数据和高通量测序数据。可以按照文献数据集编号等浩繁形式进行检索。但是在这篇教程中仅先容如何从GEO网站上根据数据集编号下载所需要的GEO数据集,并且下载后在R中对数据集进一步处置惩罚成后续分析所要的形式。


  1. 本项目以非小细胞肺癌GSE37745数据集(肺腺癌)作为展示
  2. 选用的数据库是GEO。
  3. 实验分组:疾病组,对照组。
  4. 我这里使用的R版本是4.2.2
  5. 要用到的R包:tidyverse,GEOquery
复制代码
1. 数据集获取

首先进入GEO网站官网(如下图所示),在检索位置输入数据集编号,点击箭头指向的位置进一步运行搜索。

搜索之后会弹出如下界面:首先需要检查物种范例(Homo sapiens),之后检察数据集的范例是否是高通量测序/芯片数据,我这里是芯片数据(Expression profiling by array),页面往下拉。

如下图所示:包含了利用该数据集的一些文献,以及该数据集对应的注释文件,并且还列出来了数据会合包含的样本。在这里我们比较关注的是注释文件GPL570

可以点击GPL570检察注释文件信息,页面拉到最后,如下图所示,这个注释文件里包含了芯片的ID及其对应的基因symbol,这也是我们后面需要用到的内容。(并且我们可以看到基因symbol中有的基因后面有三条反斜杠,那是他的别名,后续需要删除


注意:GEO数据集假如是芯片数据则不需要手动下载,假如是高通量测序的数据则需要手动下载表达矩阵。
2. 数据处置惩罚(Rstudio)

获取以上信息后即可直接进入R用代码自动下载
  1. rm(list = ls()) # 删除工作空间中所有的对象
  2. setwd('/XX/XX/XX') # 设置工作路径
  3. if(!dir.exists('./00_rawdata')){
  4.   dir.create('./00_rawdata')
  5. } # 判断该工作路径下是否存在名为00_rawdata的文件夹,如果不存在则创建,如果存在则pass
  6. setwd('./00_rawdata/') # 设置路径到刚才新建的00_rawdata下
复制代码
加载包:
  1. library(GEOquery)
  2. library(tidyverse)
复制代码
标注一下需要下载的数据集编号,及前面检察的注释文件编号,并且在当前00_rawdata文件夹下创建一个名为GSE37745的文件夹(这是为了方便管理,假如不单独创建文件夹,数据集许多的话,就会显得很乱)
  1. GEO_data <- 'GSE37745'
  2. gene_annotation <- 'GPL570'
  3. if(!dir.exists(paste0(GEO_data))){
  4.   dir.create(paste0(GEO_data))
  5. }
  6. setwd(paste0(GEO_data))
复制代码
获取数据集:
  1. gset <- getGEO(GEO_data , # 前面创建GEO_data对象
  2.                destdir = '.',
  3.                GSEMatrix = T,
  4.                getGPL = F) # getGEO函数自动从官网中获取对应的数据集
  5. expr <- as.data.frame(exprs(gset[[1]])) # 将获取的数据集的表达矩阵提取出来,如果没有表达矩阵,说明是高通量数据需要到网站自己下载
复制代码
首先来看一下获取到的表达矩阵长啥样:行名为芯片的ID(后面需要比对注释文件改成对应的基因symbol),列名为样本ID。

获取注释文件GPL570:
  1. gpl <- getGEO(gene_annotation, destdir = '.')
  2. gpl <- Table(gpl)
  3. colnames(gpl)
  4. [1] "ID"                               "GB_ACC"                          
  5. [3] "SPOT_ID"                          "Species Scientific Name"         
  6. [5] "Annotation Date"                  "Sequence Type"                  
  7. [7] "Sequence Source"                  "Target Description"              
  8. [9] "Representative Public ID"         "Gene Title"                     
  9. [11] "Gene Symbol"                      "ENTREZ_GENE_ID"                  
  10. [13] "RefSeq Transcript ID"             "Gene Ontology Biological Process"
  11. [15] "Gene Ontology Cellular Component" "Gene Ontology Molecular Function"
复制代码
这内里我们需要用到的就是ID和Gene Symbol,进一步处置惩罚ID和基因ID,前面我们也说了注释文件的基因symbol里有的有别称,需要剔除,用到的就是separate函数,可以按照sep = 'XXX’的形式分割。
  1. probe2symbol <- dplyr::select(gpl, 'ID', 'Gene Symbol')
  2. probe2symbol <- filter(probe2symbol, `Gene Symbol` != '')
  3. probe2symbol <- separate(probe2symbol, `Gene Symbol`, into = c('symbol', 'drop'), sep = '///')
  4. probe2symbol <- dplyr::select(probe2symbol, -drop)
  5. names(probe2symbol) <- c('ID', 'symbol')
复制代码
可以看一下处置惩罚后的probe2symbol长啥样,如下图所示,第一列就是芯片ID,第二列就是基因symbol,做到这大家也就可以想象到后面的步骤了,无非就是做个匹配,将表达矩阵中的ID对应成相应的基因symbol。

如下代码所示进一步处置惩罚表达矩阵:
  1. dat <- expr
  2. dat$ID <- rownames(dat)
  3. dat$ID <- as.character(dat$ID)
  4. probe2symbol$ID <- as.character(probe2symbol$ID)
  5. dat <- dat %>%
  6.   merge(probe2symbol, by='ID')%>% ## 合并注释文件和表达矩阵
  7.   dplyr::select(-ID)%>%     ## 去除多余信息——芯片ID
  8.   dplyr::select(symbol, everything())%>%     ## 重新排列
  9.   mutate(rowMean = rowMeans(.[grep('GSM', names(.))]))%>%    ## 求出平均数
  10.   arrange(desc(rowMean))%>%       ## 把表达量的平均值从大到小排序
  11.   distinct(symbol, .keep_all = T)%>%      ## symbol留下第一个
  12.   dplyr::select(-rowMean)%>%     ## 反向选择去除rowMean这一列
  13.   tibble::column_to_rownames(colnames(.)[1])   ## 把第一列变成行名并删除
复制代码
处置惩罚后的dat文件,如下图所示:行名为基因symbol,列为样本名。到了这一步表达矩阵已经处置惩罚好了,接下来就是新的问题:样本是怎么分组的?

前面的getGEO函数不但能获取数据集的表达矩阵,还可以获取杨信息,只需要通过pData函数即可展示样本信息
  1. a <- gset[[1]]
  2. pd <- pData(a) #
复制代码
如下图所示为pd对象的样本信息:有样本名,范例等等(可自行检察)

这里我们需要用到的是geo_accession和characteristics_ch1.2这两列(前一列就是样本ID,后一列就是分组信息),固然该数据会合有三种范例的疾病,分别是adeno(肺腺癌),large(大细胞),squamous(肺鳞癌)
  1. table(pd$characteristics_ch1.2)
  2. # histology: adeno    histology: large histology: squamous
  3. # 106                  24                  66
  4. group <- data.frame(sample = pd$geo_accession, group = pd$characteristics_ch1.2)
  5. table(group$group)
  6. group <- group[group$group != 'histology: large', ] # 筛选掉large(大细胞)
  7. table(group$group)
  8. group$group <- ifelse(group$group == 'histology: adeno', 'LUAD', 'LUSC')
  9. table(group$group)
  10. # LUAD LUSC
  11. # 106   66
复制代码
做到这一步基本可以说是大功告成了,目前我们有了基因表达矩阵,还有了样本分组信息,接下来将我们的分组样本信息和表达矩阵匹配一下,保存文件即可。
  1. dat <- dat[, group$sample]
  2. dat <- na.omit(dat)
  3. write.csv(dat, file = paste0('dat.', GEO_data, '.csv'))
  4. write.csv(group, file = paste0('group.', GEO_data, '.csv'), row.names = F)
复制代码
注:做到这一步,可以说是生信分析已经完成一半了,后续许多的分析都会基于前面处置惩罚的这两个文件,因此这最初的第一步也是最重要的一步,只有根本打好,后面分析才会可靠一些。

结语:
以上就是GEO数据下载及处置惩罚的所有过程,假如有什么需要补充或不懂的地方,大家可以私聊我大概在下方批评。
假如以为本教程对你有所帮助,希望广大学习者可以大概花点自己的小钱支持一下(点赞旁的打赏按钮)作者创作(可以的话一杯蜜雪奶茶即可),感谢大家的支持~~~~~~ ^_^ !!!
祝大家可以大概开心学习,轻松学习,在学习的路上少一些崎岖~~~


与教程配套的原始数据+代码+处置惩罚好的数据见零根本入门转录组分析——数据处置惩罚(GEO数据库——芯片数据)配套资源
注:配套资源只要改个路径就能运行,本人已检测过可以跑通,请放心食用,食用过程碰到问题,可先自行百度,着实办理不了可以私信




  • 目次部门跳转链接:零根本入弟子信数据分析——导读

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

瑞星

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表