Datawhale第17期组队学习(零基础入门金融风控)Task02:数据分析(EDA)

 

进入了数据分析部分,我们首先就需要对数据进行一个全面的了解和熟悉,主要为了后面的特征工程分析打下基础。主要内容可以分为三个点:

  1. 首先了解整个数据集的基本情况(包括缺失值,异常值等)
  2. 了解各个维度变量之间是否存在相关性(相关性分析等),变量与预测值之间存在的关系。
  3. 为特征工程打下基础,提前做好特征选择工作。

首先需要做的工作是

  1. 了解数据集大小,维度
  2. 熟悉数据类型
  3. 粗略查看数据集中各维度数据的基本统计量(通过describe函数)
  4. 查看缺失值情况
  5. 确认维度中存在唯一值的特征
  6. 分析数据类型(类别特征、数值特征【包括离散型、连续性】)
  7. 特征&特征间关系,特征&目标值间关系
  • 接下来我们就开始来看看数据是啥样子的

首先读取文件

data_train = pd.read_csv('./train.csv')
data_test_a = pd.read_csv('./testA.csv')

了解数据集的样本个数和维度

print(data_train.shape)
print(data_test_a.shape)
print(data_train.columns)

输出为

  • 4.查看数据集中的缺失值和唯一值情况
print(f'There are {data_train.isnull().any().sum()} columns in train dataset with missing values.')

输出为

有22个维度的数据存在缺失值

接下来看看缺失值占比大于5%的特征:

have_null_fea_dict = (data_train.isnull().sum()/len(data_train)).to_dict()
fea_null_moreThan5percent= {}
for key,value in have_null_fea_dict.items():
    if value > 0.05 :
        fea_null_moreThan5percent[key] = value

print(fea_null_moreThan5percent)

输出为

  • 可视化查看缺失特征和缺失比例
missing = data_train.isnull().sum()/len(data_train)
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()

plt.show()

 

  • 5.查看具有唯一特征的特征值
one_value_fea = [col for col in data_train.columns if data_train[col].nunique() <= 1]
one_value_fea_test = [col for col in data_test_a.columns if data_test_a[col].nunique() <= 1]
print(one_value_fea)
print(one_value_fea_test)
print(f'There are {len(one_value_fea)} columns in train dataset with one unique value.')
print(f'There are {len(one_value_fea_test)} columns in test dataset with one unique value.')

输出为

  • 小结:
    看得出来,47列数据中有22列都缺少数据,‘policyCode’具有一个唯一值(或全部缺失)所以这一特征值可以省去。类别变量看出来有5个,连续变量33个,离散变量9个。缺失率整体没有大于10%的,通过填充缺失值或者直接删除的方式,就能够有效的对数据进行预处理。
  • 6.将数据类型分类

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)))
print(numerical_fea)
print(category_fea)

2.在数值特征中筛选出离散型和连续型,将含有相同数值<20个特征定义归类为离散型。

def get_numerical_serial_fea(data,feas):
    numerical_serial_fea = []
    numerical_noserial_fea = []
    for fea in feas:
        temp = data[fea].nunique()
        if temp <= 20:
            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)

print(numerical_serial_fea)
print(numerical_noserial_fea)

观察离散型变量的数值分布

for fea in numerical_noserial_fea:
    print(data_train[fea].value_counts())

对连续型变量作可视化呈现

f = pd.melt(data_train, value_vars=numerical_serial_fea)
g = sns.FacetGrid(f, col="variable", col_wrap=2, sharex=False, sharey=False)
g = g.map(sns.distplot, "value")
plt.show()

查看某一个数值型变量的分布,查看变量是否符合正态分布,如果不符合正太分布的变量可以log化后再观察 下是否符合正态分布。 画出原图型和log后图形的比较图:

  • 对类别数据进行可视化呈现
plt.figure(figsize=(8, 8))
sns.barplot(data_train["employmentLength"].value_counts(dropna=False)[:20],
data_train["employmentLength"].value_counts(dropna=False).keys()[:20])
plt.show()

  • 总结:数据探索性分析EDA是初步了解数据,熟悉数据为特征工程做准备的阶段,甚至EDA提取出来的特征可以直接当作规则来用。该阶段主要工作还是借助于各个简单的统计量来对数据整体的了解,分析各个类型变量相互之间的关系,以及用合适的图形可视化出来直观观察(数无形少直觉)。
限时福利1:原价 129 元,最后2天仅需 69 元!后天涨价至98元 限时福利2:购课进答疑群专享柳峰(刘运强)老师答疑服务 限时福利3:购课添加助教领取价值 800 元的编程大礼包 为什么需要掌握高性能的MySQL实战? 由于互联网产品用户量大、高并发请求场景多,因此对MySQL的性能、可用性、扩展性都提出了很高的要求。使用MySQL解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一个程序员能力和薪资的标准之一。 为了让大家快速系统了解高性能MySQL核心知识全貌,我为你总结了「高性能 MySQL 知识框架图」,帮你梳理学习重点,建议收藏! 【课程设计】 课程分为四大篇章,将为你建立完整的 MySQL 知识体系,同时将重点讲解 MySQL 底层运行原理、数据库的性能调优、高并发、海量业务处理、面试解析等。 一、性能优化篇: 主要包括经典 MySQL 问题剖析、索引底层原理和事务与锁机制。通过深入理解 MySQL 的索引结构 B+Tree ,学员能够从根本上弄懂为什么有些 SQL 走索引、有些不走索引,从而彻底掌握索引的使用和优化技巧,能够避开很多实战中遇到的“坑”。 二、MySQL 8.0新特性篇: 主要包括窗口函数和通用表表达式。企业中的许多报表统计需求,如果不采用窗口函数,用普通的 SQL 语句是很难实现的。 三、高性能架构篇: 主要包括主从复制和读写分离。在企业的生产环境中,很少采用单台MySQL节点的情况,因为一旦单个节点发生故障,整个系统都不可用,后果往往不堪设想,因此掌握高可用架构的实现是非常有必要的。 四、面试篇: 程序员获得工作的第一步,就是高效的准备面试,面试篇主要从知识点回顾总结的角度出发,结合程序员面试高频MySQL问题精讲精练,帮助程序员吊打面试官,获得心仪的工作机会。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页