Google Chart Toolsで遊んでみた。

表題の通りです。

google様が公開している、グラフ作成APIであるGoogle Chart Toolsで折れ線グラフを書いてみました。

とりあえず、何かグラフ化に適したデータはないかと探しつつ・・・

というか、ごめんなさい。グラフ化したいデータがあったのでグラフ化する方法を探していたら、これに行き当たったのです(※1)。

というわけで、やってみた結果がこれ↓

NBA Eastern Conference 2009-2010 until 2010/03/09
NBA Eastern Conference 2009-2010

今(2009-2010)シーズンの、アメリカプロバスケットリーグNBA東地区の、順位変動グラフです。

知っている方は知っていると思いますが、元ネタは、”元祖 勢いとゲーム差がわかるプロ野球順位変動グラフ“さん。このコンセプトがとても好きで、以前よりよく閲覧させていただいていたのですが、これをNBAでやってみたらどうだろうと思って、やってみたのが今回のグラフです。

最初なので色々試行錯誤はあったのですが(細切れ時間を使って作ったとはいえ、ここまでに3日掛かりました)、その中で最も苦労したのはURIの文字列長制限。このURI、2Kまでという制限があるのですが(2Kというのが2000なのか2048なのかは未確認)、NBAの東西各地区には15チームあり、それぞれ82ゲームを行うため、データ数としては15×82で1230個となります。2Kの制限を考慮すると1データにつき1バイト使ったとしても1230バイト。それにLabelやLegend分として数百バイトは使用しますから、このあたりをどうにかする必要があります。

ちなみにデータフォーマットは下記の4通り。
参考:http://code.google.com/intl/ja/apis/chart/docs/data_formats.html

Basic Text Format

単純にデータを”chd=t:val,val,val|val,val,val…”としていする形式。単純だけど、データは0から100までの間でしか指定できない。

Text Format with Custom Scaling

Basic Text Formatの形式に、各データ範囲を”chds=,,…,,“として指定する形式。汎用性は高いが、文字列長が最も長くなってしまう。

Simple Encoding Format

A-Z,a-z,0-9を0から61に変換。62種類しか指定できないが、1データ=1バイトと文字列長としては最も短くできる。

Extended Encoding Format

A-Z,a-z,0-9,.-の64種を2文字重ねることで0から4095まで指定できる。1データ=2バイト。精度は高くなるがデータの解読性が低い。
 
 
 
このうち、まず最初に”Simple Encoding Format”を検討しましたが、ちょっと精度に難があり、次いで”Basic…”や”Text Format with Custom Scaling”を使ってみましたが、どうしても文字列長が長くなってしまい、最終的に”Extended Encoding Format”を使いました。とはいえ、1データ2バイトとなると2K制限を超えてしまうため、ここはデータ量でコントロール、82ゲーム全てではなく、2ゲーム毎、つまり半分の41ゲーム分をグラフ化することで対応としました。

結果として出来たグラフを見る限り、閲覧上の問題はないため、とりあえずはこんなところかなと思います。今後、もうちょっといじってみることにします。

 
 
ちなみに西地区分はこちら。
NBA Eastern Conference 2009-2010 until 2010/03/09
NBA Western Conference 2009-2010 
 
という感じで趣味に走ってみました。また次回。
 
 
 
 


※1 余談ですが、「やりたいことがあって、それを実現する技術や方法を模索する人」と「とある技術があって、それを活かせる分野を探す人」の間には、大きな差があるように感じます。私個人は完全に前者のタイプですが、優秀といわれるプログラマには後者のタイプが多いような。どちらが優れているかという議論に興味はありませんが、結果として出来上がるモノは同じであったとしても、そこに至るアプローチの違いはとても興味深いです。

1 Comment

One Comment

コメントを残す

(will not be published)

XHTML: 以下のタグが使用できます:
<a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>