データとバスケ

バスケをデータから楽しむブログです。

佐々木クリスさんと作ったNBAデータツールの取得方法と使用方法

こんにちは。以下の記事で紹介されているNBAデータツールの取得方法と使用法を説明したいと思います。

なお、この記事とツールの対象者として

  • 普通にこのツールを使ってみたい方
  • このツールと似たようなツールを作ってみたい方

を想定しています。後者向けの情報は、記事の最下部にあります。

説明の前に余談ですが、引用の記事にもあるように、佐々木クリスさんはNBAの解説の仕事の為、日々かなりのデータを収集されているそうです。シーズン中は日々データが変化していくので常にそれを追いかけなければならず、それだけでかなりの仕事量だそうです。

クリスさんがあれだけ解説で色々と話せるのはそうした下準備かあるからなのだなと、古舘伊知郎さんの実況の下準備の話を思い出したりしながら妙に納得しました。そしてクリスさんの仕事の一部分がこのブログで遊んでいた事の応用で自動化できそうだったので、ツール化してみたという次第です。

ちなみにこのツールというのは、有り体に言ってしまうとNBAデータ取得機能のついたExcelシートです。では以下、ツールの説明です。

注意事項

  • 一部例外を除き、すべてのデータはNBAスタッツのサイトで確認できるものです。特別なものはないです。
  • ツールに表示されるデータは、レギュラーシーズンのみ対象にしています。
  • NBA側の仕様変更などにより、ツールがある日突然に動かなくなる可能性はあります。その場合、できる限りバージョンアップで対応します。実はツール作成中に何度か仕様変更が起きており、今後も変更の対応が必要になる可能性が高いです。
  • 不具合も無理ない程度にバージョンアップで対応予定です。無理ない程度に。発見したら教えて下さい。
  • 各スタッツ項目が何を意味するか説明はここではしません。ちなみにNBAのサイトにも説明がなかったりします…
  • ある程度新しいExcelであればWindows版でもMac版でも動くはずですが、詳細な動作確認は行っておりません。
  • NBAはAmazonのAWSやMicrosoftのAzureなどからのアクセスをブロックしており、それらを含むクラウドサービスで動くマシンではこのツールは使えないはずです。

取得方法

  1. 私のGitHubリポジトリにアクセスする(ちなみに執筆時点でこのツールの最新バージョンはv1.3です。)
  2. 画面にある"Download" をクリックしてダウンロードする。完了したらファイルを開く。
  3. 以下のようなメッセージが表示されると思うので、有効にする。

    f:id:rintaromasuda:20200206223118j:plain f:id:rintaromasuda:20200206224103j:plain

  4. 以上で取得は完了です。

使用方法

  1. "Controller" という名前のシートがあるので開く。

    f:id:rintaromasuda:20200206224336j:plain

  2. 対象チームを選択するための黄色い選択ボックスがあるので、チームを選択する。

    f:id:rintaromasuda:20200206224617j:plain

  3. (これをするとデータ取得が始まります)下の"Update All Seasons" ボタンをクリックする

  4. データ取得に~3分くらいかかると思うので、待つ。
  5. Congratulations! と表示され、"View" というシートが自動的に開いたら完了です。

f:id:rintaromasuda:20200206225604j:plain

Viewには以下のような情報が表示されているはずです。これはアトランタ・ホークスの例ですが、左の赤枠の部分に昨シーズンのデータが、右の青枠の部分に今シーズンのここまでのデータが表示されています。

f:id:rintaromasuda:20200206225651j:plain

各スタッツの項目は実際の値と、そしてその値が全チーム中で何番目なのかという情報が得られます。例えばホークスの昨シーズンのFG%が45.1%だったのはリーグ21位、今シーズンの44.7%はリーグ23位という事を表しています。

ちなみに一番上の"Season"の順位はカンファレンス内の順位なので、この項目だけは15チーム中の順位です。

この画面に収まりきっていませんが、ずらずらとクリスさんが特に注目しているというスタッツ(の一部)が並んでいますので、観戦のお供にしてみて下さい。ちなみに昨シーズンのデータは変化しないので、2回目以降は"Update Current Season Only" ボタンで今シーズンのデータのみ更新の方がお得です。

アクセスエラーについて

このツールの作成上で一番面倒だったのがこれなのですが、NBAの方でアクセス負荷を軽減する仕組みが入っており、ときおりアクセスがブロックされることがあります。確かではないですが、連続で何度もアクセスしているとブロックされやすいように思います。

これはNBA側の事情なので如何ともしがたいところです。ツールではこのブロックが起きると以下のメッセージが出るようになっています。"OK" をクリックすると再度アクセスにチャレンジします。

f:id:rintaromasuda:20200206231325j:plain

しかし何度かアクセスにチャレンジしてもダメだった場合にはエラーとなるようにしていますので、その場合にはお手数ですが時間をおいて再度試してみてください。あまりスマートな感じではありませんが、現時点ではそれが最善の手です。

プログラマ向け情報

以降はこのツールの中身についてです。

このツールは以下のライブラリを土台にして作っています。具体的にはHTTPリクエストとレスポンスの扱いと、JSONのパースに使用しています。

MSXMLなどに依存せず動くので、WindowsでもMacでも気にせず使える素晴らしいライブラリです。この様なものが無料で提供されている事には感謝しかありません。私のツールはこのライブラリを使ってNBAのAPIにアクセス、結果として返ってきたJSONをパースし、必要な情報を抜き出しています。

私がVBAを触ったのはこれが生まれて初めてです。正直クソコードな部分もいくつかあって恥ずかしいのですが、似たようなツールをExcel/VBAで作る際には、多少は参考になるかもしれませんので、そんなときはコードを覗いて見てください。通常のVBA開発と同じように、"開発" タブを表示し"Visual Basic"に進めば中身を見ることが出来ます。

ちなみに新しい言語などを始めるときは必ずいくつか書籍を購入するのですが、今回は以下のものを購入し参考にしました。別にこれがおすすめだという意味ではないのですが、クレジットのため記載しておきます。

Excel VBA 本格入門 ~日常業務の自動化からアプリケーション開発まで~

Excel VBA 本格入門 ~日常業務の自動化からアプリケーション開発まで~

  • 作者:大村 あつし
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/05/16
  • メディア: 大型本

NBAのAPIについては公式の詳しい情報は知る限り存在しないのですが、下記のサイトにパラメータの指定や返されるJSONのスキーマなどがある程度まとまっています。あとはトライ&エラーで学びました。

私が以前にNBAのAPIで遊んだときの記事も参考になるかもしれません。

あとは本当に問題が見つかる度に、"NBA API access problem"などで検索することで解決策を都度見つけてました。上述のツール開発中のNBA側の仕様変更の際には、Twitterで同じ問題で騒いでいる人を見つけて助けてもらったりしておりました(笑)

最後に余談ですが、NBAが今後このAPIに関してどのようなビジョンを持っているのか、いまいちよく分かりません。あまり積極的にこれを広めようという意思を感じないのは確かなのですが、結構遊べるので、なるべく変な制限をかけないでサポートを続けて欲しい所です。