美文网首页
Python入门:数值分析

Python入门:数值分析

作者: 洋阳酱 | 来源:发表于2019-06-01 17:59 被阅读0次

教程来自扇贝编程

数值分析:
平均数、中位数、分位数、众数、极差、方差、标准差

均值

均值也称为平均值或平均数。它等于数值之和除以数值个数。当数值在列表中时,我们可以用Python内置的sum() 来计算列表内的数值之和,用 len() 来计算列表内的数值个数。

# score 内是学生在某个Python项目上的得分
score = [96,80,85,79,92,42,84,72,93,77]

# ave_score 计算score的均值
sum_score = sum(score)
print(sum_score) # 输出:800
num_score = len(score) 
print(num_score) # 输出:10
ave_score = sum_score / num_score
print(ave_score) # 输出: 80.0

上例中,学生的总分 sum_score 为 800,分数 num_score 有10个,均值 ave_score 为 80.0

中位数

中位数是指一组数值中间点的值,当数值个数为奇数时,中位数就正好是中间点的值;如果数值个数为偶数,中位数为中间两个点的均值。

我们来看如何用代码计算一组数值的中位数,首先需要大家知道 Python 内置的 sorted(),它可以将一组数值自小到大排序:

numbers = [2,3,4,2]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
# 输出:[2, 2, 3, 4]

在此基础上,我们写个函数求中位数:

def get_median(numbers):
    """
    找到numbers最中间的数
    """
    length = len(numbers) #数值个数
    sorted_numbers = sorted(numbers) #将数值排序
    mid_point = int(length/2) #中位数的位置,需要是int类型
    
    if length % 2 == 1: # 如果数值个数为奇数
        median = sorted_numbers[mid_point]
    else: # 如果数值个数为偶数
        # 中位数为中间两个数 mid_a 和 mid_b 的均值
        mid_a = sorted_numbers[mid_point-1]
        mid_b = sorted_numbers[mid_point]
        median = (mid_a + mid_b)/2
    # 函数返回 median
    return median

score = [96,80,85,79,92,42,84,72,93,77]
print(get_median(score))
# 输出:82.0

分位数

分位数:它是指一组数值中,大于或等于特定百分比的一个值。比如,75分位指一组数值中,大于或等于75%数值的值。

我们来写一个函数,计算一组数值中的 n分位数是多少:

def find_nperc(numbers,n):
    """
    返回numbers中,n分位对应的数值是多少
    """
    # 先将数值排序 
    sorted_numbers = sorted(numbers)
    
    # 找到n分位对应数值的索引位置
    n_index = int(n/100 * len(sorted_numbers))
    
    return sorted_numbers[n_index]

score = [96,80,85,79,92,42,84,72,93,77]
print("25分位数为{}".format(find_nperc(score,25)))
# 输出:25分位数为77
print("75分位数为{}".format(find_nperc(score,75)))
# 输出:75分位数为92

众数

一组数值中,出现频次最多的数值为众数,有时一组数值中会有多个众数。

借此机会,我们学习Python中内置的max(),它可以返回一组列表中数值最大的元素。

下方函数求得一个列表 numbers 中的众数,思路如下:

1)用 count() 计算列表 numbers 中每个元素出现的次数;

2)将上述元素和对应的出现次数存入字典 count_num 中;

3)用 max() 找到 count_num 中最大的值,并找到拥有该值的字典键添加到 max_count_num 中;

4)max_count_num 中的元素就是众数,count_num 是众数出现的次数。

def get_mode(numbers):
    """
    返回 numbers中出现次数最多的数值(众数)及其出现次数
    """
    count_num = {}
    max_count_num = []
    # 循环numbers,建立字典 count_num:{数值:出现次数}
    for num in numbers:
        count_num[num] = numbers.count(num)
    # 循环count_num
    # 用max() 得到数值出现次数的最大值,赋值给 max_count
    # 将出现次数最大值的数值(众数)放入 max_count_num
    for num,count in count_num.items():
        if count == max(count_num.values()):
            max_count = count
            max_count_num.append(num)

    return "众数为{},出现次数{}次".format(max_count_num,max_count)

score = [96,80,85,79,93,42,84,72,93,77]
print(get_mode(score))
# 众数为[93],出现次数2次

极差

有些情况下,当我们面对一组数据时,我们会分析它的“分散”情况。

极差是指一组数据中最大值减去最小值的差。

极差虽然简单易得,但是有其局限性。它只受数据中的最大值和最小值影响。

我们可以用 max() 来获得数据的最大值,用 min() 来获得数据的最小值。

# score 是一群学生在某个Python项目上的得分
score = [96,80,85,79,92,42,84,72,93,77]
# score_range 为 score 的极差
score_range = max(score) - min(score)
print(score_range)
# 输出:54

方差

方差:在一组数据集中,数值与均值之间的距离。

在下方图中,我们红点与蓝点所代表的数据集均值相同(黄线水平),但是用肉眼来看,我们发现红点较集中在均值附近,而蓝点则较远。可以初步判断,红点所代表数据集的方差要小于蓝点。如果一组数据集的方差越大,那么数据集的“波动性”也会越大。

image

方差的计算方法为:

1)先求得一组数据集的均值 mean;

2)用数据集中的每一个数值减去均值,其差为 de_mean;求每个差值 de_mean 的平方 sqr;

3)将所有 sqr 相加,得到和为 sum_sqr;

4)如果数据集的数据个数为 n,则 sum_sqr / (n-1) 的结果,即是该数据集的方差 variance。

# score 是一群学生在某个Python项目上的得分
score = [96,80,85,79,92,42,84,72,93,77]
# 1)先求得一组数据集的均值 mean;
mean = sum(score) / len(score)
# 2)用数据集中的每一个数值减去 mean,并求得差值的平方 sqr,
#    将所有 sqr 相加,求得 sum_sqr;
sum_sqr = 0
for num in score:
    sum_sqr += (num - mean) ** 2
# 3)求 sum_sqr / (n-1),结果就是方差 variance。
variance = sum_sqr / (len(score)-1)
print(variance)
# 输出:236.44444444444446

标准差

上一页讲到的方差是一系列平方的求和,比较难以理解和沟通。因此人们在方差的基础上创造了更便于交流、理解的概念——标准差。标准差为方差的平方根。

# variance 为刚才计算的方差:
variance = 236.44
# 标准差为 variance 的平方根
standard_deviation = variance ** 0.5
print(standard_deviation)
# 输出:15.37660560722034

另外,我们之前学过 Python 中内置的 Math 库,其中有计算平方根的 .sqrt() 方法,我们也可以通过其来根据方差计算标准差:

import math
variance = 236.44
standard_deviation = math.sqrt(variance)
print(standard_deviation)
# 输出:15.37660560722034

相关文章

  • Python入门:数值分析

    教程来自扇贝编程 数值分析:平均数、中位数、分位数、众数、极差、方差、标准差 均值 均值也称为平均值或平均数。它等...

  • Python入门:数值分析代码

    教程来自扇贝编程 常用数据分析:包括平均数、中位数、分位数、众数、极差、方差、标准差等等 附代码:

  • 解密大数据专栏文章分类【转】

    数据分析入门数据分析入门常见问题汇总Python初学者们 - Anaconda入门使用指南Python学习利器——...

  • 解密大数据专栏文章分类

    数据分析入门 数据分析入门常见问题汇总 Python初学者们 - Anaconda入门使用指南 Python学习利...

  • python基础(持续更新)

    书籍:《Python编程:从入门到实践》 输出 数值 int & floattype()int() 运算符 函数 ...

  • 目录||所学见解技能=知识教程

    专业技能 《Python 入门基础》《Python web窗口》《Python 爬虫实践》《Python 数据分析...

  • 第一章.引论

    此章对应习题,使用python实现github link 现代数值分析对象、特点 “现代数值分析”是研究用计算机求...

  • 量化交易常见策略CASE

    Python入门: 量化分析师的python日记一;量化分析师的python日记二;量化分析师的python日记三...

  • Jupyter入门

    参考:python数据分析神器Jupyter notebook快速入门 Jupyter notebook入门 概述...

  • 编程实战综合

    生信编程很简单[1] 编程语言系统入门 生信分析人员如何系统入门python? 生信分析人员如何系统入门perl?...

网友评论

      本文标题:Python入门:数值分析

      本文链接:https://www.haomeiwen.com/subject/covatctx.html