tidyquantを使った分析メモ データの取得と可視化
R-bloggersでも度々登場して気になっていたtidyquant
を使った分析メモになります。
基本的な使い方は、Vignettesが充実しています。 また、日本語での資料としてはtidyquantの使い方があります。 また、Exploratoryと組み合わせて分析した記事もあります。 qiita.com
ここでは、日本の株式銘柄をそれなりに大量取得して、データを可視化するところまでやってみます。
銘柄コード一覧を作成
まず、株価データを取得する際に必要な銘柄コード一覧を作成します。 ここでは、TOPIX100構成銘柄をまとめて取得することを考えます。
銘柄の入れ替え等があった場合に適宜更新を行ってくれると思われる
松井証券さんのページを信用できる情報として、
rvest
でスクレイプして作成します。
library(tidyverse) library(tidyquant) library(rvest) url <- "http://www.matsui.co.jp/service/stock/trade/rule_topix100/" html <- read_html(url, encoding = "UTF-8") stock_name_df <- html %>% html_node("table.m-tbl") %>% html_table
htmlの中からm-tblクラスのtable部分をdata.frameとして取得しています。
> stock_name_df 銘柄コード 銘柄名 1 1605 国際石油開発帝石 2 1878 大東建託 3 1925 大和ハウス工業 4 1928 積水ハウス 5 2502 アサヒグループホールディングス 6 2503 キリンホールディングス 7 2802 味の素 8 2914 日本たばこ産業 9 3382 セブン&アイ・ホールディングス 10 3402 東レ 11 3407 旭化成 ...
データ取得で必要なのは銘柄コードのみのため、これだけを切り出せば完了です。
stock_code <- stock_name_df %>% select(`銘柄コード`)
データを確認します。
> stock_code 銘柄コード 1 1605 2 1878 3 1925 4 1928 5 2502 6 2503 7 2802 8 2914 9 3382 10 3402 11 3407 ...
株価データの取得
銘柄コード一覧が作成できたら、それをもとに株価データを取得します。
ここでは、tq_get()
のget = "stock.prices.japan"
を指定して、ヤフーファイナンスからデータを取得することにします。
この際に銘柄コードは、"YJ9984.T"のようにして問い合わせれば、データを取得できます。 (取得に時間がかかるために、3ヶ月分としています。)
TOPIX100 <- stock_code %>% unlist %>% as.character %>% paste0("YJ", ., ".T") %>% tq_get(get = "stock.prices.japan", from = "2017-01-01", to = "2017-03-31")
データを確認します。
> TOPIX100 # A tibble: 6,100 × 8 symbol date open high low close volume <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> 1 YJ1605.T 2017-01-04 1182.5 1201.0 1180.0 1190.0 5927100 2 YJ1605.T 2017-01-05 1186.0 1187.0 1148.5 1168.0 8302500 3 YJ1605.T 2017-01-06 1139.0 1158.5 1131.0 1153.5 7737100 4 YJ1605.T 2017-01-10 1141.5 1153.0 1136.0 1136.0 4807700 5 YJ1605.T 2017-01-11 1140.5 1156.5 1133.5 1151.5 5587400 6 YJ1605.T 2017-01-12 1143.0 1156.5 1134.5 1145.5 4831300 7 YJ1605.T 2017-01-13 1130.5 1152.5 1130.5 1150.5 5257000 8 YJ1605.T 2017-01-16 1144.5 1150.0 1127.0 1131.5 3200200 9 YJ1605.T 2017-01-17 1136.0 1138.0 1117.0 1122.0 3625500 10 YJ1605.T 2017-01-18 1116.0 1146.5 1112.0 1143.0 5458900 # ... with 6,090 more rows, and 1 more variables: adjusted <dbl>
データの可視化
取得したデータを可視化します。全ての銘柄をプロットすると見にくいため、 銘柄コードが7000番台の銘柄のみの株価推移を可視化します。
TOPIX100 %>% filter(grepl("^YJ7", symbol)) %>% ggplot(aes(x = date, y = close, colour = symbol)) + geom_line() + theme_tq() + scale_color_tq() + facet_wrap(~ symbol, ncol = 3, scales = "free_y")