使用 R 探索您的第一个数据集
介绍
在 R 的所有数据细节中,这是最显眼的。或者说是最俗气的。当你第一次深入研究数据集时,你从哪里开始?好问题。在本指南中,我们假设你已经读入了数据集,有一些列名,并且没有大量的先验知识或业务背景。然而,我们确实假设你有耐心阅读图表并且不害怕基本的统计数据。
我们将使用超棒的nycflights数据集和tidyverse,这是一系列令人印象深刻的软件包,可使 R 数据工作更轻松、更可靠。在这里,我们将展示一种围绕提高准时航班性能进行一些基本探索性数据分析 ( EDA ) 的方法。与 EDA 一样,这里我们将重点关注假设生成。为了获得最大程度的学习效果,请跟随您感兴趣的数据集。
对于那些好奇的人,我们将通过 RStudio 和 R Markdown 构建它。
如果按照以下步骤操作,首先运行install.packages(c('nycflights','tidyverse','skimr'))
library(tidyverse)
library(nycflights13)
library(skimr)
数据格式和类型
首次在 tidyverse 中使用新数据时,最好确保您使用的是 tibble(一种特别负责的数据框)。如果您不确定,请像这样将数据框包装在tibble()中。
d <- as_tibble(flights)
作为第一次健全性检查,请查看您的数据(见下文)。行数(观察值)和列数(变量)听起来正确吗?每列使用的是什么数据类型?注意 <int> 。它们有意义吗?如果您看到连续列被编码为<chr>(即字符),那么您就有麻烦了(请参阅下文以了解修复方法)。
glimpse(d)
请注意,这些看起来大体正确。非数字列被编码为<chr>,而time_hour列被编码为<dttm>,这很好。请注意,航班(航班号)列被编码为int,而它实际上是一个离散字段 - 让我们转换它。
d <- d %>%
mutate(flight = as.character(flight))
在深入分析之前,下一步工作是确保数据看起来大体正确。许多数据管道长时间处于闲置状态,问题随之而来。让我们验证数据是否值得我们花时间。
缺失值
每当开始处理新数据集时,必须知道其中有多少数据。某些列的很大一部分是否缺失了?根据您的业务,缺失数据可能编码为NA、99999、''等。这就是为什么查看数据会很有帮助的原因!对于我们这里的示例,假设缺失值编码为NA 。让我们使用基础 R 来查找每列中NA的百分比。
colMeans(is.na(d))
统计摘要
对于现有数据,我们需要确认它是否符合我们的大致预期。我们之前对业务的理解是否与数据大致相符?如果不是,那么这是一个更新我们的思维模型或修复数据管道的好机会。我们如何检查?有很多方法,但最简单的方法是通过skimr包。请注意,这也会显示缺失值,并且可以满足许多早期数据集探索需求。
d %>%
skimr::skim()
好吧,那么这些统计数据中哪里看起来很奇怪呢?嗯,中位数(p50)到达延迟是-5,这看起来有点奇怪,但事实证明,航空公司建立了巨大的缓冲,因此他们的准点数字看起来相当不错(即,从技术上讲,航班大多提前到达)。还请注意,平均到达时间(arr_time)是 1502/302PM,这听起来差不多 - 众所周知,早上到达任何地方都很困难。
请注意,年份列的sd(标准差)为 0,这意味着数据来自 2013 年。让我们删除该列。
d <- d %>%
select(-year)
现在,汇总统计数据很有用,但它们也可能隐藏异常。请参阅Anscombe 四重奏。skim提供直方图真是太棒了,但即使是它们也可能隐藏问题。
可视化
要充分了解您的数据,您必须对其进行绘图(通常以多种方式)。同样,我们在这里这样做是为了生成有关准时绩效的假设。我们不会在本指南中建立模型,但找到准时绩效的一些潜在驱动因素将是一个好的开始。
航班延误的数字驱动因素
在任何数据集中,您都必须将可视化工作分为数值变量和分类变量(因为绘图类型不同)。散点图是检查两个连续变量之间关系的绝佳工具。在这里,我们将绘制其中几个来检查到达延误的潜在驱动因素。我们将使用 ggplot2和tidyr包,它们是tidyverse的一部分。
d %>%
select_if(is.numeric) %>%
tidyr::gather(-arr_delay, key = "var", value = "value") %>%
ggplot(aes(x = value, y = arr_delay)) +
facet_wrap(~ var, scales = "free") +
geom_point() +
stat_smooth()
请注意,蓝线是平滑趋势。虽然关系并不像我们希望的那样清晰,但我们可以看到到达延误(在 y 轴上)与dep_time(出发时间)有关系 - 看起来航班在凌晨 5 点左右重置,延误在当天晚些时候变得更加常见。这在其他几个变量中也可以看到(因为它们与dep_time相关)。当然,出发延误与到达延误密切相关(尤其是较长的出发延误)。
造成延误的类别驱动因素
现在让我们看看分类列,并确定它们与到达延迟( arr_delay )的关系。请注意,在视觉上处理具有许多分类列的列很困难。在这里,我们查看上面skim results顶部的Variable type:character结果,并抓取那些具有少于 20 个唯一值的变量(显示在n_unique列中)。其中包括承运人(即航空公司)和出发地(即航班出发机场)。
d %>%
# Only grab columns with a few categories and numerical col of interest
select(carrier, origin, arr_delay) %>%
gather(-arr_delay, key = "var", value = "value") %>%
ggplot(aes(x = value, y = arr_delay)) +
facet_wrap(~ var, scales = "free") +
geom_boxplot()
在这里,我们看到航空公司和出发机场的到达延误存在显著差异。干得好,HA(夏威夷航空)!如果你从事航空业,这样的图表可以生成一些关于你的数据工作下一步应该去哪里的假设。
请注意,如果您想利用具有超过 20 个唯一值的分类列,则需要不同的路线。让我们抓取晚点超过 120 分钟的航班。
d_late <- d %>%
filter(arr_delay > 120)
现在让我们用列联表来分析数据,这些列联表显示了每个类别组合的比例(百分比)(来自</fo
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~