赞
踩
检测与处理重复值
记录重复,即一个或者多个特征某几个记录的值完全相同。
list列表去重和集合set去重:(list自定义去重,set的元素是唯一的特性去重)
上面两种方法:方法一代码冗长,方法二代码简单,但会导致数据的排序发生改变。
pandas提供的drop_duplicates方法去重:
该方法只对dataframe或者series类型有效。这种方法不会改变数据原始排列,并且兼具代码简介和运行稳定的特点。不仅支持单一特性的数据去重,还能依据dataframe的其中一个或者几个特征进行去重操作。
实操:
data['dishes_name']#查看
data['dishes_name'].drop_duplicates()#去重
特征重复
data[['counts','amounts']].corr()#data.corr()表示了data中的两个变量之间的相关性,取值范围为[-1,1],取值接近-1,表示反相关,类似反比例函数,取值接近1,表正相关。
sim_dis=pd.DataFrame([],index=['counts','amounts','dishes_name'],#sim_dis:相似度
columns = ['counts','amounts','dishes_name'])
for i in ['counts','amounts','dishes_name']:
for j in ['counts','amounts','dishes_name']:#两两比较计算相似度
sim_dis.loc[i,j] = data[i].equals(data[j])
print(sim_dis)
利用isnull或者notnull找到缺失值
数据中的某个或某些特征的值是不完整的,这些值称为缺失值;
isnull和notnull之间结果正好相反,因此使用任意一个都可以判断数据中缺失值的位置。
删除法:
分为删除观测记录和删除特征两种,它属于利用减少样本量来换取信息完整度的一种方法,是一种最简单的缺失值处理方法。
dropna()函数:删除缺失值,可以删除观测记录,也可以删除特征。
实操:
a.dropna()
替换法:
指用一个特定的值替换缺失值;可分为数值型和类别型。
fillna()函数:
a['cpu'].fillna('i7')#将cpu上的缺失值填补为i7
dis1={'id':list(range(1,10)),
'cpu':[7,7,np.nan,5,4,6,np.nan,np.nan,7]}
b = pd.DataFrame(dis1)
b['cpu'].fillna(b['cpu'].mean())
插值法
删除法简单易行,但是会引起数据结构变动,样本减少;替换法使用难度较低,但是会影响数据的标准差,导致信息量变动。在面对数据缺失问题时,除了这两种方法之外,还有一种插值法。
Scipy库中的interpolate模块
实操:
x= np.array([1,2,3,6,7])#构建数据
y = np.array([3,5,6,9,13])
from scipy.interpolate import interpld#导入线条插值
model=interpld(x,y,kind='linear')#线性
报错了解决一下:
看到这个报错我真的很想吐槽哈哈,那个单词interpld不是interpld,而是interp1d。
import matplotlib.pyplot as plt
plt.scatter(x,y)#开始的x,y
plt.plot(x,model(x),'r-')#插值后的点
plt.show()#蓝色的点就是原始的点,4,5对应7,8
拉格朗日插值:
from scipy.interpolate import lagrange#拉格朗日插值
f_lag = lagrange(x,y)
f_lag([4,5])#缺了4,5,用拉格朗日得到的数
import matplotlib.pyplot as plt
plt.scatter(x,y)#开始的x,y
plt.scatter([4,5],model([4,5]))#散点
plt.scatter([4,5],f_lag([4,5]))#散点
#plt.plot(x,model(x),'r-')#插值后的点
plt.plot(x,f_lag(x),'g-')#插值后的点
plt.show()
样条插值
from scipy.interpolate import BSpline
y_bs = BSpline(x,y,k=1)
y_bs([4,5])
异常值检测
3sheta原则又称为拉依达法则。
实操:
u = data['counts'].mean()#均值
o = data['counts'].std()#标准差
data['counts'].apply(lambda x:x>u+3*o or x<u-3*o)
箱线图分析:
提供了识别异常值的一个标准,即异常值通常被定义为小于QL-1.5IOQ
import matplotlib.pyplot as plt
plt.boxplot(data['counts'])
plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。