拿到数据不知如何下手? 来看看如何对数据库进行探索性分析!

世界是纷繁复杂的, 刚到手的数据也是如此. 面对杂乱无章的数据, 我们很难凭肉眼得出什么信息. 因此就需要对数据进行探索性分析, 用一些简单的指标对整个数据库有一个基本的了解.
这篇文章说一下如何对一个数据库进行整体了解
对整个数据库的探索性分析
当拿到一个数据库的时候, 你想要知道什么呢? 一定想先了解一下这个数据库当中有几行, 有几列. 专业点说, 是想知道这个数据库有几条个案, 有哪些变量, 以及这些变量都是哪些类型.
工欲善其事, 必先利其器. 首先了解一下我们使用什么工具达成这些目标. 我们所使用的工具叫做tidyverse. 这是由Hadley Wickham所创建的一系列包的集合, 在接下来的整个分析流程中, 包括数据整理, 统计建模,以及最后的数据可视化步骤中, 我们都会用到它. 使用`install.packages(“tidyverse”)`安装它, 你将获得tidyverse中的一系列包, 包括readr, ggplot2, tidyr, tibble, dplyr, purr, stringr, forcats等. 别忘了使用`library()`加载到当前的环境中.
```R
install. packages("tidyverse")
library(tidyverse)
```
我们使用的数据库是来自NHANES的数据集, 也需要你安装, 加载包内的数据集要使用`data()`函数, 这个函数是专门用来加载内置数据集或是某个包里的数据的. 直接输入数据集名称然后运行, 可以显示这个数据集的前几行前几列, 对于快速了解一个数据集十分有用
```R
install. packages("NHANES")
library(NHANES) # 加载包
data(NHANES) # 加载数据集
NHANES #显示数据集的前几行前几列
```
准备工作已经完成了, 现在要了解这个数据集的整体情况, 前面直接运行数据集名称的方式只能用于初步了解数据集结构, 并不能达到分析要求. 最常用的初步了解一个数据集的函数是dplyr包中的`glimpse()`函数, glimpse这个单词本身就是”瞥见, 看一眼”的意思, 用作初步了解数据集的函数名颇为合适.
值得注意的是, glimpse函数在tibble包也含有, 所以需要声明下, 我们此处用到的glimpse函数到底是属于哪个包的. 只需在函数前加”包名::”即可, 如
```R
dplyr::glimpse()
```
这个函数会显示数据集有几行几列, 以及各个变量的类型信息. 各个类型用一个缩写表示
- - int: 整数型
- - dbl: 浮点型
- - fct: 因子型, 即分类变量
- - chr: 字符串类型
因为NHANES数据库中包含了两次考察的结果, 为了方便解释结果, 我们需要对示例数据进行一个简单的处理, 以便后续的学习. 仅保留观察年份为2011_12的观测, 且每个ID只保留最后一个观测.
```R
d_nhsub <- NHANES |>
dplyr::filter(SurveyYr == "2011_12") |>
group_by(ID) |>
slice_tail(n=1) |>
ungroup()
dim(d_nhsub)
```
是不是一下子复杂起来了, 我们来逐行解释一下这段代码
首先, 我们使用了”|>”这个符号, 这在R语言中叫做”管道符”, 作用是将上一个函数中的结果当作参数传入到下一个函数中, 管道符符合人正常的思考逻辑, 例如下面这行代码
```R
result <- sin(cos(exp(3)))
```
在这个例子中,我们首先对 `3` 进行指数运算 `exp(3)`,然后将结果传递给 `cos` 函数,再将 `cos` 的结果传递给 `sin` 函数。最终,计算得到的结果将被赋值给变量 `result`。
读这行代码时, 我们是由内向外读的, 但是写得时候, 需要由外向内写. 这不太符合正常的人脑思维逻辑, 因此, 管道符出现了, 利用管道符将上述代码重写,
```R
result <- exp(3) |> cos() |> sin()
```
这样就清晰多了, 写代码的顺序和我们思考和计算的顺序一样.
好了, 解释完管道符的概念, 我们回到正题. 在生成d_nhsub的代码中, 我们先使用管道符将NHANES数据集传入到dplyr中的`filter()`函数中, filter函数需要两个参数才能发挥作用, 一个是处理的数据源, 另一个是要对其进行的操作, 第一个管道符的作用就是把NHANES数据集传入到filter函数中作为数据源. filter函数的作用是进行过滤, 将符合要求的数据集提取出来组成一个新的数据框 这个函数常常用来提取数据子集. `SurveyYr == “2011_12”`的作用就是将SueveyYr变量中, 值为”2011_12”的个案筛选出来.
接着, `filter()`函数提取出的新数据框被第二个管道符传递到`group_by()`函数中作为参数, `group_by()`函数将这个新数据框按照ID进行分组处理, 使得每一组内的数据具有相同的值
`slice_tail()`函数用于选择一个数据框的最后几行, 前面我们已经用group_by分组了, slice_tail(n=1)表示留下每个组的最后一条观测, 最后, 用ungroup()关闭分组, `group_by()`和`ungroup()`通常配套使用
使用`dim()`函数查看处理后的d_nhsub数据集的维度(dim是英文单词dimension的缩写), 即行数和列数, 当然你也可以用之前学过的`glimpse()`函数查看, 一样的
好了, 下节课的预备内容我们已经准备好了
下一篇文章说一下如何针对一个分类变量进行探索性分析.
关注同名公众号, 有更多统计知识
最后编辑于 2024-01-21 · 浏览 502