数据的探索性分析(EDA)

本文详细介绍了使用Python进行数据探索性分析(EDA)的过程,包括载入数据科学库、数据总览、缺失值和异常值检查、特征分析等步骤。通过describe()、info()函数获取数据统计信息,利用可视化库matplotlib和seaborn揭示数据分布特征。通过pandas_profiling生成数据报告,便于深入理解数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、EDA的作用

  • EDA的作用主要在于熟悉并了解数据集,对数据集进行处理,以便接下来机器学习或者深度学习使用
  • 了解数据集之后,接下来就是了解数据集中各变量间的相互关系,变量与预测值之间的关系
  • 引导数据科学从业者进行数据处理以及后面特征工程的部分,使得数据集的结构和特征集让接下来的预测问题更加可靠
  • 完成对于数据的探索性分析,并对于数据进行一些图表或者文字总结并打卡。

2、内容介绍

1、载入各种数据科学以及可视化库

  • 数据科学库:pandas、numpy、scipy
  • 可视化库:matplotlib、seabon
    2、载入数据
  • 载入训练集和测试集
  • 简略观察数据(head()+shape、tail()+shape)
    3、数据总览
  • 通过describe()来查看数据的相关统计量
  • 通过info()来查看数据类型
    4、判断数据缺失和异常
  • 查看每列nan的情况
  • 异常值检测
    5、了解预测值的分布
  • 总体分布概况(无界约翰逊分布等)
  • 查看skewness、kurtosis
  • 查看预测值的具体频数
    6、特征分为数字特征和类别特征,并对类别特征查看unique分布
    7、数字特征分析
  • 相关性分析
  • 查看几个特征的偏度和峰值
  • 每个数字特征得分可视化
  • 数字特征相互之间的关系可视化
  • 多变量相互回归关系可视化
    8、类型特征分析
  • unique分布
  • 类别特征箱型图可视化
  • 类别特征的小提琴图可视化
  • 类别特征的柱形图可视化类别
  • 特征的每个类别频数可视化(count_plot)
    9、用pandas_profiling生成数据报告

3、代码示例

3.1 载入各种数据科学以及可视化库

#coding:utf-8
#导入warnings包,利用过滤器来实现忽略警告语句。
import warnings
warnings.filterwarnings('ignore')

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns      #图形可视化包
import missingno as msno    #缺失值可视化包

数据科学库
Numpy
Numpy(Numerical Python):提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于多为数据(矩阵)处理的库。用来存储和处理大型矩阵,比python自身的嵌套列表结构要高效得多。Python其余的科学计算扩展大部分都是以此为基础。

  • import numpy as np

Scipy
Scipy:基于Numpy提供了一个在Python中做科学计算的工具包。主要应用于统计,优化,整合,线性代数模块,傅利叶变换,信号和图像处理,常微分方程求解,稀疏矩阵等,在数学系或工程系相对用的多一些。

  • import scipy as sp

Pandas
Pandas:纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • import pandas as pd

可视化库
matplotlib
matplotlib:是一个python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形

  • import matplotlib as mpl
  • import matplotlib.pyplot as plt

seaborn
seaborn:是在matplotlit的基础上进行了更高级的API封装,从而使得做图更加容易,在大多数情况下使用seaborn就能制作出很具有吸引力的图,而是用matplotlib就能制作具有更多特色的图。应该把seaborn视为matplotlib的补充,而不是替代物。

  • import seaborn as sns

missingno
missingo:是一个可视化缺失值库,方便使用。

  • import missingno as msno

3.2 载入数据

# 1、载入训练集和测试集:
path = './datalab/'
train_data = pd.read_csv(path + 'used_car_train_20200313.csv',sep = ' ')
test_data = pd.read_csv(path + 'used_car_testA_20200313.csv',sep = ' ')

3.2.1 简略观察数据head()+shape

因为数据集很大,直接点开CSV文件查看很不方便,所以,要养成使用head()以及shape来快速查看数据集。

pandas的表格可以使用head()方法和tail()方法来查看整个数据的前几行和后几行的数据。参数可以填写具体的数字来表示具体要显示多少行,默认为5。

# 要养成看数据的head()、tail()、shape的习惯
train_data.head().append(train_data.tail())
train_data.shape
test_data.head().append(test_data.tail())
test_data.shape

这里我们将表格的前5行和后5行合并在一起进行显示。另外,考虑到数据特征比较多,所以先将表格按列切分然后再进行显示。具体代码如下:

train_df.iloc[:, : 11].head().append(train_df.iloc[:, : 11].tail())
train_df.iloc[:, 11: 22].head().append(train_df.iloc[:, 11: 22].tail())
train_df.iloc[:, 22: ].head().append(train_df.iloc[:, 22: ].tail())

3.3 总览数据概况

1、describe() 查看每列的统计量,个数count、平均值mean、方差std、最小值min、中位数25% 50% 75% 、以及最大值max,看这个信息主要是瞬间掌握数据的大概的范围以及每个值的异常值的判断,比如有的时候会发现999 9999 -1 等值这些其实都是nan的另外一种表达方式,有的时候需要注意下
2、info() 通过info来了解数据每列的type,有助于了解是否存在除了nan以外的特殊符号异常

3.3.1 通过describ()来熟悉数据的相关统计量

#describe中有每列的统计量:count、mean、std、min、max、中位数25% 50% 75%
train_data.describe()
test_data.describe()

3.3.2 通过info()来熟悉数据类型

# info来了解数据每列的type
train_data.info()
test_data.info()

3.4 判断数据缺失和异常

3.4.1 查看每列nan的存在情况

train_data.isnull().sum()
test_data.isnull().sum()

Notes:

  • 查看 NAN 存在的情况,如果很小一般选择填充。填充方法:均值,众数,机器学习预测等,如果使用 LGB 等树模型可以直接空缺,让树自己去优化;
  • 但如果 NAN 存在过多,可以考虑删除这个特征

可视化展示的几种方式:9

  • Matrix:使用最多的函数,能快速直观地看到数据集的完整性情况,矩阵显示
    如果数据是时序的,那可以用freq参数最多支持50列
  • Bar:简单的展示无效数据的条形图
  • Heatmap: 两个变量的无效相关范围从-1(如果一个变量出现,另一个肯定没有)到 0(出现或不出现的变量对彼此没有影响)到1(如果一个变量出现,另一个肯定也是),大于-1和小于1表示有强烈的正相关和负相关。图方便观察两个变量间的相关性,但是当数据集变大,这种结论的解释性会变差

missingno是一个专门用来将缺失值进行可视化的库。这个库有很多种方式对数据的缺失值情况进行可视化描述。这里我们用分别采用矩阵和条形图的方式来显示缺失值的情况。

# nan可视化
missing = train_data.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()

在这里插入图片描述
Matrix是使用最多的函数,能快速直观地看到数据集的完整性情况,矩阵显示

# 可视化看一下缺省值
msno.matrix(train_data.sample(250))

在这里插入图片描述
msno.bar可以简单的展示无效数据的条形图

msno.bar(train_data.sample(1000))

在这里插入图片描述
同样看一下测试集的缺省值情况

# 可视化看下缺省值
msno.matrix(test_data.sample(250))
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值