python基因
Ⅰ 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)
defgeneEncoding(pop_size,chrom_length):
pop=[[]]
foriinrange(pop_size):
temp=[]
forjinrange(chrom_length):
temp.append(random.randint(0,1))
pop.append(temp)
returnpop[1:]
#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
#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
#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的小數,然後分別和各個基因的累積個體適應度進行比較。如果累積個體適應度大於隨機數則進行保留,否則就淘汰。這一塊的核心思想在於:一個基因的個體適應度越高,他所佔據的累計適應度空隙就越大,也就是說他越容易被保留下來。
#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
- 變異:
#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
- 整個遺傳演算法的實現完成了,總的調用入口代碼如下
#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代最優解的變化趨勢表現出來。
其中genEncodeing是自定義的一個簡單隨機生成序列的函數,具體實現如下
[python]view plain
編碼完成之後就是要進行個體評價,個體評價主要是計算各個編碼出來的list的值以及對應帶入目標式子的值。其實編碼出來的就是一堆2進制list。這些2進制list每個都代表了一個數。其值的計算方式為轉換為10進制,然後除以2的序列長度次方減一,也就是全一list的十進制減一。根據這個規則就能計算出所有list的值和帶入要計算式子中的值,代碼如下
[python]view plain
有了具體的值和對應的基因序列,然後進行一次淘汰,目的是淘汰掉一些不可能的壞值。這里由於是計算最大值,於是就淘汰負值就好了
[python]view plain
然後就是進行選擇,這是整個遺傳演算法最核心的部分。選擇實際上模擬生物遺傳進化的優勝劣汰,讓優秀的個體盡可能存活,讓差的個體盡可能的淘汰。個體的好壞是取決於個體適應度。個體適應度越高,越容易被留下,個體適應度越低越容易被淘汰。具體的代碼如下
[python]view plain
選擇完後就是進行交配和變異,這個兩個步驟很好理解。就是對基因序列進行改變,只不過改變的方式不一樣
交配:
[python]view plain
[python]view plain
[python]view plain
完整代碼可以在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