美文网首页R数据处理
戏说R语言系列11

戏说R语言系列11

作者: eryesanye | 来源:发表于2018-08-26 23:55 被阅读97次

讲一下有关 R 语言的数据库操作。要想成为一名数据分析师、数据科学家、BI 系统开发人员,或者更加高大上的算法工程师、AI 工程师,数据库操作算的上是一项基本技能。

更具体一点讲,得学会一点 SQL 语言,或者找个工具来操作数据库。但是,数据库有很多种,虽然很多都使用类似 SQL 的语言,不过细节上仍然有些差别,这多少增加了学习成本。

于是,新西兰统计学家、美国统计学会院士、Rstudio 公司首席科学家 Hadley Wickham 考虑到 R 社区更广大人民群众的需求,开发了一个叫 dplyr 的工具,作为统一的数据库接口语言。这些数据库包括了我们常用的 MySQL、SQLite、 PostgreSQL、bigquery、HIVE 等开源数据库,也包括 Oracle 、Microsoft SQL Server 等商业数据库。

不过 Hadley Wickham 并不是平地建起了 dplyr 。这种试着统一不同数据库接口的做法,最早是微软从 ODBC 开始的(可能还要更早),背景是当年的数据库厂商实在是太多了,不但学习起来有点难,不同数据库间的交流(数据共享)也是个大问题,这是ODBC的诞生背景。类似 ODBC,还有 Java 的 JDBC、Perl 的 DBI/DBD、Python 的 DBAPI,以及 R语言的 DBI (R语言的 DBI 可以追溯到 S 语言,所以也被称为 R/S DBI,R 语言的 DBI 也是贝尔试验室的科学家们开发出来的),这些技术意味着可以在 DBI(或 ODBC )之上开发应用,再不用和各种数据库较劲了。所以,DBI(或 ODBC )可以看做是一种替人类干些“苦、累、脏”活的中间件。有关这段漫长的历史可以参考 http://db.rstudio.com/dbi/

Rstudio 公司就 dplyr 给出下面这张图(http://db.rstudio.com/overview),描述了如何在 R 语言环境里建立 dplyr 和开源数据库的联系 ,RMySQL、RPostgreSQL、RSQLite、bigrquery都是依赖于 DBI 的 R 语言的数据库接口程序包。所以,要想建立 dplyr 与开源数据库的联系,得先安装这些必要的数据库接口程序包。像常用的 RMysql 的安装,可以参见张丹老师的 http://blog.fens.me/r-mysql-rmysql/

dplyr是怎么开源数据库接上头的

这张图也说明了,“把大象装冰箱,还是得站在巨人肩膀上实现。”

dplyr 和 SQL 还是很相似的。dplyr提供了一个函数 show_query( ),可以直接将 dplyr 语句转换为 sql 语句。如下面这个例子。

flights %>%
  select(contains("delay")) %>%
  show_query()
#> <SQL>
#> SELECT `dep_delay` AS `dep_delay`, `arr_delay` AS `arr_delay`
#> FROM `nycflights13::flights`

flights %>%
  select(distance, air_time) %>%  
  mutate(speed = distance / (air_time / 60)) %>%
  show_query()
#> <SQL>
#> SELECT `distance`, `air_time`, `distance` / (`air_time` / 60.0) AS `speed`
#> FROM (SELECT `distance` AS `distance`, `air_time` AS `air_time`
#> FROM `nycflights13::flights`)

我本来以为 show_query( ) 这个函数会很有用,但实际上并没有想象的那么大。我把用 dplyr 写的 sql 给其他程序员看,发现他们都能读懂。有些人甚至很快就开始用 dplyr 写 sql 了 (R语言和 dplyr 是面向不懂计算机技术的人开发的,所以,在程序员看来,dplyr 并不很难学)。

另外一个值得注意的事情是, Rstudio 公司目前仅支持微软公司的 ODBC,并不支持更常用的甲骨文公司的 JDBC,虽然 R 社区有支持 JDBC 的 RJDBC 。在 https://www.javatpoint.com/java-jdbc 有这样一段话:

Why Should We Use JDBC
Before JDBC, ODBC API was the database API to connect and execute query with the database. But, ODBC API uses ODBC driver which is written in C language (i.e. platform dependent and unsecured). That is why Java has defined its own API (JDBC API) that uses JDBC drivers (written in Java language).

这段话讲的是,在 JDBC 之前, Java 是基于 ODBC 的 API 进行数据库操作的,但 ODBC 所要求的数据库驱动程序是要用 C 语言来写的(这里面涉及平台依赖,并且是不安全的)。所以呢,Java定义了自己的API,就是 JDBC,相应的数据库驱动程序也得用 Java 来写。

我对“ODBC是不安全的”这句话很感兴趣,到底是甲骨文的宣传手法,还是 ODBC 真不安全,就不好判断了。另外一篇 IBM 公司的文章 Using R with databases,是在 IBM 自家的 DB2 数据库上使用 R 语言,使用的数据库接口程序是 RJDBC。

我戏说一下的猜测:IBM 公司是开发服务器的,甲骨文公司主要用 JAVA 来开发服务器端软件,两家公司走得近一些说得过去。可 Rstudio 公司只支持微软公司的 ODBC,这就有些偏向了。

莫非 Rstudio 公司要被微软公司收购了吗?

相关文章

  • 戏说R语言系列11

    讲一下有关 R 语言的数据库操作。要想成为一名数据分析师、数据科学家、BI 系统开发人员,或者更加高大上的算法工程...

  • 戏说R语言系列8

    Dirk Eddelbuettel的网站上有很多“EXTENDING R”的内容。 翻译过来是“扩张R”。“扩张”...

  • 戏说R语言系列6

    讲一点R语言的高性能计算。 R语言有自己的官网,https://cran.r-project.org/,页面很“简...

  • 戏说R语言系列 5

    统计之都对 Hadley Wickham的访谈里,提出了一个“社会化编程”的说法,类似Github这样的平台,正在...

  • 戏说R语言系列10

    我问过两位以前的同事,如果我想学python,要怎么学?一位说,编程语言相通的地方很多,如果有一些其他语言的基础,...

  • 戏说R语言系列2

    统计之都有一篇对Rstudio公司创始人J.J. Allaire的专访。感兴趣的同学可以抽空看看。 https:/...

  • 戏说R语言系列3

    R是一门很“古老”的语言,可以追溯到20世纪70年代的贝尔实验室。那时候数值计算的主要语言是Fortran,这种语...

  • 戏说R语言系列4

    上一集讲到 R语言是 S语言的一支方言。其实呢, R语言还受另外一款语言的影响,就是Scheme。 Scheme是...

  • 戏说R语言系列1

    我一直想写点有关R语言的事儿,可每到落笔的时候,又觉着没什么可写的。 不过写点东西也不算是坏事,权当吃饱了消耗10...

  • 戏说R语言系列9

    讲一下如何用R语言构建区块链。 区块链是年初以来被炒得最火、也最“莫名其妙”火起来的技术。得益于大佬们的集体发声,...

网友评论

    本文标题:戏说R语言系列11

    本文链接:https://www.haomeiwen.com/subject/tsxouftx.html