mysql -u root -p出現 mysql > 後,開始建立新用者資料並設定密碼:
mysql > mysql > GRANT ALL PRIVILEGES ON *.* TO 'stockuser'@'%' IDENTIFIED BY 'password'; mysql > FLUSH PRIVILEGES; mysql > quit;若MySQL伺服器要開放遠端連結,記得防火牆允入3306埠,另外 MySQL的設定檔也要檢查:
vi /etc/mysql/my.cnf記得 bind-address = 127.0.0.1 這行要註解
#bind-address = 127.0.0.1也記得 MySQL 要重新啟動
service mysql restart資料庫部分沒問題的話,就可以準備來使用R抓取股價資料~R 如果還沒有安裝過 RMySQL package, 也記得先安裝:
install.packages("RMySQL")
確認安裝完成後,就開始吧...
library(RMySQL)
library(DBI)
library(tidyquant)
library(dplyr)
cn <- dbConnect(
drv = RMySQL::MySQL(),
username='stockuser',
password='password',
host='127.0.0.1',
port = 3306,
dbname = "stockdb"
)
# 利用 tidyquant 取得 Yahoo 上的台灣五十股價資料, 寫入 MySQL stockdb > tw{股票代碼}
tw50 <- c("1101","1102","1216") #只有示範三檔股票
for (i in tw50) {
stockid <- paste(i,"TW",sep=".")
tblname <- paste("tw",i,sep="")
print(stockid)
sdata <- tq_get(stockid)
dbWriteTable(cn, name=tblname, value=sdata, overwrite=TRUE)
Sys.sleep(10) # 每次 Loop 先休息 10 秒
}
# 利用 tidyquant 取得 Yahoo 上的IBM股價資料, 寫入 MySQL stockdb > ibm
ibm <- tq_get("IBM")
dbWriteTable(cn, name="ibm", value=ibm, overwrite=TRUE)
dbDisconnect(cn) #記得斷開資料庫連線
資料都抓取完成後,MySQL資料庫裡面 stockdb > 就會多個股 table :
mysql -u stockuser -p 輸入密碼,登入後... mysql> use stockdb; Database changed mysql> show tables; +-------------------+ | Tables_in_stockdb | +-------------------+ | ibm | | tw1101 | | tw1102 | | tw1216 | +-------------------+ 4 rows in set (0.00 sec)以後就可以直接從 MySQL 中讀取股價資料來運用:
# 從 MySQL 取出 IBM 股價資料 cn <- src_mysql( user='stockuser', password='password', host='127.0.0.1', port = 3306, dbname = "stockdb" ) ibm_table <- tbl(cn, "ibm") ibm_table dbDisconnect(cn)延伸閱讀資料:
Amazon RDS + R (其實我是租不起, 所以自建 MySQL...)
R學習筆記 - 資料工程篇(四) Database
沒有留言:
張貼留言