共计 1680 个字符,预计需要花费 5 分钟才能阅读完成。
前言
9102 年是互联网大环境不太好的一年,这一年更需要苦练基本功,数据科学领域的基本功无非就是数据处理,而 DataFrame 是其中的核心。那么,都 9102 年了,如何在 R 语言中优雅地使用 DataFrame 呢?是否优雅是矿工生产力差异的重要来源,本文将介绍最近三年来 DataFrame 的最近进展。
R 中的 DataFrame 新趋势
tidy 编程流
分布式计算
集成 NoSQL
集成各领域核心算法
按照功能来划分:
核心计算:tidyverse/sparklyr
图计算:tidygraph/graphframe
空间计算:sf/geospark/tidyraster
时间序列:tidyquant
文本计算:tidytext/tabulizer
模型构建:tidymodels
NoSQL 集成:nodbi
核心计算
谈到数据处理的基本功必须先了解 DataFrame 的最核心能力:比 SQL 还要优雅地处理数据。作为第四代数据处理语言的核心 tidyverse 是必须要了解的。
tidyverse 实现了核心计算的大一统,它囊括了八个数据科学最高频的操作:
ggplot2, 支持数据可视化
dplyr, 数据操作
tidyr, 数据清洗
readr, 数据 IO
purrr, 函数式编程
tibble, 数据框轻量化格式
stringr, 文本处理
forcats, 因子类型处理
对于 tidyverse 的各个子模块可以参考 R 语言与 DataFrame 2016 版, 其中详细介绍了各模块的情况,本文不再赘述,更多着墨与新趋势。八大模块中,dplyr 是核心中的核心,因为它实现了数据处理的前后端分离,支持 R 语言的前端和多种结构化数据库的后端,比如 RPostGIS,RMySQL,sparklyr 等。
下面举一个 sparklyr 处理数据的例子来感受一下现代数据处理:
library(sparklyr)
library(tidyverse)
# 数据库连接
sc <- sparklyr::spark_connect(master = “localhost”,
spark_home = “/data/FinanceR/Spark”,
version = “2.2.0”,
config = sparklyr::spark_config())
sc <- sparklyr::spark_connect(master = “localhost”,
spark_home = “/data/FinanceR/Spark”,
version = “2.2.0”,
config = sparklyr::spark_config())
# 在 mutate 中支持 Hive UDF
remote_df = dplyr::tbl(sc,from = “db.financer_tbl”) # 定义数据源表
# 或者 remote_df = dplyr::tbl(sc,from = dplyr::sql(“select * from db.financer_tbl limit 10”)) #
# 以比 SQL 更接近于自然语言的方法编程,以
remote_df %>%
dplyr::mutate(a = b+2) %>% # 在 mutate 中支持 Hive UDF
dplyr::filter(a > 2)%>%
dplyr::group_by(key)%>%
dplyr::summarize(count = n())%>%
dplyr::select(cnt = count)%>%
dplyr::arrange(desc(cnt))%>%
na.omit() ->
pipeline
## 将数据操作的 SQL 执行过程 打印
pipeline %>%
dbplyr::sql_render()
## 将 pipeline 结果自动缓存为临时表 tmp_tbl
tmp_tbl = pipeline %>% compute(“tmp_tbl”)
# 将 临时表按照条件过滤后再写回 Hive 数据库,省去建表过程
tmp_tbl %>%
filter(cnt > 10) %>%
sparklyr::spark_write_table(“db.financer_res”)
图计算
空间计算
时间序列
文本计算
假设检验
特征工程
参考资料
数据科学教程:R 语言与 DataFrame[2019 版