目标:
- 学习如何对数据集整体概况进行分析,包括数据集的基本情况(缺失值,异常值)
- 学习了解变量间的相互关系、变量与预测值之间的存在关系
一、缺失值和唯一值
1.缺失值
1.1查看缺失值情况
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
import warnings
# 读取数据
df_train = pd.read_csv('train.csv')
df_test = pd.read_csv('testA.csv')
# 统计每一列含有缺失值的样本占比(纵向维度)
col_miss = df_train.isnull().sum()/df_train.shape[0]
print(col_miss)
# 统计每个样本的特征缺失比例(横向维度)
row_miss = df_train.isnull().sum(axis=1)/df_train.shape[1]
print(row_miss)
1.2缺失值处理
1.2.1纵向维度
- 缺失值比较少时我们可以用中值、均值或众数等填充。数值型我们用中值,类别型我们用众数。
- 缺失比例达到40-70%的类别特征,我们用-1作为一个新的特定类别值进行填充。例如:100个样本里,有60个样本的『职业』属性都有值,但是还有40个样本『职业』属性缺失,这时候我们可以自己构造一个名为「无业」的类别填充进去。
- 缺失值过多的特征我们将它们打印出来,如果没有特别的信息,我们就将它直接删除了。例如:做金融风控的数据分析时,如果有个缺失值很多的特征叫做『债权人借贷当天是否吃了早饭』,那么显然这个特征可以直接扔掉。通常我们选择90%作为阈值,直接删除缺失值比例大于90%的特征。
1.2.2横向维度
除了特征对建模的影响外,样本数据也是会影响算法的拟合能力的,特别是含有缺失值过多的异常样本,我们可以进一步处理这些异常样本:
- 统计将每个样本的特征缺失比例,按照某个阈值来过滤掉样本。
- 也可以先用XGBoost这些能筛选重要特征的算法确定出一定个数的重要特征,然后将那些在重要特征上缺失很严重的样本作为异常样本剔除。
2.唯一值
除了信息缺失太多的特征要剔除外,信息过于统一的特征也对模型贡献不大。怎么判断特征冗余呢,我们按数值和类别特征来分别处理。
- 数值特征我们通过方差/标准差来看信息的分散程度,方差过小说明信息过于集中,特征价值就很弱。想想噪音和音乐,噪音的波动往往很单调,悦耳的音乐却是相反。通常将标准差小于0.1的特征删除。查看标准差等统计信息代码如下:
df_train.describe()
- 类别型特征我们通过特征值占比最高的比例来看信息参考价值,我们将比例95%作为阈值,高于阈值的特征删除。代码如下:
one_value_fea = [col for col in df_train.columns if (df_train[col].value_counts()/df_train.shape[0]).max() >= 0.95]
print(one_value_fea)
二、查看特征类型
特征一般都是由类别型特征和数值型特征组成,而数值型特征又分为连续型和离散型