您的位置:首页 > 编程语言

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

2018-11-20 10:46 204 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/84312440

作者: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)

 

##   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

 

##   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)

 


将图表导出为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 

译者简介

蒋雨畅,香港理工大学大三在读,主修地理信息,辅修计算机科学,目前在研究学习通过数据科学等方法探索城市与人类活动的关系。希望能认识更多对数据科学感兴趣的朋友,了解更多前沿知识,开拓自己的眼界。翻译组招募信息工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。
你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。
点击文末“阅读原文”加入数据派团队~转载须知如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:datapi),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。


点击“阅读原文”拥抱组织

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: