さて、大相撲の勝敗データさえあれば、それを解析する方法があることは分かっていただけたと思いますが、ここで問題が生じます。
大相撲のデータは、世界銀行のRESTインターフェイスのような、洗練したデータリポジトリから簡単に入手できるわけではない、ということです。そこで今回は、前述したように、Yahoo! Japanスポーツの大相撲の取り組み結果をスクレイピングして、データを入手することにします。そのために用いるのが、Google Refine です。
Google Refineは汚いデータをクリーニング/クレンジングするツールとしてGoogleのFreebaseチームがリリースしたオープンソース・ソフトウェアです。モットーが「Google Refine, a power tool for working with messy data」とあるように、汚い混乱したデータをキレイにするツールなのです。
Google Refineの特徴を列挙すると以下のようになります。
Google Refineはテータクリーニングに使うために開発されたツールですが、この柔軟で強力なツールをHTMLのWebスクレイピングには使わない手はありません。ここでは、まずはイントロとしてGoogle Refineの手習いをしましょう。
Google Refineのダウンロードは以下のURLから行います。
http://code.google.com/p/google-refine/wiki/Downloads
ぞれぞれのOSに対応したアーカイブをダウンロードし、アーカイブされたファイルを解凍して適切なフォルダに配置し、Refine.exeをダブルクリック(MacならGoogle Refine.appをダブルクリック、Linuxは“./refine”でコマンドラインから起動)すれば、Google Refineのサーバがローカルマシン上で立ち上がります。後は、http://127.0.0.1:3333/ にアクセスすれば、Google Refineにアクセスできます。
以下では起動できたと仮定して、実際にRefineを使ってYahoo!スポーツの大相撲取り組みデータを「クリーニング」する手順の概略を説明します。といっても、Refineの操作はほとんどGUIですので、ここで詳細に文章で記述をしても分かりづらいと思います。そこで、今回のRefineを使って探索的にYahoo!スポーツの大相撲取り組み表をスクレイピングする模様を動画にしましたので、それをご覧ください。
動画で使用したHTMLファイルは、こちらにあります。
このファイルをRefineに読み込み、新規プロジェクトとして登録したのちに、以下のJSONスクリプトを「Undo/Redoタブ>Apply...」ボタンで出現するテキストエリアにコピーして、実行すれば必要なデータを手に入れることができます。
https://github.com/yutakashino/atmarkIT/raw/master/sumo/codes/refineSumoJson.txt
基本的にこのJSONスクリプトがあれば、Yahoo!スポーツの取り組み表HTMLから必要なデータを抽出できます。しかし、HTMLの数は、1999年1月から2010年9月まで1年あたり7場所ありますから計71個になります。これを手でやるのはさすがに大変なので、これを自動化できないかと考えるのが自然です。
幸い、Google RefineはHTTPを受け取るWebサーバですので、HTTPを話すスクリプトを置きさえすれば、Refineを外から操作することは容易なのです。それをこの後に解説したいのですが、今回は紙幅の関係でここで一旦中断して、HTMLクリーニングの自動化は次回に持ち越しすることにします。
次回もこの「大相撲のアノーマリー」をテーマにしたいと思います。次回は、今回行ったGoogle Refineによるクリーニング作業を自動化し、外のスクリプトから操作させ、目的のデータを入手することを中心に行います。それでは、またお会いましょう。
大相撲のアノーマリー (1)
Page1
今回の前口上
汚いデータをどうする?
Yahoo! Japanスポーツの大相撲の取り組み結果
7勝8敗が少なく8勝7敗多い、大相撲の不自然
Page2
Google Refine
次回について
Copyright © ITmedia, Inc. All Rights Reserved.