需要清洗数据的主要类型:¶

残缺数据、错误数据、重复数据

数据清洗方法:¶

(1)不完整数据:经验推导,平均最大最下,甚至概率估计,或建立回归模型,插值法等 (2)错误值检测,异常点检测,偏差分析,规则库等 (3)重复值,将重复记录合并、清楚

数据清洗的评价标准¶

(1)可信性,可信性包括精确性、完整性、一致性、有效性、唯一性等指标。¶

(1)精确性:描述数据是否与其对应的客观实体的特征相一致。 (2)完整性:描述数据是否存在缺失记录或缺失字段。 (3)一致性:描述同一实体的同一属性的值在不同的系统是否一致。 (4)有效性:描述数据是否满足用户定义的条件或在一定的域值范围内。 (5)唯一性:描述数据是否存在重复记录。

(2) 数据的可用性¶

数据的可用性考察指标主要包括时间性和稳定性。 (1)时间性:描述数据是当前数据还是历史数据。 (2)稳定性:描述数据是否是稳定的,是否在其有效期内。

常见的数据清洗算法(属性清洗算法) 空缺值的清洗 对于空缺值的清洗可以采取忽略元组,人工填写空缺值,使用一个全局变量填充空缺值,使用属性的平均值、中问值、最大值、最小值或更为复杂的概率统计函数值来填充空缺值。

噪声数据的清洗 分箱(Binning),通过考察属性值的周围值来平滑属性的值。属性值被分布到一些等深或等宽的“箱”中,用箱中属性值的平均值或中值来替换“箱”中的属性值;计算机和人工检查相结合,计算机检测可疑数据,然后对它们进行人工判断;使用简单规则库检测和修正错误;使用不同属性间的约束检测和修正错误;使用外部数据源检测和修正错误。

不一致数据的清洗 对于有些事务,所记录的数据可能存在不一致。有些数据不一致,可以使用其他材料人工加以更正。例如,数据输入时的错误可以使用纸上的记录加以更正。知识工程工具

也可以用来检测违反限制的数据。例如,知道属性间的函数依赖,可以查找违反函数依赖的值。此外,数据集成也可能产生数据不一致。

重复数据的清洗 目前消除重复记录的基本思想是“排序和合并”,先将数据库中的记录排序,然后通过比较邻近记录是否相似来检测记录是否重复。

消除重复记录的算法主要有:优先队列算法,近邻排序算法(Sorted—Neighborhood Method),多趟近邻排序(Multi—Pass Sorted—Neighborhood)。

Series对象-类似于数组的对象¶

In [46]:

import pandas as pd
object=pd.Series([2,5,8,9])
print(object)
#结果中包含一列数据和一列标签
print(object.values) #对应的数据值
print(object.index)#标签或索引值
#按自己的想法构建标签
object=pd.Series([2,5,8,9],index=['a','b','c','d'])
print(object)#对序进行运算,保留满足要求的数据
print(object[object>5])
#把Series当成一个字典,使用in进行判断
print('a' in object)
print('8' in object)
0    2
1    5
2    8
3    9
dtype: int64
[2 5 8 9]
RangeIndex(start=0, stop=4, step=1)
a    2
b    5
c    8
d    9
dtype: int64
c    8
d    9
dtype: int64
True
False

In [52]:

#DataFrame数据框,一种数据结构
data={'year':[2000,2001,2002,2003],'income':[3000,3500,4500,6000]}
data=pd.DataFrame(data)
print(data)
#标签重置
data1=pd.DataFrame(data,columns=['year','income','outcome'],index=['a','b','c','d'])
print(data1)
   year  income
0  2000    3000
1  2001    3500
2  2002    4500
3  2003    6000year  income  outcome
a   NaN     NaN      NaN
b   NaN     NaN      NaN
c   NaN     NaN      NaN
d   NaN     NaN      NaN

In [61]:

data1['money']=np.arange(4)
print(data1)
#重建索引
data2=data1.reindex(['a','b','c','d','e'])
print(data2)
#索引删除以及过滤的方法
print(data1.drop(['a']))
print(data1[data1['money']>2])#对DataFrame进行排序data=pd.DataFrame(np.arange(10).reshape((2,5)),index=['c','a'],columns=['one','four','two','three','five'])
print(data)
#默认对行进行排序
print(data.sort_index())#默认对列进行排序
print(data.sort_index(axis=1))
   year  income  outcome  money
a   NaN     NaN      NaN      0
b   NaN     NaN      NaN      1
c   NaN     NaN      NaN      2
d   NaN     NaN      NaN      3year  income  outcome  money
a   NaN     NaN      NaN    0.0
b   NaN     NaN      NaN    1.0
c   NaN     NaN      NaN    2.0
d   NaN     NaN      NaN    3.0
e   NaN     NaN      NaN    NaNyear  income  outcome  money
b   NaN     NaN      NaN      1
c   NaN     NaN      NaN      2
d   NaN     NaN      NaN      3year  income  outcome  money
d   NaN     NaN      NaN      3one  four  two  three  five
c    0     1    2      3     4
a    5     6    7      8     9one  four  two  three  five
a    5     6    7      8     9
c    0     1    2      3     4five  four  one  three  two
c     4     1    0      3    2
a     9     6    5      8    7

汇总及统计描述¶

In [69]:

data=pd.DataFrame(np.arange(10).reshape((2,5)),index=['c','a'],
columns=['one','four','two','three','five'])
print(data)
#统计描述
print("一次性输出多个描述性指标")
print(data.describe())
#对各个指标下的数据求和
print(data.sum())
#对个索引求和
print(data.sum(axis=1))#求各个指标的
print("各指标最小值")
print(data.min())
print("各指标方差var")
print(data.var())
print("各指标或各维度的众数")
print(data.mode())
print("非空元素计算")
print(data.count())
   one  four  two  three  five
c    0     1    2      3     4
a    5     6    7      8     9
一次性输出多个描述性指标one      four       two     three      five
count  2.000000  2.000000  2.000000  2.000000  2.000000
mean   2.500000  3.500000  4.500000  5.500000  6.500000
std    3.535534  3.535534  3.535534  3.535534  3.535534
min    0.000000  1.000000  2.000000  3.000000  4.000000
25%    1.250000  2.250000  3.250000  4.250000  5.250000
50%    2.500000  3.500000  4.500000  5.500000  6.500000
75%    3.750000  4.750000  5.750000  6.750000  7.750000
max    5.000000  6.000000  7.000000  8.000000  9.000000
one       5
four      7
two       9
three    11
five     13
dtype: int64
c    10
a    35
dtype: int64
各指标最小值
one      0
four     1
two      2
three    3
five     4
dtype: int32
各指标方差var
one      12.5
four     12.5
two      12.5
three    12.5
five     12.5
dtype: float64
各指标或各维度的众数one  four  two  three  five
0    0     1    2      3     4
1    5     6    7      8     9
非空元素计算
one      2
four     2
two      2
three    2
five     2
dtype: int64

相关系数与协方差¶

In [72]:

data=pd.DataFrame(np.random.random(20).reshape((4,5)),index=['c','a','b','c'],columns=['one','four','two','three','five'])
print(data)
#输出one和three的相关系数
print(data.one.corr(data.three))
#输出one和three的协方差
print(data.corrwith(data.one))
        one      four       two     three      five
c  0.194879  0.329147  0.967115  0.674350  0.275277
a  0.426067  0.840322  0.224656  0.937782  0.611792
b  0.196726  0.897771  0.260533  0.663372  0.207867
c  0.039813  0.977257  0.514693  0.134688  0.272775
0.9341174441749929
one      1.000000
four    -0.106747
two     -0.402354
three    0.934117
five     0.835847
dtype: float64

成员信息统计相关¶

In [79]:

data=pd.Series(['a','a','b','b','b','c','d','d'])
#
print(data.unique())
print(data.isin(['b']))
print(pd.value_counts(data.values,sort=False))#缺失值处理
data=pd.Series(['a','a','b',np.nan,'b','c',np.nan,'d'])
print(data.isnull())
#根据标签对缺失值进行过滤
print(data.dropna())
#用指定的方法填充缺失值
print(data.ffill())
#用0进行填充
print(data.fillna(0))
['a' 'b' 'c' 'd']
0    False
1    False
2     True
3     True
4     True
5    False
6    False
7    False
dtype: bool
c    1
d    2
a    2
b    3
dtype: int64
0    False
1    False
2    False
3     True
4    False
5    False
6     True
7    False
dtype: bool
0    a
1    a
2    b
4    b
5    c
7    d
dtype: object
0    a
1    a
2    b
3    b
4    b
5    c
6    c
7    d
dtype: object
0    a
1    a
2    b
3    0
4    b
5    c
6    0
7    d
dtype: object

数据合并¶

In [17]:

import numpy as np
import pandas as pd
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'key':['b','b','a','c','a','a','b'],'data1': range(7)})
df1

Out[17]:

  key data1
0 b 0
1 b 1
2 a 2
3 c 3
4 a 4
5 a 5
6 b 6

In [18]:

df2 = pd.DataFrame({'key':['a','b','d'],'data2':range(3)})
df2

Out[18]:

  key data2
0 a 0
1 b 1
2 d 2

In [16]:

pd.merge(df1,df2)

Out[16]:

  key data1 data2
0 b 0 1
1 b 1 1
2 b 6 1
3 a 2 0
4 a 4 0
5 a 5 0

In [20]:

#重叠数据合并
data3=pd.DataFrame({'level':['a','b','c','d'],'number':[1,3,5,np.nan]})
data4=pd.DataFrame({'level':['a','b','c','e'],'number2':[2,np.nan,6,10]})
print(data3.combine_first(data4))
  level  number  number2
0     a     1.0      2.0
1     b     3.0      NaN
2     c     5.0      6.0
3     d     NaN     10.0

数据重塑和轴向旋转¶

数据重塑主要使用reshape函数,旋转主要使用unstack和stack两个函数

In [21]:

data=pd.DataFrame(np.arange(12).reshape(3,4),columns=['a','b','c','d'],index=['wang','li','zhang'])
print(data)
       a  b   c   d
wang   0  1   2   3
li     4  5   6   7
zhang  8  9  10  11

In [22]:

#数据旋转
print(data.unstack())
a  wang      0li        4zhang     8
b  wang      1li        5zhang     9
c  wang      2li        6zhang    10
d  wang      3li        7zhang    11
dtype: int32

数据转换¶

In [28]:

#删除重复行数据
data=pd.DataFrame({'a':[1,3,3,4],'b':[1,3,3,5]})
print(data)
print("重复行检测:")
print(data.duplicated())
print("用drop_duplicates去除重复行")
print(data.drop_duplicates())
print("数据替换结果")
print(data.replace(1,2))#第一行全部替换成了2
   a  b
0  1  1
1  3  3
2  3  3
3  4  5
重复行检测:
0    False
1    False
2     True
3    False
dtype: bool
用drop_duplicates去除重复行a  b
0  1  1
1  3  3
3  4  5
数据替换结果a  b
0  2  2
1  3  3
2  3  3
3  4  5

数据分段¶

In [34]:

data=[11,15,18,120,25,26,27,24]
bins=[15,20,25]
print(data)
print(pd.cut(data,bins)) #bins相邻数据给出了段的描述
[11, 15, 18, 120, 25, 26, 27, 24]
[NaN, NaN, (15, 20], NaN, (20, 25], NaN, NaN, (20, 25]]
Categories (2, interval[int64]): [(15, 20] < (20, 25]]

排列和采样¶

In [37]:

data=np.random.permutation(5)
print(data)#5以内的数,随机排序
#对数据进行采样
df=pd.DataFrame(np.arange(12).reshape(4,3))
samp=np.random.permutation(3)
print(df)
print(samp)
[2 0 3 4 1]0   1   2
0  0   1   2
1  3   4   5
2  6   7   8
3  9  10  11
[1 2 0]

机器学习—数据清洗总结相关推荐

  1. 机器学习数据清洗之异常数据处理、标准差法、MAD法、箱图法、图像对比法、异常值处理准则

    机器学习数据清洗之异常数据处理.标准差法.MAD法.箱图法.图像对比法.异常值处理准则 目录

  2. 机器学习数据清洗之缺失值处理、缺失的原因、缺失值删除、缺失值填充、KNN填充

    机器学习数据清洗之缺失值处理.缺失的原因.缺失值删除.缺失值填充.KNN填充 目录

  3. 机器学习--数据清洗

    文章目录 1.缺失值 缺省值填充案例: 2.异常值 3.数据集成 4.实体识别 5.冗余属性识别 6.数据变换 7.亚编码 什么是独热编码? 数据清洗主要是删除原始数据集中的无关数据.重复数据,平滑噪 ...

  4. 一文总结Datawhale系列分享

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 学习路线 完备的 AI 学习路线,最详细的资源整理! 关于数据科学家的成长指南 这是关 ...

  5. 如何使用 Markdown 绘制一个精美的简历

    如何使用 Markdown 绘制一个精美的简历 随着互联网的发展,越来越多的招聘企业和人才交流平台要求求职者提交在线简历.而 Markdown 作为一种轻量级标记语言,不仅易于学习和使用,而且可以用来 ...

  6. 机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)

    机器学习之数据预处理--数据清洗缺失值.异常值和重复值的处理 基础知识 技术点总结 数据列缺失的处理方法 1.丢弃(缺失值处理) 1.生成一份随机数据 2.查看哪些值缺失 3.获得含有NA的列 4.获 ...

  7. 机器学习中数据清洗预处理入门完整指南

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经机器之心(微信公众号:almosthuman2014)授权转载, 禁止二次转载. 选自towardsdatascience 作者:Anne Bon ...

  8. Python数据分析案例07——二手车估价(机器学习全流程,数据清洗、特征工程、模型选择、交叉验证、网格搜参、预测储存)

    案例背景 本次案例来自2021年matchcop大数据竞赛A题数据集.要预测二手车的价格.训练集3万条数据,测试集5千条.官方给了二手车的很多特征,有的是已知的,有的是匿名的.要求就是做模型去预测测试 ...

  9. 机器学习项目之数据清洗

    前言 数据清洗是机器学习项目中最为琐碎而又繁重的工作之一,下面总结一些经常用到的数据清洗方法与Python实现,以探索能否用更加自动化的手段来简化数据清洗工作. 包括: 1.缺失值处理 2.格式内容清 ...

  10. 【机器学习】京东用户购买意向预测-数据集介绍和数据清洗 - 1

    主题:京东用户购买意向预测 数据集: 这里涉及到的数据集是京东最新的数据集: JData_User.csv 用户数据集 105,321个用户 JData_Comment.csv 商品评论 558,55 ...

最新文章

  1. 【翻译】使用新的Sencha Cmd 4命令app watch
  2. 一览六月最热的5篇AI技术论文
  3. iPhone 中使用NSLocalizedString实现国际化
  4. LINQ to SQL语句(4)之Join
  5. python datetime timedelta函数_Python Pandas DatetimeIndex.to_perioddelta()用法及代码示例
  6. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)
  7. Spring学习总结(26)——Spring事务原理详解
  8. C、C++ 不得宠,微软正开发新的编程语言!
  9. Improvements of Job Scheduler and Query Execution on Flink OLAP
  10. 控件Repeater的嵌套使用
  11. Matlab基础知识
  12. VM VirtualBox 安装Window XP3安装版
  13. 前端ORA-03113及后台ORA-07445[evaopn3()+135报错的处理
  14. 使用Pytorch搭建CNN
  15. Matlab使用-norm函数
  16. 拍照的时候怎么让表情自然?
  17. win10计算机打印机共享怎么设置方法,win10打印机共享怎么设置 win10打印机共享设置步骤介绍...
  18. xml与txt文件格式互换
  19. 最新------如何不通过AppStore,直接安装IOS应用程序 兼容最新版IOS系统
  20. Samba误删除文件恢复(开启回收站)

热门文章

  1. 聚焦索引与非聚焦索引及其查询效率 (MS SQL SERVER)
  2. 模块电源(一):DC-DCLDO
  3. 除法求模中求逆元的两种方法
  4. 关于VS中Compile Symbol 使用方法
  5. 简单的抽奖function
  6. WinForm与WPF下跨线程调用控件
  7. Elasticsearch聚合 之 Histogram 直方图聚合
  8. Eclipse自动排版快捷键失效(转)
  9. 为什么需要消息队列(MQ)
  10. 一个java内存泄漏的排查案例