はじめに
競馬のデータを統計で遊ぶためには、まず、そのデータを取得する必要があります。
しかし、一つ一つ手打ちをしたり、コピーしてきれいな形に整理したりするのは面倒ですね、、、
そこで、楽天競馬様が公開している地方競馬の各競走馬のデータを、Webスクレイピングする関数を作成しました。
本記事では、その関数の使い方とプログラムのソースコードを紹介したいと思います。
使い方
まず、Rを開き、以下に公開しているソースコードをコピーアンドペーストします。
そして、このソースコードを実行します。
この関数を用いて、地方競馬のデータを取得します。
入力する必要がある情報は、楽天競馬様が公開している、対象の競走馬データのURLのみです。
実行すると、その競走馬の地方競馬でのレースの全てを、以下のような形で自動的に抽出してくれます。
プログラムのソースコード
今回のプログラムは、以下のサイトを参考にして作成しました。
・RでのWeb スクレイピング入門
・第2回 rvestによるWebスクレイピング
そして、作成した関数のソースコードは以下の通りです。
keibatyusyutu<-function(url) { library("rvest") html<-read_html(url) text<-html_nodes(html, "td") table<-html_text(text) dat1_2<-data.frame() dat1_1<-data.frame() X=0 for(i in 1:floor((length(text)-1)/16)) { number<-7+16*X date<-table[number+1] place<-table[number+2] R<-table[number+3] dis<-table[number+5] Baba<-table[number+6] Baba<-substr(Baba, 1, 1) No<-table[number+7] Pop<-table[number+8] Res<-table[number+9] time<-table[number+10] dif<-table[number+11] last600<-table[number+12] BW<-table[number+13] Jo<-table[number+14] Weight<-table[number+15] Trainer<-table[number+16] dat1_2<-data.frame(date,place,R,dis,Baba,No,Pop,Res,time,dif,last600,BW,Jo,Weight,Trainer) dat1_1<-rbind(dat1_1,dat1_2) X<-X+1 } dat<-subset(dat1_1,substr(dat1_1$dis, 1, 1)=="ダ") dat<-subset(dat,substr(dat$place, 1, 1)!="J") dat0minuit<-dat[c(-grep(":", dat$time),-grep("-", dat$time)),] dat1minuit<-dat[c(grep(":", dat$time),grep("-", dat$time)),] dat0minuit$time<-sub("","0:",dat0minuit$time) dat<<-rbind(dat1minuit,dat0minuit) }
<ソースコードの簡単な解説>
前半の四行で、そのURLで指定されたサイトのクラス属性が”td”であるHTMLノードを取得します。
取得したデータはfor関数の中身できれいな形に整形しています。
また、楽天競馬の競走馬のデータの、クラス属性が”td”であるHTMLノードには、レース結果のほかにも様々な情報が混入しております。
いらない情報を取り除くために、subset関数やfor関数の中身が活用されています。
最後の四行は、タイムが0分台のデータの形を1分台以上のデータの形と揃えるために、入力しています。
おわりに
本記事では地方競馬のデータをRを使ったWebスクレイピングによって取得する方法について紹介しました。
このようなプログラムを使うことによって競馬の予測が捗りますね!
現在は一頭ずつですが、今後、まとめてデータを取得することができる関数を作成することも考えております。
作成次第、公開したいと考えています!
私の記事が皆様の力添えになれば幸いです。
コメント