tidyquant
というパッケージを使えばtidyverse
的なRの世界で株価の分析ができるそうです。
Rとtidyverseに使い慣れた身としてこれは便利すぎるので少し調査してみました。
インストール
普通のパッケージと同じです。
install.packages("tidyquant")
依存パッケージが大量に導入されます。
株価の取得
メイン関数の一つであるtq_get
を使えばアメリカ株ならばティッカーシンボルから株価を取得できます。
デフォルトのデータソースはyahoo financeです。
今回はyahoo financeから大阪証券取引所の日経平均先物のデータを取得してみます。
library(tidyquant) nikkei <- tq_get("^N225") nikkei ## A tibble: 2,545 x 7 # date open high low close volume adjusted # <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> # 1 2009-01-05 8991. 9127. 8987. 9043. 84900 9043. # 2 2009-01-06 9130. 9171. 9030. 9081. 154800 9081. # 3 2009-01-07 9134. 9325. 9106. 9239. 205600 9239. # 4 2009-01-08 9143. 9149. 8876. 8876. 149900 8876. # 5 2009-01-09 8933. 8957. 8773. 8837. 137000 8837. # 6 2009-01-13 8733. 8733. 8406. 8414. 135600 8414. # 7 2009-01-14 8426. 8516. 8359. 8438. 132700 8438. # 8 2009-01-15 8309. 8309. 7998. 8023. 158300 8023. # 9 2009-01-16 8125. 8284. 8067. 8230. 140600 8230. #10 2009-01-19 8318. 8352. 8222. 8257. 102600 8257. ## ... with 2,535 more rows
すばらしい。tibble
で取得されています。
dataはすでにtidyなので普段使い慣れているtidyverse
の関数をそのまま適用することができます。
ちなみにtidyverse
だけでなくlubridate
も既に自動でロードされています。
nikkei %>% filter(year(date) == 2019, !is.na(close)) %>% mutate( month = month(date, label = TRUE), win = close > open ) %>% ggplot(aes(month)) + geom_bar(aes(fill = win), position = "dodge") + labs( title = "In April 2019, Nikkei won mostly", x = "", y = "the number of days", fill = "gain > 0" )

tidyverse
なら使い慣れてるからちょっとした集計なら息を吐くようにできるぜ!
nikkei %>% filter(year(date) == 2019, !is.na(close)) %>% mutate( month = month(date, label = TRUE), win = close > open, lastwin = lag(win) ) %>% filter(!is.na(lastwin)) %>% ggplot(aes(month)) + geom_bar(aes(fill = win), position = "dodge") + facet_wrap(~paste("last gain > 0:", lastwin)) + labs( title = "In March, Nikkei won mostly after won.", subtitle = "In January, Nikkei won mostly after lose.", x = "", y = "the number of days", fill = "gain > 0" )
まとめ
tidyquant
を使えばめちゃくちゃ簡単に株価を取得できることが分かりました。
またさらにtidyな形でデータを取得することができるので、通常のデータ分析技術がかなり転用できる感じです。
tidyquant
には他にも関数がいくつか存在するようなので、少しずつ習得していきます。