MySQL上先建立一個新使用者 stockuser :
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
沒有留言:
張貼留言