前言9102年是互联网大环境不太好的一年,这一年更需要苦练基本功,数据科学领域的基本功无非就是数据处理,而 DataFrame 是其中的核心。那么,都9102年了,如何在 R 语言中优雅地使用 DataFrame 呢?是否优雅是矿工生产力差异的重要来源,本文将介绍最近三年来 DataFrame 的最近进展。R 中的 DataFrame 新趋势tidy 编程流分布式计算集成 NoSQL集成各领域核心算法按照功能来划分:核心计算:tidyverse/sparklyr图计算: tidygraph/graphframe空间计算:sf/geospark/tidyraster时间序列:tidyquant文本计算:tidytext/tabulizer模型构建:tidymodelsNoSQL集成:nodbi核心计算谈到数据处理的基本功必须先了解 DataFrame 的最核心能力:比SQL还要优雅地处理数据。作为第四代数据处理语言的核心 tidyverse 是必须要了解的。tidyverse 实现了核心计算的大一统,它囊括了八个数据科学最高频的操作:ggplot2, 支持数据可视化dplyr, 数据操作tidyr, 数据清洗readr, 数据IOpurrr, 函数式编程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 UDFremote_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版