探索性数据分析(EDA)
1、读取文件
读取训练集和测试A文件
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
import warnings
warnings.filterwarnings('ignore')
#读取文件
data_train=pd.read_csv('tianchi/train.csv')
data_test_a=pd.read_csv('tianchi/testA.csv')
2、查看缺失值和唯一值
2.1查看数据集的样本个数和原始特征维度
data_train.shape
(800000, 47)
data_test_a.shape
(200000, 48)
2.2 查看各特征的基本统计量
data_train.describe()
2.3 查看数据集中特征缺失值,唯一值等
2.3.1 查看有缺失值的列数
data_train.isnull().any().sum()
2.3.2查看缺失值超过50%的列
have_null_fea_dict = (data_train.isnull().sum()/len(data_train)).to_dict()
fea_null_moreThanHalf = {
}
for key,value in have_null_fea_dict.items():
if value > 0.5:
fea_null_moreThanHalf[key] = value
fea_null_moreThanHalf
2.3.3具体的查看缺失特征及缺失率
# nan可视化,各列指标缺失率的柱状图
missing = data_train.isnull().sum()/len(data_train)
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()
①纵向了解哪些列存在 “nan”, 并可以把nan的个数打印,主要的目的在于查看某一列nan存在的个数是否真的很大,如果nan存在的过多,说明这一列对label的影响几乎不起作用了,可以考虑删掉。如果缺失值很小一般可以选择填充。
②另外可以横向比较,如果在数据集中,某些样本数据的大部分列都是缺失的且样本足够的情况下可以考虑删除。
查看训练集测试集中特征属性只有一值的特征
2.3.4查看训练集测试集中特征属性只有一值的特征
#查看训练集
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
总结:
训练集一共47列,其中有22列都缺少数据,缺失率在1%以下。“policyCode”具有一个唯一值(或全部缺失)。有很多连续变量和一些分类变量。
3、深入数据-查看数据类型
3.1查看特征的数值类型和对象类型
- 特征一般都是由类别型特征和数值型特征组成,而数值型特征又分为连续型和离散型。
- 类别型特征有时具有非数值关系,有时也具有数值关系。比如‘grade’中的等级A,B,C等,是否只是单纯的分类,还是A优于其他要结合业务判断。
- 数值型特征本是可以直接入模的,但往往风控人员要对其做分箱,转化为WOE编码进而做标准评分卡等操作。从模型效果上来看,特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度。从而使模型更加稳定。
3.1.1查看哪些是数值特征,哪些是类别特征
numerical_fea = list(data_train.select_dtypes(exclude=['object']).columns)
category_fea = list(filter(lambda x: x not in numerical_fea,list(data_train.columns)))
3.2 数值型变量分析和离散型数值变量分析
3.2.1数值型变量分析(连续型变量和离散型变量)
区分数值离散型和数值连续型
#过滤数值型类别特征
def get_numerical_serial_fea(data,feas):
numerical_serial_fea = [