探索性数据分析(EDA)是数据项目的第一步。我们将创建一个代码模板来实现这一功能。
简介
EDA由单变量(1个变量)和双变量(2个变量)分析组成。在这篇文章中,我们将回顾一些我们在案例分析中使用的功能:
第1步:取得并了解数据;
第2步:分析分类变量;
第3步:分析数值变量;
第4步:同时分析数值和分类变量。
基本EDA中的一些关键点:
数据类型
异常值
缺失值
数值和分类变量的分布(数字和图形的形式)
分析结果的类型
结果有两种类型:信息型或操作型。
信息型:例如绘图或任何长变量概要,我们无法从中过滤数据,但它会立即为我们提供大量信息。大多数用于EDA阶段。
操作型:这类结果可直接用于数据工作流(例如,选择缺失比例低于20%的变量)。最常用于数据准备阶段。
准备开始
如果您没有这些扩展包,请删除‘#’来导入:
# install.packages("tidyverse")
# install.packages("funModeling")
# install.packages("Hmisc")
funModeling已发布更新版本的Ago-1,请更新!
现在加载所需的程序包
library(funModeling)
library(tidyverse)
library(Hmisc)
tl; dr(代码)
使用以下函数一键运行本文中的所有函数:
basic_eda
glimpse(data)
df_status(data)
freq(data)
profiling_num(data)
plot_num(data)
describe(data)
替换data为您的数据,然后就可以啦!
basic_eda(my_amazing_data)
创建示例数据:
使用heart_disease数据(来自funModeling包)。为了使本文容易理解,我们只选取四个变量。
data=heart_disease %>% select(age, max_heart_rate, thal, has_heart_disease)
第一步:了解数据
统计第一个例子中观测(行)和变量的数量,并使用head显示数据的前几行。
glimpse(data)
## Observations: 303
## Variables: 4
## $ age 63, 67, 67, 37, 41, 56, 62, 57, 63, 53, 57, ...
## $ max_heart_rate 150, 108, 129, 187, 172, 178, 160, 163, 147,...
## $ thal 6, 3, 7, 3, 3, 3, 3, 3, 7, 7, 6, 3, 6, 7, 7,...
## $ has_heart_disease no, yes, yes, no, no, no, yes, no, yes, yes,...
获取有关数据类型,零值,无穷数和缺失值的统计信息:
df_status(data)
## variable q_zeros p_zeros q_na p_na q_inf p_inf type unique
## 1 age 0 0 0 0.00 0 0 integer 41
## 2 max_heart_rate 0 0 0 0.00 0 0 integer 91
## 3 thal 0 0 2 0.66 0 0 factor 3
## 4 has_heart_disease 0 0 0 0.00 0 0 factor 2
df_status会返回一个表格,因此很容易筛选出符合某些条件的变量,例如:
有至少80%的非空值(p_na < 20)
有少于50个唯一值(unique % select(variable, variation_coef, range_98):variation_coef得到较大值可能提示异常值。range_98显示绝大部分数值的范围。
第四步:同时分析数值和分类变量
使用Hmisc包的describe。
library(Hmisc)
describe(data)
## data
##
## 4 Variables 303 Observations
## ---------------------------------------------------------------------------
## age
## n missing distinct Info Mean Gmd .05 .10
## 303 0 41 0.999 54.44 10.3 40 42
## .25 .50 .75 .90 .95
## 48 56 61 66 68
##
## lowest : 29 34 35 37 38, highest: 70 71 74 76 77
## ---------------------------------------------------------------------------
## max_heart_rate
## n missing distinct Info Mean Gmd .05 .10
## 303 0 91 1 149.6 25.73 108.1 116.0
## .25 .50 .75 .90 .95
## 133.5 153.0 166.0 176.6 181.9
##
## lowest : 71 88 90 95 96, highest: 190 192 194 195 202
## ---------------------------------------------------------------------------
## thal
## n missing distinct
## 301 2 3
##
## Value 3 6 7
## Frequency 166 18 117
## Proportion 0.55 0.06 0.39
## ---------------------------------------------------------------------------
## has_heart_disease
## n missing distinct
## 303 0 2
##
## Value no yes
## Frequency 164 139
## Proportion 0.54 0.46
## ---------------------------------------------------------------------------
这对于快速了解所有变量非常有用。但是当我们想要使用统计结果来改变我们的数据工作流时,这个函数不如freq和profiling_num好用。
建议:
检查最小值和最大值(异常值)。
检查分布(与之前相同)。
发表评论