数据整合和数据清洗

发现数据问题类型

脏数据或数据不正确
• 比如 ‘0’ 代表真实的0,还是代表缺失;Age = -2003
• 数据不一致
 比如收入单位是万元,利润单位是元,或者一个单位是美元,一个是人民币
• 数据重复
• 缺失值
• 离群值

数据探索识别噪声

利用图形可以直观快速地对数据进行初步分析:
• 直方图、饼图、条形图、折线图、散点图等

错误值处理

发现错误值只能通过描述性统计的方法,逐一核实每个变量是否有问题,比如 ‘0’ 代表真实的0,
还是代表缺失?
外呼营销数据( teleco_camp_orig)的当地人均收入( AvgIncome),出现了大量0值,我们有理由怀疑是错误值。可以使用缺失值替代,然后再用缺失值填补的方法处理。

处理错误值
• 修正
• 补充正确信息
• 对照其他信息源
• 视为空值
• 删除
• 删除记录
• 删除字段

缺失值处理

处理原则

处理缺失值示例

噪声值处理

单变量离群值发现

盖帽法处理

分箱法


# coding: utf-8

# # 第5章 数据整合和数据清洗

# ## 5.4 数据清洗

# 发现数据问题类型

# In[2]:

import pandas as pd
import os
import numpy as np
os.chdir(r"D:\Python_Training\script_Python\5Preprocessing")
camp = pd.read_csv('data/teleco_camp_orig.csv')
camp.head()


# In[ ]:

# - 脏数据或数据不正确

# In[ ]:

import matplotlib.pyplot as plt
#%%
plt.hist(camp['AvgIncome'], bins=20, normed=True)#查看分布情况
camp['AvgIncome'].describe(include='all')
# In[ ]:
plt.hist(camp['AvgHomeValue'], bins=20, normed=True)#查看分布情况
camp['AvgHomeValue'].describe(include='all')
# In[ ]:

#这里的0值应该是缺失值
camp['AvgIncome']=camp['AvgIncome'].replace({0: np.NaN})
#像这种外部获取的数据要比较小心,经常出现意义不清晰或这错误值。AvgHomeValue也有这种情况
plt.hist(camp['AvgIncome'], bins=20, normed=True,range=(camp.AvgIncome.min(),camp.AvgIncome.max()))#由于数据中存在缺失值,需要指定绘图的值域
camp['AvgIncome'].describe(include='all')
# In[ ]:
camp['AvgHomeValue']=camp['AvgHomeValue'].replace({0: np.NaN})
plt.hist(camp['AvgHomeValue'], bins=20, normed=True,range=(camp.AvgHomeValue.min(),camp.AvgHomeValue.max()))#由于数据中存在缺失值,需要指定绘图的值域
camp['AvgHomeValue'].describe(include='all')


# In[ ]:
# - 数据不一致-
# 这个问题需要详细的结合描述统计进行变量说明核对

# - 数据重复

# In[ ]:

camp['dup'] = camp.duplicated() # 生成重复标识变量
camp.dup.head()


# In[ ]:

#本数据没有重复记录,此处只是示例
camp_dup = camp[camp['dup'] == True] # 把有重复的数据保存出来,以备核查
camp_nodup = camp[camp['dup'] == False] # 注意与camp.drop_duplicates()的区别
camp_nodup.head()


# In[ ]:

camp['dup1'] = camp['ID'].duplicated() # 按照主键进行重复记录标识
# accepts['fico_score'].duplicated() # 没有实际意义


# * 缺失值处理

# In[ ]:

camp.describe()
#如果count数量少于样本量,说明存在缺失
#缺失最多的两个变量是Age和AvgIncome,缺失了大概20%。


# In[ ]:

vmean = camp['Age'].mean(axis=0, skipna=True)
camp['Age_empflag'] = camp['Age'].isnull()
camp['Age']= camp['Age'].fillna(vmean)
camp['Age'].describe()


# In[ ]:

vmean = camp['AvgHomeValue'].mean(axis=0, skipna=True)
camp['AvgHomeValue_empflag'] = camp['AvgHomeValue'].isnull()
camp['AvgHomeValue']= camp['AvgHomeValue'].fillna(vmean)
camp['AvgHomeValue'].describe()


# In[ ]:

vmean = camp['AvgIncome'].mean(axis=0, skipna=True)
camp['AvgIncome_empflag'] = camp['AvgIncome'].isnull()
camp['AvgIncome']= camp['AvgIncome'].fillna(vmean)
camp['AvgIncome'].describe()


# - 其他有缺失变量请自行填补,找到一个有缺失的分类变量,使用众数进行填补
# - 多重插补:sklearn.preprocessing.Imputer仅可用于填补均值、中位数、众数,多重插补可考虑使用Orange、impute、Theano等包
# - 多重插补的处理有两个要点:1、被解释变量有缺失值的观测不能填补,只能删除;2、只对放入模型的解释变量进行插补。

# * 噪声值处理
# - 盖帽法

# In[ ]:

def blk(floor, root): # 'blk' will return a function
    def f(x):       
        if x < floor:
            x = floor
        elif x > root:
            x = root
        return x
    return f

q1 = camp['Age'].quantile(0.01) # 计算百分位数
q99 = camp['Age'].quantile(0.99)
blk_tot = blk(floor=q1, root=q99) # 'blk_tot' is a function
camp['Age']= camp['Age'].map(blk_tot)
camp['Age'].describe()


# - 分箱(等深,等宽)
# - 分箱法——等宽分箱

# In[ ]:

camp['Age_group1'] = pd.qcut( camp['Age'], 4) # 这里以age_oldest_tr字段等宽分为4段
camp.Age_group1.head()


# - 分箱法——等深分箱

# In[ ]:

camp['Age_group2'] = pd.cut( camp['Age'], 4) # 这里以age_oldest_tr字段等宽分为4段
camp.Age_group2.head()


# In[ ]:

camp.to_csv('tele_camp_ok.csv')


# In[ ]:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据清洗和预处理是数据分析的重要步骤之一,其流程主要包括以下几个步骤: 1. 数据获取:从数据源获取原始数据,包括结构化数据(如数据库表、Excel文件)和非结构化数据(如文本、图片、音频等)。 2. 数据理解:对数据进行初步理解,包括数据来源、格式、类型、特征、含义等,通过可视化和统计分析等方法,快速了解数据的基本情况。 3. 数据清洗:根据数据清洗的目标和需求,对数据进行筛选、处理、修复、删除、转换等一系列操作,去除数据中的异常、重复、错误、缺失等问题,使数据更加准确、可靠、规范化。 4. 数据集成:对多个数据源的数据进行整合和合并,形成一个完整的数据集。 5. 数据转换:根据数据分析和建模的需求,对数据进行转换和加工,例如将数据规范化、离散化、归一化、降维等,以提高数据的可处理性和分析效果。 6. 数据归约:对数据进行采样、抽样、压缩等处理,以减少数据的规模和复杂度,提高数据分析的效率和速度。 7. 数据集成和转换:对清理后的数据集成和转换,形成适合分析和建模的数据,例如将数据集成到一个数据库中,或将数据转换为特定格式。 8. 数据建模:根据数据分析和建模的需求,选择合适的算法和模型,对数据进行建模和分析,提取数据的特征和规律。 9. 模型评估:对模型进行评估和验证,检验模型的准确性和有效性,以确定模型的适用性和效果。 数据清洗和预处理的流程是一个迭代的过程,需要不断地进行调整和优化,以提高数据的质量和分析效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值