「RってTwitterで遊ぶためのものなのか」とか思われるとあれなので、ちょいまじめネタで行くことにします。「株価データの収集、基本的なデータの解析、株価の予想モデルの作成まで全部Rでできちゃうよ」編です*1。
とりあえず、株価データの収集をしてくる関数から。infoseekのファイナンスのところから取ってきてます。
finance <- function(site){ ruby <- paste(" #!/usr/bin/ruby -Ke # -*- coding: utf-8 -*- require %q[rubygems] require %q[mechanize] require %q[kconv] finance = \"",site,"\" agent = WWW::Mechanize.new agent.max_history = 1 page = agent.get(finance) source = Hpricot(agent.get_file(finance)) day = [] (source/%q[tbody>tr>th]).each{ |item| day.push item.inner_text } price = [] (source/%q[tbody>tr>td.emph]).each{ |item| price.push item.inner_text.gsub(/,/,%q[]) } finance = [day,price].transpose finance.each{|item| puts %[#{item[0].toutf8}\t#{item[1]}] } ",sep="") return(read.table(textConnection(system(paste("echo '",ruby,"'"," | ruby ",sep=""),intern=TRUE),"r"))) }
で、こんな感じで株価データを取ってきます。ちなみに任天堂のデータ。基本統計量とかplotとかもRなのでお手のもの。
> f <- finance('http://money.www.infoseek.co.jp/MnStock/slast.html?qt=7974.t&sy=2008&sm=1&sd=1&ey=2008&em=7&ed=2&k=d') > head(f) V1 V2 1 2008年07月01日 60000 2 2008年06月30日 59400 3 2008年06月27日 60600 4 2008年06月26日 62800 5 2008年06月25日 61300 6 2008年06月24日 60600 > summary(f[,2]) Min. 1st Qu. Median Mean 3rd Qu. Max. 55300 57600 58250 58470 59380 62800 > plot(rev(f[,2]),pch=10,type="l",main="終値の推移",lwd=4,cex=2,lty=1,col=2)
で、Rは統計modelとか楽勝にできちゃうので、時系列modelを作成して、株価の予想modelとかも簡単にできちゃうわけです。95%信頼区間とかも簡単に出せちゃう。今回は時系列の基本的なarimaモデルといわれるものを使用しました。
fit <- arima(rev(f[,2]),order = c(1,1,0)) fit <- predict(fit, n.ahead = 10) SE1 <- fit$pred+2*fit$se SE2 <- fit$pred-2*fit$se ts.plot(as.ts(rev(f[,2])),fit$pred,SE1,SE2,gpars=list(lty=c(1,2,3,3),col=c(1,2,4,4))) legend(locator(1),c("実測値","予測値","2*SE"),lty=c(1,2,3),col=c(1,2,4))
まあ、簡単なmodelなので当てにはなりませんが、色々遊びがいがあるんじゃないかと思います。
例えば
毎日株価の収集のbotを走らせているyukinobuさんだったら、plot、分析などがexcelとかをかまさずにできるとしたら、それは結構うれしいんじゃないかなと思います。関数とかも圧倒的にRのほうが多いし、信頼できるし。
という感じで、Rの活用の仕方はたくさんあるよ、と例でした!!
The R Tips 第3版: データ解析環境Rの基本技・グラフィックス活用集
- 作者: 舟尾暢男
- 出版社/メーカー: オーム社
- 発売日: 2016/10/13
- メディア: 単行本
- この商品を含むブログ (1件) を見る
*1:一部Ruby混在