数据挖掘于分析实例解析——异常值分析

数据质量分析:数据质量分析的主要任务是检查原始数据时候存在脏数据以及不能直接进行相对应的分析 其中包括缺失值异常值 不一致的数据 包含重复的数据。

# -*- coding: utf-8 -*-D:\GitWork\Data\chapter3\demo\code\3-1_abnormal_check.py
'''
@ author: Xjl
'''

import pandas as pd
import matplotlib.pyplot as plt

catering_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箱型分布分析:

箱型图提供了识别异常值的一个标准:异常值通常被定义为小于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 np
import matplotlib.pyplot as plt

plt.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()

发布了36 篇原创文章 · 获赞 34 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_41605937/article/details/90760093
今日推荐