Kaggle爬梯之路

一 数据质量分析

脏数据:不符合要求,不能进行分析的数据

  1. 缺失值
  2. 异常值
  3. 不一致的值
  4. 重复的数据
  5. 含有特殊符号的数据(&×%¥)

数据缺失值分析

  • 删除
  • 可能值进行插补
  • 不处理

> 异常值分析的三种方法

简单的统计量的分析

数据应该有实际意义,手工去除不符合实际的数据

3σ原则

异常值:一组测定值中与平均值的偏差超过3倍标准差的值
排除P(|x-u|>3σ)<= 0.003的值

箱形图分析

第一四分位数(Q1),又称“较小四分位数”或“下四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。

第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。

第三四分位数(Q3),又称“较大四分位数”或“上四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。

第三四分位数与第一四分位数的差距又称四分位间距(InterQuartile Range,IQR)。

这里写图片描述

#pandas 用describe()函数查看数据基本情况
import pandas as pd

catering_sale = 'Data/catering_sale.xls'

data = pd.read_excel(catering_sale,index_col= u'日期')#指定‘日期’为索引列

data.describe()

print(data.describe())
#输出最大值 最小值等信息
     销量

count 200.000000
mean 2755.214700
std 751.029772
min 22.000000
25% 2451.975000
50% 2655.850000
75% 3026.125000
max 9106.440000

有min max mean(平均值) std(标准差) 1/4 分位数

#箱式模型分析数据
import pandas as pd

catering_sale = 'Data/catering_sale.xls' #餐饮数据
data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列

import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

plt.figure() #建立图像
p = data.boxplot(return_type='dict') #画箱线图,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
y = p['fliers'][0].get_ydata()#[0]用来标注第一个异常值数值
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
  • 结合实际 865 4065 4060 归为正常值
  • 60 22 51 6670 9106归为异常值

annotate注释详解

#!/usr/bin/python
# coding: utf-8

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 11, 1)
y = x * x

plt.plot(x, y)

# 添加注释
# 第一个参数是注释的内容
# xy设置箭头尖的坐标
# xytext设置注释内容显示的起始位置
# arrowprops 用来设置箭头
# facecolor 设置箭头的颜色
# headlength 箭头的头的长度
# headwidth 箭头的宽度
# width 箭身的宽度
plt.annotate(u"here is note", xy=(0, 1), xytext=(0, 50), \
             arrowprops=dict(facecolor="b", headlength=15, headwidth=30, width=20))
# 可以通过设置xy和xytext中坐标的值来设置箭身是否倾斜

plt.show()

这里写图片描述

posted @ 2018-04-17 20:01  oifengo  阅读(231)  评论(0编辑  收藏  举报