この記事は
の21日目の記事です。
とりあえず、以下の内容で使うパッケージとして、以下のようにパッケージをぶっこんでおいてください(読み込みも)。以下ではカジュアルにその辺の機能は使用していきます。それぞれについてはググればそれぞれのパッケージについての適切な解説記事が見つかるでしょう。また、その他、記事中で得に強調して使うパッケージについては都度説明します。
> install.packages("devtools")
> install.packages("tidyr")
> install.packages("dplyr")
> install.packages("openair")
> install.packages("reshape2")
> install.packages("zoo")
> install.packages("xts")
RFinanceJとは、私だけが細々と開発している、日本の金融/経済データを取得するためのパッケージです。データソースがしょぼすぎる上に機能があまりありません、はい。インストール方法は下記の通りです。インストール&ロードする際に、たくさん警告が出るんですが、それはそのうち消す、うん。あと、この記事書いてる途中で気がついたんだけど、このパッケージで取得したデータって、日付の降順に並ぶようになってますな…私は日付の昇順派なので、そこもそのうち直します。
> #devtools入れてないなら以下(↓)も実行
> #install.packages("devtools")
> library(devtools)
> #RFinanceJのインストール
> install_github("teramonagi/RFinanceJ")
> library(RFinanceJ)
このRFinanceJパッケージのコード、及び簡単な説明資料は以下をご参照あれ。
取れるデータをガシガシ取得して、2014年の日本の金融マーケットを振り返りたいと思います。同時に可視化もやっていくので、ggvisパッケージもインストール&ロードします。ggvisは開発途中なのでAPIの変更くらって以下のコードが動かなくなる可能性大ですが、気にしない気にしない。Webとの相性はggplot2を超えている(はず)なので、気にしないー。ついでにjavascriptベースの可視化ライブラリであるrChartsも入れておきます。
> #ggvis & rChartsのインストール
> install.packages(c("ggvis", "rcharts"))
> install_github('ramnathv/rCharts')
> library(ggvis)
> library(rCharts)
今年の頭/2014年初からの日経平均を取得するには以下のように書きます。同時にggvisで描画もしてみましょう。 9月半ば以降の怒涛の上げが凄いですな、日銀黒田バズーカ恐るべし。 以下のコードで、’998407.O’となっているID的な部分は、オリジナルのデータに相当する
というサイトのcode=以下の引数を引っ張ってきます。以下で示す、他のデータについても同様です。
> nikkei225 <- rfj('998407.O', start_date="2014-1-1")
> nikkei225 %>% ggvis(~Date, ~Close) %>% layer_paths(stroke:="red", strokeWidth:=3)
ついでにopenairパッケージでカレンダープロットにしてみましょう。インストールは以下。
> install.packages("openair")
> library(openair)
これを使うには以下のように…書くっ!日付の列の名前がdate固定らしく以下のsetNames関数のように列名を修正している点に注意。またcalendarPlotがdata.frameじゃないと怒るのでそこの変換も忘れずに。
> nikkei225 %>%
+ setNames(c("date", names(nikkei225)[-1])) %>%
+ data.frame %>%
+ calendarPlot(pollutant = "Close", year = "2014", cols="jet")
次にドル円・ユーロ円の推移も見ておきましょう。コードは適当にYahoo Financeのページから適当に調べる感じで。また、実はRFinanceJパッケージでは複数銘柄同時取得もサポートしているので、以下のように書くことができます。可視化は今度はrChartsで。なかなかトリッキーな書き方をしないと横軸の日付がうまく出ない。その辺は
を見てがんばった。がんばったので、これはこれでデータ操作も含めて改めてまとめたい。
> fx <- rfj(c("USDJPY=X", "EURJPY=X"), start_date="2014-1-1")
> #データ操作も結構アレ
> #リストに格納された各データフレーム(1通貨に対応)の終値と日付だけを抽出して、1つのデータフレームとする
> fxd <- names(fx) %>%
+ lapply(function(name){
+ fx[[name]] %>%
+ select(Date, Close) %>%
+ cbind(name, .)
+ }) %>%
+ rbind_all
これをHighChartsで可視化すると以下のようになります。マウスオーバーがあるのは楽しい。
> #時間軸を横にしての描画。結構めんどい。
> fxd2 <- fxd %>% mutate(Date=as.numeric(as.POSIXct(Date))*1000)
> h1 <- fxd2 %>% hPlot(Close~Date, data=., type="line", group="name", radius=6)
> h1$xAxis(type='datetime', labels=list(format='{value:%Y-%m-%d}'))
> h1$show('iframesrc', cdn=TRUE)
更にこれをついでにmorris.jsでも可視化してみる。こっちは日付の扱いが楽。というか気にしなくていいので最高だ。そしてこれも、マウスオーバーがあるのは楽しい。
> m1 <- fxd2 %>% spread(name, Close) %>%
+ mPlot(x="Date", y=c("EURJPY=X", "USDJPY=X"), data=., type="Line")
> m1$show('iframesrc', cdn=TRUE)
更に、最近発見したhtmlwidgetsなるRStudio発のライブラリを構成する1つのライブラリであるdygraphsも使ってみる。美しぃ。こいつはグラフ上で左クリックして適当に範囲を選択するとその部分だけにフォーカスしてくれます。解除はダブルクリック。下に出てるバーでもOK。
> #パッケージのインストール(htmlwidgetsも入る)
> devtools::install_github("rstudio/dygraphs")
> library(dygraphs)
> #dygraphには時系列型のオブジェクト(xts, tsなど)で突っ込むので、そのための変形
> fxd %>% spread(name, Close) %>%
+ as.data.frame %>%
+ read.zoo %>%
+ as.xts %>%
+ dygraph(main="USDJPY and EURJPY charts") %>%
+ dyRangeSelector(dateWindow = c("2014-10-01", "2014-12-01"))
そもそも簡単に手に入りそうな原油のデータソースがなくて辛いです。ただタイトルに「RFinanceJで振り返る」と銘打っちゃってるんで、なんとかします。幸いにして日本には“原油価格に連動するよう商品設計”された、上場ものの金融商品(ETFっていう奴。みんなも買えるよ)がいくつかあります。なんで油に投資したい大きなお友達はこれらを買えば良いわけです。
このページを参考にすると、手数料的に考えて買うなら野村の
かなぁと考えて、この上場投資信託の価格を引っ張ってきて、ニュースなんかでは“ニューヨーク(NY)原油”と呼ばれているWTI先物の油の値段とほぼ同じ動きだろうと期待するわけです。細かい話、この商品は“NOMURA原油インデックス”という謂わばNOMURAが作った油の日経平均みたいなもんにその価値が連動するように作られていているんですが、
のサイトをこまかーくみると、そのNOMURA原油インデックスってのは、数ある原油先物の中でも、いまんとこWTI原油先物でのみ構成されているようなので、これでWTI原油先物の動きっぽく見えるだろうと。
また、こいつを使うメリットってのはちゃんとあって、通常、ニュースなんかで報道される油の価格って日本円じゃなくて米ドル建てなんだけど、ここで示した(上場)投信のデータはちゃんと円建てになっているので、「ぼくらが仮に原油に投資したとしたらどのくらい儲かるのか?」という指標として使えるという意味でメリットがある。逆にニュースなんかで報道されている油の価格は米ドル円レートの影響も含まれちゃってるんで、それを逆算して除去して評価しないと、自分が(円で)投資した場合のチャートとは一致しないというわけですな。
このグラフをみると…シェールガスを潰したいのか、年初から見て三割くらい下落してますね。油をよく使うお仕事、例えばトラックの運ちゃんや漁師さんなんかには、トラック・船のガス代に対してプラスの影響が期待できるわけですな。あと、我々も石油関連製品の値下がりから(きっと)メリットを受けられるはずです。
> oil <- rfj('1699.T', start_date="2014-1-1")
> oil %>% ggvis(~Date, ~Close) %>% layer_paths(stroke:="blue", strokeWidth:=3)
金も油と同じ状況(米ドル建てで表示、データ取りにくい)なんで説明は省略。どのデータを取得するのかは、よくよく探すと原油も含めて東京証券取引所のページで何が上場しているのか一発でわかるようになってたので、ここがよさげです。
金価格として使うデータの元はこれにしました、他意はありません。
これもサクッとデータを取得してみると…1割弱値上がりした感じか。
> gold <- rfj('1540.T', start_date="2014-1-1")
> gold %>% ggvis(~Date, ~Close) %>% layer_paths(stroke:="green", strokeWidth:=3)
上で取得した
のうち、今年一番の好成績だったものを出してみます。つまりどれにお金を突っ込んでおくのが一番良かったのかというのを振り返ろうということです。Rのパッケージ使ってもいいんだろうけど、自分で書いてみた。コードはコメント付なので、空気とコードを読んでくれ。2014年初での価格をすべて“100”として揃えて描画させています。これで異なる価格レベルを持つ金融商品でも比較できるようになるわけです。
> #全データをまとめる
> data <- list(nikkei225, fx[[1]], fx[[2]], oil, gold)
> #加工
> #全データの終値・日付だけ取り出す→全リストの要素を1つのDFへと結合→名前の変更
> data <- data %>%
+ lapply(function(x)data.frame(Date=x$Date, x$Close)) %>%
+ Reduce(function(x, y) merge(x, y, by="Date"), .) %>%
+ setNames(c("Date", "Nikkei225", "USDJPY", "EURJPY", "Oil", "Gold"))
> #一番初めの値で各列を割る(規格化)→データフレームとする。所謂melt処理→描画
> data.frame(Date=data[,1], sapply(names(data[,-1]),function(x)100*data[,x]/data[1, x])) %>%
+ gather(key=variable, value=value, -Date) %>%
+ ggvis(~Date, ~value, stroke = ~variable) %>%
+ layer_lines(strokeWidth:=2)
というわけで、今年一番の好成績だったのはUSDJPYということですな(10%くらいの値上がり)。ドルを買っておけば円安のおかげで儲かったとそういうことです。。黒田総裁さまさまだったというわけですね。もちろんこの分析において、債券や外国株式なんかの商品を追加しても面白いんじゃないでしょうか。
パッケージを使って金融マーケットのデータを取得しました。その結果、9月以降の株高・円安傾向は明らかに見てとれました。みなさんの財布も相当温かくなったことかと思います、ごちそうさまです。…と思ったら原油安の影響を受けて、12月半ばあたりにロシアのルーブル、及び米の利上げ観測の余波を食らって新興国の株価もガッツリ下がってますな、外貨建資産を持っている方(俺含む)、ご愁傷様です。
rChartsでの描画やデータいじりまわりで苦労したところは別途まとめる予定です(hPlot(Highchart周り)。 今後は時系列の可視化には、美しさと簡単さからdygraphsかmorris.js(mPlot in rCharts)を使っていく方向にします。 あと、誰か知っていたら日本の金融/経済系のデータが転がってるサイトを教えて下さい。