#Python#提取基因?qū)牡鞍踪|(zhì)名

提取基因?qū)牡鞍踪|(zhì)官方名

最開始泊藕,是需要將基因跟其編碼的蛋白質(zhì)對應起來载佳,找遍了各種數(shù)據(jù)庫都沒發(fā)現(xiàn)有相關的注釋文件炒事,Uniprot作為處理蛋白質(zhì)的大佬,結(jié)果里都有刚盈,肯定有辦法能夠滿足需求羡洛。

搜索TP53得到的結(jié)果頁面,明顯有各種p53的蛋白質(zhì)名稱

所幸的是藕漱,我完全沒想用爬蟲直接爬人家欲侮,而是戳了一下FAQ
發(fā)現(xiàn)人家有官方API,可以供我們胡作非為
Uniprot官方提供了各種API來滿足各種稀奇古怪的需求

所有API:http://www.uniprot.org/help/api

各種功能的API介紹

Uniprot API的使用

ID信息轉(zhuǎn)換
滿足我需求的最重要的部分就是各種ID信息的轉(zhuǎn)換和提取

ID轉(zhuǎn)換相關:http://www.uniprot.org/help/api_idmapping

各種能夠轉(zhuǎn)換的ID肋联,上邊還有四種常用語言的示例

ID轉(zhuǎn)換相關的頁面里包含了所有的能夠互相轉(zhuǎn)換的各種ID
相應的威蕉,人家提供了多種不同代碼的示例,以python為例:

python的示例基于python2


# 導入urllib和urllib2兩個模塊橄仍,用來處理各種網(wǎng)絡請求
import urllib,urllib2
# uniprot的api端口
url = 'http://www.uniprot.org/uploadlists/'
# 提交的參數(shù)
params = {
    # 將什么ID轉(zhuǎn)化成什么ID韧涨, from to
    # 目前沒發(fā)現(xiàn)能夠轉(zhuǎn)換成多種不同的ID,只能一一轉(zhuǎn)化
    'from':'ACC',
    'to':'P_REFSEQ_AC',
    # 返回結(jié)果的格式
    'format':'tab',
    # 要轉(zhuǎn)換的ID
    'query':'P13368 P20806 Q9UM73 P97793 Q17192'
}
# 因為http傳輸?shù)氖莃ytes等侮繁,因此需要將參數(shù)轉(zhuǎn)碼
data = urllib.urlencode(params)
# 通過Request指定獲取哪臺服務器的什么信息
request = urllib2.Request(url, data)
# 你自己的郵箱虑粥,如果有問題,人家好聯(lián)系(比如API使用的頻率太高宪哩,人家服務器受不了)
contact = "" # Please set your email address here to help us debug in case of problems.
# 添加相應的標準提取頭娩贷,不是這個信息,應該就提取不到任何信息了
request.add_header('User-Agent', 'Python %s' % contact)
# 打開url锁孟,獲取服務器返回的信息
response = urllib2.urlopen(request)
# 就只讀取前多少個字符
page = response.read(200000)

由于我是python3的使用者彬祖,所以茁瘦,沒法拿來主義,經(jīng)過簡單修改就正常使用了

經(jīng)過對眾多ID的測試之后發(fā)現(xiàn)储笑,其他ID轉(zhuǎn)化成ACC的時候甜熔,包含的信息量格外的多,其中就有我急需的蛋白質(zhì)名稱突倍,因此腔稀,通過將一個基因名轉(zhuǎn)化成ACC來測試一下看看,能不能提取到該基因編碼蛋白的所有名稱

#!/usr/bin/python3
# python3將urllib2拆分了羽历,因此烧颖,從urllib里分別導入
from urllib.parse import urlencode
from urllib.request import urlopen, Request

def test(query=['TP53']):
    # 依然是這個接口
    url = 'http://www.uniprot.org/uploadlists/'

    params = {
        # 針對我最初的需求,from暫時改成gene name
        'from': 'GENENAME',
        # 是的窄陡,我在ACC里發(fā)現(xiàn),protein name了拆火,雖然只有推薦名跳夭,其他的名字統(tǒng)統(tǒng)沒有
        'to': 'ACC',
        'format': 'tab',
        # 以list的形式傳遞基因名啥的,通過join就修成需要的字符串了
        'query': ' '.join(query)
    }
    # urlencode只是將字典形式的參數(shù)轉(zhuǎn)換成字符串而已们镜,并不能轉(zhuǎn)成bytes币叹,因此,需要多一層encode
    data = urlencode(params).encode()
    # 同上
    request = Request(url, data)
    # Please set your email address here to help us debug in case of problems.
    contact = "xxxxx@gmail.com"
    request.add_header('User-Agent', 'Python %s' % contact)
    response = urlopen(request)
    page = response.read(200000)
    # 獲取到的信息是bytes編碼的模狭,需要以utf-8等解碼才正常讀取
    print(page.decode('utf-8'))

但是颈抚,解碼出來的是一個以\n \t分隔的完整字符串,為了能夠正常提取所需信息嚼鹉,需要對其進行分割

print出來當然就是一個文本文件的樣子
# 將API返回的結(jié)果贩汉,調(diào)用函數(shù)進行有效分割,我的用法如下
split_(page.decode('utf-8'))    # 上邊最后的那一行print()锚赤,就改成這么用就好了

def split_(data):
    # 按行分割匹舞,如同打開一個文件按行讀取
    data = data.split('\n')

    resutls = set()
    for line in data:
        # 我只要人體的
        if 'Homo sapiens' in line:
            # 將每一行,按照\t來分割线脚,原因很明顯赐稽,按空白符分割就分割的太碎,不利于各種信息的提取
            # 數(shù)一數(shù)浑侥,就會發(fā)現(xiàn)姊舵,蛋白名稱是每行的倒數(shù)第四列
            protein_name = line.split('\t')[-4]
            # 每個蛋白編碼名稱后邊都會有一個括號的注釋,比較煩寓落,就通過分割去掉
            protein_name = protein_name.split(' (')[0]
            # 然后加到set里邊括丁,去除重復
            results.add(protein_name)
    return results

# 嫌上邊的寫法麻煩就改成一行實現(xiàn)上邊的功能
def split_(data):
    reutrn set(line.split('\t')[-4].split(' (')[0] for line in data if 'Homo sapiens' in line)

分割的成果

最終,我們就能獲取到TP53基因?qū)牡鞍踪|(zhì)名稱了

TP53編碼蛋白的所有名稱

然后通過反復的爬取零如,將結(jié)果儲存為json躏将,或者直接存到數(shù)據(jù)庫中锄弱,方便以后的取用都方便的很
如果要用模糊匹配來驗證某些東西,推薦使用fuzzyfinder和fuzzywuzzy這兩個python模塊

其次祸憋,還有一個mygene的模塊用來提取各種基因的信息也是極妙的会宪,配合上這個API可以做很多幺蛾子。

特別需要注意的一點就是蚯窥,如果要短時間內(nèi)大批量的調(diào)用這個API掸鹅,隨機設一個sleep延遲吧,如果給對方造成太大的服務器壓力拦赠,給人家惹麻煩巍沙,如果人家覺著需要維護,或者難以維持荷鼠,直接暫停提供服務句携,,允乐,

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矮嫉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子牍疏,更是在濱河造成了極大的恐慌蠢笋,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳞陨,死亡現(xiàn)場離奇詭異昨寞,居然都是意外死亡,警方通過查閱死者的電腦和手機厦滤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門援岩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人馁害,你說我怎么就攤上這事窄俏。” “怎么了碘菜?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵凹蜈,是天一觀的道長。 經(jīng)常有香客問我忍啸,道長仰坦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任计雌,我火速辦了婚禮悄晃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己妈橄,他們只是感情好庶近,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著眷蚓,像睡著了一般鼻种。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沙热,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天叉钥,我揣著相機與錄音,去河邊找鬼篙贸。 笑死投队,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的爵川。 我是一名探鬼主播敷鸦,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寝贡!你這毒婦竟也來了轧膘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤兔甘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鳞滨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洞焙,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年拯啦,在試婚紗的時候發(fā)現(xiàn)自己被綠了澡匪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡褒链,死狀恐怖唁情,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甫匹,我是刑警寧澤甸鸟,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站兵迅,受9級特大地震影響抢韭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恍箭,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一刻恭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扯夭,春花似錦鳍贾、人聲如沸鞍匾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橡淑。三九已至,卻和暖如春纵散,著一層夾襖步出監(jiān)牢的瞬間梳码,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工伍掀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掰茶,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓蜜笤,卻偏偏與公主長得像濒蒋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子把兔,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,489評論 6 427
  • GitHub 上有一個 Awesome - XXX 系列的資源整理,資源非常豐富沪伙,涉及面非常廣。awesome-p...
    若與閱讀 18,650評論 4 418
  • 葉圣陶先生曾說過一句精辟的話:教是為了不教县好。 意思就是围橡,教的目的不在于全盤授受,而應該重點啟發(fā)引導缕贡,讓學習者展卷而...
    楊成yc閱讀 804評論 3 8
  • 每一次我都想見你晾咪,也好像一定要見你收擦。 像是某種儀式感,看到你谍倦,我就記得我是誰塞赂,我就記得那些15歲的夜里你給我發(fā)的短...
    李肚子閱讀 293評論 0 0
  • 阿黑來到學校的門口,正要往園區(qū)里進昼蛀,沒成想?yún)s被門衛(wèi)給攔住了宴猾,因為平日里門口執(zhí)勤的門衛(wèi)都只是坐在崗亭之中,所以它稍微...
    說書客閱讀 109評論 0 0