1 数据总体了解
读取数据集并了解数据集大小,原始特征维度; 通过info熟悉数据类型; 粗略查看数据集中各特征基本统计量;
- 数据集查看常用函数
# 1 查看数据集的原始特征维度
data_train.shape
# 2 查看数据集特征的个数、类型
data_train.info()
# 3 查看每个特征的基本统计量,包括特征样本数,中位数,标准差,极值等
data_train,describe()
# 4 查看数据集前几行,默认前5行
data_train.head()
2 缺失值和唯一值
查看数据缺失值情况,查看唯一值特征情况
- 常用代码
# 1 查看样本的缺失率
miss = data_train.isnull().sum()/len(data_train)
缺失值处理方法:
- 缺失率较高,直接删除该特征
- 缺失率较低,自行填充
# 1 查找特征属性只有一值的特征
one_value_fea = [col for col in data_train.columns if data_train[col].nunique() <= 1]
- 对于只有一值的特征,对预测结果几乎没有贡献,直接删除
3 深入数据-查看数据类型
- 特征一般都是由类别型特征和数值型特征组成,而数值型特征又分为连续型和离散型。
- 类别型特征有时具有非数值关系,有时也具有数值关系。比如‘grade’中的等级A,B,C等,是否只是单纯的分类,还是A优于其他要结合业务判断。
- 数值型特征本是可以直接入模的,但往往风控人员要对其做分箱,转化为WOE编码进而做标准评分卡等操作。从模型效果上来看,特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度。从而使模型更加稳定。
- 常用代码
# 1 分离出数值型特征
numerical_fea = list(data_train.select_dtypes(exclude=['object']).columns)
# 2 分离出类别型特征
category_fea = list(filter(lambda x: x not in numerical_fea,list(data_train.columns)))
# 3 过滤数值型类别特征
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_noserial_fea)和连续型变量(numerical_serial_fea)
- 查看某一个数值型变量的分布,查看变量是否符合正态分布,如果不符合正态分布的变量可以log化后再观察下是否符合正态分布。
- 如果想统一处理一批数据变标准化 必须把这些之前已经正态化的数据提出
- 正态化的原因:一些情况下正态非正态可以让模型更快的收敛,一些模型要求数据正态(eg. GMM、KNN),保证数据不要过偏态即可,过于偏态可能会影响模型预测结果。
例如将特征loanAmnt 进行log处理
#Ploting Transaction Amount Values Distribution
plt.figure(figsize=(16,12))
plt.suptitle('Transaction Values Distribution', fontsize=22)
plt.subplot(221)
sub_plot_1 = sns.distplot(data_train['loanAmnt'])
sub_plot_1.set_title("loanAmnt Distribuition", fontsize=18)
sub_plot_1.set_xlabel("")
sub_plot_1.set_ylabel("Probability", fontsize=15)
plt.subplot(222)
sub_plot_2 = sns.distplot(np.log(data_train['loanAmnt']))
sub_plot_2.set_title("loanAmnt (Log) Distribuition", fontsize=18)
sub_plot_2.set_xlabel("")
sub_plot_2.set_ylabel("Probability", fontsize=15)
4 数据间相关关系
特征和特征之间关系 特征和目标变量之间关系
#透视图 索引可以有多个,“columns(列)”是可选的,聚合函数aggfunc最后是被应用到了变量“values”中你所列举的项目上。
pivot = pd.pivot_table(data_train, index=['grade'], columns=['issueDateDT'], values=['loanAmnt'], aggfunc=np.sum)
pivot
5 用pandas_profiling生成数据报告
import pandas_profiling
pfr = pandas_profiling.ProfileReport(data_train)
pfr.to_file("./example.html")
网友评论