统计学有时候会被误解,好像必须有大量的样本数据,才能使统计结果有意义。
这会让我们觉得统计学离我们的日常生活很遥远。

其实,如果数据的准确度高的话,少量的样本数据同样能反映出真实的情况。
比如,很多国家选举时不断做的民意调查,一般做到有效样本1600多份就够了,不管你是几千万人的小国家,还是数亿人的大国,调查的样本数都差不多。

所以,正确地进行统计,即使样本数据量不大,我们也可以从中提取知识,避免被误导。
不过,在此之前,我们要能够清楚地理解统计数据和各种统计指标的含义,以及它们在区分真相和误导时的作用。

1. 统计是什么

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

那么,什么是数据
数据是对世界观察的一般集合,其性质多种多样,从定性到定量。
比如,研究人员从实验中收集数据,企业家从用户那里收集数据,医生从病人那里收集数据等等。

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

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

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. 平均值

平均值是一种描述性统计量,描述的是数据集中最典型的值。
比如,我们看看示例数据中,糖尿病病人的年龄平均值:

# 获取年龄列表
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. 中位数

中位数是数据“中间”的另一种定义,它不像平均值那样需要算术计算。
它只要将数据排序之后,取中间的那个值就行,如果数据集中数据的个数是偶数,则取排序后中间两个值的平均值。

# 获取年龄列表
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. 众数

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

# 获取年龄列表
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. 极差

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

# 获取年龄列表
ages = data["age"].tolist() # 极差
max(ages) - min(ages) # 运行结果
60.0

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

3.2. 标准差

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

# 标准差计算函数
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. 方差标准差表示在平均值附近的波动情况

常用【描述性统计指标】含义(by python)的更多相关文章

  1. 常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript

    常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript Javascript现阶段还不适合用来做独立开发,它的天下还是在web应用 ...

  2. HTTP协议常用标准状态码含义

     HTTP协议常用标准状态码含义 状态码    含义 备注 200 请求已完成 2XX状态码均为正常状态码返回. 300 多种选择 服务器根据请求可执行多种操作.服务器可根据请求者 (User age ...

  3. Pod中spec的字段常用字段及含义

    一.Pod中spec的字段常用字段及含义 1.pod.spec.containers ²  spec.containers.name <string>  #pod的名称,必须字段,名称唯一 ...

  4. gcc编译器常用选项的含义

    -w: 关闭编译时的警告, 也就是编译后不显示任何warning,因此有时编译中会出现一些诸如数据转换之类的可忽略警告, -Wall: 显示编译后所有警告 -W: 显示警告,但是只是显示编译器认为的会 ...

  5. k8s学习笔记之五:Pod资源清单spec字段常用字段及含义

    第一章.前言 在上一篇博客中,我们大致简述了一般情况下资源清单的格式,以及如何获得清单配置的命令帮助,下面我们再讲解下清单中spec字段中比较常见的字段及其含义 第二章.常用字段讲解 spec.con ...

  6. 字符串的常用操作和方法(Python入门教程)

    字符串的常用操作 很好理解 字符串可以用 ' + ' 连接,或者乘一个常数重复输出字符串 字符串的索引操作 通过一对中括号可以找到字符串中的某个字符 可以通过正负数双向操作噢 用一个中括号来实现 为什 ...

  7. Windows 常用消息及含义

      消息范围 说明 0 - WM_USER – 1 系统消息 WM_USER - 0x7FFF 自定义窗口类整数消息 WM_APP - 0xBFFF 应用程序自定义消息 0xC000 - 0xFFFF ...

  8. 常用业务接口界面化 in python flask

    背景: 对于业务测试来说,有一些基础业务接口是需要经常调用的,如根据userId查询某人的信息,修改某人的xx属性,一般的接口都有验签(或者说token)机制,使用postman等工具的话,也是需要去 ...

  9. 描述性统计指标 - 众数 Mode

    定义- 数值型数据 - 出现频数最多的变量值- 品质型数据.单项式分组数据 - 频数最多的组为众数组,该组的变量值(类型)就是众数- 组距式分组数据 - 频数最多的组为众数组,通过公式求得众数 - 公 ...

  10. git常用命令及含义

    Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等.顾名思义,版本控制系统主要就是控制.协调 ...

随机推荐

  1. FreeRTOS 基于 ARMv8-M 对 MPU 的应用

    一.前言 ARMv8-M 支持 MPU,FreeRTOS 也添加了对这些 MPU 的应用代码.这里用来记录 FreeRTOS 对 MPU 应用方式的探究结果. 二.ArmV8-M MPU 介绍 ARM ...

  2. 洛谷 P1122 最大子树和 题解

    一道入门的树形DP. 首先我们对于数据进行有序化处理,这便于我们利用数据结构特点(可排序性)来发觉数据性质(有序.单调.子问题等等性质),以便于后续的转化.推理和处理.有序化可以"转化和创造 ...

  3. 使用supervisor守护Prometheus进程

    使用supervisor守护Prometheus进程 目录 使用supervisor守护Prometheus进程 安装supervisor 安装Prometheus监控系统 配置supervisor ...

  4. Ubuntu SVN服务端安装方法

    Ubuntu SVN服务端安装方法:https://blog.csdn.net/sm_wang/article/details/78656120https://www.cnblogs.com/myme ...

  5. mysql触发器使用教程-六种触发器

    参考:https://zhuanlan.zhihu.com/p/439273702 触发器(Trigger)是 MySQL 中非常实用的一个功能,它可以在操作者对表进行「增删改」 之前(或之后)被触发 ...

  6. 在线问诊 Python、FastAPI、Neo4j — 创建 疾病节点

    目录 疾病数据 创建节点 根据检查结果.医生的临床经验得出疾病 疾病数据 disease_data.csv 建议值用""引起来.避免中间有,号造成误识别 疾病 "干眼&q ...

  7. Note -「SOS DP」高维前缀和

    本文差不多算是翻译了一遍 CF blog?id=45223 就是抄了一遍,看不懂可以去原文. 当然我的翻译并不是完全遵从原文的. Part. 1 Introduction 平时我们怎么求高维前缀和?容 ...

  8. Solution -「CF 724F」Uniformly Branched Trees

    Description Link. 给定三个数 \(n,d,mod\),求有多少种 \(n\) 个点的不同构的树满足:除了度数为 \(1\) 的结点外,其余结点的度数均为 \(d\).答案对质数 \( ...

  9. JUC并发编程(1)—CompletableFuture详解

    @ 目录 CompletableFuture介绍 1.创建异步任务 2.CompletableFuture API ①. 获得结果和触发计算(get.getNow.join.complete) ②. ...

  10. C++20起支持的一个小特性

    注释掉的为传统的写法,从C++20起支持default关键字修饰的写法,即使是成员变量有多个的时候也支持,减轻了程序员的心智负担.