常用【描述性统计指标】含义(by python)

统计学有时候会被误解,好像必须有大量的样本数据,才能使统计结果有意义。

这会让我们觉得统计学离我们的日常生活很遥远。

其实,如果数据的准确度高的话,少量的样本数据同样能反映出真实的情况。

比如,很多国家选举时不断做的民意调查,一般做到有效样本1600多份就够了,不管你是几千万人的小国家,还是数亿人的大国,调查的样本数都差不多。

所以,正确地进行统计,即使样本数据量不大,我们也可以从中提取知识,避免被误导。

不过,在此之前,我们要能够清楚地理解统计数据 和各种统计指标的含义,以及它们在区分真相和误导时的作用。

1. 统计是什么

统计 是个很笼统的概念,它涉及到很多事情,简单来定义它的话,必然会掩盖很多细节。
统计学 可以被认为是处理数据的科学框架,其中包括与数据收集、分析和解释相关的所有任务。

那么,什么是数据
数据 是对世界观察的一般集合,其性质多种多样,从定性到定量。

比如,研究人员从实验中收集数据,企业家从用户那里收集数据,医生从病人那里收集数据等等。

本篇准备介绍一些在分析数据时常用的两种描述性指标,通过它们来实际的度量数据情况,而不是模凌两可的描述数据性质。

本文使用的示例数据来自scikit-learn中自带的糖尿病数据集。

python 复制代码
from sklearn.datasets import load_diabetes

# 糖尿病人数据集
ds = load_diabetes(as_frame=True, return_X_y=True, scaled=False)
data = ds[0]

data.head()

其中一共有400多条数据。

这里不做糖尿病的分析,只是用这个数据集来演示一些统计学描述指标的计算方式。

2. 集中度指标

首先是集中度指标 ,它表示数据的**"中间"是什么样的。"中间"**这个词是模糊的,我们可以用多种方式来定义中间。

2.1. 平均值

平均值 是一种描述性统计量,描述的是数据集中最典型的值。

比如,我们看看示例数据中,糖尿病病人的年龄平均值:

python 复制代码
# 获取年龄列表
ages = data["age"].tolist()

# 年龄之和
sum_ages = sum(ages)
# 人数
num_ages = len(ages)

# 平均年龄
avg_ages = sum_ages / num_ages
avg_ages

# 运行结果
48.51809954751131

这个平均年龄告诉我们,易患糖尿病的**"典型"年龄可能是48岁左右**。

2.2. 中位数

中位数 是数据**"中间"的另一种定义,它不像 平均值**那样需要算术计算。

它只要将数据排序之后,取中间的那个值就行,如果数据集中数据的个数是偶数,则取排序后中间两个值的平均值。

python 复制代码
# 获取年龄列表
ages = data["age"].tolist()

sorted_ages = sorted(ages)

# 人数
num_ages = len(ages)
mid = int(num_ages / 2)

# 因为人数是偶数,所以中位数是中间两个数的平均值
med_ages = (sorted_ages[mid - 1] + sorted_ages[mid])/2
med_ages

# 运行结果
50.0

中位数 年龄50与上面计算的平均值 差别不大。

有时候,数据集中有一些异常值 (极大或极小的值),就会造成中位数平均值差别很大。

异常值 一般会对平均值 产生不利的影响,而对于中位数来说,一般影响不大。

2.3. 众数

众数 是数据中出现最频繁的值,它不像平均值中位数 那样更像数据的**"中间"
不过,一个值在数据集中重复出现的次数越多,对
平均值的影响就越大,因此,众数代表了对平均值**的最高加权贡献因素。

python 复制代码
# 获取年龄列表
ages = data["age"].tolist()

ages_count = {}
# 统计每个年龄的个数
for i in ages:
    if i in ages_count:
        ages_count[i] += 1
    else:
        ages_count[i] = 1

# 出现次数最多的年龄
max_age, max_count = 0, 0
for k, v in ages_count.items():
    if v > max_count:
        max_age = k
        max_count = v

print(max_age, max_count)

# 运行结果
53.0 19

众数 也就是出现最多的年龄,是53岁 ,有19人。

众数 相当接近中位数,这让我们对于数据的集中趋势更有信心。

3. 离散度指标

集中度指标 让我们了解到数据的**"中间"是什么样的,而 离散度指标则是告诉我们数据 "变化"**有多大。
离散度指标让我们可以度量数据的变化程度,哪怕是轻微的变化程度。

3.1. 极差

极差就是数据的最大值与最小值之差,它让我们了解到数据的变化范围有多大。

python 复制代码
# 获取年龄列表
ages = data["age"].tolist()

# 极差
max(ages) - min(ages)

# 运行结果
60.0

极差60岁,说明糖尿病患者的年龄差距很大,这是一种需要及早预防的疾病。

3.2. 标准差

标准差 是对观察结果分布的衡量,是对数据与**"典型"数据点的偏差程度的度量。
标准差越大,数据在
平均值**附近的分布就越分散,反之越集中。

python 复制代码
# 标准差计算函数
def stdev(nums):
    diffs = 0
    avg = sum(nums)/len(nums)
    for n in nums:
        diffs += (n - avg)**(2)
    return (diffs/(len(nums)-1))**(0.5)

# 获取年龄列表
ages = data["age"].tolist()

stdev(ages)

# 运行结果
13.109027822041087

极差 看出年龄的差距有60岁 ,但是标准差 只有13岁左右,说明数据还算集中,不是太分散。

3.3. 方差

方差 就是标准差 的平方,它们几乎是完全相同的东西。

需要注意的是,方差 的单位是原始数据不一样,而标准差的单位和原始数据一样。

平均值 一样,方差标准差也会受到异常值的影响。

4. 总结

本篇主要内容包括:

  1. 描述性统计指标分两种:集中度 指标和离散度指标
  2. 描述性统计指标表示数据的简单摘要
  3. 平均值计算我们数据集的典型值,易受异常值影响
  4. 中位数是数据集排序后的中间值,不易受异常值影响
  5. 众数是出现次数最多的值
  6. 极差是数据集中最大值和最小值之间的差
  7. 方差标准差表示在平均值附近的波动情况
相关推荐
在屏幕前出油4 小时前
二、Python面向对象编程基础——理解self
开发语言·python
阿方索4 小时前
python文件与数据格式化
开发语言·python
信创天地6 小时前
信创国产化数据库的厂商有哪些?分别用在哪个领域?
数据库·python·网络安全·系统架构·系统安全·运维开发
不哦罗密经6 小时前
python相关
服务器·前端·python
happybasic6 小时前
python字典中字段重复性的分析~~
开发语言·python
山海青风6 小时前
人工智能基础与应用 - 数据处理、建模与预测流程 6 模型训练
人工智能·python·机器学习
l木本I7 小时前
Reinforcement Learning for VLA(强化学习+VLA)
c++·人工智能·python·机器学习·机器人
颖风船7 小时前
锂电池SOC估计的一种算法(改进无迹卡尔曼滤波)
python·算法·信号处理
94620164zwb57 小时前
应用设置模块 Cordova 与 OpenHarmony 混合开发实战
python
551只玄猫7 小时前
KNN算法基础 机器学习基础1 python人工智能
人工智能·python·算法·机器学习·机器学习算法·knn·knn算法