目的
- EDA价值主要在于熟悉了解整个数据集的基本情况(缺失值,异常值),对数据集进行验证是否可以进行接 下来的机器学习或者深度学习建模.
- 了解变量间的相互关系、变量与预测值之间的存在关系。
- 为特征工程做准备
学习目标
- 学习如何对数据集整体概况进行分析,包括数据集的基本情况(缺失值,异常值)
- 学习了解变量间的相互关系、变量与预测值之间的存在关系
内容介绍
- 数据总体了解:
- 读取数据集并了解数据集大小,原始特征维度;
- 通过info熟悉数据类型;
- 粗略查看数据集中各特征基本统计量;
- 缺失值和唯一值:
- 查看数据缺失值情况
- 查看唯一值特征情况
- 深入数据-查看数据类型
- 类别型数据
- 数值型数据
- 离散数值型数据
- 连续数值型数据
- 数据间相关关系
- 特征和特征之间关系
- 特征和目标变量之间关系
- 用pandas_profiling生成数据报告
代码示例
导入数据分析及可视化过程需要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
import warnings
warnings.filterwarnings('ignore')
读取文件
data_train = pd.read_csv('train.csv')
data_test_a = pd.read_csv('./testA.csv')
data_train_sample = pd.read_csv('./train.csv',nrows=5)
# 设置chunksize参数,来控制每次迭代数据的大小
chunker = pd.read_csv("train.csv",chunksize=5)
for item in chunker:
print(type(item))
print(len(item))
总体了解
查看数据集的样本个数和原始特征维度
data_test_a.shape
data_train.shape
data_train.columns
data_train.info()
data_train.describe()
data_train.head(3).append(data_train.tail(3))
查看数据集中特征缺失值,唯一值等
1.查看缺失值
print(f'There are {data_train.isnull().any().sum()} colunns in train dataset with missing values.')
2.查看具体特征缺失及缺失率
# nan可视化
missing = data_train.isnull().sum()/len(data_train)
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()
💡了解存在哪些“nan”,并将nan的个数打印,主要的目的在于nan存在的个数是否真的很大,如果很小一般选择填充,如果使用lgb等树模型可以直接空缺,让树自己去优化,但如果nan存在的过多、可以考虑删掉
3.查看训练测试集中特征属性只有一值的特征
one_value_fea = [col for col in data_train.columns if data_train[col].nunique()<=1]
one_value_fea
one_value_fea_test = [col for col in data_test_a.columns if data_test_a[col].nunique()<=1]
one_value_fea_test
print(f'There are {len(one_value_fea)} columns in train dataset with ont unique value.')
print(f'There are {len(one_value_fea_test)} columns in test dataset with one unique value.')
查看啊特征的数值有哪些,对象类型有哪些
- 特征一般都是由类别型特征和数值型特征组成
- 类别型特征有时具有非数值关系,有时也具有数值关系。比如‘grade’中的等级A,B,C等,是否只是单纯的 分类,还是A优于其他要结合业务判断。
- 数值型特征本是可以直接入模的,但往往风控人员要对其做分箱,转化为WOE编码进而做标准评分卡等操作。从模型效果上来看,特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度。从而使模型更加稳定。
numerical_fea = list(data_train.select_dtypes(exclude=['object']).columns)
numerical_fea
category_fea = list(filter(lambda x:x not in numerical_fea,list(data_train.columns)))
category_fea
data_train.grade
数值型变量分析,包括连续型变量和离散型变量 1.划分数值型变量中的连续变量和分类变量
# 划分数值型变量中的连续变量和分类变量
# 过滤数值型类别特征
def get_numerical_serial_fea(data,feas):
numerical_serial_fea = []
numerical_noserial_fea = []
for fea in feas:
temp = data[fea].nunique()
if temp <= 10:
numerical_noserial_fea.append(fea)
continue
numerical_serial_fea.append(fea)
return numerical_serial_fea,numerical_noserial_fea
numerical_serial_fea,numerical_noserial_fea = get_numerical_serial_fea(data_train,numerical_fea)
numerical_serial_fea
numerical_noserial_fea
2.数值类别变量分析
data_train['term'].value_counts()
data_train['homeOwnership'].value_counts()
data_train['verificationStatus'].value_counts()
data_train['initialListStatus'].value_counts()
data_train['applicationType'].value_counts()
data_train['policyCode'].value_counts()
data_train['n11'].value_counts()
data_train['n12'].value_counts()
参考资料:DataWhale社区组队学习