2019年4月28日 星期日

R tidyquant 抓取股價資料寫入 MySQL 資料庫

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


  • 2018年11月14日 星期三

    ubuntu 7-zip 安裝與使用

    安裝指令
    sudo apt-get install p7zip-full
    

    執行壓縮: 7z a 壓縮檔案 目標來源
    7z a demo.7z demo_path_or_file
    

    執行加密壓縮: 7z a 壓縮檔案 目標來源 -p加密密碼
    7z a demo.7zp demo_path_or_file -pMYPASSWD
    

    執行密碼解壓縮: 7z x 壓縮檔案 -p加密密碼
    7z x demo.7zp -pMYPASSWD
    

    2018年10月19日 星期五

    2018年4月1日 星期日

    把 IPython notebook貼上Blogger文章上分享

    In [1]:
    import win32com.client
    import time
    
    xlApp = win32com.client.Dispatch("Excel.Application")
    xlApp.Visible=1
    
    workBook = xlApp.Workbooks.Open(r"C:\Users\kenne\Desktop\datelist.xlsx")
    print(str(workBook.ActiveSheet.Cells(1,1)))
    now = time.time()
    workBook.ActiveSheet.Cells(1, 2).Value = now
    #SaveChanges = 1 : Save flle
    # SaveChanges = 0 : Nothing Saved
    workBook.Close(SaveChanges=1)
    xlApp.Quit()
    
    參考此篇(How to quickly turn an IPython notebook into a blog post)",將 .ipynb 轉成 HTML code
    !ipython nbconvert --to html --template basic filename.ipynb
    
    接下來就把目錄底下的 filename.html 檔案內的HTML原碼貼上 blogger.com ,然後記得在HTML原碼前面加上底下的CSS碼,就可以囉~
    <style type="text/css">
    .highlight{background: #f8f8f8; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .1em;padding:0em .5em;border-radius: 4px;}
    .k{color: #338822; font-weight: bold;}
    .kn{color: #338822; font-weight: bold;}
    .mi{color: #000000;}
    .o{color: #000000;}
    .ow{color: #BA22FF;  font-weight: bold;}
    .nb{color: #338822;}
    .n{color: #000000;}
    .s{color: #cc2222;}
    .se{color: #cc2222; font-weight: bold;}
    .si{color: #C06688; font-weight: bold;}
    .nn{color: #4D00FF; font-weight: bold;}
    </style>
    

    同場加映補充資料:HTML Encoder

    python +pywin32 操作 Excel

    import win32com.client
    import time
    
    xlApp = win32com.client.Dispatch("Excel.Application")
    xlApp.Visible=1
    
    workBook = xlApp.Workbooks.Open(r"C:\Users\tekibrain\Desktop\datelist.xlsx")
    print(str(workBook.ActiveSheet.Cells(1,1)))
    now = time.time()
    workBook.ActiveSheet.Cells(1, 2).Value = now
    #SaveChanges = 1 : Save flle
    # SaveChanges = 0 : Nothing Saved
    workBook.Close(SaveChanges=1)
    xlApp.Quit()
    

    2017年12月12日 星期二

    Windows 10 64bits + Arduino IDE + ESP8266 (ESP-01)


    1. Arduino.cc 下載最新版 Arduino IDE (以1.8.5版為例)
    2. 將 arduino-1.8.5-windows.zip 解壓縮至指定目錄下,安裝好 Arduino IDE
    3. 啟動 Arduino IDE,開啟「檔案 > 偏好設定 (preferences)」 視窗
    4. 偏好設定
    5. 在「額外的開發版管理員網址」(Additional Board Manager) 輸入網址:
    6. 開啟「工具 (Tools) > 開發板 (Board) > 開發板管理員 (Boards Manager)」後,搜尋 "esp" 並且安裝 esp8266 套件
      安裝 esp8266 (可以看見其實有錯誤發生)

      正常的套件下載安裝畫面
    7. 安裝完成後,下次就能選擇 ESP8266 開發板,進行IDE程式開發與上傳功能


    後記:
    • 如果下載時發生了"下載http://downloads.arduino.cc/packages/package_index.jsp時發生錯誤"的訊息,可以在「檔案 > 偏好設定 > 網路」設定 proxy 來解決。
    • 網路上有些說法是設定 JAVA IPv4Stack=true 即可: setx _JAVA_OPTIONS -Djava.net.preferIPv4Stack=true
    • 不過對我來說似乎沒有用,反而是最簡單的 proxy 解決了我的問題。
    • 下載套件時的錯誤訊息

      設定 Java IPv4Stack ,不過對我來說沒用處

      設定 proxy

    2017年9月19日 星期二

    新 iPhone 是否會熱銷?

    Google趨勢比較結果

    市場是不少看衰此次 iPhone 8/iPhone X的消息與傳言,就連股市裏相關的蘋果概念股一時間股價也被看空。那到底銷售情況會如何呢?

    沒有甚麼大數據分析能力,但Google Trends比較一下或許能告訴我們一些答案

    #