快速找到离群值的三种方法

news2024/11/25 3:02:43

本文将介绍3个在数据集中查找离群值的Python方法

离群值(Outliers)是指在数据集中与其他数据点明显不同或者异常的数据点。这些数据点可能比其他数据点要远离数据集的中心,或者具有异常的数值。离群值可能是由于数据采集错误、异常事件、测量误差或者其他未知因素引起的。

离群值的存在可以对数据分析和统计建模产生重要影响,因为它们可能导致模型不准确或者产生误导性的结果。

我们先创建一个演示的数据

 import pandas as pd
 import matplotlib.pyplot as plt
 
 name = ['John', 'Victor', 'Carlos', 'Leo', 'Kevin', 'Silva', 'Johnson', 'Lewis', 'George', 'Daniel', 'Harry', 'Jordan', 'James']
 salary = [4000, 1000, 2000, 100000, 3500, 6000, 1500, 3000, 2500, 3600, 2100, 1700, 1600]
 
 df = pd.DataFrame({'Name': name, 'Salary': salary})
 
 plt.boxplot(df['Salary'])
 plt.show()

可以看到上面的点就是离群值,下面我们将介绍快速找到它的方法。

四分位极差法

首先找到第一和第三个四分位数值,通常记为Q1和Q3。然后用Q3减去Q1计算四分位差(IQR)。

通过减去/增加1.5倍IQR来计算下界和上界。上下边界外的值就是离群值

 q1 = df['Salary'].quantile(0.25)
 q3 = df['Salary'].quantile(0.75)
 iqr = q3 - q1
 
 lower_bound = q1 - 1.5 * iqr
 upper_bound = q3 + 1.5 * iqr
 
 outliers = df[(df['Salary'] < lower_bound) | (df['Salary'] > upper_bound)]

1.5倍IQR的阈值通常是一种常用的标准,阈值的选择可以根据具体情况进行调整。有时候,也可以选择更严格或更宽松的阈值,以适应特定的数据分析需求。

标准偏差法

标准偏差法(Standard Deviation Method)使用数据的标准差来判断数据点是否偏离了数据。上界和下界是均值和3倍标准差的加减。

他的方法如下:

计算平均值和标准偏差: 首先,计算数据的平均值(Mean)和标准偏差(Standard Deviation)。平均值代表了数据的中心位置,标准偏差衡量了数据的分散程度。

确定阈值: 定义一个阈值,通常是标准偏差的倍数(通常为2或3倍标准偏差)。这个阈值决定了什么样的数据点被认为是离群值。

识别离群值: 计算每个数据点与平均值之间的差值,然后将这个差值与阈值比较。如果差值超过了阈值,数据点被认为是离群值。

 mean = df.Salary.mean()
 std = df.Salary.std()
 
 upper_bound = mean + 3 * std
 lower_bound = mean - 3 * std
 
 outliers = df[(df['Salary'] < lower_bound) | (df['Salary'] > upper_bound)]

标准偏差法的优点在于简单易懂,而且不需要假设数据分布的形状。但需要注意以下几点:

  • 通常情况下,阈值使用2或3倍标准偏差作为阈值,但这个值可能需要根据具体情况进行调整。
  • 这种方法对于正态分布的数据集效果较好,但对于偏斜分布的数据,可能会导致误判。
  • 标准偏差法可能不适用于小样本,因为标准偏差在小样本中可能不够稳定。

Z-分数法

Z-分数(Z-Score)法测量了数据点与数据集平均值之间的偏差,以标准化方式表示这个偏差。对于每个数据点,计算它与平均值之间的差值,然后将这个差值除以标准偏差,得到Z-分数。如果z-score大于3.0或小于-3.0,则该值可归类为离群值。

我们可以直接使用scipy提供的函数来进行计算

 from scipy import stats
 
 df['Salary_zscore'] = stats.zscore(df['Salary'])
 filtered_df = df[(df['Salary_zscore'] <= 3) & (df['Salary_zscore'] >= -3)]

Z-分数法适用于各种类型的数据分布,不需要假设数据分布的形状。并且提供了标准化的度量,使得不同数据集之间的离群值比较更加容易。

总结

以上是可以快速找到离群值的统计学方法,除此以外,还有一些机器学习的方法例如:

DBSCAN(Density-Based Spatial Clustering of Applications with Noise): DBSCAN是一种密度聚类算法,也可用于检测离群值。它根据数据点的密度来识别离群值,将密度较低的点视为离群值。

LOF(Local Outlier Factor): LOF是一种局部离群值因子方法,用于检测局部区域内的离群值。它考虑了每个数据点周围的局部密度与相邻点的密度之间的比率,从而识别离群值。

Isolation Forest: Isolation Forest是一种基于随机森林的离群值检测方法,它通过构建树结构来识别离群值。由于使用了随机性,它对高维数据和大数据集非常有效。

但是这些方法执行的速度会很慢,如果对于速度要求比较严格还是需要谨慎选择。

https://avoid.overfit.cn/post/2f9d9254f3a146bcb116f680906ec66a

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1040680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大型监控网络设备架构

IT监控架构的功效日益突出&#xff0c;已成为企业信息化建设不可或缺的一部分。本文将详细介绍IT监控架构的含义、构成、功能及其在公司中的应用。 IT监控架构的含义是什么&#xff1f; 简单来说&#xff0c;IT监控架构就是利用一系列技术和方法对公司的IT系统进行全方位的监控…

【LeetCode热题100】--73.矩阵置零

73.矩阵置零 使用标记数组&#xff1a; 使用两个标记数组分别记录每一行和每一列是否有零出现 先遍历一次数组&#xff0c;如果某个元素为0&#xff0c;则将该元素所在的行和列所对应的标记数组的位置为true&#xff0c;最后再遍历该数组&#xff0c;用标记数组更新原数即可 …

《优化接口设计的思路》系列:第四篇—接口的权限控制

系列文章导航 《优化接口设计的思路》系列&#xff1a;第一篇—接口参数的一些弯弯绕绕 《优化接口设计的思路》系列&#xff1a;第二篇—接口用户上下文的设计与实现 《优化接口设计的思路》系列&#xff1a;第三篇—留下用户调用接口的痕迹 《优化接口设计的思路》系列&#…

开学选什么样的电容笔好用?ipad可以用的手写笔

自从ipad等平板电脑开始使用电容笔以来&#xff0c;电容笔已经完全代替了我们的手指&#xff0c;并且使我们的书写速度有了很大的提高。但由于Apple Pencil内置的高科技芯片&#xff0c;价格始终居高不下&#xff0c;这让不少人&#xff0c;尤其是在校学生&#xff0c;也是难以…

DataGrip连接MySQL

DataGrip连接MySQL 新建项目 驱动管理 下载驱动 自定义驱动 如果网络环境不好 无法下载驱动 移除下载方式 指定自定义路径下的驱动 设置连接

linux驱动之input子系统简述

文章目录 一、什么是input子系统二、内核代码三、代码分析 一、什么是input子系统 Input驱动程序是linux输入设备的驱动程序&#xff0c;我们最常见的就按键&#xff0c;触摸&#xff0c;插拔耳机这些。其中事件设备驱动程序是目前通用的驱动程序&#xff0c;可支持键盘、鼠标…

资产连接支持会话分屏,新增Passkey用户认证方式,支持查看在线用户信息,JumpServer堡垒机v3.7.0发布

2023年9月25日&#xff0c;JumpServer开源堡垒机正式发布v3.7.0版本。在这一版本中&#xff0c;在用户管理层面&#xff0c;为了提高使用JumpServer操作资产的效率&#xff0c;JumpServer支持对会话进行分屏操作&#xff0c;用户可以在一个浏览器页面打开多个会话&#xff0c;方…

软件定义网络-OpenvSwitch

软件定义网络&#xff08;SDN&#xff09;。它主要有以下三个特点&#xff1a; 控制与转发分离&#xff1a;转发平面就是一个个虚拟或者物理的网络设备&#xff0c;就像小区里面的一条条路。控制平面就是统一的控制中心&#xff0c;就像小区物业的监控室。它们原来是一起的&…

[python 刷题] 853 Car Fleet

[python 刷题] 853 Car Fleet 哎……周赛第三题解应该用 monotonic stack 做优化的&#xff0c;没写出来&#xff0c;所以多刷两题 monotonic stack 的题目找找感觉…… 题目&#xff1a; There are n cars going to the same destination along a one-lane road. The destin…

【操作系统笔记九】并发安全问题

用户态抢占和内核态抢占 内核中可以执行以下几种程序&#xff1a; ① 当前运行的进程&#xff1a;陷阱程序&#xff08;系统调用&#xff09; 和 故障程序&#xff08;page fault&#xff09; &#xff0c;进程运行在内核态的时候&#xff0c;其实就是在执行进程在用户态触发的…

如何扫描MSI安装文件的路径

今天有个需求&#xff0c;需要扫描已经安装应用, 其中有个华云桌面 其中的UninstallString 值是 MsiExec.exe /X{D20A661B-0CBA-4DE3-A1F6-353D8153725D} 无法直接获取其安装目录&#xff0c; MsiGetProductInfoW 等API INSTALLPROPERTY_INSTALLLOCATION 也不好使 自己写一个…

Supervisor进程管理

Supervisor进程管理 概述&#xff1a;supervisor 是一个用 python 语言编写的进程管理工具&#xff0c;它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死&#xff0c;supervisor 监听到进程死后&#xff0c;可以很方便的让进程自动恢复&#xff0c;…

区块链实验室(26) - 区块链期刊Blockchain: Research and Applications

Elsevier出版物“Blockchain: Research and Applications”是浙江大学编审的期刊。该期刊自2020年创刊&#xff0c;并出版第1卷。每年出版4期&#xff0c;最新期是第4卷第3期(2023年9月)。 目前没有官方的IF&#xff0c;Elsevier的引用因子Citescore是6.4。 虽然是新刊&#xf…

《开发实战》18 | 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?

取长补短之 Redis vs MySQL 做一个简单测试&#xff0c;分别填充 10 万条数据到 Redis 和 MySQL 中。MySQL 中的 name字段做了索引&#xff0c;相当于 Redis 的 Key&#xff0c;data 字段为 100 字节的数据&#xff0c;相当于 Redis 的Value。在我的电脑上&#xff0c;使用 wr…

免费的视频剪辑素材,可商用。

找免费可商用的视频剪辑素材&#xff0c;就上这6个网站&#xff0c;强推&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富&#xff0c;网站主要还是以设计类素材为主&#xff0c;高清视频素材也很多&am…

【软件测试】黑盒测试用例的四种设计方法

一、输入域测试用例设计方法 输入域测试法是一种综合考虑了等价类划分、边界值分析等方法的综合方法&#xff0c;针对输入域测试法中可能出现的各种情况&#xff0c;输入域测试法主要考虑三个方面&#xff1a;  (1)极端测试(ExtremalTesting)&#xff0c;要求在输入域中选择…

汽车数字化转型:存储驱动创新未来

通过在存储领域持续不断的技术创新&#xff0c;西部数据正在助力汽车行业打造更加辉煌灿烂的未来。 汽车数字化转型大会上的创新存储 近日&#xff0c;作为智能汽车领域的行业盛宴&#xff0c;2023第二届汽车数字化转型大会在上海揭幕。 本届汽车数字转型大会不但聚集了全球汽车…

Python+selenium自动化生成测试报告

批量执行完用例后&#xff0c;生成的测试报告是文本形式的&#xff0c;不够直观&#xff0c;为了更好的展示测试报告&#xff0c;最好是生成HTML格式的。 unittest里面是不能生成html格式报告的&#xff0c;需要导入一个第三方的模块&#xff1a;HTMLTestRunner 一、导入HTMLT…

springboot如何接入netty,实现在线统计人数?

springboot如何接入netty&#xff0c;实现在线统计人数&#xff1f; Netty 是 一个异步事件驱动的网络应用程序框架 &#xff0c;用于快速开发可维护的高性能协议服务器和客户端。 Netty ​ 是一个 NIO 客户端服务器框架 ​&#xff0c;可以快速轻松地开发协议服务器和客户端等…

使用富斯i6遥控器设置6种飞行模式

使用富斯i6遥控器设置6种飞行模式 将富斯i6遥控器的SWC和SWD分别设置为ch5和ch6,然后使用混控功能设置6段开关,以实现6种飞行模式 一、设置辅助通道 进入系统菜单,选择 Functions Setup 选项,进入 Aux. channels 进行设置。将 Channel 5设置为 SwC,Channel 6 设置为 Sw…