数据清洗

Posted jin-liang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据清洗相关的知识,希望对你有一定的参考价值。

目录

一.预处理

二.缺失值的处理

三.格式的转换

四.异常值的处理


 

一.预处理

1.1.列名称的修改

像下面这样,我们就完成了两个列的重命名,而其余的列名保持不变

data = data.rename(columns = {holiday:holid,weather:weath})

 1.2.添加index

有的时候数据的index是0,1,2……这样的数字,我们需要修改为日期格式,date必须是数据里一个series,如下代码可以添加

data=data.set_index(date)

1.3.去除不必要的字符

data.columns=map(lambda x: x.replace(-,‘‘),data.columns)

1.4 数据的整体描述

data.descirbe()

 

二.缺失值的处理

查看缺失值:

data.info()

汇总缺失值:

data.isnull().sum()

缺失值处理方法:

1.直接删除----适合缺失值数量较小,并且是随机出现的,删除它们对整体数据影响不大的情况

2.使用均值、中位数或中位数代替----优点:不会减少样本信息,处理简单。缺点:当缺失数据不是随机数据时会产生偏差.对于正常分布的数据可以使用均值代替,如果数据是倾斜的,使用中位数可能更好。

3.插补法

  1)随机插补法----从总体中随机抽取某个样本代替缺失样本
  2)多重插补法----通过变量之间的关系对缺失数据进行预测,利用蒙特卡洛方法生成多个完整的数据集,在对这些数据集进行分析,最后对分析结果进行汇总处理
  3)热卡插补----指在非缺失数据集中找到一个与缺失值所在样本相似的样本(匹配样本),利用其中的观测值对缺失值进行插补。
    优点:简单易行,准去率较高
    缺点:变量数量较多时,通常很难找到与需要插补样本完全相同的样本。但我们可以按照某些变量将数据分层,在层中对缺失值实用均值插补
  4)拉格朗日差值法和牛顿插值法
  5)近邻插补
5.建模法
可以用回归、使用贝叶斯形式化方法的基于推理的工具或决策树归纳确定。例如,利用数据集中其他数据的属性,可以构造一棵判定树,来预测缺失值的值。
 
pandas中的方法:
技术分享图片
#过滤缺失值
data[data.notnull()]
#删除缺失行
data.dropna(how=all)
#删除缺失列
data.dropna(how=all,axis=1)

缺失值的简单填充:

#用 0填充
data.fillna(0)
#也可以传入均值、众数、中位数
data.fillna(data.mean())
#顺序填充,次此方法填充的缺失值 是非缺失值的最后一个的重复
data.fillna(method=‘ffill‘)

以上只是简单的处理,实际运用中应该是根据数据的需要选择合适的方法。

三.格式的转换

3.1.去处重复值

#create data
data= pd.DataFrame({k1: [one] * 3 + [two]+[three]*3,
                    k2: [1, 1, 2, 3, 3, 4, 4]})
data

    k1    k2
0    one    1
1    one    1
2    one    2
3    two    3
4    three        3
5    three    4
6    three    4

#DataFrame的duplicated方法返回一个布尔型Series,表示各行是否是重复行
data.duplicated()

0    False
1     True
2    False
3    False
4    False
5    False
6     True
dtype: bool

#drop_duplicates方法用于返回一个移除了重复行的DataFrame
data.drop_duplicates()
k1    k2
0    one    1
2    one    2
3    two    3
4    three    3
5    three    4

?#按某一列过滤重复值
data.drop_duplicates([k1])

3.2.时间格式

时间格式的转化比较复杂,比较简单的一个就是利用pd.to_datetime

#转化index格式
data.index=pd.to_datetime(data.index)

3.3文本格式的去除空格

with open(‘abc.txt‘) as f:
    ix=0
    while 1:
        line = file.readline().strip()
        if not line:
            break
            i+=1
            line1 = line.replace(‘
‘,‘‘)
            f1 = open(‘newfile.txt‘,‘a‘)
            f1.write(line1 + ‘
‘)
            f1.close()
            
f.close()

  

四.异常值的处理

异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值。

1)3σ原则

3σ探测方法的思想其实就是来源于切比雪夫不等式。一般是把超过三个离散值的数据称之为异常值。

一般所有数据中,至少有3/4(或75%)的数据位于平均数2个标准差范围内。

所有数据中,至少有8/9(或88.9%)的数据位于平均数3个标准差范围内。

所有数据中,至少有24/25(或96%)的数据位于平均数5个标准差范围内。

2)箱型图

把数据按照从小到大排序,其中25%为上四分位用FL表示,75%处为下四分位用FU表示。

计算展布为:技术分享图片

上截断点为:技术分享图片

下截断点为:技术分享图片

小于下截断点或大于上截断点的值,则被称为异常值

3)散点图

技术分享图片

 

简单直观。

还有许多其他的方法,基于密度,基于距离,基于模型等等。

 

 



以上是关于数据清洗的主要内容,如果未能解决你的问题,请参考以下文章

转移,清洗,同步数据

Spark中利用Scala进行数据清洗(代码)

爬虫+数据清洗+可视化用Python分析“淄博烧烤“的评论数据

2017 级课堂测试试卷—数据清洗进度记录

数据挖掘中常用的数据清洗方法有哪些?

记一次python清洗疫情历史数据