
数据挖掘于分析实例解析——异常值分析
发布日期:2021-05-07 05:53:24
浏览次数:24
分类:技术文章
本文共 2056 字,大约阅读时间需要 6 分钟。
数据质量分析:数据质量分析的主要任务是检查原始数据时候存在脏数据以及不能直接进行相对应的分析 其中包括缺失值异常值 不一致的数据 包含重复的数据。
# -*- coding: utf-8 -*-D:\GitWork\Data\chapter3\demo\code\3-1_abnormal_check.py'''@ author: Xjl'''import pandas as pdimport matplotlib.pyplot as pltcatering_sale = './data/catering_sale.xls' # 表示路径data = pd.read_excel(catering_sale, index_col=u'日期') # 读取 日期列为索引列print(data.describe())#可以用来显示数据的均值和标准值 最小值 最大值等plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号# 建立图像plt.figure()p = data.boxplot(return_type='dict')#画箱线图 直接使用DataFrom的方法x = p['fliers'][0].get_xdata() # ‘flies’即为异常值y = p['fliers'][0].get_ydata()y.sort()# 用annotate添加注释for i in range(len(x)): if i > 0: plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i] + 0.05 - 0.8 / (y[i] - y[i - 1]), y[i])) else: plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i] + 0.08, y[i]))plt.show()
其中在进行异常值分析的方式:
1简单的统计分析
2采用3σ原则和箱型图
3箱型分布分析:
箱型图提供了识别异常值的一个标准:异常值通常被定义为小于QL-1.5IQR或大于QU+1.5IQR的值。QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小;QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大;IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。
箱型图依据实际数据绘制,没有对数据作任何限制性要求(如服从某种特定的分布形式),它只是真实直观地表现数据分布的本来面貌;另一方面,箱型图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的鲁棒性:多达25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不能对这个标准施加影响。由此可见,箱型图识别异常值的结果比较客观,在识别异常值方面有一定的优越性。
在python中的可以用一下函数来查数据的基本情况。
print(data.describe())#可以用来显示数据的均值和标准值 最小值 最大值等
#就是将异常值的设置为1并在对应的y值中找到x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签.[0]是用来标注第1个的异常值数值,同理[i]标注第i+1位的异常值.y = p['fliers'][0].get_ydata()y.sort()
# 用annotate添加注释"""文本的一个常见用例是标注绘图的某些特征,而annotate()方法提供辅助函数,使标注变得容易。 在标注中,有两个要考虑的点:由参数xy表示的标注位置和xytext的文本位置。 这两个参数都是(x, y)元组。"""
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号fig = plt.figure()ax = fig.add_subplot(111)x = np.arange(0.0, 5.0, 0.01)y = np.cos(2 * np.pi * x)ax.plot(x, y, lw=2)ax.annotate('峰值', xy=(2, 1), xytext=(3, 1.5),arrowprops=dict(facecolor='black', shrink=0.05)) #ax.set_ylim(-2, 2) # 设置y轴刻度的范围plt.show()
发表评论
最新留言
不错!
[***.144.177.141]2025年04月09日 22时04分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
(SpringMVC)springMVC.xml 和 web.xml
2019-03-04
Oracle 学习一篇文章就够了(珍藏版)
2019-03-04
一篇文章带你搞定 Oracle 的体系结构
2019-03-04
Oracle 单行函数
2019-03-04
一篇文章带你搞定 OAuth 2.0 的四种方式
2019-03-04
一篇文章带你搞定官方推荐 Stack 的替代品 双端队列 Deque
2019-03-04
(LeetCode)Java 求解搜索旋转排序数组
2019-03-04
(模拟数组)Java 求解螺旋矩阵 II
2019-03-04
Burpsuite-02-设置JVM内存大小与解决页面显示文字乱码错误
2019-03-04
Python学习:字符串
2019-03-04
计算几何(旁切圆) - Ex-circles - UVA 11731
2019-03-04
DP - Tickets - HDU - 1260
2019-03-04
phpStudy for Linux (lnmp+lamp一键安装包)
2019-03-04
【安卓学习笔记】JAVA基础Lesson9-对象的转型
2019-03-04
本校暑假训练营11_Python数据分析入门7-网络1
2019-03-04
本校暑假训练营12_Python数据分析入门7-网络2
2019-03-04
数据库SQL实战3_获取所有非manager的员工emp_no
2019-03-04