Excel VS Python 第四期
相信大家最近都在为河南加油
郑州这次的特大暴雨属于极端天气,而在数据分析过程中,我们也常会遇到一些极端大或极端小的异常数据值
如果变量服从或近似服从正态分布,那么大于“均值+3倍标准差”,或小于“均值-3倍标准差”的数据值就为“异常值”
一般而言,数据处于“均值±3倍标准差”范围外的概率小于0.3%,属于小概率事件
今天要为大家介绍如何使用Excel 和 Python处理数据集中的异常值
案例数据继续使用UCI的红酒质量评分数据集
需要完成的任务是检测并删除变量“fixed acidity”的异常值
知识点8:检测异常值
Excel
=AVERAGE(A:A)-3*STDEV.P(A:A) #计算A列变量的异常值左边界,计算结果为3.098
=AVERAGE(A:A)+3*STDEV.P(A:A) #计算A列变量的异常值右边界,计算结果为13.541
开始——排序和筛选
点击“fixed acidity”下拉框——数字筛选——介于
“大于或等于”输入13.541——点击“或”——“小于或等于”输入3.098——确定
Python
import numpy as np #载入numpy库
import pandas as pd #载入pandas库
data = pd.read_excel('C:/Users/dell-pc/Desktop/data.xlsx') #读取Excel文件数据
data.head(5) #显示数据集的前5行
data.shape[0] #显示数据集的行数
def three_sigma(x): #传入某变量
mean_value = x.mean() #计算该变量的均值
std_value = x.std() #计算该变量的标准差
rule = (mean_value - 3 * std_value > x) | (x.mean() + 3 * x.std() < x) #处于(mean-3std,mean+3std)区间外的数据为异常值
index = np.arange(x.shape[0])[rule] #获取异常值的行位置索引
outlier = x.iloc[index] #获取异常值的数据
return outlier #返回异常值的数据
three_sigma(data["fixed acidity"]) #显示变量"fixed acidity"的异常值
知识点9:删除异常值
Excel
选中筛选出的各行——右击——删除行
点击“fixed acidity”下拉框——全选
Python
left = data["fixed acidity"].mean() - 3 * data["fixed acidity"].std() #设置该变量异常值的左边界mean-3std
right = data["fixed acidity"].mean() + 3 * data["fixed acidity"].std() #设置该变量异常值的右边界mean+3std
data_new = data[(left < data["fixed acidity"]) & (data["fixed acidity"] < right)] #删除该变量为异常值的样本记录
data_new.head(5) #显示新数据集的前5行
data_new.shape[0] #显示新数据集的行数