利用Python脚本计算基因组测序数据Nx0
发布时间
阅读量:
阅读量
脚本原代码加解析 test.py
import sys
fn = sys.argv[1]
fi = open(fn,'r')
chr_len = {}
for line in fi:
line = line.strip()
infos2 = line.split('\t')
chr_len[infos2[0]] =int(infos2[1])
n= len(chr_len)
total_len = sum(chr_len.values())
mean_len =total_len/n
longest_id,longest_len = max(chr_len.items(),key=lambda x:x[1])
def Nx0(l,x):
'''
该函数用于计算Nx0,接受两个参数:
l : 长度列表
x : N50|N60|N70...
返回两个值:
idx : Nx0 的编号
Nx0 : Nx0 的长度
'''
l = chr_len.values() #所有染色体长度
l = sorted(l,reverse=True) #从大到小排序
p = int (x[1:])/100 #x[1:]去掉Nx0中的N,int()转换为数字
total_len = sum(l)
nx0 = idx =cumsum =0
for i,v in enumerate(l,start=1): #可以帮我们多迭代出当前循环的第几个元素
cumsum += v # 累加
if cumsum >= total_len * p:
idx = i
nx0 = v
break
return idx , nx0
Nx0(chr_len.values(),'N100')
fn = 'C:/Users/ASUS/Documents/Python20201122/data/TAIR10/Arabidopsis_thaliana.TAIR10.dna.toplevel.fa.fai'
fi_name = fn.split('/')[-1]
print('stats for {}'.format(fi_name))
print('sum = {},n ={},ave ={},largest ={}'.format(total_len,n,mean_len,longest_id))
for n in ('N50', 'N60', 'N70', 'N80', 'N90', 'N100'):
idx , nx0 = Nx0(chr_len.values(), n)
print('{}={},n={}'.format(n,nx0,idx))
小结
此脚本可以直接跟在自己的Teminal端的Python路径下运行:
C:\Users\ASUS\AppData\Local\Programs\Python\Python310>C:/Users/ASUS/Documents/Python20201122/test.py C:/Users/ASUS/Documents/Python20201122/data/TAIR10/Arabidopsis_thaliana.TAIR10.dna.toplevel.fa.fai
stats for Arabidopsis_thaliana.TAIR10.dna.toplevel.fa.fai
sum = 119667750,n =7,ave =17095392.85714286,largest =1
N50=23459830,n=3
N60=23459830,n=3
N70=19698289,n=4
N80=19698289,n=4
N90=18585056,n=5
N100=154478,n=7
输入文件为染色体长度文件,fa.fai文件,输出为上文打印文件,怎么说呢,基础没打好,之前的break,与return 前面的空格没把握好,结果给我一直报错,后面一定要严谨细心,君想看注释的可以看我之前一个博文,写的比较详细。
全部评论 (0)
还没有任何评论哟~
