4.1 数据集的预处理
可视化是数据分析的重要过程,但是可视化对数据格式要求较高,一般情况,我们无法获取符合要求的数据。所以,数据的清洗和整形是数据分析中必不可少的一环。在本章中将基于某公司真实销售数据集,展示使用tidyr包进行数据整形以及使用dplyr进行数据探索性分析的过程,并使用ggplot2来帮助我们理解分析过程。
4.1.1 tidyr包简介
读入R环境下的数据集(dataset)最好是整齐的数据集(tidy data),由变量和观测值构成,如果不符合要求,需要对数据做清洗(data cleanning)。R将整洁数据定义为:每个变量的数据存储在自身的列中,每个观测值的数据存储在其自身的行中。
tidyr包是tidyverse包的核心包之一,主要提供了一个类似Excel中数据透视表(pivot table)的功能。它主要有4个函数,seperate()和unite()函数主要对变量做拆分或合并;gather()和spread()函数主要做数据整形,将宽数据转成长数据,或将长数据转成宽数据。加载tidyr包有两种方式:tidyverse包是一个汇总包,加载tidyverse包的同时会加载tidyr包。
4.1.2 dplyr包简介
dplyr包也是tidyverse包中的一个核心包,是R中功能最强大,最受欢迎的软件包之一。本文包括一些示例和如何使用使用dplyr软件包进行数据探索性分析。这是一个关于数据操作和数据处理的完整教程。加载dplyr包的方式和tidyr相同。
注意,在加载时,dplyr包会覆盖R中的基础函数。如果想要在加载dplyr后使用这些函数的基础版本,应该使用它们的完整名称:stats::filter() 和 stats::lag()。
4.1.3 数据集简介
为了介绍tidyr和dplyr函数的基本使用,本章引入了一个数据集global-superstore。此数据集来源于一家跨国零售企业,是该公司2011-2014年期间的零售订单数据,存储方式为Excel工作表。我们使用readxl包中的read_excel()函数导入数据。library(readxl)
<- read_excel("data/global-superstore.xlsx","订单")
orders orders
## # A tibble: 51,290 x 24
## id orderid purchasedate shipdate shipway custid custname
## <dbl> <chr> <dttm> <dttm> <chr> <chr> <chr>
## 1 1 MX-201~ 2014-10-02 00:00:00 2014-10-06 00:00:00 标准级 SC-20~ 常松
## 2 2 MX-201~ 2012-10-15 00:00:00 2012-10-20 00:00:00 标准级 KW-16~ 郝立勤
## 3 3 MX-201~ 2012-10-15 00:00:00 2012-10-20 00:00:00 标准级 KW-16~ 郝立勤
## 4 4 MX-201~ 2012-10-15 00:00:00 2012-10-20 00:00:00 标准级 KW-16~ 郝立勤
## 5 5 MX-201~ 2012-10-15 00:00:00 2012-10-20 00:00:00 标准级 KW-16~ 郝立勤
## 6 6 MX-201~ 2012-10-15 00:00:00 2012-10-20 00:00:00 标准级 KW-16~ 郝立勤
## 7 7 MX-201~ 2013-09-27 00:00:00 2013-10-01 00:00:00 标准级 DP-13~ 邹凤
## 8 8 MX-201~ 2013-09-27 00:00:00 2013-10-01 00:00:00 标准级 DP-13~ 邹凤
## 9 9 MX-201~ 2013-09-27 00:00:00 2013-10-01 00:00:00 标准级 DP-13~ 邹凤
## 10 10 MX-201~ 2013-09-27 00:00:00 2013-10-01 00:00:00 标准级 DP-13~ 邹凤
## # ... with 51,280 more rows, and 17 more variables: segment <chr>, city <chr>,
## # state <chr>, country <chr>, zipcode <lgl>, market <chr>, area <chr>,
## # productid <chr>, type <chr>, subtype <chr>, productname <chr>, sales <dbl>,
## # quantity <dbl>, discount <dbl>, profit <dbl>, shipcost <dbl>,
## # priority <chr>
观察数据会发现,这个数据框的输出和我们以前用过的其他数据框有一点差别:只显示了前几行和适合屏幕宽度的几列。(在Rstudio中可以使用View(flights)查看整个数据集)输出有差别是因为数据被默认存储为tibble的形式。tibble 也是一种数据框,但是跟dataframe略有不同,更适合在tidyverse中使用。在后续内容中会对tibble进行简要介绍。
观察输出的数据可以发现每一列下面都有对数据类型的描述。在数据分析中常用的数据类型有以下七种:
int 表示整数型变量
dbl 表示双精度浮点数型变量,或称实数
chr 表示字符向量,或称字符串
dttm 表示日期时间(日期 + 时间)型变量
lgl 表示逻辑型变量,是一个仅包括 TRUE 和 FALSE 的向量
fctr 表示因子,R 用其来表示具有固定数目的值的分类变量
date 表示日期型变量
4.1.4 tibble简介
tibble是一种简单数据框,它对传统数据框的功能进行了一些修改,以便更易于在tidyverse中使用。如果读者注意观察加载tidyverse包的输出信息时,可以发现tibble包也是tidyverse包中的核心包之一。创建tibble的方式有下面两种:使用tribble()函数创建数据框时,#开头的行是为了提示标题行的位置。另外还可以使用as_tibble()函数将data.frame转换为tibble。
相比于传统数据框(data.drame),tibble对打印方式进行了优化:只显示前10行结果,并且列适合屏幕,这种方式非常适合大数据集;tibble 还会打印出列的类型。在功能方面,tibble与data.frame也有所区别:不能改变输入的类型(例如将字符串转换为因子)、变量的名称;不能创建行名称;可以在tibble中使用在R中无效的变量名称(即不符合语法的名称)作为列名称(例如,列名称可以不以字母开头,也可以包含特殊字符(如空格)。要想引用这样的变量,需要使用反引号“`”将它们括起来)。