快速获取功能相关基因

一个Python爬虫,快捷批量爬取与感兴趣功能有关的基因

转录组数据分析中,老师会碰到这样的问题:

(1)这么多差异表达基因中,哪些基因参与了特定的功能,我如何寻找与预期功能有关的基因?

(2)我的测序物种比较新,数据库中信息比较缺乏,难以通过已知数据寻找目标功能基因。

这个时候,如果一个个去设法查询每个基因的功能,工作量可能是非常大的。那么,有没有快捷的方法呢?答案是肯定有,比如可以转换下思路,首先根据预期的功能,在GO、KEGG等数据库中检索基因功能分类,并进而在搜索到的功能条目中细化基因。这样,就可以获得了与预期功能有关的一个基因集。随后,再根据感兴趣的差异基因名称,在该基因集中查找,如果匹配到相似的,就能够明确差异基因的功能了。

当然,在数据库中手动检索功能分类并匹配基因的过程,可能仍然略微繁琐。如果能够将这个过程交给计算机自动实现,那该多么节省时间。为此,我们提供了一个Python爬虫,帮助您在GO数据库中自动搜索并下载与其功能的相关基因。

就从这个思想出发,本文以探讨“氧化应激”相关功能的基因为例,教大家如何快速实现。

1 搜索关键GO功能条目

首先进入GO网站(http://geneontology.org/),输入想知道的功能名称。

例如我想关注和“氧化应激”相关的功能,输入“Oxidative stress”查询。

结果中都是以“Oxidative stress”为关键词找到的GO条目,它们都是涉及“氧化应激”相关的功能。接下来将这些GO条目下载下来,点击右上方“Custom”可获取GO条目列表。下载时,可以视情况过滤一些不重要的,选择要下载的打勾,如果不手动选择将默认下载全部搜索结果。

该列表中的GO名称可手动粘贴到一个文本文档中,例如命名为“Oxidative_stress.txt”

2 爬取GO条目涉及的基因、物种等

接下来我们用Python编写了一个爬虫,将根据上述的GO条目名称列表爬取一系列关键信息,例如这些GO条目中涉及的基因、物种等。

使用时,只需修改最开始的“data”和“name”中的项即可。“data”中为搜索并下载的GO条目名称列表,可以一次提供多个文件,中间以逗号分隔。“name”则对应了“data”中各文件代表的功能名称,用作输出文件名称。

如下示例,对于上述GO条目名称列表文件,修改“data = ['Oxidative_stress.txt']”和“name = ['Oxidative_stress']”后,在Python中执行即可。

#!/usr/bin/Python3.6
# -*- coding: utf-8 -*-
​
import os
import urllib
import urllib.request
​
#GO列表文件名称,可以一次提供多个文件,依次在列表中添加
#data = ['Reactive Oxygen.txt', 'Gene Expression.txt']
#GO搜索关键词名称,依次在列表中添加,和上述顺序对应
#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脚本执行后,将自动根据“Oxidative_stress.txt”中提到的GO条目的id,在GO数据库中爬取相关的基因名称等信息。对于上述示例,结果最后默认生成在当前路径下,获得文件“Oxidative_stress_go”和“Oxidative_stress.go.txt”

文件“Oxidative_stress.go.txt”中,包含了搜索GO条目时用的关键词、检索到的GO条目名称、这些GO条目中的基因、物种、以及子GO项等信息。这个文件是整合后的,包含了一开始搜索下载的“Oxidative_stress.txt”中提到的所有GO条目。如果期望分开查看,可点开另一结果文件夹“Oxidative_stress_go”,按不同的GO条目分开整理的基因、物种、以及子GO项等信息。

3 查询基因

这样,我们一开始期望的,寻找与“氧化应激”相关的功能基因的目的就实现了。

继续分析,只需要根据已知的物种分类,挑选出对应的物种出来就可以了。例如,人类物种在NCBI中的分类登记号为“9606”,因此如果想关注人类物种中与“氧化应激”相关的基因,只需要匹配“NCBITaxon:9606”就可以了。

以及如果做了RNA-seq,找到了一些重要的差异表达基因,也可根据基因名称在该文件中进行匹配,查看哪些重要的差异基因参与了“氧化应激”有关的功能。例如继续,文献中已经报道了蛋白“SOD”与氧化应激有关,RNA-seq的差异基因中也包含它,因此我们在这里查询验证一下“SOD”相关的基因。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容