数据清洗

数据分析流程

确定数据分析的目的
获取数据
清洗数据
探索数据
建模分析
结果交流

建模分析与结果交流(制成报表)算是基本功了,如果熟练的话并不会很困难。我们大量的时间都会花在对于raw data的收集和处理上,而这又是与业务息息相关的。

所谓的数据清洗就是把数据整理一下,异常值啦、空值啦、重复数据啦等等的,我们都要先处理,让最后的数据可以直接带入到模型当中。

数据清洗案例

data:
链接:https://pan.baidu.com/s/12E7xwUub1EqAP6PwHVSnbA
提取码:hz7i

这是豆瓣电影数据。

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline

导入excel数据:

1.探索数据:


我们这里有38738条数据,每条数据有9个特征。


共有38738条entries,可是像名字这列,只有38178条数据,这就是有缺失值的情况。


describe()方法只统计数值型数据,在这里就是投票人数和评分了。

像投票人数里的min是负值,这就是明显的异常数据了。max为692795也怪怪的,竟然超出 3 4 \frac{3}{4} 43分位数1739.75两个数量级。


调用df.类型竟然报错了。

原因是,’类型‘前有空格呢。所以,我们要对所有column做个处理,把前后的空格都给去掉。


strip()一下就可以了。

我们查找是否有重复值:

把重复值拿出来:

还是很多的。那有多少条呢?


因为True是1,所以我们可以用sum()得到重复值的个数。

下面,我们就要把重复值删除。


确实,那34条数据删除了。


可是,index不对了。被删掉的第1789条数据不见了,index就不连续了。

现在,我们就要重置index。


这就又连上了。


我检查了每个列的datatype,发现有些列的类型需要改动一下,比如投票人数,用float肯定不好,我们应该用int。




把年代改成int竟然给我报了这么一个错。

找到这个值。


然后把它改成2008。

2.处理异常值:


在将时长转为int时,出现了两个奇怪的值:


时长为8U,还有12J,你要么去和业务对一下,是不是输入错误,要么就删了.这里,我们直接给它删了.



现在可以顺利把时长的类型改成int了.


因为删了两条数据,所以重置一下index.




投票人数小于0的,我们给它删了.



我们用三倍标准差的标准取出时长过大的电影,当然你要去核对,因为这些时长很可能也是正确的,不过为了建模方便,我们还是把它们删除了.



年代大于2019的直接删了.


虽然最后的结果对数据分析员来说看起来很正常了,但是那些删掉的特殊的值,比如较大的时长,是可以用来做特殊分析的.

3.处理空值:


名字有560个null值,名字我们也不能填充啊,不知道就是不知道.所以还是删了.

如果是数值型的类型,你可以用均值填充,向前填充,向后填充,kmeans填充等等.


调一下index.

4.文本处理

如果你仔细观察,发现产地也有些问题:

USA和美国是同一回事,但是像苏联和俄罗斯我们就将其分开了,因为这还是有意义的.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值