使用RMySQL包连接R与MySQL
汤汤 2017-01-22 20:54:28 业界
就数据分析工作而言,把数据保存在数据库中有如下的优点:数据集中存放,访问便利;可以保存和处理相对比较大的数据集;多种数据处理软件都能从数据库中直接获取数据,相对就数据分析工作而言,把数据保存在数据库中有如下的优点:
数据集中存放,访问便利;
可以保存和处理相对比较大的数据集;
多种数据处理软件都能从数据库中直接获取数据,相对于离线的数据文件,比如Excel文件,数据库更加的高效;
本文向大家介绍连接R与MySQL的方法,这样就能够直接从数据库中读取数据,并在R中进行分析建模,或者进行数据的可视化分析。
在Windows上,就我所知,连接R与MySQL有两种方法:
方法一:通过ODBC驱动程序当做中介进行连接,具体的方法在《MySQL连接到 R Excel 或SPSS》中已详细介绍过,这种方法连接效率相对比较低,今天新闻,但是这种方式可以连接多种支持ODBC驱动程序的数据分析软件,比如SPSS、Excel以及R.
方法二:通过RMySQL包直接进行连接,这方法的连接效率比方法一更高;使用RMySQL包实现连接的R代码如下:
值得注意的是,MySQL与Windows系统默认编码方式不一致会导致中文乱码的情况发生,这是因为R在读取数据时,是以系统的编码方式读取数据的。在连接出现乱码时,需要分别查看一下系统的编码方式与MySQL的编码方式,并确认一下它们是否一致。下面介绍查看Windows系统编码方式与MySQL编码方式的命令。
Windows下,在命令行下输入 chcp,新闻资讯,查看电脑的字符编码方式,如果返回为936,表明系统是以 GBK 编码的。
查看MySQL数据的编码方式,在MySQL命令行中输入 s ,查看MySQL的编码方式,如果不匹配,则需要在连接时修改MySQL的编码方式。使用类似 set names GBK 的语句。(编码方式改变只对这次连接有效,并不会永久改变MySQL数据的编码方式)。
笔者本人的计算机是以GBK 编码的,而MySQL设置的是 utf8 编码,因此在连接时,改变字符集与不改变字符集,中文会出现乱码与不乱码的对比。下面的内容演示了这两种情况。
不改变MySQL数据库的编码方式的情况下#载入RMySQL包,如果电脑中没有该包,需要使用 install.packages()函数安装
library(RMySQL)## Loading required package: DBI #建立与MySQL数据库的连接
conn<-dbConnect(MySQL(),
dbname="data",
username="userID",
password="password")
#查询全表
user_info=dbGetQuery(conn, "select * from user_info")
#断开连接
dbDisconnect(conn)## [1] TRUE #查看数据的前6行
head(user_info)## 骞撮緞 鍑虹敓骞翠唬 鎬у埆## 1 17 90鍚x8e 濂xb3## 2 41 70鍚x8e 鐢xb7## 3 33 80鍚x8e 鐢xb7## 4 84 30鍚x8e 鐢xb7## 5 52 60鍚x8e 鐢xb7## 6 46 70鍚x8e 鐢xb7
改变MySQL数据库的编码方式与系统一致时library(RMySQL)
conn<-dbConnect(MySQL(),
dbname="data",
username="userID",
password="password")
#原来的MySQL是以‘utf8’字符集编码的,而Windows系统是以‘GBK’编码的,需要修改MySQL的字符编码方式,以避免乱码
dbSendQuery(conn,'SET NAMES GBK')## <MySQLResult:311397264,1,0> user_info=dbGetQuery(conn, "select * from user_info")
dbDisconnect(conn)## [1] TRUE head(user_info)## 年龄 出生年代 性别## 1 17 90后 女## 2 41 70后 男## 3 33 80后 男## 4 84 30后 男## 5 52 60后 男## 6 46 70后 男