一文读懂R中的探索性数据分析(附R代码)
技术频道
每日头条
18-11-22 00:11:49
[ 文章导读 ] 作者:Pablo Casas 翻译:蒋雨畅 校对:车前子 本文约1500字,建议阅读7分钟。 本文将通过介绍一 […]

作者:Pablo Casas

翻译:蒋雨畅

校对:车前子

本文约1500字,建议阅读7分钟。

本文将通过介绍一个代码模板的四个基本步骤,来帮助您完成数据分析的初期探索。

探索性数据分析(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 <- function(data){ 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 <int> 63, 67, 67, 37, 41, 56, 62, 57, 63, 53, 57, …## $ max_heart_rate <int> 150, 108, 129, 187, 172, 178, 160, 163, 147,…## $ thal <fct> 6, 3, 7, 3, 3, 3, 3, 3, 7, 7, 6, 3, 6, 7, 7,…## $ has_heart_disease <fct> 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 <= 50)

建议:

  • 所有变量都是正确的数据类型吗?
  • 有含有很多零或空值的变量吗?
  • 有高基数变量吗?

更多相关信息请浏览:https://livebook.datascienceheroes.com/exploratory-data-analysis.html

第二步:分析分类变量

freq 函数自动数据集中所有因子或字符变量:

freq(data)

独家|一文读懂R中的探索性数据分析(附R代码)

## thal frequency percentage cumulative_perc## 1 3 166 54.79 55## 2 7 117 38.61 93## 3 6 18 5.94 99## 4 <NA> 2 0.66 100

独家|一文读懂R中的探索性数据分析(附R代码)

## has_heart_disease frequency percentage cumulative_perc## 1 no 164 54 54## 2 yes 139 46 100## [1] “Variables processed: thal, has_heart_disease”

建议:

  • 如果freq用于一个变量 -freq(data$variable),它会生成一个表格。这对于处理高基数变量(如邮政编码)非常有用。
  • 将图表以jpeg格式保存到当前目录中:
  • freq(data, path_out = “.”)
  • 分类变量的所有类别都有意义吗?
  • 有很多缺失值吗?
  • 经常检查绝对值和相对值。

更多相关信息请浏览:https://livebook.datascienceheroes.com/exploratory-data-analysis.html

第三步:分析数值变量

我们将看到:plot_num和profiling_num两个函数,它们都自动数据集中所有数值/整数变量:

1. 绘制图表

plot_num(data)

独家|一文读懂R中的探索性数据分析(附R代码)

将图表导出为jpeg格式:

plot_num(data, path_out = “.”)

建议:

  • 试着找出极度偏态分布的变量。
  • 作图检查任何有异常值的变量。

更多相关信息请浏览:https://livebook.datascienceheroes.com/exploratory-data-analysis.html

2. 定量分析

profiling_num 自动所有数值型/整型变量:

data_prof = profiling_num(data)## variable mean std_dev variation_coef p_01 p_05 p_25 p_50 p_75 p_95## 1 age 54 9 0.17 35 40 48 56 61 68## 2 max_heart_rate 150 23 0.15 95 108 134 153 166 182## p_99 skewness kurtosis iqr range_98 range_80## 1 71 -0.21 2.5 13 [35, 71] [42, 66]## 2 192 -0.53 2.9 32 [95.02, 191.96] [116, 176.6]

建议:

  • 尝试根据其分布描述每个变量(对报告分析结果也很有用)。
  • 注意标准差很大的变量。
  • 选择您最熟悉的指标:data_prof %>% select(variable, variation_coef, range_98):variation_coef得到较大值可能提示异常值。range_98显示绝大部分数值的范围。

更多相关信息请浏览:https://livebook.datascienceheroes.com/exploratory-data-analysis.html

第四步:同时分析数值和分类变量

使用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好用。

建议:

  • 检查最小值和最大值(异常值)。
  • 检查分布(与之前相同)。

更多相关信息请浏览:https://livebook.datascienceheroes.com/exploratory-data-analysis.html

原文标题:

Exploratory Data Analysis in R (Introduction)

原文链接:

https://dzone.com/articles/exploratory-data-analysis-in-r-introduction

译者简介

独家|一文读懂R中的探索性数据分析(附R代码)

蒋雨畅,香港理工大学大三在读,主修地理信息,辅修计算机科学,目前在研究学习通过数据科学等方法探索城市与人类活动的关系。希望能认识更多对数据科学感兴趣的朋友,了解更多前沿知识,开拓自己的眼界。

  • 随便看看

登录

忘记密码