数据分析流程
建模分析与结果交流(制成报表)算是基本功了,如果熟练的话并不会很困难。我们大量的时间都会花在对于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和美国是同一回事,但是像苏联和俄罗斯我们就将其分开了,因为这还是有意义的.