常用【描述性统计指标】含义(by python)
统计学有时候会被误解,好像必须有大量的样本数据,才能使统计结果有意义。
这会让我们觉得统计学离我们的日常生活很遥远。
其实,如果数据的准确度高的话,少量的样本数据同样能反映出真实的情况。
比如,很多国家选举时不断做的民意调查,一般做到有效样本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. 总结
本篇主要内容包括:
- 描述性统计指标分两种:集中度指标和离散度指标
- 描述性统计指标表示数据的简单摘要
- 平均值计算我们数据集的典型值,易受异常值影响
- 中位数是数据集排序后的中间值,不易受异常值影响
- 众数是出现次数最多的值
- 极差是数据集中最大值和最小值之间的差
- 方差和标准差表示在平均值附近的波动情况
常用【描述性统计指标】含义(by python)的更多相关文章
- 常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript
常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript Javascript现阶段还不适合用来做独立开发,它的天下还是在web应用 ...
- HTTP协议常用标准状态码含义
HTTP协议常用标准状态码含义 状态码 含义 备注 200 请求已完成 2XX状态码均为正常状态码返回. 300 多种选择 服务器根据请求可执行多种操作.服务器可根据请求者 (User age ...
- Pod中spec的字段常用字段及含义
一.Pod中spec的字段常用字段及含义 1.pod.spec.containers ² spec.containers.name <string> #pod的名称,必须字段,名称唯一 ...
- gcc编译器常用选项的含义
-w: 关闭编译时的警告, 也就是编译后不显示任何warning,因此有时编译中会出现一些诸如数据转换之类的可忽略警告, -Wall: 显示编译后所有警告 -W: 显示警告,但是只是显示编译器认为的会 ...
- k8s学习笔记之五:Pod资源清单spec字段常用字段及含义
第一章.前言 在上一篇博客中,我们大致简述了一般情况下资源清单的格式,以及如何获得清单配置的命令帮助,下面我们再讲解下清单中spec字段中比较常见的字段及其含义 第二章.常用字段讲解 spec.con ...
- 字符串的常用操作和方法(Python入门教程)
字符串的常用操作 很好理解 字符串可以用 ' + ' 连接,或者乘一个常数重复输出字符串 字符串的索引操作 通过一对中括号可以找到字符串中的某个字符 可以通过正负数双向操作噢 用一个中括号来实现 为什 ...
- Windows 常用消息及含义
消息范围 说明 0 - WM_USER – 1 系统消息 WM_USER - 0x7FFF 自定义窗口类整数消息 WM_APP - 0xBFFF 应用程序自定义消息 0xC000 - 0xFFFF ...
- 常用业务接口界面化 in python flask
背景: 对于业务测试来说,有一些基础业务接口是需要经常调用的,如根据userId查询某人的信息,修改某人的xx属性,一般的接口都有验签(或者说token)机制,使用postman等工具的话,也是需要去 ...
- 描述性统计指标 - 众数 Mode
定义- 数值型数据 - 出现频数最多的变量值- 品质型数据.单项式分组数据 - 频数最多的组为众数组,该组的变量值(类型)就是众数- 组距式分组数据 - 频数最多的组为众数组,通过公式求得众数 - 公 ...
- git常用命令及含义
Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等.顾名思义,版本控制系统主要就是控制.协调 ...
随机推荐
- C# 中关于 T 泛型【C# 基础】
〇.前言 C# 里面的泛型不仅可以使用泛型函数.泛型接口,也可以使用泛型类.泛型委托等等.在使用泛型的时候,它们会自行检测你传入参数的类型,因此它可以为我们省去大量的时间,不用一个个编写方法的重载.与 ...
- 解码Transformer:自注意力机制与编解码器机制详述与代码实现
本文全面探讨了Transformer及其衍生模型,深入分析了自注意力机制.编码器和解码器结构,并列举了其编码实现加深理解,最后列出基于Transformer的各类模型如BERT.GPT等.文章旨在深入 ...
- 【pandas小技巧】--category类型补充
category类型在pandas基础系列中有一篇介绍数据类型的文章中已经介绍过.category类型并不是python中的类型,是pandas特有的类型. category类型的优势那篇文章已经介绍 ...
- 04.使用 github actions+docker 自动部署前后端分离项目 zhontai (.net core+vue)
前言 Github Actions是什么?是 GitHub 提供的一种持续集成/持续部署(CI/CD)工作流程自动化服务,助力项目的自动化构建.测试和部署. 依托于平台,本文将分享使用 GitHub ...
- 接口自动化测试项目 | IHRM登录接口自动化测试
项目内容如下: ### 需求- 地址:http://ihrm-java.itheima.net/#/login- 测试接口: - 登录接口:针对登录的13个cases### 技术 - V1:pytho ...
- 正则表达式快速入门二 :python re module 常用API介绍
python regex module re 使用 reference regex module in python import re re.search re.search(regex, subj ...
- Cplex求解教程(基于OPL语言,可作为大规模运算输入参考)
最近导导让牛牛改篇论文,牛牛在她的指导下把非线性问题化成了线性.然鹅,化成线性后的模型决策变量和约束条件均达到上百甚至上千个,这让牛牛犯了难,以下方法或许能为这样大规模模型的变量和约束输入提供思路(๑ ...
- Python 网页爬虫原理及代理 IP 使用
一.Python 网页爬虫原理 Python 是一种高效的编程语言,在 Web 开发和数据分析领域广受欢迎.Python 的优秀模块使其更加适合大规模数据处理和 Web 服务的编程.网络爬虫是 Pyt ...
- Linux升级至glibc-2.14步骤
Linux升级至glibc-2.14步骤 查看gcc版本命令: strings /lib64/libc.so.6 |grep GLIBC_ glibc安装 首先, 点击此处下载glibc2.14下载, ...
- 使用 Sealos 构建低成本、高效能的私有云
这个时候谈论私有云似乎有点反直觉?大部分人认知不是上云是大趋势嘛?我也比较认可上云,不过私有云也是云,今天给大家带来一个新的选择 -- 用云,只需一个 Sealos 就够了. 看看我们怎么做到更低的成 ...