使用python處理生物信息數(shù)據(jù)(八)

Python學習的第八天间护,主要學習文本挖掘和模式匹配歉胶。


生物信息大多數(shù)問題都是核酸或氨基酸序列的比對和尋找motif献联,利用正則表達式顯得十分重要。比如一條核酸或氨基酸序列颠焦,你可能想尋找其中的磷酸化位點斩熊,甘露糖基化位點,轉錄結果位點等特定的序列結構伐庭,正則表達式可以幫助尋找特定模式的序列粉渠。

1. 在一條氨基酸序列中尋找特定序列
import re

seq = 'VSVLTMFRYAGWLDRLYMLVGTQLAAIIHGVALPLMMLI'

pattern = re.compile("[ST]Q") #"[ST]Q"表示"SQ"或"TQ"。

match = pattern.search(seq) #搜索seq中符合pattern的序列

print(match.start())
21

print(match.end())
23

if match:
    print('%10s' %(seq[match.start() - 4:match.end() + 4])) #'%10s' 序列右對齊, 
#顯示從匹配初始位置前4個字符到匹配結束位置后4個字符
    print('%6s' % match.group()) 
else: 
    print("no match")
MLVGTQLAAI
    TQ


######
import re

seq = 'RQSAMGSNKSKPKDASQRRRSLEPAENVHGAGGGAFPASQRPSKP'

pattern = re.compile('R.[ST][^P]') #查找符合'R.[ST][^P]'的序列似忧,
#第一個是氨基酸R,第二"."表示任意氨基酸渣叛,
#第三個是S或T丈秩,第四個是除了P以外其他的任意氨基酸盯捌。

matches = pattern.findall(seq)

print(matches)
['RQSA', 'RRSL', 'RPSK']

match_iter = pattern.finditer(seq)

for match in match_iter:
    print(match.group(), match.span()) #顯示匹配的字符位置
    print(match.start(), match.end())
RQSA (0, 4)
0 4
RRSL (18, 22)
18 22
RPSK (40, 44)
40 44

####
import re

seq = 'QSAMGSNKSKPKDASQRRRSLEPAENVHGAGGGAFPASQRPSKP'

pattern1 = re.compile('R(.)[ST][^P]')

match1 = pattern1.search(seq)

print(match1.group())
RRSL

print(match1.group(1))
R


2. 匹配中的切片和替換
import re

separator = re.compile("\|") #以"|"為分隔符

annotation = 'ATOM:CA|RES:ALA|CHAIN:B|NUMRES:166'

columns = separator.split(annotation) #以"|"為分隔符將annotation切片

print(columns)
['ATOM:CA', 'RES:ALA', 'CHAIN:B', 'NUMRES:166']

###
new_annotation = separator.sub("@", annotation)

print(new_annotation)
ATOM:CA@RES:ALA@CHAIN:B@NUMRES:166

new_annotation2 = separator.sub('@', annotation, 2)
print(new_annotation2)
ATOM:CA@RES:ALA@CHAIN:B|NUMRES:166

new_annotation3 = separator.subn('@', annotation)
print(new_annotation3)
('ATOM:CA@RES:ALA@CHAIN:B@NUMRES:166', 3)

3. 將prosite文件模式中的符號轉換為正則表達式
pattern = '[DEQN]-x-[DEQN](2)-C-x(3,14)-C-x(3,7)-C-x-[DN]-x(4)-[FY]-x-C'
pattern = pattern.replace('{', '[^')
pattern = pattern.replace('}', ']')
pattern = pattern.replace('(', '{')
pattern = pattern.replace(')', '}')
pattern = pattern.replace('-', '')
pattern = pattern.replace('x', '.')
pattern = pattern.replace('>', '$')
pattern = pattern.replace('<', '^')
print(pattern)
[DEQN].[DEQN]{2}C.{3,14}C.{3,7}C.[DN].{4}[FY].C

4. 尋找基因組序列上的轉錄因子結合位點

已知的轉錄因子結合位點


TFBS文件
import re

genome_seq = open("genome.txt").read() #讀取基因組序列信息

sites = []

for line in open("TFBS.txt"): #讀取已知的轉錄因子結合位點信息文件
    fields = line.split()
    tf = fields[0]
    site = fields[1]
    sites.append((tf,site)) #從文件中提取必要信息并格式化
    

sites
Out[44]: 
[('UAS(G)-pMH100', 'CGGAGTACTGTCCTCCG'), #查看新的轉錄因子結合位點的表格
 ('TFIIIC-Xls-50', 'TGGATGGGAG'),
 ('HSE_CS_inver0', 'CTNGAANNTTCNAG'),
 ('ZDNA_CS', '0'),
 ('GCN4-his3-180', 'ATGACTCAT')]

for tf, site in sites:
    tfbs_regexp = re.compile(site) #正則表達式的模式
    all_matches = tfbs_regexp.findall(genome_seq) #顯示出所有匹配的序列
    matches = tfbs_regexp.finditer(genome_seq)
    if all_matches:
        print(tf, ":")
        for tfbs in matches:
            print("\t", tfbs.group(),tfbs.start(), tfbs.end()) #顯示序列和匹配的位置
            
UAS(G)-pMH100 :
         CGGAGTACTGTCCTCCG 0 17
         CGGAGTACTGTCCTCCG 60 77
         CGGAGTACTGTCCTCCG 120 137
         CGGAGTACTGTCCTCCG 180 197
         CGGAGTACTGTCCTCCG 240 257
         CGGAGTACTGTCCTCCG 300 317
         CGGAGTACTGTCCTCCG 360 377
         CGGAGTACTGTCCTCCG 420 437
TFIIIC-Xls-50 :
         TGGATGGGAG 17 27
         TGGATGGGAG 77 87
         TGGATGGGAG 137 147
         TGGATGGGAG 197 207
         TGGATGGGAG 257 267
         TGGATGGGAG 317 327
         TGGATGGGAG 377 387
         TGGATGGGAG 437 447
HSE_CS_inver0 :
         CTNGAANNTTCNAG 27 41
         CTNGAANNTTCNAG 87 101
         CTNGAANNTTCNAG 147 161
         CTNGAANNTTCNAG 207 221
         CTNGAANNTTCNAG 267 281
         CTNGAANNTTCNAG 327 341
         CTNGAANNTTCNAG 387 401
         CTNGAANNTTCNAG 447 461
GCN4-his3-180 :
         ATGACTCAT 50 59
         ATGACTCAT 110 119
         ATGACTCAT 170 179
         ATGACTCAT 230 239
         ATGACTCAT 290 299
         ATGACTCAT 350 359
         ATGACTCAT 410 419
         ATGACTCAT 470 479

5. 從PubMed HTML 頁面提取標題和摘要信息
import urllib.request as urllib2

import re

pmid = '18235848'

url = 'http://www.ncbi.nlm.nih.gov/pubmed?term=%s' % pmid #pmid = '18235848'的網(wǎng)頁地址

url
Out[56]: 'http://www.ncbi.nlm.nih.gov/pubmed?term=18235848' 

handler = urllib2.urlopen(url) #打開這個網(wǎng)頁

html = handler.read()

html = html.decode("utf-8") #使用utf-8解碼html

title_regexp = re.compile('<h1>.{5,400}</h1>') #html信息中標題是被<h1> 和 </h1>括起來的

title_text = title_regexp.search(html)

abstract_regexp = re.compile('<h3>Abstract</h3><div class=""><p><AbstractText>.{20,3000}</AbstractText></p></div>')

abstract_text = abstract_regexp.search(html)

print(url)
http://www.ncbi.nlm.nih.gov/pubmed?term=18235848

print('TITLE:', title_text.group())
TITLE: <h1>Quantitative high-throughput screen identifies inhibitors of the Schistosoma mansoni redox cascade.</h1>

print('ABSTRACT:', abstract_text.group()) #error!不知道原因蘑秽,
#是不是ncbi頁面改版導致代碼現(xiàn)在不能用了饺著?

6. 檢測PubMed 文章摘要中的特定單詞
 import urllib.request as urllib2
import re

# word to be searched
word_regexp = re.compile('schistosoma')

# list of PMIDs where we want to search the word
pmids = ['18235848', '22607149', '22405002', '21630672']
for pmid in pmids:
    url = 'http://www.ncbi.nlm.nih.gov/pubmed?term=' + pmid
    handler = urllib2.urlopen(url)
    html = handler.read()
    title_regexp = re.compile('<h1>.{5,400}</h1>')
    title = title_regexp.search(html)
    title = title.group() 
    abstract_regexp = re.compile('<h3>Abstract</h3><p>.{20,3000}</p></div>')
    abstract = abstract_regexp.search(html)
    abstract = abstract.group()
    word = word_regexp.search(abstract, re.IGNORECASE)
    if word:
        # display title and where the keyword was found
        print(title)
        print(word.group(), word.start(), word.end())
Traceback (most recent call last):

  File "<ipython-input-71-3ad765bdb689>", line 23, in <module>
    handler = urllib2.urlopen(url)

  File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)

  File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 531, in open
    response = meth(req, response)

  File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)

  File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 569, in error
    return self._call_chain(*args)

  File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)

  File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)

HTTPError: Forbidden

#失敗箫攀,訪問獲取不了Abstract信息

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市幼衰,隨后出現(xiàn)的幾起案子靴跛,更是在濱河造成了極大的恐慌,老刑警劉巖渡嚣,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梢睛,死亡現(xiàn)場離奇詭異,居然都是意外死亡识椰,警方通過查閱死者的電腦和手機绝葡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腹鹉,“玉大人藏畅,你說我怎么就攤上這事」χ洌” “怎么了愉阎?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長力奋。 經(jīng)常有香客問我榜旦,道長,這世上最難降的妖魔是什么景殷? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任章办,我火速辦了婚禮,結果婚禮上滨彻,老公的妹妹穿的比我還像新娘藕届。我一直安慰自己,他們只是感情好亭饵,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布休偶。 她就那樣靜靜地躺著,像睡著了一般辜羊。 火紅的嫁衣襯著肌膚如雪踏兜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天八秃,我揣著相機與錄音碱妆,去河邊找鬼。 笑死昔驱,一個胖子當著我的面吹牛疹尾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼纳本,長吁一口氣:“原來是場噩夢啊……” “哼窍蓝!你這毒婦竟也來了?” 一聲冷哼從身側響起繁成,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤吓笙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巾腕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體面睛,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年尊搬,在試婚紗的時候發(fā)現(xiàn)自己被綠了侮穿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡毁嗦,死狀恐怖亲茅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狗准,我是刑警寧澤克锣,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站腔长,受9級特大地震影響袭祟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捞附,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一巾乳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸟召,春花似錦胆绊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跟继,卻和暖如春种冬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舔糖。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工娱两, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人金吗。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓十兢,卻偏偏與公主長得像趣竣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纪挎,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

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