数据处理:从数据库到分层数据的全面指南
立即解锁
发布时间: 2025-09-04 00:55:28 阅读量: 20 订阅数: 28 AIGC 


R语言数据科学入门
# 数据处理:从数据库到分层数据的全面指南
## 1. 数据库数据访问与 SQL 学习
dbplyr 除了能处理基本操作外,还能翻译常见的字符串和日期时间操作函数。不过,它的翻译并非十全十美,仍有许多 R 函数未被翻译,但它在涵盖常用函数方面表现出色。
学习使用 dbplyr 访问数据库数据是个不错的选择,它作为 dplyr 的“后端”,能将熟悉的 dplyr 代码自动翻译成 SQL。学习 SQL 很重要,它是处理数据最常用的语言,掌握它有助于与不使用 R 的数据人员交流。
如果想深入学习 SQL,有两本推荐书籍:
- 《SQL for Data Scientists》,作者 Renée M. P. Teate,专为数据科学家需求设计,包含实际组织中常见的高度互联数据示例。
- 《Practical SQL》,作者 Anthony DeBarros,从数据记者(专注于讲述引人入胜故事的数据科学家)的角度编写,详细介绍如何将数据存入数据库并运行自己的数据库管理系统。
## 2. Arrow 包处理大数据
### 2.1 背景与优势
CSV 文件虽便于人类阅读,是良好的交换格式,但读取数据到 R 中效率较低。而 parquet 格式是强大的替代方案,它基于开放标准,被大数据系统广泛使用。
结合 Apache Arrow 这个多语言工具包,通过 arrow 包使用它,能以熟悉的 dplyr 语法分析内存外的大型数据集,且速度极快。
### 2.2 选择使用场景
arrow 和 dbplyr 都提供 dplyr 后端。很多情况下,数据存储形式决定了使用哪个工具,若数据已在数据库或 parquet 文件中,就按现有形式处理。若从自己的数据(如 CSV 文件)开始,可将其加载到数据库或转换为 parquet 格式。早期分析阶段,建议都尝试一下,选择最适合的方法。
### 2.3 准备工作
使用以下代码加载所需包:
```R
library(tidyverse)
library(arrow)
library(dbplyr, warn.conflicts = FALSE)
library(duckdb)
```
### 2.4 获取数据
以西雅图公共图书馆的物品借阅数据集为例,该数据集包含 41,389,465 行,记录了 2005 年 4 月至 2022 年 10 月每月每本书的借阅次数。使用以下代码下载数据:
```R
dir.create("data", showWarnings = FALSE)
curl::multi_download(
"https://r4ds.s3.us-west-2.amazonaws.com/seattle-library-checkouts.csv",
"data/seattle-library-checkouts.csv",
resume = TRUE
)
```
### 2.5 打开数据集
由于文件较大(9GB),不适合全部加载到内存,使用 `arrow::open_dataset()` 函数:
```R
seattle_csv <- open_dataset(
sources = "data/seattle-library-checkouts.csv",
format = "csv"
)
```
运行此代码时,`open_dataset()` 会扫描几千行以确定数据集结构,记录结果后停止,仅在需要时读取更多行。打印 `seattle_csv` 可查看元数据:
```R
seattle_csv
```
使用 `glimpse()` 查看数据实际内容:
```R
seattle_csv |> glimpse()
```
可以使用 dplyr 动词处理数据集,使用 `collect()` 强制 arrow 执行计算并返回数据,例如计算每年的总借阅次数:
```R
seattle_csv |>
count(CheckoutYear, wt = Checkouts) |>
arrange(CheckoutYear) |>
collect()
```
不过,当前代码运行较慢,可通过切换到更好的格式提高速度。
### 2.6 Parquet 格式
#### 2.6.1 优势
Parquet 用于矩形数据,是专门为大数据需求设计的自定义二进制格式,具有以下优点:
- **文件更小**:依赖高效编码和文件压缩,减少从磁盘到内存的数据移动量,提高速度。
- **丰富的类型系统**:能记录数据类型,避免 CSV 文件中类型猜测问题。
- **列导向**:按列组织数据,类似 R 的数据框,在数据分析任务中性能优于按行组织的 CSV 文件。
- **分块存储**:可同时处理文件不同部分,幸运时可跳过部分块。
#### 2.6.2 分区
随着数据集增大,将所有数据存储在单个文件中会很痛苦,将大型数据集拆分为多个文件可提高性能。分区没有固定规则,结果取决于数据、访问模式和读取数据的系统。大致建议是避免文件小于 20MB 或大于 2GB,分区文件数不超过 10,000 个,尽量按
0
0
复制全文
相关推荐









