数据挖掘技术-检测与处理特征重复值

检测与处理特征重复值

  1. 准备数据

准备数据detail.csv,将数据文件detail.csv放到Linux本地的/course/DataAnalyze/data目录,并读取数据

In[1]:

import os

import pandas as pd

os.chdir('/course/DataAnalyze/data')

detail = pd.read_csv('./detail.csv',index_col=0,encoding = 'gbk', engine = 'python')

  1. 特征重复
  1. 在pandas中相似度的计算方法为corr,使用该方法计算相似度时,默认为“pearson”法,可以通过“method”参数调节,目前还支持“spearman”法和“kendall”法。求出菜品订单详情表(midetail1.xlsx)数据中counts列和amounts列的“kendall”法相似度矩阵,如代码 45所示。

代码 45 求出counts和amounts两列数据的相似度矩阵

In[5]:

corrDet = detail[['counts','amounts']].corr(method='kendall')## 求取销量和售价的相似度

print('销量和售价的kendall相似度为:\n',corrDet)

Out[5]:

销量和售价的kendall相似度为:

            counts   amounts

counts   1.000000 -0.254957

amounts -0.254957  1.000000

  1. 对订单详情表中dishes_name、counts和amounts三个特征进行pearson相似度矩阵的求解,如代码 46所示。

代码 46 求出dishes_name、counts和amounts三个特征相似度

In[6]:

corrDet1 = detail[['dishes_name','counts','amounts']].corr(method='pearson')

print('菜品名称,销量和售价的pearson相似度为:\n',corrDet1)

Out[6]:

菜品名称,销量和售价的pearson相似度为:

            counts   amounts

counts   1.000000 -0.181056

amounts -0.181056  1.000000

  1. 除了使用相似度矩阵进行特征去重之外,可以通过DataFrame.equals的方法进行特征去重,如代码 47所示。

代码 47 使用DataFrame.equals方法去重

In[7]:

##定义求取特征是否完全相同的矩阵的函数

def FeatureEquals(df):

    dfEquals=pd.DataFrame([],columns=df.columns,index=df.columns)

    for i in df.columns:

       for j in df.columns:

           dfEquals.loc[i,j]=df.loc[:,i].equals(df.loc[:,j])

    return dfEquals## 应用上述函数

detEquals=FeatureEquals(detail)

print('detail的特征相等矩阵的前5行5列为:\n',detEquals.iloc[:5,:5])

Out[7]:

detail的特征相等矩阵的前5行5列为:

                    order_id  dishes_id  logicprn_name  parent_class_name  \

order_id               True      False          False              False   

dishes_id             False       True          False              False   

logicprn_name         False      False           True               True   

parent_class_name     False      False           True               True   

dishes_name           False      False          False              False   

                   dishes_name  

order_id                 False  

dishes_id                False  

logicprn_name            False  

parent_class_name        False  

dishes_name               True  

  1. 再通过遍历的方式进行筛选出完全重复的特征,如代码 48所示。

代码 48 通过遍历的方式进行数据筛选

In[8]:

##遍历所有数据

lenDet = detEquals.shape[0]

dupCol = []

for k in range(lenDet):

    for l in range(k+1,lenDet):

        if detEquals.iloc[k,l] & (detEquals.columns[l] not in dupCol):

            dupCol.append(detEquals.columns[l])##进行去重操作

print('需要删除的列为:',dupCol)

detail.drop(dupCol,axis=1,inplace=True)

print('删除多余列后detail的特征数目为:',detail.shape[1])

Out[8]:

需要删除的列为: ['parent_class_name', 'cost', 'discount_amt', 'discount_reason', 'kick_back', 'add_info', 'bar_code', 'add_inprice']

删除多余列后detail的特征数目为: 11

  1. 菜品数据存在重复的现象,所以需要对菜品销售数据分别做记录去重和特征去重,如代码 49所示。

代码 49 订单详情表样本去重与特征去重

In[17]:

detail = pd.read_csv('./detail.csv',index_col=0,encoding = 'gbk' ,engine = 'python')

print('进行去重操作前订单详情表的形状为:',detail.shape)

##样本去重

detail.drop_duplicates(inplace = True)

##特征去重

def FeatureEquals(df):

    ##定义求取特征是否完全相同的矩阵的函数

    dfEquals=pd.DataFrame([],columns=df.columns,index=df.columns)

    for i in df.columns:

        for j in df.columns:

            dfEquals.loc[i,j]=df.loc[:,i].equals(df.loc[:,j])

    return dfEquals

detEquals=FeatureEquals(detail)## 应用上述函数

##遍历所有数据

lenDet = detEquals.shape[0]

dupCol = []

for k in range(lenDet):

    for l in range(k+1,lenDet):

        if detEquals.iloc[k,l] & (detEquals.columns[l] not in dupCol):

            dupCol.append(detEquals.columns[l])

##删除重复列

detail.drop(dupCol,axis=1,inplace=True)

print('进行去重操作后订单详情表的形状为:',detail.shape)

Out[17]:

进行去重操作前订单详情表的形状为: (1546, 18)

进行去重操作后订单详情表的形状为: (1546, 11)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值