knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" )
このパッケージはYahoo!ファイナンスの株価データをウェブスクレイピングするときに便利な関数を提供する。 このパッケージの特徴は以下の通り。
ウェブスクレイピングの際に、tidyverse/rvestパッケージを使用する。
このパッケージはCRANに登録していないので、 GitHubからインストールする。
# install.packages("devtools") devtools::install_github("KatoPachi/YahooFinance")
このパッケージで主に使用する関数は三つ
scrape_onefirm
: 1社分の株価データを取得する関数scrape_more2firm
: 1社以上の株価データを同時に取得する関数code_detect
: 企業名から銘柄コードを調べる関数ソニーと任天堂の2014年上半期の月次単位の株価データを取得する例を示す。
取得したい株価データの期間はstart_date
・end_date
引数を用いて"yyyymmdd"の形で指定する。
start_date
: 取得期間の開始日end_date
: 取得期間の最終日ここでは、start_date = 20140101
とend_date = 20140630
となる。
Yahoo!ファイナンスは日単位・週単位・月単位のデータを提供している。
データの種類はdatatype
引数で指定できる。
datatype = "d"
: 日次株価データを取得できるdatatype = "w"
: 週単位の株価データを取得できるdatatype = "m"
: 月次株価データを取得できるここでは、datatype = "m"
となる。
ソニーの銘柄コードは6758、任天堂の銘柄コードは7974である。
ここでは、二社の株価データを取得することを試みるので、scrape_more2firm
を使う。
library(YahooFinance) scrape_more2firm( c(6758, 7974), start_date = 20140101, end_date = 20140630, datatype = "m" )
取得されたデータの詳細は以下の通り
date
: 日付open_price
: 始値high_price
: 高値low_price
: 安値close_price
: 終値volume
: 出来高split_up_adjust_close_price
: 調整後終値。詳細はYahoo!ファイナンスのヘルプセンターで確認すること。brand
: 銘柄コードappend = FALSE
を引数に加えると、銘柄別にデータを取得することもできる。
sepdt <- scrape_more2firm( c(6758, 7974), start_date = 20140101, end_date = 20140630, datatype = "m", append = FALSE )
各銘柄のデータはsepdt$b(銘柄コード)
で取り出せる。
たとえば、ソニーの銘柄コードは6758なので、sepdt$b6758
でソニーの株価データを取り出せる
sepdt$b6758
scrape_more2firm
はscrape_onefirm
をfor loop構文で繰り返し処理をしているだけなので、
1社だけの株価データもスクレピングできる。
scrape_more2firm( 6758, start_date = 20140101, end_date = 20140630, datatype = "m" )
これは、scrape_onefirm
と同じ結果となる。
scrape_onefirm( 6758, start_date = 20140101, end_date = 20140630, datatype = "m" )
scrape_more2firm
は企業名を指定するname
引数を備えている。
この引数を指定してスクレイピングする場合、scrape_more2firm
は以下のようなプロセスを実行する。
code_detect
関数を使って、銘柄コードを検索するscrape_onefirm
関数の繰り返し処理code_detect
関数はname
引数で指定した企業名と部分的に一致する企業を
JPXの公開データから探し、
部分マッチした企業の銘柄コードを返す関数である。
find <- code_detect(c("ソニー", "任天堂")) find$code
企業名から正しく銘柄コードを発見出来ていることがわかる。
また、find$info
でマッチしたデータを確認できる。
さらに、JPXの公開データはdata(BrandCode)
で確認できる。
name
引数を用いたスクレイピングは以下のコードで実行できる。
scrape_more2firm( name = c("ソニー", "任天堂"), start_date = 20140101, end_date = 20140630, datatype = "m" )
name
引数を指定したとき、銘柄コードを指定する必要はない。
仮に企業名と銘柄コードを同時に指定したならば、企業名が優先されることに注意されたい。
scrape_more2firm( c(6785, 7947), name = c("ソニー", "任天堂"), start_date = 20140101, end_date = 20140630, datatype = "m" )
企業名が1つである場合、scrape_more2firm
とscrape_onefirm
の両方を使用できる。
scrape_more2firm( name = "ソニー", start_date = 20140101, end_date = 20140630, datatype = "m" )
日本空港ビルデングの2019年~2021年の日次株価データを取得し、始値の時系列データをプロットしてみる。
dt <- scrape_more2firm( name = "日本空港ビルデング", start_date = 20190101, end_date = 20211231, datatype = "d" ) library(ggplot2) ggplot(dt, aes(x = date, y = open_price)) + geom_line() + scale_x_date(date_labels = "%Y-%b") + theme_classic()
注意したいことは、スクレイピングは時間がかかるという点である。 なぜなら、スクレイピングする必要があるページ数が増えるほど、 for loopによる繰り返し処理の時間がかかるからである。 例として、さきほどの例のスクレイピングの実行時間を記しておく。 経過という名前の時間がコマンドの起動から終了までに要した時間であり、 単位は秒。
system.time( dt <- scrape_more2firm( name = "日本空港ビルデング", start_date = 20190101, end_date = 20211231, datatype = "d" ) )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.