當前位置:首頁 » 編程語言 » python基因

python基因

發布時間: 2023-01-22 02:13:49

python-gffutils 修改gff3文件基因名稱

基因結構注釋文件一般為gff3的格式,一共是9列,依次為基因組序列id,注釋來源,類型,起始位置,終止位置,得分,正負鏈,相位,屬性。
基因結構注釋文件中,基因包含mRNA,mRNA包含exon, CDS, UTR等信息,同時在注釋文件中除基因行外,其他行在第9列會通過Parent指明該行從屬的上一級ID,也就是一個基因的gene行、mRNA行、CDS行、exon行都會通過Parent層層關聯在一起。

EVM軟體整合出的基因結構注釋文件一般如下所示,目前有一個需求,就是修改基因名稱,修改為類似AT01G000001這種形式

gffutils是一個用於解析gff3/gtf格式的python包,讀取gff3文件非常方便,利用這個包實現對基因結構注釋文件重新命名python腳本如下

幫助文檔,用法

我輸入的change.bed文件內容如下

最終得到更換名稱後的注釋文件

Ⅱ python小程序--實現DNA到RNA的轉換

在處理基因組信息的時候,我們時不時需要對DNA序列進行處理,比如將DNA轉換成RNA,對於較少批量的數據來說,可以人工處理,但是在面對大的fastq文件的時候,會顯得蒼白無力,下面分別介紹兩種處理方式

1.單個序列

2.文件處理

以上小程序可以進行轉換。

Ⅲ 如何用PYTHON提取基因序列里的小寫字元串(內含子)

s="序列"
printre.findall("[a-z]+",序列)

Ⅳ Python 基於基因表達量繪制熱圖

Ⅳ python A, C, T, 和 G構成的字元串來構建一個基因組,,在 TAG, TAA, 或者 TGA之前結束

#-*-coding:utf-8-*-
sstr=raw_input('PleaseinputtheGeneString: ')
endsplit=['TAG','TAA','TGA']
if'ATG'insstr:
foriinsstr.split('ATG'):
forjinendsplit:
ifjini:
printi.split(j)[0]
else:
print'error'

>>>

Please input the Gene String:
TTATGTTTTAAGGATGGGGCGTTAGTT
TTT
GGGCGT

Please input the Gene String:
TGTGTGTATAT
error

Ⅵ 利用gff提取某個基因的最長轉錄本(Python實現)

from Bio import SeqIO

from Bio.Seq import Seq

from Bio.SeqRecord import SeqRecord

import gffutils

import re

#######################

#從cds獲得每條轉錄本的長度,從gff獲得每個基因包含哪些轉錄本

fout = 'output/longest.fa'

cds = 'data/rna.fna'

gff = 'data/genomic.gff'

fout = 'output/longest.fa'

seq_index = SeqIO.index(cds ,'fasta')

gffdb = gffutils.create_db(gff,'gff.db'.force=True,

                          merge_strategy='creat_unique')

#以基因為key,轉錄本為value的字典

gene2longestcds = {}

#對基因進行迭代

for g in gffdb.all_features(featuretype='gene'):

  g_id= g.id

  for m in gffdb.children(g, featuretype='mRNA'):##只關注mRNA信息

    m_id = m.id.replace('rna-' , '')

    m_len = len(seq_index[m_id].seq)

    #一個基因中最長轉錄本的名字

    if g_id not in gene2longestcds:

      gene2longestcds[g_id] = m_id

    elif m_len >len(seq_index[gene2longestcds[g_id]].seq):

      gene2longestcds[g_id] = m_id

sr_list = [v for k,v in seq_index.items() if k in gene2longestcds.values()]

##輸出

SeqIO.write(sr_list, fout, 'fasta')

Ⅶ python有沒有簡單的遺傳演算法

首先遺傳演算法是一種優化演算法,通過模擬基因的優勝劣汰,進行計算(具體的演算法思路什麼的就不贅述了)。大致過程分為初始化編碼、個體評價、選擇,交叉,變異。

以目標式子 y = 10 * sin(5x) + 7 * cos(4x)為例,計算其最大值

首先是初始化,包括具體要計算的式子、種群數量、染色體長度、交配概率、變異概率等。並且要對基因序列進行初始化

[python]view plain

  • pop_size=500#種群數量

  • max_value=10#基因中允許出現的最大值

  • chrom_length=10#染色體長度

  • pc=0.6#交配概率

  • pm=0.01#變異概率

  • results=[[]]#存儲每一代的最優解,N個二元組

  • fit_value=[]#個體適應度

  • fit_mean=[]#平均適應度

  • pop=geneEncoding(pop_size,chrom_length)


  • 其中genEncodeing是自定義的一個簡單隨機生成序列的函數,具體實現如下

    [python]view plain

  • defgeneEncoding(pop_size,chrom_length):

  • pop=[[]]

  • foriinrange(pop_size):

  • temp=[]

  • forjinrange(chrom_length):

  • temp.append(random.randint(0,1))

  • pop.append(temp)

  • returnpop[1:]

  • 編碼完成之後就是要進行個體評價,個體評價主要是計算各個編碼出來的list的值以及對應帶入目標式子的值。其實編碼出來的就是一堆2進制list。這些2進制list每個都代表了一個數。其值的計算方式為轉換為10進制,然後除以2的序列長度次方減一,也就是全一list的十進制減一。根據這個規則就能計算出所有list的值和帶入要計算式子中的值,代碼如下

    [python]view plain

  • #0.0coding:utf-80.0

  • #解碼並計算值

  • importmath

  • defdecodechrom(pop,chrom_length):

  • temp=[]

  • foriinrange(len(pop)):

  • t=0

  • forjinrange(chrom_length):

  • t+=pop[i][j]*(math.pow(2,j))

  • temp.append(t)

  • returntemp

  • defcalobjValue(pop,chrom_length,max_value):

  • temp1=[]

  • obj_value=[]

  • temp1=decodechrom(pop,chrom_length)

  • foriinrange(len(temp1)):

  • x=temp1[i]*max_value/(math.pow(2,chrom_length)-1)

  • obj_value.append(10*math.sin(5*x)+7*math.cos(4*x))

  • returnobj_value

  • 有了具體的值和對應的基因序列,然後進行一次淘汰,目的是淘汰掉一些不可能的壞值。這里由於是計算最大值,於是就淘汰負值就好了

    [python]view plain

  • #0.0coding:utf-80.0

  • #淘汰(去除負值)

  • defcalfitValue(obj_value):

  • fit_value=[]

  • c_min=0

  • foriinrange(len(obj_value)):

  • if(obj_value[i]+c_min>0):

  • temp=c_min+obj_value[i]

  • else:

  • temp=0.0

  • fit_value.append(temp)

  • returnfit_value


  • 然後就是進行選擇,這是整個遺傳演算法最核心的部分。選擇實際上模擬生物遺傳進化的優勝劣汰,讓優秀的個體盡可能存活,讓差的個體盡可能的淘汰。個體的好壞是取決於個體適應度。個體適應度越高,越容易被留下,個體適應度越低越容易被淘汰。具體的代碼如下

    [python]view plain

  • #0.0coding:utf-80.0

  • #選擇

  • importrandom

  • defsum(fit_value):

  • total=0

  • foriinrange(len(fit_value)):

  • total+=fit_value[i]

  • returntotal

  • defcumsum(fit_value):

  • foriinrange(len(fit_value)-2,-1,-1):

  • t=0

  • j=0

  • while(j<=i):

  • t+=fit_value[j]

  • j+=1

  • fit_value[i]=t

  • fit_value[len(fit_value)-1]=1

  • defselection(pop,fit_value):

  • newfit_value=[]

  • #適應度總和

  • total_fit=sum(fit_value)

  • foriinrange(len(fit_value)):

  • newfit_value.append(fit_value[i]/total_fit)

  • #計算累計概率

  • cumsum(newfit_value)

  • ms=[]

  • pop_len=len(pop)

  • foriinrange(pop_len):

  • ms.append(random.random())

  • ms.sort()

  • fitin=0

  • newin=0

  • newpop=pop

  • #轉輪盤選擇法

  • whilenewin<pop_len:

  • if(ms[newin]<newfit_value[fitin]):

  • newpop[newin]=pop[fitin]

  • newin=newin+1

  • else:

  • fitin=fitin+1

  • pop=newpop

  • 以上代碼主要進行了3個操作,首先是計算個體適應度總和,然後在計算各自的累積適應度。這兩步都好理解,主要是第三步,轉輪盤選擇法。這一步首先是生成基因總數個0-1的小數,然後分別和各個基因的累積個體適應度進行比較。如果累積個體適應度大於隨機數則進行保留,否則就淘汰。這一塊的核心思想在於:一個基因的個體適應度越高,他所佔據的累計適應度空隙就越大,也就是說他越容易被保留下來。
  • 選擇完後就是進行交配和變異,這個兩個步驟很好理解。就是對基因序列進行改變,只不過改變的方式不一樣

    交配:

    [python]view plain

  • #0.0coding:utf-80.0

  • #交配

  • importrandom

  • defcrossover(pop,pc):

  • pop_len=len(pop)

  • foriinrange(pop_len-1):

  • if(random.random()<pc):

  • cpoint=random.randint(0,len(pop[0]))

  • temp1=[]

  • temp2=[]

  • temp1.extend(pop[i][0:cpoint])

  • temp1.extend(pop[i+1][cpoint:len(pop[i])])

  • temp2.extend(pop[i+1][0:cpoint])

  • temp2.extend(pop[i][cpoint:len(pop[i])])

  • pop[i]=temp1

  • pop[i+1]=temp2


  • 變異:
  • [python]view plain

  • #0.0coding:utf-80.0

  • #基因突變

  • importrandom

  • defmutation(pop,pm):

  • px=len(pop)

  • py=len(pop[0])

  • foriinrange(px):

  • if(random.random()<pm):

  • mpoint=random.randint(0,py-1)

  • if(pop[i][mpoint]==1):

  • pop[i][mpoint]=0

  • else:

  • pop[i][mpoint]=1


  • 整個遺傳演算法的實現完成了,總的調用入口代碼如下
  • [python]view plain

  • #0.0coding:utf-80.0

  • importmatplotlib.pyplotasplt

  • importmath

  • fromselectionimportselection

  • fromcrossoverimportcrossover

  • frommutationimportmutation

  • frombestimportbest

  • print'y=10*math.sin(5*x)+7*math.cos(4*x)'

  • #計算2進制序列代表的數值

  • defb2d(b,max_value,chrom_length):

  • t=0

  • forjinrange(len(b)):

  • t+=b[j]*(math.pow(2,j))

  • t=t*max_value/(math.pow(2,chrom_length)-1)

  • returnt

  • pop_size=500#種群數量

  • max_value=10#基因中允許出現的最大值

  • chrom_length=10#染色體長度

  • pc=0.6#交配概率

  • pm=0.01#變異概率

  • results=[[]]#存儲每一代的最優解,N個二元組

  • fit_value=[]#個體適應度

  • fit_mean=[]#平均適應度

  • #pop=[[0,1,0,1,0,1,0,1,0,1]foriinrange(pop_size)]

  • pop=geneEncoding(pop_size,chrom_length)

  • foriinrange(pop_size):

  • obj_value=calobjValue(pop,chrom_length,max_value)#個體評價

  • fit_value=calfitValue(obj_value)#淘汰

  • best_indivial,best_fit=best(pop,fit_value)#第一個存儲最優的解,第二個存儲最優基因

  • results.append([best_fit,b2d(best_indivial,max_value,chrom_length)])

  • selection(pop,fit_value)#新種群復制

  • crossover(pop,pc)#交配

  • mutation(pop,pm)#變異

  • results=results[1:]

  • results.sort()

  • X=[]

  • Y=[]

  • foriinrange(500):

  • X.append(i)

  • t=results[i][0]

  • Y.append(t)

  • plt.plot(X,Y)

  • plt.show()

  • 最後調用了一下matplotlib包,把500代最優解的變化趨勢表現出來。
  • 完整代碼可以在github查看

    歡迎訪問我的個人博客

    閱讀全文

Ⅷ Python 腳本之統計基因組文件中染色體長度及N鹼基數目

re模塊是Python中的正則表達式調用模塊,在python中,通過將正則表達式內嵌集成re模塊,程序員們可以直接調用來實現正則匹配。

正則表達式的大致匹配過程是:

re模塊所支持的方法有如下:

其中,pattern為匹配模式,由re.compile生成,例如: pattern = re.compile(r'hello')

參數flag是匹配模式,取值可以使用按位或運算符』|』表示同時生效,如 re.I | re.M。可選值有:

註:以上七個方法中的flags同樣是代表匹配模式的意思,如果在pattern生成時已經指明了flags,那麼在下面的方法中就不需要傳入這個參數了。

1. re.match(pattern, string[, flags])

2. re.search(pattern, string[, flags])

3. re.split(pattern, string[, maxsplit])

4. re.findall(pattern, string[, flags])

5. re.finditer(pattern, string[, flags])

6. re.sub(pattern, repl, string[, count])

7. re.subn(pattern, repl, string[, count])

描述

注意:該方法只能刪除開頭或是結尾的字元,不能刪除中間部分的字元。
語法

參數

返回值

實例

以上實例輸出結果如下:

參考
https://www.cnblogs.com/chengege/p/11190782.html
https://www.runoob.com/python/att-string-strip.html

熱點內容
捷達方向機安全登錄密碼是多少 發布:2025-07-19 00:57:37 瀏覽:688
夜魔迅雷下載ftp 發布:2025-07-19 00:39:29 瀏覽:94
增值稅票安全接入伺服器地址 發布:2025-07-19 00:20:45 瀏覽:481
solidworkspcb伺服器地址 發布:2025-07-18 22:50:35 瀏覽:816
怎麼在堆疊交換機里配置vlan 發布:2025-07-18 22:42:35 瀏覽:625
java調用別人的介面 發布:2025-07-18 22:37:35 瀏覽:436
伺服器四個節點如何聯網 發布:2025-07-18 22:36:02 瀏覽:273
華強北什麼地方休安卓手機 發布:2025-07-18 22:24:56 瀏覽:736
資料庫的根本目標 發布:2025-07-18 21:37:50 瀏覽:941
壓縮機的流速 發布:2025-07-18 21:37:40 瀏覽:409