EDA-数据探索性分析
1.EDA目标
- EDA的价值在于熟悉、了解数据集,对数据集进行验证来确定所获得的数据集可以用于后续的机器学习或深度学习使用。
- 进一步了解变量间的相互关系以及变量与预测值之间的存在关系。
- 引导进行数据处理以及特征工程的步骤,使数据集的结构和特征集让预测更合理。
- 对数据进行一些图表或文字总结并打卡。
2.内容大纲
- 载入各种数据科学及可视化库
·数据科学库pandas、numpy、scipy
·可视化库matplotlib、seaborn
·missingno等其他 - 载入数据
·载入训练集和测试集
·简略观察数据(head()+shape) - 数据总揽:
·describe()熟悉数据相关统计量,sum、mean、方差等情况
·info()熟悉数据类型
·样本与训练集的时间特征 - 判断数据缺失异常:
·查看诶列的nan存在情况
·异常值检测 - 了解预测值的分布
·总体分布概况(无解约翰逊分布)
·skewness and kurtosis
·查看预测值的具体频数 - 特征分为类别特征和数字特征,并对类别特征查看nunique分布
- 数字特征分布
·相关性分布
·几个特征的偏度和峰值
·数字特征相互之间的关系可视化
·多变量互相回归关系可视化 - 类型特征分析
·nunique分布
·类别特征箱型图可视化
·类别特征小提琴图可视化
·类别特征柱形图可视化类别
·特征各类别频数可视化(count_plot) - pandas_profiling生成数据报告
3.内容总结
EDA即Exploraroty Data Analysis,是指对已有的数据(特别是调查或观察得到的原始数据)在尽量少的先验假定下进行探索,通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法。
EDA为普遍步骤,是最开始的第一步也是必备的基本一步。
接下来要结合模型的效果以及特征工程等来分析数据的实际建模情况,根据自己的一些理解,查阅文献,对实际问题作出判断和深入的理解。
不断进行EDA与数据处理和挖掘,达到更好的数据结构和分布以及较强势相关的特征。
4.大纲补充
- 对于数据的初步分析(describe()、sum、mean等)可以从 样本数量、训练集数量、时间特征、时序问题,特征坐标是的含义(非匿名特征),特征类型(info()函数),特征的缺失情况(其中注意缺失值在数据中表现的形式,有的为空有的是NAN符号等),特征的均值方差情况。
- 分析记录某些特征值缺失占比30%以上样本的缺失处理,助于后续模型验证和调节,分析特征应该是填充?或舍弃?或先做样本分类用不同的特征模型去预测。若是填充,填充方式是均值、0填充或者众数填充等。
- 对于异常值做专门的分析,分析特征异常的label是否为异常值,或偏离均值较远异或特殊符号?异常值是否该剔除,还是用正常值填充?是记录异常,还是机器本身异常等。
- 对于Label做专门的分析,分析标签的分布情况。
- 进行分析可通过对特征作图,特征和Label联合作图例如统计图、离散图,直观了解特征的分布情况,通过这一步可以发现数据之中的异常值等,通过箱型图分析一些特征值的偏离情况,对于特征和特征联合作图,对于特征和label联合作图,分析其中的相关性。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno#缺失值可视化处理包
import warnings
warnings.filterwarnings('ignore')
#载入数据
##载入训练集合测试集
test_data = pd.read_csv(r'C:\Users\MUJI\Desktop\二手车预测\used_car_testA_20200313.csv',sep=' ')
train_data = pd.read_csv(r'C:\Users\MUJI\Desktop\二手车预测\used_car_train_20200313.csv',sep=' ')
#观察数据
##简略观察数据(head()+shape)
train_data.head().append(train_data.tail())
test_data.head().append(test_data.tail())
print('train_data.shape:',train_data.shape)
print('test_data.shape:',test_data.shape)
1.describe每列的统计量,个数-count,方差-std,平均值-mean,中位数-25%、50%、75%,以及最大值,掌握数据的大概范围以及每个值的异常值的判断,999 9999-1等值其实都是nan的另一种表达方式,需注意。
2.info通过info了解数据每列的type,有助于了解是否存在除了nan以外的特殊符号异常。
train_data.describe()
test_data.describe()
#查看train和test的columns是否一致
print('train_data.columns:',train_data.columns)
print('test_data.columns:',test_data.columns)
#通过info熟悉数据类型
train_data.info()
test_data.info()
#查看每列nan情况
train_data.isnull().sum()
test_data.isnull().sum()