lsq546397641的个人博客分享 http://blog.sciencenet.cn/u/lsq546397641

博文

使用python语言,统计列表的四分位数

已有 1977 次阅读 2021-12-17 10:39 |系统分类:科研笔记

image.png

四分位数:统计学中把所有数值由小到大排列并分成四等份,它是一组数据排序后处于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))





https://m.sciencenet.cn/blog-994715-1316960.html

上一篇:kraken2结果解释
下一篇:python中的浮点数range方法

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2022-9-25 22:41

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部