python异常值检测与相关系数

异常值检测与概念此博客讲得不错:http://blog.csdn.net/zpdreamer/article/details/54095828

下面对不同年月的销售量进行异常值检测。部分数据如下:
这里写图片描述

代码如下:

#-*- coding: utf-8 -*-
import pandas as pd

catering_sale = '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() #画箱线图,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
print x
y = p['fliers'][0].get_ydata()
print y
y.sort() #从小到大排序,该方法直接改变原对象
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() #展示箱线图

结果如下:
x:[ 1. 1. 1. 1. 1. 1. 1. 1.]
y:[ 51. 865. 22. 60. 6607.4 4060.3 9106.44 4065.2 ]
异常值点就输出了。
箱线图略。。。。。

下面计算菜的相关系数,数据如下所示:

日期  百合酱蒸凤爪  翡翠蒸香茜饺  金银蒜汁蒸排骨 乐膳真味鸡   蜜汁焗餐包   生炒菜心    铁板酸菜豆腐
2015/1/1    17  6   8   24  13  13  18
2015/1/2    11  15  14  13  9   10  19
2015/1/3    10  8   12  13  8   3   7
2015/1/4    9   6   6   3   10  9   9
2015/1/5    4   10  13  8   12  10  17
2015/1/6    13  10  13  16  8   9   12
2015/1/7    9   7   13  8   5   7   10
2015/1/8    9   12  13  6   7   8   6
2015/1/12   6   8   8   3       4   5
2015/1/13   9   11  13  6   8   7   6
2015/1/14   6   7   8   9   4   7   8
2015/1/15   5   9   4   7   8   9   15
2015/1/16   9   7   11  9   11  8   14
2015/1/17   10  8   10  6   14  13  16
2015/1/18   13  12  12  10  9   11  8
2015/1/19   4   8   12  11  9   7   10
2015/1/20   6   12  10  9   11  4   8
2015/1/21   9   15  4   12  7   9   1
2015/1/22   3   10  13  13  13  8   13

代码直接利用pd读取计算相关系数:

#-*- coding: utf-8 -*-
#餐饮销量数据相关性分析
from __future__ import print_function
import pandas as pd

catering_sale = 'catering_sale_all.xls' #餐饮数据,含有其他属性
data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列

data.corr() #相关系数矩阵,即给出了任意两款菜式之间的相关系数
print (data.corr()[u'百合酱蒸凤爪']) #只显示“百合酱蒸凤爪”与其他菜式的相关系数
print (data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺'])) #计算“百合酱蒸凤爪”与“翡翠蒸香茜饺”的相关系数

结果:

百合酱蒸凤爪     1.000000
翡翠蒸香茜饺     0.009206
金银蒜汁蒸排骨    0.016799
乐膳真味鸡      0.455638
蜜汁焗餐包      0.098085
生炒菜心       0.308496
铁板酸菜豆腐     0.204898
香煎韭菜饺      0.127448
香煎罗卜糕     -0.090276
原汁原味菜心     0.428316
Name: 百合酱蒸凤爪, dtype: float64
0.00920580305184
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在多元回归分析中,我们可以使用统计学方法来检测和剔除异常。以下是一种常见的方法: 1. 通过绘制残差图来检查异常。残差图是指观测与回归线之间的差异。如果图中有一些明显偏离回归线的点,那么这些点可能是异常。 2. 使用基于学生化残差的方法来检测和剔除异常。学生化残差是指残差除以标准误差,如果某些观测的学生化残差超过一个临界,那么这些观测可能是异常。 下面是一些 Python 代码示例,演示如何使用学生化残差来检测和剔除异常: ```python import statsmodels.api as sm import numpy as np # 假设 X 和 y 是多元回归模型中的自变量和因变量 model = sm.OLS(y, X) # 拟合模型 results = model.fit() # 计算学生化残差 student_resid = results.outlier_test()['student_resid'] # 计算学生化残差的平均和标准差 mean_student_resid = np.mean(student_resid) std_student_resid = np.std(student_resid) # 计算临界 cutoff = std_student_resid * 3 # 找到超过临界的学生化残差所对应的观测 outliers = np.where(np.abs(student_resid) > cutoff)[0] # 剔除异常 X = np.delete(X, outliers, axis=0) y = np.delete(y, outliers) ``` 在这个示例中,我们使用 `statsmodels` 库来拟合多元回归模型,并计算学生化残差。然后,我们计算学生化残差的平均和标准差,并将其乘以一个系数来得到临界。最后,我们找到超过临界的学生化残差所对应的观测,并将其从自变量和因变量中剔除。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值