【生信技能樹】GEO數據挖掘全流程

R包的安裝,每次做分析的時候先運行這段代碼把R包都安裝好了,這段代碼不需要任何改動,每次分析直接運行。

options("repos"="https://mirrors.ustc.edu.cn/CRAN/")
if(!require("BiocManager")) install.packages("BiocManager",update = F,ask = F)
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")cran_packages <- c('tidyr','tibble','dplyr','stringr','ggplot2','ggpubr','factoextra','FactoMineR','devtools','cowplot','patchwork','basetheme','paletteer','AnnoProbe','ggthemes','VennDiagram','tinyarray') 
Biocductor_packages <- c('GEOquery','hgu133plus2.db','ggnewscale',"limma","impute","GSEABase","GSVA","clusterProfiler","org.Hs.eg.db","preprocessCore","enrichplot")for (pkg in cran_packages){if (! require(pkg,character.only=T,quietly = T) ) {install.packages(pkg,ask = F,update = F)require(pkg,character.only=T) }
}for (pkg in Biocductor_packages){if (! require(pkg,character.only=T,quietly = T) ) {BiocManager::install(pkg,ask = F,update = F)require(pkg,character.only=T) }
}#前面的所有提示和報錯都先不要管。主要看這里
for (pkg in c(Biocductor_packages,cran_packages)){require(pkg,character.only=T) 
}
#沒有任何提示就是成功了,如果有warning xx包不存在,用library檢查一下。#library報錯,就單獨安裝。

表達矩陣和臨床信息的獲取、疾病組和健康組的分組工作

rm(list = ls())#首先清空一下環境防止原來數據的影響
#打破下載時間的限制,改前60秒,改后10w秒
options(timeout = 100000) 
options(scipen = 20)#不要以科學計數法表示#傳統下載方式
library(GEOquery)
eSet = getGEO("GSE57338", destdir = '.', getGPL = F)#這是一個示例數據集,是關于DCM這種病的
#網速太慢,下不下來怎么辦
#1.從網頁上下載/發鏈接讓別人幫忙下,放在工作目錄里
#2.試試geoChina,只能下載2019年前的表達芯片數據
#library(AnnoProbe)
#eSet = geoChina("GSE7305") #選擇性代替第8行#前面下載下來的數據保存到了eSet這個變量中
class(eSet)#發現是一個
length(eSet)eSet = eSet[[1]] 
class(eSet)#(1)提取表達矩陣exp
exp <- exprs(eSet)
dim(exp)
range(exp)#看數據范圍決定是否需要log,是否有負值,異常值
#exp = log2(exp+1) #需要log才log
boxplot(exp[,1:20],las = 2) #看是否有異常樣本#(2)提取臨床信息
pd <- pData(eSet)
as.data.frame(pd)
pd$title
k = str_detect(pd$title,"Non|CMP");table(k)
pd<-pd[k,]
#(3)讓exp列名與pd的行名順序完全一致
p = identical(rownames(pd),colnames(exp));p
if(!p) {
#intersect用于找出兩個向量間的公共元素,返回值是兩個向量中相同的元素
#intersect函數比較的時候是不考慮下標的,只要某個元素在傳給該函數的兩個向量中同時存在,那這個元素就是函數返回值的某個元素s = intersect(rownames(pd),colnames(exp))exp = exp[,s]#根據名字提取exp中的列pd = pd[s,]#根據名字提取pd的行
}#這樣得到的exp列名和pd行名順序完全一致#(4)提取芯片平臺編號,后面要根據它來找探針注釋
gpl_number <- eSet@annotation;gpl_number
save(pd,exp,gpl_number,file = "step1output.Rdata")# 原始數據處理的代碼,按需學習
# https://mp.weixin.qq.com/s/0g8XkhXM3PndtPd-BUiVgw

eSet = getGEO("GSE57338", destdir = '.', getGPL = F)是我們需要根據情況修改的第一句代碼,用哪個數據集就把第一個參數改成哪個數據集。

再來研究一下eSet

getGEO函數下載下來的數據集我們是用eSet這個變量接收的,通過上面一系列代碼可以知道這是一個列表,且只有一個元素(如果有兩個元素就說明是不同批次的或者同一個數據集是不同公司測的),既然只有一個元素那直接提取出來就是了,提取列表中的元素要用兩個中括號,提取出來第一個元素之后覆蓋掉eSet中的內容,此時再次查看eSet的類型,發現是一個看不懂的東西,反正也是一個類型,這是一個高級類型,總之就理解成接收了我們下載的GEO數據集的一個對象。這個eSet的內容長這樣子

這一大堆亂七八糟的是肯定沒法直接扔進后續的函數里面做差異分析的,因此接下來我們要提取表達矩陣,直接運行這段代碼就行,這段代碼不需要修改

其中把eSet這個對象扔到exprs這個函數里面就能得到對應的表達矩陣了,表達矩陣長這樣

其中每一列是一個樣本,每一行的行名其實是一個探針,而每一個探針都會對應一個基因,后續我們會根據探針與基因名的對應關系把這些行名改成基因名。現在只需要明確一點就是探針的表達量代表基因的表達量就行。

我們把表達矩陣存到exp里面,dim(exp)用來查看這個矩陣的維度(查看維度要做什么后面再說),range(exp)用來查看這個矩陣中元素的范圍,如果數據從個位數到幾萬都有,那這個矩陣中元素就是沒有取過對數的,我們需要手動取一下以2為底的對數,不要問為什么取2的對數不是其他的,這就是一個約定俗成的東西,其中在取對數的這一步我們對exp矩陣的每個元素都做了+1的運算,這個確實會改變基因的表達量,但是我們是做差異分析,基因表達量都+1并不會改變他們之間的差異性,之所以+1是為了防止出現一些負數等等。然后使用基本繪圖系統的boxplot函數繪制了一個箱線圖,boxplot的第一個參數傳了exp這個矩陣的前20列,這是因為我用的這個數據集前面查看維度的時候發現是三萬多行,三百多列,直接用exp作為參數繪制箱線圖非常的密集而導致難以觀察,所以我取了前20行,如果前面dim(exp)的時候發現矩陣的列很少,那就不用取前20列了。我用的這個數據集前20繪制的箱線圖長這樣

發現數據還是很正常的,沒有上下浮動很明顯的樣本。如果有異常就需要做一些另外的處理比如刪除等等,這個以后單獨介紹一下,這里就不介紹了。

接下來再提取臨床信息

使用pData(eSet)函數就能提取到臨床信息了,這個eSet就是我們最開始時用來接收下載的數據的那個對象,函數的返回結果是一個數據框,也就是說臨床信息我們使用一個名為pd的數據框保存。pd長這樣

可以看到所謂的臨床信息包含了title,這一列有特發性擴張型心肌病左心室,缺血性左心室,非衰竭左心室這三種情況,后面還有什么日期等等一系列的臨床信息,我想要研究擴張型心肌病和健康人基因表達的差異,那我就根據title這一列中的字符串篩選出這兩種情況,也就是把缺血性左心室剔除,我們發現特發性擴張型心肌病左心室這種情況有一個特有的字符串叫做Non,而非衰竭左心室也就是健康樣本有一個字符串叫做CMP,運行代碼

k = str_detect(pd$title,"Non|CMP");table(k)將會得到一個邏輯向量,如果title這一列(也就是一個向量)的元素中有Non或者CMP,就返回TRUE,否則返回False,再運行代碼pd擴張型心肌病和健康樣本這兩種情況的行了。

接下來要讓exp的列名和pd的行名完全一致,至于為什么后面再解釋。

identical(rownames(pd),colnames(exp))用于查看pd(只有擴張型心肌病和健康樣本這兩種情況的數據框)的行名和exp(表達矩陣)的列名 是不是相同,pd的行名和exp的列名都是不同樣本名,他們是有可能順序相同的,如果不同我們執行if語句里面的內容把他們變成順序相同,intersect函數用于找出兩個向量中的公共元素,返回值是一個向量,該向量中的元素均為傳給intersect函數的兩個參數比如x和y的公共元素,無需考慮下標是不是相同,只要一個元素在x和y兩個向量中同時存在,那么這個元素就是intersect返回結果的其中一個元素。我們用s來接收這個intersect函數的結果,這個結果就是一些樣本名,然后根據這些樣本名提取出exp的列和pd的行并覆蓋掉exp和pd,這樣就能保證exp的列和pd的行是完全一樣的。

預處理還需要把探針轉換成對應的基因名,這個代碼一般是不需要改動的

我們看到這里提取eSet中的元素用的是@,這個符號的功能和數據框提取某一列用的那個$是一個道理。一般eSet第一次提取用的是@,后續可能是@也可能是$至于怎么提取可以通過點左上角環境中的這個eSet變量,點開是這樣的,根據這里的結構決定是用@還是$提取元素

為了防止代碼太長不便于維護,我們把目前所得到的,后續有用的變量存起來

save(pd,exp,gpl_number,file = "step1output.Rdata"),其實目前有用的就是存有臨床信息且經過處理之后只剩下擴張型心肌病和健康兩種情況的那個數據框pd,以及表達矩陣exp,還有剛才提取到的芯片平臺編號,這個編號用于后續把探針轉換成基因名。

# Group(實驗分組)和ids(探針注釋)
rm(list = ls())  
load(file = "step1output.Rdata")
# 1.Group----
library(stringr)
# 標準流程代碼是二分組,多分組數據的分析后面另講# 使用字符串處理的函數獲取分組k = str_detect(pd$title,"Non");table(k)
# 需要把Group轉換成因子,并設置參考水平,指定levels,對照組在前,處理組在后
Group = ifelse(k,"healthy","DCM")
table(Group)
#這個數據框是為了檢查一下分組是不是成功
check_df<-data.frame(pd$title,Group)
#把Group這個向量轉換成因子類型,前面是對照組
Group<-factor(Group,levels = c("healthy","DCM"))
#2.探針注釋的獲取-----------------
#捷徑
library(tinyarray)
find_anno(gpl_number) #輔助寫出找注釋的代碼
ids <- AnnoProbe::idmap('GPL11532')#這句代碼是根據上一句代碼的提示復制來的
#如果能打出代碼就不需要再管其他方法。
#如果使用復制下來的AnnoProbe::idmap('xxx')代碼發現報錯了,請注意嘗試不同的type參數
#如果不知道type能取什么,可以使用?idmap來查看
#如果顯示no annotation avliable in Bioconductor and AnnoProbe則要去GEO網頁上看GPL表格里找啦。#捷徑里面包含了全部的R包、一部分表格、一部分自主注釋
#方法1 BioconductorR包(最常用,已全部收入find_anno里面,不用看啦)
if(F){gpl_number #看看編號是多少#http://www.bio-info-trainee.com/1399.html #在這里搜索,找到對應的R包library(hgu133plus2.db)ls("package:hgu133plus2.db") #列出R包里都有啥ids <- toTable(hgu133plus2SYMBOL) #把R包里的注釋表格變成數據框
}
# 方法2 讀取GPL網頁的表格文件,按列取子集
##https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL570
# 方法3 官網下載注釋文件并讀取
# 方法4 自主注釋,了解一下
#https://mp.weixin.qq.com/s/mrtjpN8yDKUdCSvSUuUwcA
save(exp,Group,ids,file = "step2output.Rdata")

重新開一個R腳本清空原來環境中的變量以防止以前運行的內容對本次要運行的代碼造成影響

使用r包stringr中的函數str_detect根據title這一列中是否含有Non這個字符串進行篩選,得到一個邏輯向量k,結果如圖

這個結果顯示有136個健康樣本,82個擴張型心肌病樣本。

創建一個名為Group的向量,并根據前面的把這個向量的內容改成healthy和DCM(DCM是擴張型心肌病的簡稱),結果應該是有原本136個TRUE的位置元素被改成了healthy,82個FALSE對應位置的元素被改成DCM。

然后緊接著創建了一個名為check_df的數據框把title這一列和我們剛才創建的Group這個向量放在了一起,顧名思義這個數據框就是為了讓我們直觀地檢查一下是不是正確的分組了。我在這里展示部分check_df的結果

從結果來看我們確實正確的分組了。知道Group這個變量是對的之后,我們就把他轉換成因子類型,這是因為后續分析所用到的函數的參數要求。因子這種類型特別適用于處理一些有很多重復元素的向量。

上面這三句代碼是在進行探針轉換為基因名的工作,find_anno是R包tinyarray中的一個函數,他需要的參數是我們前面得到的編號,扔進去之后會得到一個提示性的結果,我這里是這樣

根據這個代碼運行結果的提示寫了第三句代碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12007.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12007.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12007.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

思源筆記如何結合群暉WebDav實現云同步數據

文章目錄 1. 開啟群暉WebDav 服務2. 本地局域網IP同步測試3. 群暉安裝Cpolar4. 配置遠程同步地址5. 筆記遠程同步測試6. 固定公網地址7. 配置固定遠程同步地址 在數字化時代&#xff0c;信息的同步與共享變得尤為重要。無論是個人用戶還是企業團隊&#xff0c;都渴望能夠實現跨…

nginx 代理java 請求報502

情況&#xff1a;nginx代理java 請求 后端返回正常&#xff0c;但是經過nginx 時報502 經過多次對比其他接口發現可能是返回的請求頭過大&#xff0c;導致nginx 報錯&#xff1a;如下 2024/05/13 02:57:12 [error] 88#88: *3755 upstream sent too big header while reading r…

創建存儲過程

一、DDL與DML CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,createDate DATETIME NOT NULL,userName VARCHAR(255) NOT NULL,phone VARCHAR(20) NOT NULL,age INT NOT NULL,sex ENUM(男, 女) NOT NULL,introduce TEXT ); INSERT INTO student (createDate, userN…

透明加密軟件推薦:哪款實用又高效?

透明加密軟件是一種專門針對文件保密需求的計算機加密工具。 其核心在于“透明”二字&#xff0c;意味著整個加密過程對于使用者來說是無形且無感知的。 當用戶進行文件的日常操作&#xff0c;如打開、編輯或保存時&#xff0c;透明加密軟件會在后臺自動進行加密和解密工作&a…

【算法刷題day52】Leetcode:300. 最長遞增子序列、674. 最長連續遞增序列、718. 最長重復子數組

文章目錄 Leetcode 300. 最長遞增子序列解題思路代碼總結 Leetcode 674. 最長連續遞增序列解題思路代碼總結 Leetcode 718. 最長重復子數組解題思路代碼總結 草稿圖網站 java的Deque Leetcode 300. 最長遞增子序列 題目&#xff1a;300. 最長遞增子序列 解析&#xff1a;代碼隨…

Keil編程不同驅動文件引用同一個常量的處理方法

基礎不牢&#xff0c;地動山搖&#xff0c;最近單片機編程又遇到一個基礎問題。 我在頭文件中定義了一個常量同時給兩個驅動文件使用&#xff0c;封裝的時候編譯沒問題&#xff0c;但是在main函數中引用驅動函數的時候就出現了重定義的問題&#xff0c;如下如所示。 解決方法很…

Windows 11 下 kafka 的安裝踩坑

安裝 windows系統kafka小白入門篇——下載安裝&#xff0c;環境配置&#xff0c;入門代碼書寫&#xff08;推薦&#xff09; kafka在windows下安裝和使用入門教程 問題1 參考鏈接 運行kafka集成的zookeeper時&#xff0c;命令&#xff1a;bin\windows\zookeeper-server-star…

05. 【Java教程】第一個 Java 程序

本節我們將以Windows操作系統為例&#xff0c;編寫并執行第一個Java程序。在這之前&#xff0c;請確保你的操作系統上已經安裝了JDK 1. 編譯程序 大家可能有個疑問&#xff0c;為什么需要編譯程序呢&#xff1f;計算機不能直接執行我們編寫的源代碼嗎&#xff1f; 這是由于計…

指針由淺入深

1.變量與地址 2.指針與指針變量 3.直接訪問和間接訪問 4.空指針與野指針 5.空類型 6.定義與初始化的書寫規則 7.指針運算 8.指針與數組 指針與一維數組 指針與二維數組 指針與字符數組 9.const與指針 10.指針數組和數組指針 11.多級指針 #include<stdio.h> #include<…

CPU利用率使用教程

本文主要參考&#xff1a; 一文讓你學到 nmon最詳盡的用法 Linux性能監控命令_nmon 安裝與使用 如果你是在Ubuntu上安裝nmon&#xff0c;使用&#xff1a; apt install nmon安裝好后&#xff0c;直接運行 $:nmon #運行如果是后臺抓數據&#xff1a; -f 參數: 生成文件,文件…

python 虛擬環境多種創建方式

【一】說明介紹 &#xff08;1&#xff09;什么是虛擬環境 在Python中&#xff0c;虛擬環境&#xff08;Virtual Environment&#xff09;是一個獨立的、隔離的Python運行環境&#xff0c;它擁有自己的Python解釋器、第三方庫和應用程序。通過創建虛擬環境&#xff0c;可以確…

【刷題(2)】矩陣

一、矩陣問題基礎 遍歷&#xff1a; for i in range(len(matrix[0])): for j in range(len(matrix): while 倒序遍歷&#xff1a; for i in range(right,left,-1) 臨時存儲&#xff1a;temp w,h:len(matrix[0])-1 len(matrix)-1 left,right,top,bottom:0 len(matrix[0])-1 0 l…

Cesium 3DTileset Style 原理簡析

Cesium 3DTileset Style 原理簡析 應用層會看到這樣的使用。那么原理是什么, 為啥寫 height, 除了這個還有啥? const tileset await Cesium.Cesium3DTileset.fromUrl("../../public/tileset/building/tileset.json"); tileset.style new Cesium.Cesium3DTileSty…

HarmonyOS應用模型Stage基本介紹

文章目錄 <font colorcoral> HarmonyOS應用模型概況<font colorcoral> Stage模型基本概念<font colorcoral> Stage模型UIAbiliry的生命周期<font colorcoral> Stage模型的配置文件<font colorcoral> 寫在后面的話<font colorcoral>Referen…

學校NTP時鐘系統(時間同步系統)方案助力建設智慧校園

學校NTP時鐘系統&#xff08;時間同步系統&#xff09;方案助力建設智慧校園 學校NTP時鐘系統&#xff08;時間同步系統&#xff09;方案助力建設智慧校園 建設智慧校園也意味著校內網絡設備和服務器劇增&#xff0c;如何保障智慧校園內各數字系統時序一致、維穩運行成為一大難…

【八大排序算法】插入排序、希爾排序、選擇排序、堆排序、冒泡排序、快速排序、歸并排序、計數排序

文章目錄 一、排序的相關概念二、排序類型三、排序算法實現插入排序1.直接插入排序2.希爾排序 選擇排序3.簡單選擇排序4.堆排序 交換排序5.冒泡排序6.快速排序遞歸實現非遞歸實現 7.歸并排序遞歸實現非遞歸實現 8.計數排序 四、總結 一、排序的相關概念 排序&#xff1a;根據數…

WebLogic問題集

console登錄后&#xff0c;頁面顯示卡頓 解決方法&#xff1a; 將Java的配置文件JAVA_HOME\jre\lib\securetty\java.security中的 securerandom.sourcefile:/dev/random修改為 securerandom.sourcefile:/dev/./random修改后&#xff0c;重啟WLS即可。

【LAMMPS學習】八、基礎知識(6.5)PyLammps 教程

8. 基礎知識 此部分描述了如何使用 LAMMPS 為用戶和開發人員執行各種任務。術語表頁面還列出了 MD 術語&#xff0c;以及相應 LAMMPS 手冊頁的鏈接。 LAMMPS 源代碼分發的 examples 目錄中包含的示例輸入腳本以及示例腳本頁面上突出顯示的示例輸入腳本還展示了如何設置和運行各…

[JAVASE] 類和對象(二)

目錄 一. 封裝 1.1 面向對象的三大法寶 1.2 封裝的基本定義與實現 二. 包 2.1 包的定義 2.2 包的作用 2.3 包的使用 2.3.1 導入類 2.3.2 導入靜態方法 三. static 關鍵字 (重要) 3.1 static 的使用 (代碼例子) 3.1.1 3.1.2 3.1.3 3.1.4 四. 總結 一. 封裝 1.1 面向對象…

推薦網站(9)pixabay免費可商用的圖片、視頻、插畫、矢量圖、音樂

今天推薦一款可以免費可商用的圖片、視頻、插畫、矢量圖、音樂的資源網站&#xff0c;這里面的所以東西都是免費的&#xff0c;并且可以商用。對那些做視頻剪輯的人來說幫助非常大。它里面的資源非常的豐富&#xff0c;質量也高。 比如搜索下雨 鏈接直達&#xff1a;https://pi…