数据挖掘笔记02
1.数据分析EDA
1.EDA的价值主要在于熟悉数据集,了解数据集,对数据集进行验证来确定所获得数据集可以用于接下来的机器学习或者深度学习使用。
2.当了解了数据集之后我们下一步就是要去了解变量间的相互关系以及变量与预测值之间的存在关系。
3.引导数据科学从业者进行数据处理以及特征工程的步骤,使数据集的结构和特征集让接下来的预测问题更加可靠。
4.完成对于数据的探索性分析,并对于数据进行一些图表或者文字总结并打卡。
需分析:
① 数据总览,即describe()统计量以及info()数据类型
②缺失值以及异常值检测
③分析待预测的真实值的分布
④特征之间的相关性分析
2.数据总览
各种计算包的导入
#coding:utf-8
#导入warnings包,利用过滤器来实现忽略警告语句。
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns # seabon是一个做可视化的包
import missingno as msno # 用来检测缺失值
数据载入
Train_data = pd.read_csv('used_car_train_20200313.csv', sep=' ') # sep=' '是使对象用空格分开
Test_data = pd.read_csv('used_car_testA_20200313.csv', sep=' ')
简略观察数据(head()+shape)
print(Train_data.head().append(Train_data.tail())) # 前5行和后5行
print(Train_data.shape) # 形状 (150000, 31)
print(Test_data.head().append(Test_data.tail()))
print(Test_data.shape)
结果:
1.可以看出,数据的分散程度很大,有整型,有浮点,有正数,有负数,还有日期,当然可以当成是字符串。另外如果数据都换算成数值的话,数据间差距特别大,有些成千上万,有些几分几厘,这样在预测时就难以避免地会忽视某些值的作用,所以需要对其进行归一化。
2.shape的运用是也十分重要,对数据的大小要心中有数
用describe()来对数据进行基本统计量的分析,关于describe()的基本参数如下(且其默认只对数值型数据进行分析,如果有字符串,时间序列等的数据,会减少统计的项目):
count:一列的元素个数;
mean:一列数据的平均值;
std:一列数据的均方差;(方差的算术平方根,反映一个数据集的离散程度:越大,数据间的差异越大,数据集中数据的离散程度越高;越小,数据间的大小差异越小,数据集中的数据离散程度越低)
min:一列数据中的最小值;
max:一列数中的最大值;
25%:一列数据中,前 25% 的数据的平均值;
50%:一列数据中,前 50% 的数据的平均值;
75%:一列数据中,前 75% 的数据的平均值;
用info()来查看数据类型,并主要查看是否有异常数据
# 1) 通过describe()来熟悉数据的相关统计量
print(Train_data.describe())
## 2) 通过info()来熟悉数据类型
print(Train_data.info())
print(Test_data.info())
从上面的统计量与信息来看,没有什么特别之处,就数据类型来说notRepairedDamage的类型是object是个另类,后续要进行特殊处理。
3.数据的缺失情况
pandas内置了isnull()可以用来判断是否有缺失值,它会对空值和NA进行判断然后返回True或False。
# 1) 查看每列的存在nan情况
print(Train_data.isnull().sum())
print(Test_data.isnull().sum())
可以看出缺失的数据值主要集中在bodyType,fuelType,gearbox,这三个特征中。训练集中model缺失了一个值,但是无伤大雅。至于如何填充,亦或是删除这些数据,需要后期在选用模型时再做考虑。
同时我们也可以通过missingno库查看缺省值的其他属性。
矩阵图matrix
柱状图bar
热力图heatmap
树状图dendrogram
# nan可视化
missing = Train_data.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()
plt.show()
通过以上两句可以很直观的了解哪些列存在 “nan”, 并可以把nan的个数打印,主要的目的在于 nan存在的个数是否真的很大,如果很小一般选择填充,如果使用lgb等树模型可以直接空缺,让树自己去优化,但如果nan存在的过多、可以考虑删掉
# 可视化看下缺省值
'''
白线越多,代表缺失值越多。
'''
msno.matrix(Train_data.sample(250)) # msno.matrix无效矩阵是一个数据密集的显示,它可以快速直观地看出数据完整度 空白越多说明缺失越严重
plt.show()
msno.bar(Train_data.sample(1000)) # 条形图提供与矩阵图相同的信息,但格式更简单
plt.show()