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

其实,如果数据的准确度高的话,少量的样本数据同样能反映出真实的情况。
比如,很多国家选举时不断做的民意调查,一般做到有效样本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. 从一道面试题来谈谈Golang中的 ==

    写这篇文章的时候,已经离我找工作有一段时间了,但是觉得这道题不管是面试还是日常的工作中,都会经常遇到,所以还是特意写一篇文章,记录下自己对Golang中==的理解.如文章中出现不对的地方,请不吝赐教, ...

  2. [golang]使用logrus自定义日志模块

    简介 logrus是一个第三方日志库,性能虽不如zap和zerolog,但方便易用灵活.logrus完全兼容标准的log库,还支持文本.JSON两种日志输出格式. 特点 相较于标准库,logrus有更 ...

  3. Java基础实现加油站圈存机系统

    加油站圈存机系统 ​ 对于加油卡而言,圈存是将用户账户中已存入的资金划转到所持的加油卡上后方可使用.通俗一点的说法就是您在网点把钱存入主卡中,再分配到下面的副卡,由于副卡都在使用车辆的驾驶员手中,需要 ...

  4. 4.2 C++ Boost 内存池管理库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量.可移植.高效的C应用程序.Boost库可以作为标准C库的后备,通常被称为准标准 ...

  5. k8s发布应用

    前言 首先以SpringBoot应用为例介绍一下k8s的发布步骤. 1.从代码仓库下载代码,比如GitLab: 2.接着是进行打包,比如使用Maven: 3.编写Dockerfile文件,把步骤2产生 ...

  6. pytest-xdist分布式测试原理浅析

    pytest-xdist执行流程: 解析命令行参数:pytest-xdist 会解析命令行参数,获取用户指定的分发模式.进程数.主机列表等信息. 加载测试用例:pytest-xdist 会加载所有的 ...

  7. Codeforces Round 882 div.2 A

    Smiling&Weeping ----总有人间一两风,填我十万八千梦 A. The Man who became a God time limit per test 1 second mem ...

  8. 第1章 Git概述

    第1章 Git概述 Git 是一个免费的.开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目. Git 易于学习,占地面积小,性能极快. 它具有廉价的本地库,方便的暂存区域和多个工作流 ...

  9. Mysql优化篇-索引优化与查询优化

    1.索引失败案列 如果查询时没有使用索引,查询语句就会扫描表中所有记录,在数据量大的情况下,查询会很慢. (1)全值匹配 (2)最佳左前缀法则 mysql可以为多个字段创建索引,一个索引可以包括16个 ...

  10. Go语言常用标准库——flag

    文章目录 os.Args flag包基本使用 导入flag包 flag参数类型 定义命令行flag参数 flag.Type() flag.TypeVar() flag.Parse() flag其他函数 ...