一個(gè)Python爬蟲,快捷批量爬取與感興趣功能有關(guān)的基因
轉(zhuǎn)錄組數(shù)據(jù)分析中,老師會(huì)碰到這樣的問題:
(1)這么多差異表達(dá)基因中,哪些基因參與了特定的功能,我如何尋找與預(yù)期功能有關(guān)的基因逊谋?
(2)我的測(cè)序物種比較新,數(shù)據(jù)庫中信息比較缺乏土铺,難以通過已知數(shù)據(jù)尋找目標(biāo)功能基因涣狗。
這個(gè)時(shí)候,如果一個(gè)個(gè)去設(shè)法查詢每個(gè)基因的功能舒憾,工作量可能是非常大的镀钓。那么,有沒有快捷的方法呢镀迂?答案是肯定有丁溅,比如可以轉(zhuǎn)換下思路,首先根據(jù)預(yù)期的功能探遵,在GO窟赏、KEGG等數(shù)據(jù)庫中檢索基因功能分類,并進(jìn)而在搜索到的功能條目中細(xì)化基因箱季。這樣涯穷,就可以獲得了與預(yù)期功能有關(guān)的一個(gè)基因集。隨后藏雏,再根據(jù)感興趣的差異基因名稱拷况,在該基因集中查找,如果匹配到相似的,就能夠明確差異基因的功能了赚瘦。
當(dāng)然粟誓,在數(shù)據(jù)庫中手動(dòng)檢索功能分類并匹配基因的過程,可能仍然略微繁瑣起意。如果能夠?qū)⑦@個(gè)過程交給計(jì)算機(jī)自動(dòng)實(shí)現(xiàn)鹰服,那該多么節(jié)省時(shí)間。為此揽咕,我們提供了一個(gè)Python爬蟲悲酷,幫助您在GO數(shù)據(jù)庫中自動(dòng)搜索并下載與其功能的相關(guān)基因。
就從這個(gè)思想出發(fā)亲善,本文以探討“氧化應(yīng)激”相關(guān)功能的基因?yàn)槔枰祝檀蠹胰绾慰焖賹?shí)現(xiàn)。
1 搜索關(guān)鍵GO功能條目
首先進(jìn)入GO網(wǎng)站(http://geneontology.org/)逗爹,輸入想知道的功能名稱。
例如我想關(guān)注和“氧化應(yīng)激”相關(guān)的功能嚎于,輸入“Oxidative stress”查詢掘而。
結(jié)果中都是以“Oxidative stress”為關(guān)鍵詞找到的GO條目,它們都是涉及“氧化應(yīng)激”相關(guān)的功能于购。接下來將這些GO條目下載下來袍睡,點(diǎn)擊右上方“Custom”可獲取GO條目列表。下載時(shí)肋僧,可以視情況過濾一些不重要的斑胜,選擇要下載的打勾,如果不手動(dòng)選擇將默認(rèn)下載全部搜索結(jié)果嫌吠。
該列表中的GO名稱可手動(dòng)粘貼到一個(gè)文本文檔中止潘,例如命名為“Oxidative_stress.txt”。
2 爬取GO條目涉及的基因辫诅、物種等
接下來我們用Python編寫了一個(gè)爬蟲凭戴,將根據(jù)上述的GO條目名稱列表爬取一系列關(guān)鍵信息,例如這些GO條目中涉及的基因炕矮、物種等么夫。
使用時(shí),只需修改最開始的“data”和“name”中的項(xiàng)即可肤视〉祷荆“data”中為搜索并下載的GO條目名稱列表,可以一次提供多個(gè)文件邢滑,中間以逗號(hào)分隔腐螟。“name”則對(duì)應(yīng)了“data”中各文件代表的功能名稱,用作輸出文件名稱遭垛。
如下示例尼桶,對(duì)于上述GO條目名稱列表文件,修改“data = ['Oxidative_stress.txt']”和“name = ['Oxidative_stress']”后锯仪,在Python中執(zhí)行即可泵督。
#!/usr/bin/Python3.6
# -*- coding: utf-8 -*-
?
import os
import urllib
import urllib.request
?
#GO列表文件名稱,可以一次提供多個(gè)文件庶喜,依次在列表中添加
#data = ['Reactive Oxygen.txt', 'Gene Expression.txt']
#GO搜索關(guān)鍵詞名稱小腊,依次在列表中添加,和上述順序?qū)?yīng)
#name = ['Reactive Oxygen', 'Gene Expression']
?
data = ['Oxidative_stress.txt']
name = ['Oxidative_stress']
?
for i in data:
i1 = name[data.index(i)]
i2 = '_'.join(i1.split())
os.system(f'mkdir -p {i2}_go')
dat_input = open(i, 'r')
dat_output = open(f'{i2}.go.txt', 'w')
for line in dat_input:
line = line.strip().split('\t')
url = f"http://golr-aux.geneontology.io/solr/select?defType=edismax&qt=standard&indent=on&wt=csv&rows=100000&start=0&fl=bioentity_label,bioentity,bioentity_name,qualifier,annotation_class,annotation_extension_json,assigned_by,taxon,evidence_type,evidence_with,panther_family,type,bioentity_isoform,reference,date&facet=true&facet.mincount=1&facet.sort=count&json.nl=arrarr&facet.limit=25&hl=true&hl.simple.pre=%3Cem%20class=%22hilite%22%3E&hl.snippets=1000&csv.encapsulator=&csv.separator=%09&csv.header=false&csv.mv.separator=%7C&fq=document_category:%22annotation%22&fq=regulates_closure:%22{line[0]}%22&facet.field=aspect&facet.field=taxon_subset_closure_label&facet.field=type&facet.field=evidence_subset_closure_label&facet.field=regulates_closure_label&facet.field=annotation_class_label&facet.field=qualifier&facet.field=annotation_extension_class_closure_label&facet.field=assigned_by&facet.field=panther_family_label&q=*:*"
html = urllib.request.urlopen(url).read().decode('utf-8').strip()
?
os.system(f'mkdir -p {i2}_go/{line[0]}')
tmp_file = open(f'{i2}_go/{line[0]}/go.txt', 'w')
print(html, file = tmp_file)
tmp_file.close()
?
tmp_file = open(f'{i2}_go/{line[0]}/go.txt', 'r')
for line1 in tmp_file:
print(f'{i1}\t{line[0]}\t{line[1]}\t{line1.strip()}', file = dat_output)
tmp_file.close()
?
dat_input.close()
dat_output.close()
Python腳本執(zhí)行后久窟,將自動(dòng)根據(jù)“Oxidative_stress.txt”中提到的GO條目的id秩冈,在GO數(shù)據(jù)庫中爬取相關(guān)的基因名稱等信息。對(duì)于上述示例斥扛,結(jié)果最后默認(rèn)生成在當(dāng)前路徑下入问,獲得文件“Oxidative_stress_go”和“Oxidative_stress.go.txt”。
文件“Oxidative_stress.go.txt”中稀颁,包含了搜索GO條目時(shí)用的關(guān)鍵詞芬失、檢索到的GO條目名稱、這些GO條目中的基因匾灶、物種棱烂、以及子GO項(xiàng)等信息。這個(gè)文件是整合后的阶女,包含了一開始搜索下載的“Oxidative_stress.txt”中提到的所有GO條目颊糜。如果期望分開查看,可點(diǎn)開另一結(jié)果文件夾“Oxidative_stress_go”秃踩,按不同的GO條目分開整理的基因衬鱼、物種、以及子GO項(xiàng)等信息憔杨。
3 查詢基因
這樣馁启,我們一開始期望的,尋找與“氧化應(yīng)激”相關(guān)的功能基因的目的就實(shí)現(xiàn)了芍秆。
繼續(xù)分析惯疙,只需要根據(jù)已知的物種分類,挑選出對(duì)應(yīng)的物種出來就可以了妖啥。例如霉颠,人類物種在NCBI中的分類登記號(hào)為“9606”,因此如果想關(guān)注人類物種中與“氧化應(yīng)激”相關(guān)的基因荆虱,只需要匹配“NCBITaxon:9606”就可以了蒿偎。
以及如果做了RNA-seq朽们,找到了一些重要的差異表達(dá)基因,也可根據(jù)基因名稱在該文件中進(jìn)行匹配诉位,查看哪些重要的差異基因參與了“氧化應(yīng)激”有關(guān)的功能骑脱。例如繼續(xù),文獻(xiàn)中已經(jīng)報(bào)道了蛋白“SOD”與氧化應(yīng)激有關(guān)苍糠,RNA-seq的差異基因中也包含它叁丧,因此我們?cè)谶@里查詢驗(yàn)證一下“SOD”相關(guān)的基因。