|
四分位数:统计学中把所有数值由小到大排列并分成四等份,它是一组数据排序后处于25%和75%位置上的值。四分位数是通过3个点将全部数据等分为4部分,其中每部分包含25%的数据。很显然,中间的四分位数就是中位数,因此通常所说的四分位数是指处在25%位置上的数值(称为下四分位数)和处在75%位置上的数值(称为上四分位数)。
代码如下:
import os
import gzip
import pandas as pd
import numpy as np
#统计各个样本的reads长度
def cal_length(f):
seq = []
reads = 0
tt = gzip.open(f).readlines()
tlen = len(tt)
plen = int(tlen/4)
for i in range(0,plen):
start,end = (i*4,(i+1)*4)
pdna = tt[start:end][1]
reads += 1
seq.append(len(pdna))
return f,reads,seq
#ord 是 数据排序(从低到高,从高到低)
def quantile_exc(data, n ,ord = 'asc',interpolation='lower'): # 其中data为数据组,n为第几个百分位数
"""
data:最好输入pandas的列,例如 data.column
n:小数百分比
interpolation:Lower表示向下取整,higher表示向上取整
"""
import math
dic = {}
a = 1
data = list(np.sort(data))
if ord == 'asc':
data = data
elif ord == 'desc':
data.reverse()
for i in data:
dic[a] = i
a = a+1
value = ((a-1)*n)
if interpolation == 'lower':
return dic[math.floor(value)]
elif interpolation == 'higher':
return dic[math.ceil(value)]
fqGzPath = '/data/liushuqing/project/GSA-upload/gzResult' #样本压缩测序文件路径
gz_names = [i for i in os.listdir(fqGzPath) if 'fastq.gz' in i]
#fqGzFile = '/data.raid0.32t/liushuqing/project/GSA-upload/script/gzResult/PG33.fastq.gz'
with open('fqGzLenSta.txt','w') as fw:
fw.writelines('{0}\t{1}\t{2}\t{3}\n'.format('sample','lower','median','upper'))
for i in gz_names:
fileName = i.split('.fastq.gz')[0]
fqGzFile = '{0}/{1}'.format(fqGzPath,i)
df = pd.Series(cal_length(fqGzFile)[2])
q1 = quantile_exc(df, 0.25, ord = 'asc', interpolation='lower') #2
q2 = quantile_exc(df, 0.5, ord = 'asc', interpolation='lower') #5
q3 = quantile_exc(df, 0.75, ord = 'asc', interpolation='lower') #5
fw.writelines('{0}\t{1}\t{2}\t{3}\n'.format(fileName,q1,q2,q3))
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-28 03:22
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社