探索性数据分析(EDA)

这篇博客详细介绍了如何使用Python进行探索性数据分析,包括读取数据、查看缺失值和唯一值、深入分析数据类型、研究数据间的相关关系以及通过pandas_profiling生成数据报告。博主探讨了数值型和类别型特征的处理方法,如缺失值的检查和填充,以及变量分布的可视化。
摘要由CSDN通过智能技术生成

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 = [
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值