数据清洗(1)
本人在做数据科学比赛,然后也在做Python的大作业是关于预测方面的,第一步都是要对数据进行处理,在看了相关视频和别人的笔记之后,利用天池一个比赛的数据来做实操(其实Python的大作业就是用的这个数据)。
比赛链接:https://tianchi.aliyun.com/competition/entrance/231715/introduction
更多Airbnb的数据官网也给出了连接http://insideairbnb.com/get-the-data.html?spm=5176.12281978.0.0.61d677537T1b15
1.观察数据
对拿到手的数据首先当然是进行观察,那这里的观察并不是让我们自己去打开数据的文件去看,而是通过一些函数去了解数据的结构、大小等情况,对数据有初步的了解。
pandas 提供的 read_csv()函数可以对csv格式的数据进行读取。
read_excel()函数可以对Excel文件的数据进行读取(默认读取Excel的第一个表单)。
head()函数查看数据。
info()函数查看数据表基本信息(维度、列名称、数据格式、所占空间等)
isnull().sum()统计空值。
copy()一般情况下,操作前得先对数据进行备份。
还是来看代码吧。
import pandas as pd
filename = 'listings.csv'
df = pd.read_csv(filename)
#查看数据
print(df.head())
看,这样是不是觉得很头疼。其实天池自带的实验室是可以以表格的形式展现数据的,这样查看数据就会清楚明白很多。但是这个实验室只能报名了比赛才能用QAQ。
#描述信息
df.info()
可以清楚的看到数据量和数据类型。
#查看空值信息
df.isnull().sum()
那我们可以看到,name的空值为1个;neighbourhood_group空值为28452即整个列都是为空的;last_review和reviews_per_month空值都为11158。
2.处理空值的数据
经过分析呢,name的空值情况可能是由于录入的时候出错,删除这一行即可;neighbourhood_group整列为空所以将这一列删除即可。last_review和reviews_per_month的空值数是一样的,那这两个为什么一样呢?是巧合还是这两个是有关系的,那这个问题就留给大家思考啦。
df1 = df.copy() # 一般情况下,对于数据的任何处理都要首先备份数据
df1 = df1.drop("neighbourhood_group", axis=1)#删除neighbourhood_group整列
df1[df1["name"].isnull()]
df1 = df1[-df1["name"].isnull()]#删除name为空的这一行
df1.isnull().sum()#那我们现在再来看一下空值的情况
那我们可以看到name的空值和neighbourhood_group的空值就被我们处理完成了。因为我要做的东西呢,就用到部分数据,所以对我来说,这样的数据就是可以用的了,就不用再对last_review和reviews_per_month进行处理了。所以大家做数据清洗的时候就要具体情况具体分析。
3.最后
其实还有很多数据分析和处理的方法。比如,在你已经确定了你是要对这个数据进行预测,那么还可以去除掉无关特征和与你要预测特征相关性较低的特征;将数据分割或者提取出你想要的的样子。如果是不确定做什么,只是拿到了一串数据,那么最好对数据进行一个备份,毕竟你会经常对他操作,如果做到后面发现不太对的话,还可以从头再来。那这边具体的代码就不做展示了。
总之我觉得数据处理和分析这一块儿吧,确实一千个读者一千个阿姆雷特,每个人看待数据都是不一样的,每个人都能从这些数据中找到自己想要的东西。所以我觉得,多看看别人的处理方式,有利于大家的积累。