异常值处理

  • 1、异常值定义
  • 2、异常值处理方式
    • 2.1 均方差
    • 2.3 箱形图
  • 3、实战
    • 3.1 加载数据
    • 3.2 检测异常值数据
    • 3.4 显示异常值的索引位置

1、异常值定义

在统计学中,离群点是并不属于特定族群的数据点,是与其它值相距甚远的异常观测。离群点是一种与其它结构良好的数据不同的观测值。

例如,你可以很清楚地看到这个列表中的离群点:[20,24,22,19,29,18,4300,30,18]

当观测值是一堆数字且都是一维时,辨别离群点很容易,但如果有数以千计的观测值或数据是多维的,你可能会需要更机智的方法来检测这些离群点。

2、异常值处理方式

2.1 均方差

3σ原则
如果数据服从正态分布,在3σ原则下,异常值被定义为一组测定值中与平均值的偏差超过三倍标准差的值。
在正态分布下,距离平均值3σ之外的值出现的概率为 P(|x-μ|>3σ)<=0.003,属于极个别的小概率事件。
如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述

这个原则有个前提条件:数据需要服从正态分布

在3∂原则下,如果观测值与平均值的差值超过3倍标准差,那么可以将其视为异常值。
正负3∂的概率是99.7%,那么距离平均值3∂之外的值出现的概率为P(|x-u| > 3∂) <= 0.003,属于极个别的小概率事件。
import numpy as np
import pandas as pddef detect_outliers(data,threshold=3):mean_d = np.mean(data)std_d = np.std(data)outliers = []for y in data_d:z_score= (y - mean_d)/std_d if np.abs(z_score) > threshold:outliers.append(y)return outliers

2.3 箱形图

四分位间距 (IQR) 的概念被用于构建箱形图。IQR 是统计学中的一个概念,通过将数据集分成四分位来衡量统计分散度和数据可变性。

简单来说,任何数据集或任意一组观测值都可以根据数据的值以及它们与整个数据集的比较情况被划分为四个确定的间隔。四分位数会将数据分为三个点和四个区间。

四分位间距对定义离群点非常重要。它是第三个四分位数和第一个四分位数的差 (IQR = Q3 -Q1)。在这种情况下,离群点被定义为低于箱形图下触须(或 Q1 − 1.5x IQR)或高于箱形图上触须(或 Q3 + 1.5x IQR)的观测值。

IQR是统计分散程度的一个度量,分散程度通过需要借助箱线图来观察,通常把小于 Q1 - 1.5 * IQR 或者大于 Q3 + 1.5 * IQR的数据点视作离群点,探测离群点的公式是:

outliers =  value < ( Q1 - 1.5 * IQR )  or value > ( Q3 + 1.5 * IQR )

这种探测离群点的方法,是箱线图默认的方法,箱线图提供了识别异常值/离群点的一个标准:

异常值通常被定义为小于 QL - l.5 IQR 或者 大于 Qu + 1.5 IQR的值,QL称为下四分位数, Qu称为上四分位数,IQR称为四分位数间距,是Qu上四分位数和QL下四分位数之差,其间包括了全部观察值的一半。
def detect_outliers(sr):q1 = sr.quantile(0.25)q3 = sr.quantile(0.75)iqr = q3-q1 #Interquartile rangefence_low  = q1-1.5*iqrfence_high = q3+1.5*iqroutliers = sr.loc[(sr < fence_low) | (sr > fence_high)]return outliers

3、实战

上面数据基础知识的介绍了,下面我们进入今天的正题,也就是利用python与pandas进行数据分析,今天的主要目标就是找到数据中的异常值。(我们使用的是前面介绍的第一种方法)

3.1 加载数据

首先,我们需要加载进行分析的数据,同样使用beer的数据,不过这里的数据是经过处理的,可以看到abv属性列的值中大部分都是0.0*,基本都不超过1,但是也有数据是55,也就是说这些数据是远大于其他数据的,我们主要是对这部分数据进行处理。

class Repair_Dirty(object):__init_data = 0def __init__(self, filename):self.filename = filenamedef get_data(self):if self.filename == " ":# print("您输入的文件路径为空")returnelse:self.__init_data = pd.read_csv(self.filename)return self.__init_data#主函数定义一个对象,并实现对方法的调用
if __name__ == "__main__":file_path = 'dirty_beer_last.csv'data_cla = Repair_Dirty(file_path)data = data_cla.get_data()#得到数据

形如下面的数据图,红色框内数据为55的,就是我们所说的异常值,我们的目标就是通过第一种方法,将此类数据找出来。

3.2 检测异常值数据

使用第一种检测方式来检测异常值,我们主要是定义一个函数find_outlier(),并且函数是在类的内部实现的。

    # 找到异常值,abv列def find_outlier(self, attribute):data_att = self.__init_data[attribute]# 找到异常值outlier = data_att[np.abs(data_att - data_att.mean()) > 3 * data_att.std()]print(data.loc[data[attribute] == 55])#对abv属性的异常值进行输出#print(np.where(self.__init_data[attribute] == 55))  # 返回指定位置的索引return outlier

下面的图片中可以看到整个数据表中有108行数据中abv值为55的,所以很明显,我们基本上已经达到了想要的目标,找到了数据中的异常值,根据索引或者id我们便可以将其进行值替换操作,对异常值进行修复。

3.4 显示异常值的索引位置

既然已经找到了异常值,那我们再对其进行索引显示就比较简单了,也就是一行代码的事,其实在上面代码中也可以看到,只不过上面这行代码被我们给注释掉了,下面将其单独拿出来显示。

print(np.where(self.__init_data[attribute] == 55))  # 返回指定位置的索引

这行代码就是对异常值索引进行显示了。

至此,我们今天的数据分析异常值处理的博文就写到这里了,小张同学仍在马不停蹄的进行学习,希望这篇文章能够帮助正在学习数据分析的小伙伴!!!
奥利给

最后,将源代码附上,有需要的小伙伴可以自取。

import pandas as pd
import numpy as np
import reclass Repair_Dirty(object):__init_data = 0def __init__(self, filename):self.filename = filenamedef get_data(self):if self.filename == " ":# print("您输入的文件路径为空")returnelse:self.__init_data = pd.read_csv(self.filename)return self.__init_data# 找到异常值,abv列def find_outlier(self, attribute):data_att = self.__init_data[attribute]# 找到异常值outlier = data_att[np.abs(data_att - data_att.mean()) > 3 * data_att.std()]print(data.loc[data[attribute] == 55])#对abv属性的异常值进行输出print(np.where(self.__init_data[attribute] == 55))  # 返回指定位置的索引return outlierif __name__ == "__main__":file_path = 'dirty_beer_last.csv'data_cla = Repair_Dirty(file_path)data = data_cla.get_data()print((data))if data is None:print("路径为空,程序退出!!!")else:data = data_cla.fill_na()outlier = data_cla.find_outlier()print(outlier)

python数据分析实战之异常值处理相关推荐

  1. Python数据分析实战:上海二手房价分析

    1 数据搜集 使用 urllib 库中的request 模块爬取赶集网发布的上海二手房信息,包括包括户型.面积.单价等,再使用BeautifulSoup 库解析爬取的HTML数据,最终将数据保存到CS ...

  2. Python数据分析实战基础 | 初识Pandas

    这是Python数据分析实战基础的第一篇内容,主要是和Pandas来个简单的邂逅.已经熟练掌握Pandas的同学,可以加快手速滑动浏览或者直接略过本文. 01  重要的前言 这段时间和一些做数据分析的 ...

  3. 《Python数据分析实战》day2: Pandas中取得某行或者是某列的一点思考

    今天看了<Python数据分析实战>这本书的第四章:Pandas的简介的部分,大概看了一半,在实践代码的时候发现了jupyter notebook提示warning,研究了一下有了一些自己 ...

  4. python数据分析实战 fabio nelli百度云_Python数据分析实战 内利(Fabio Nelli),杜春晓 9787115432209...

    商品描述: 基本信息 书名:Python数据分析实战 定**价:59.00元 作者: 内利(Fabio Nelli) 著,杜春晓 译 出版社:人民邮电出版社 出版日期:2016-08-01 ISBN: ...

  5. python电影数据分析报告_【python数据分析实战】电影票房数据分析(二)数据可视化...

    在上一部分<[python数据分析实战]电影票房数据分析(一)数据采集> 已经获取到了2011年至今的票房数据,并保存在了mysql中. 本文将在实操中讲解如何将mysql中的数据抽取出来 ...

  6. Python数据分析实战学习与分享(一)

    学习的书籍: Python Data Analytics Python数据分析实战(尚未出版电子书) 1.1数据分析 当今世界对信息技术的依赖程度日渐加深,每天都会产生和存储海量的数据.数据的来源多种 ...

  7. Python数据分析实战学习

    Python数据分析实战学习\displaystyle\boxed{Python数据分析实战学习}Python数据分析实战学习​ AprilJulyOctober2015AprilJulyOctobe ...

  8. Python数据分析实战

    Python数据分析实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1nlHM1IW8MYg3z79TUwIsWg 提取码:ux8t 复制这段内容后打开百度网盘手 ...

  9. python数据分析实例-python数据分析实战

    Python数据分析实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1nlHM1IW8MYg3z79TUwIsWg 提取码:ux8t 复制这段内容后打开百度网盘手 ...

最新文章

  1. Node Opencv Addon
  2. 安装linux 选择安装包,安装CentOS如何最小化选择安装软件包组
  3. 牛客网_PAT乙级_1029有几个PAT(25)【输入字符串并strlen计算长度】
  4. iOS开发如何实现消息推送机制
  5. Asp.Net Core 工作单元 UnitOfWork UOW
  6. 只安装了JRE,没有手动配置环境变量,eclipse跑不起来,Exit code = -1
  7. MyEclipse中常用设置。
  8. vim的一些基本应用
  9. 从ip_queue到nfnetlink_queue(上)
  10. SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
  11. 【C++入门】C++ string类
  12. element table多选表格_element-ui 表格打印
  13. 天网防火墙v2.7.3.1000 build0128
  14. DirectShow 开启摄像头
  15. 卷积神经网络(CNN)原理详解
  16. python爬裁判文书网_对爬取中国裁判文书网的分析
  17. 微信公众号菜单栏链接开发
  18. 饱和和非饱和激活函数
  19. JavaFX教程资源
  20. 坚定信念,追求自己的理想!让那些坏人去死把!!!

热门文章

  1. 小米笔记本“突然”不能调整屏幕亮度
  2. android 距离右边距,APP界面设计中间距与边距的要点
  3. hibernate配置映射的问题
  4. 用cmd进入DOS窗口的步骤
  5. 计算机慢的解决方法,几种电脑变慢的解决方法
  6. js文件在谷歌浏览器上显示乱码问题
  7. Xcode 真机调试失败:Errors were encountered while preparing your device for development
  8. 计算机应用说课稿,中职计算机说课稿
  9. echart 边框线_echarts 饼图给外层加边框
  10. 【数据库基础】数据库的数据查询