检测与处理重复值

记录重复,即一个或者多个特征某几个记录的值完全相同。

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 pltplt.scatter(x,y)#开始的x,yplt.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 pltplt.scatter(x,y)#开始的x,yplt.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 BSpliney_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 pltplt.boxplot(data['counts'])plt.show()

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐