用r語言做資料分析時,常常需要從多種資料來源取資料,其中資料庫是非常常見的資料來源。用r操作mysql資料庫,可以說是資料分析師必備的技能了,本文介紹rmysql包,可以在r語言中對資料庫進行增刪改查的操作。
install.packages('rmysql')
用dbconnect
函式建立連線,驅動型別設定為mysql()
,使用者名稱user
、密碼password
、主機host
、埠port
、資料庫dbname
這些引數需要根據實際情況修改,其中埠port
預設值是3306。
# 載入包
library(rmysql)
# 建立連線
con
user="root",
password="***",
host="192.168.1.244",
port=3306,
dbname="test")
還可以通過一些命令,檢視連線的相關資訊。
# 連線概述
summary(con)
## ## user: root
## host: 192.168.1.244
## dbname: test
## connection type: 192.168.1.244 via tcp/ip
## ## results:
# 連線詳情
dbgetinfo(con)
## $host
## [1] "192.168.1.244"
## ## $user
## [1] "root"
## ## $dbname
## [1] "test"
## ## $contype
## [1] "192.168.1.244 via tcp/ip"
## ## $serverversion
## [1] "5.7.23"
## ## $protocolversion
## [1] 10
## ## $threadid
## [1] 465075
## ## $rsid
## list()
# 列出連線下所有表
dblisttables(con)
## [1] "city" "result"
## [3] "t_json" "tb_newchiller"
# 方法1:字元向量
dbcreatetable(con,'table1',fields =c("id"='int',"value"="float"))
# 方法2:資料框
dbcreatetable(con,'table2',fields = mtcars)
注意點:
設定fields
引數時,用命名的字元向量(名字為欄位名,值為字段資料型別)或資料框表示
表只能建立一次,重複建立會報錯。
執行dbsendquery
函式,呼叫sql語句建立表,該函式返回乙個rmysqlresult類。該方法可以重複執行,不會報錯。
# 方法3:sql語句
dbsendquery(con,'create table if not exists table3(id int,value float)')
##
# 先設定編碼(windows)
dbsendquery(con,'set names gbk')
##
# 讀取完整表
dbreadtable(con,'city')
## id name city_code
## 1 1 北京 000001
## 2 4 南京 000002
## 3 7 廣州 000003
## 4 10 上海 000004
## 5 11 深圳 000005
## 6 13 蘇州 000006
注意點:
返回的是整個表的資料
為解決中文顯示問題,若執行r的作業系統為window,需要設定編碼為gbk
,為linux則需要設定為utf8
返回的資料格式為data.frame
通過執行dbgetquery
或dbsendquery
函式,呼叫sql語句讀取表。
dbgetquery
函式執行sql語句,返回data.frame。可以在sql語句中編寫篩選語句。
# 讀取完整表
dbgetquery(con,'select * from city')
## id name city_code
## 1 1 北京 000001
## 2 4 南京 000002
## 3 7 廣州 000003
## 4 10 上海 000004
## 5 11 深圳 000005
## 6 13 蘇州 000006
# 讀取篩選的表
dbgetquery(con,'select id,name from city where id > 10')
## id name
## 1 11 深圳
## 2 13 蘇州
dbsendquery
函式執行sql語句,返回mysqlresult類。對該類使用dbfetch
函式,可以篩選行,返回data.frame。用完後需要用dbclearresult
函式清理結果。
# 篩選前3行資料
res
dbfetch(res,3)
## id name city_code
## 1 1 北京 000001
## 2 4 南京 000002
## 3 7 廣州 000003
dbclearresult(res)
## [1] true
# 寫入表
## [1] true
注意點:
第一次寫入時,若資料庫中無該表,會根據表名自動建立
重複寫入時,需要設定寫入行為:
引數設定
解釋追加寫入,新資料在原資料行末新增
overwrite=true
覆蓋寫入,新資料覆蓋原資料
row.names=false
不寫入資料框的行名
執行dbsendstatment
函式,呼叫sql語句插入資料。
dbsendstatement(con,'insert into table1 values(1,12)')
##
注意點:
重複執行會重複插入資料
用dbremovetable
函式刪除表。
# 刪除表
dbremovetable(con,'table1')
## [1] true
dbremovetable(con,'table2')
## [1] true
dbremovetable(con,'table3')
## [1] true
dbremovetable(con,'iris')
## [1] true
完成所有的操作後,需要關閉連線。
# 關閉連線
R語言 深圳 面授 R語言 操作MySQL資料庫
用r語言做資料分析時,常常需要從多種資料來源取資料,其中資料庫是非常常見的資料來源。用r操作mysql資料庫,可以說是資料分析師必備的技能了,本文介紹rmysql包,可以在r語言中對資料庫進行增刪改查的操作。install.packages rmysql 用dbconnect函式建立連線,驅動型別設...
R語言 連線MySQL資料庫方法
目錄 r語言連線資料庫常用的方法有2種 連線mysql,使用rmysql包,使用前rmysql包要先安裝。library rmysql 連線方式有2種 1 使用dbconnect conn dbconnect mysql dbname rmysql username rmysql password ...
資料探勘R語言鏈結資料庫MYSQL
r語言連線資料庫常用的方法有2種 1 使用r資料庫介面 連線mysql,使用rmysql包,使用前rmysql包要先安裝。library rmysql 連線方式有2種 1 使用dbconnect conn dbconnect mysql dbname rmysql username rmysql p...