常用统计类函数的python实现

2022-03-11 00:00:00 函数 统计 常用

本范例包含了对数字数组求和、计数、最大最小值、平均值、中位数、标准偏差、百分比等常用统计函数

"""
作者:皮蛋编程(https://www.pidancode.com)
创建日期:2022/3/18
修改日期:2022/3/18
功能描述:针对数字数组的常用统计函数Python实现
"""

import sys


class Stats:
    def __init__(self, sequence):
        # 将列表内的所有元素转换成浮点数
        self.sequence = [float(item) for item in sequence]

    def sum(self):
        if len(self.sequence) < 1:
            return None
        else:
            return sum(self.sequence)

    def count(self):
        return len(self.sequence)

    def min(self):
        if len(self.sequence) < 1:
            return None
        else:
            return min(self.sequence)

    def max(self):
        if len(self.sequence) < 1:
            return None
        else:
            return max(self.sequence)

    def avg(self):
        if len(self.sequence) < 1:
            return None
        else:
            return sum(self.sequence) / len(self.sequence)

    def median(self):
        if len(self.sequence) < 1:
            return None
        else:
            self.sequence.sort()
            return self.sequence[len(self.sequence) // 2]

    def stdev(self):
        if len(self.sequence) < 1:
            return None
        else:
            avg = self.avg()
            sdsq = sum([(i - avg) ** 2 for i in self.sequence])
            stdev = (sdsq / (len(self.sequence) - 1)) ** .5
            return stdev

    def percentile(self, percentile):
        if len(self.sequence) < 1:
            value = None
        elif (percentile >= 100):
            sys.stderr.write('ERROR: 百分比必须 < 100.  您提供的是: %s\n' % percentile)
            value = None
        else:
            element_idx = int(len(self.sequence) * (percentile / 100.0))
            self.sequence.sort()
            value = self.sequence[element_idx]
        return value


# 演示代码
sequence = [1.2, 2.6, 9, 13.8, 8.0]
stats = Stats(sequence)
print('求和:{}'.format(stats.sum()))
print('数组长度:{}'.format(stats.count()))
print('最大值:{}'.format(stats.max()))
print('最小值:{}'.format(stats.min()))
print('中位数:{}'.format(stats.median()))
print('标准差:{}'.format(stats.stdev()))
print('平均数:{}'.format(stats.avg()))
print('百分数:{}'.format(stats.percentile(70)))

输出结果:
求和:34.6
数组长度:5
最大值:13.8
最小值:1.2
中位数:8.0
标准差:5.104115986142948
平均数:6.92
百分数:9.0

相关文章