より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

スーパーラグビーにおけるボール支配率

ボール支配率

サッカーだとボールポゼッション、ボール支配率というのは、テレビを見ていると出てきます。

ボールポゼッションといえば、スペインのバルセロナとサッカーのスペイン代表が強い頃には(今も強いですが)それが取り上げられ、

(ゴール前でパスを回してチャンスを伺う)ハンドボールのような試合

とか

ボールを奪われなければ点を取られることはない。

とか言われてました。

ラグビーにおいてのポゼッション

ラグビーにおいてボールポゼッションというのはどれくらい重要なのでしょうか。

スーパーラグビーのデータから見るホームアドバンテージ - Better Engineer Lifeに続き、手元のスーパーラグビーのデータで分析することにします。

ポゼッションが上回った方が勝った試合の割合を出してみます。

f:id:rimever:20181230085204p:plain

ポゼッションが上回って勝利というケースは50%となりました。

ポゼッションは関係ないんですね。

前日本代表監督のエディー・ジョーンズの本を読んだところ、南アフリカは攻撃ではなく相手にボールを持たせて、打ち倒す守備を好むといった話があったのを思い出しました。

といってもスーパーラグビー南アフリカのチームのボール支配率を見たところ、50.5%と低くはなさそうでした。

ちなみに日本のサンウルブズは47%となっており、50%を下回っています。

勝ったチームのポゼッションの分布を出してみました。

f:id:rimever:20181229232147p:plain

30%を下回っても勝っている試合もあるようです。

サッカーでは

検索していくつかのページを記事を読んでみました。

下記の記事もそうですが、いくつかの記事を見てもボール支配率が高くても勝利に繋がるわけではないという結論が多いです。

www.pinnacle.com

私としては、ボールの支配率はそれだけゲームを支配できているという数値という印象でしたが、そうではないようです。

スーパーラグビーのデータから見るホームアドバンテージ

サッカーでは、審判もホーム寄りとか、ファンの応援もあってというホームが有利・地の利についての話はよく聞きます。

ラグビーではどうなんでしょうか。

スーパーラグビーのデータを集めることが出来たので分析してみます。

スーパーラグビーについて軽く説明を

南半球のニュージーランド・オーストラリア・南アフリカ・アルゼンチンに加え、日本も加わり5ヶ国で行われるリーグです。

ニュージーランド・オーストラリア・南アフリカというラグビー大国に混ざって日本が試合が出来るとは夢のようなリーグです。

スーパーラグビー - Wikipedia

肝心のホームの利は?

f:id:rimever:20181229133034p:plain

あくまでも私が収集できたデータになってしまいますが、このようになりました。

びっくりするほどホームチームが勝ってます。

ラグビーは実力差の出やすいスポーツと言われるのでホームの利はさほどないと思ったのですが、ホームアドバンテージはあるようです。

前述したようにスーパーラグビーは1つの国の中のリーグではなく、複数の国のチームのリーグです。

国外のチームと試合をすることもあるので、その影響があるかもしれませんね。

とはいえ、スーパーラグビーとW杯の違いや私のデータの信憑性に不確実性はあれど、日本W杯は期待が出来そうな予感。

これは応援するしかないですね。

f:id:rimever:20181229133256p:plain

点差については、やや右側(ホーム側に)偏っていますが、そこまで偏ってませんね。

おまけ

他のスポーツについて、Google検索してみました。

野球では?

baseballgate.jp

差としては、5,6%といったところでしょうか。

野球は地方球場でどちらのホームでもないケースもありましたね。

Jリーグ(サッカー)では?

下記サイトでJリーグのデータについて

spaia.jp

9%の差があるとのこと。

リーグ内のチームごとの格差が激しいとホームチームの有利も関係なくなると思うのですが、Jリーグはお金をかけたクラブが残留争いに陥るなど、クラブ間の力の差がないため、ホームアドバンテージが出やすいリーグと私は考えています。

ファンの声援で勝率が上がるなら、盛り上げるしかないですね。

政府統計窓口e-statで医療従事者の人数遷移について調べてみる

政府統計窓口e-statの医療施設調査のデータが更新されたようです。

www.e-stat.go.jp

聞いた話だと病院の医療従事者は減るばかりで増えないという話もあり、気になったので医療従事者についての統計を見てみました。

注:1)平成28年までは「病院報告」で把握していたが、平成29年からは「医療施設静態調査」で把握することとなり、平成29年は従事者数不詳の病院が存在するため、単純に年次比較することはできない。

とのことで、グラフ化した情報を掲示するのは誤解を招くので行わないでおきます。

が、平成28年までは増え続けているようです。

平成29年では統計方法が異なるとはいえ、さほど微減とはいえ、そこまで変わってませんでした。

www.e-stat.go.jp

100床あたりの従事者についても見てもそうでした。

医師不足で検索して見たところ、地域ごとや診療科ごとの偏りについてなどの問題点の記事などが見受けられました。

全体数だけには出てこない課題があるようですね。

scikit-learnの乳がんデータセットで機械学習

scikit-learnには乳がんのデータもあるので、糖尿病患者のデータセットに引き続きを確認します。

yolo.love

5. Dataset loading utilities — scikit-learn 0.20.2 documentation

f:id:rimever:20181226070532p:plain

radius,smoothnessなどの観点について、それぞれ平均、標準誤差、最大(worst)で数値化してます。

radius(半径)とかsmoothness(滑らかさ)とかありますが、採取した細胞の情報です。実際のバストサイズに関わる話ではありません。

そもそも男性も乳がんにかかる可能性はあります。

乳がんの診断について調べたところ、

www.saiken.info

間接診断として、問診やレントゲンで検査したのち、体内のしこりを検出された場合に、直接診断に移り、細胞を採取して検査する。

この直接診断で採取された細胞の画像を数値に変換したのが、このデータセットということでしょう。

目標変数

f:id:rimever:20181226072540p:plain

目標変数については1が悪性と私は思ってしまったのですが、仕様書(212 - Malignant, 357 - Benign)を読むと0が悪性で1が良性です。

相関図をみる時も通常は1に近い値が強く相関してますが、今回は-1に近い値の方が悪性腫瘍に相関していると見る必要があります。

f:id:rimever:20181226211501p:plain

といっても今回は、この値というよりは、多くの値が強く相関している印象です。

乳がんのデータセットが入っていると知った時、そんなデータセットが標準で入れるのか、縁起悪いなと私は思ってました。

データセットとしては2値問題ですし、機械学習を始める際には扱いやすいのかなと思われます。

f:id:rimever:20181226212532p:plain

f:id:rimever:20181226212630p:plain

また、怖いくらいの精度が出ましたね。

Kaggleに下記のような記事があったので、間違ってはないかなと。

Predicting Breast Cancer with Random Forest (~95%) | Kaggle

実際に、これくらいの精度で診断ができれば、医師の助けになりますね。

こんな風に医療従事者の手助けが出来ると良いのですね。

scikit-learnのデータセットで糖尿病について知る

scikit-learnにはいくつかデータセットが用意されています。

ボストンの住宅価格とアヤメ、数字の手書きデータは頻出するのですが、糖尿病患者のデータセットなんてのもあります。

yolo.love

医療ITの人間だったら、これは一度は触れておくべきだなということで触ってみることにしました。

f:id:rimever:20181224202519p:plain

えっと、これでは何がなんだか、さっぱり、よく、わかりませんよ。

データは標準化されています。

オリジナルデータはhttps://www4.stat.ncsu.edu/~boos/var.select/diabetes.tab.txtにあります。

正規化された方が機械学習はしやすいのでしょうが、データの中身に私は関心があったのでオリジナルデータをダウンロードすることにしました。

値について

値の詳細も気になりますね。Blood and other measurements in diabetics — diabetes • mplotに情報がありました。

項目名 説明
age 年齢
sex 性別
bmi BMI
map 平均動脈圧(平均血圧
tc コレステロール(mg / dL)?望ましい範囲:200 mg / dL以下
ldl 低密度リポタンパク質(「悪い」コレステロール)?望ましい範囲:130 mg / dL以下
hdl 高密度リポタンパク質(「善玉」コレステロール)?望ましい範囲:40 mg / dL以上
tch 血清測定
ltg 血清測定
glu 血清測定(グルコース?)
y 基準から1年後の疾患進行の定量的尺度

血清測定となっていますが、原文ではserum measurement。血清検査の測定項目を指していると思われます。

血液を凝固させて、遠心分離することで血清を用いて検査するようです。

f:id:rimever:20181225072106p:plain
describe()

seabornを使ってデータの相関を見てみます。

f:id:rimever:20181224213130p:plain

糖尿病なんだから、グルコースでしょと思ったんですが、一番相関図が強いのがBMI

その次に、ltg、血圧、tchとなっています。

肥満と高血圧は、やはり糖尿病の進行に繋がると考えられます。

メタボなんて言葉が流行ったのも、肥満がこうした病気を引き起こし、国民の医療費負担に繋がるからということですね。

逆に相関がマイナスとなるのは善玉コレステロール。これは逆に糖尿病の進行を防ぐようです。

※このデータを見た場合の話です。

機械学習でポケモンのバトルを攻略する〜Python その2 Advent Calendar 2018 - Qiita 25日目

Python その2 Advent Calendar 2018 - Qiita 25日目に投稿です。

はじめに

今回はKaggleのデータセット「Wheedle's Cave」でデータ分析を行いたいと思います。

www.kaggle.com

Kaggleのカーネルで学ぶデータ分析「ポケモン、データだぜ!」 - Better Engineer Life以前の記事でも紹介しましたが、ポケモンのステータスと勝敗結果のデータがあります。

これを用いて、勝敗を予測しようというものです。

ヒトカゲフシギダネ、どっちが強い?

なんて、子供の頃、思いを馳せたものです。

それを今、この手で実現します。そのために、学生時代、勉強してきたのですから。

環境

ツールはDataloreを使います。Jupyter Notebookの亜種です。詳しくは私の記事などを見て下さい。

これは問題ないのですが、使用者が以下のようなレベルなので注意してください。

データについて

データは三つです。

combat.csvとpokemon.csvからモデルを作成し、test.csvのデータを予測してみろということになります。

コンペではないですし、test.csvには結果が含まれてません。

そこに夢を感じます。

2値問題に置き換える

使うデータは2つです。

f:id:rimever:20181222234005p:plain
pokemon.csv

f:id:rimever:20181222234018p:plain
combats.csv

バトルのデータ(combats.csv)では、1つ目のポケモンの番号と2つ目のボケモンの番号が与えられて、勝った方のポケモンの番号が結果となっています。

この2つを一見したところ、

では、自分のやりたいことを実現するにはどうすればいいんだと戸惑ってしまいました。

しばらく考えた後、これは2値問題なのだと。

1つ目のポケモンと2つ目のポケモンの番号が与えられたとき、1つ目のポケモンが勝つか負けるかという話に持ち込みたいところです。

なので、2つのデータを組み合わせて

が含まれるデータを生成したいところです。

そうすれば、 Kaggle で有名なタイタニック生存予測と同じ2値問題に持ち込めると目論見で進めます。

pandasのmerge関数を用いて、バトル結果の DataFrameをステータスのDataFrameで肉付けしていきます。

データの全体像を掴む

では準備が出来たところで、アルゴリズムだ、なんだとする前にデータの相関を見ることにします。

f:id:rimever:20181223170211p:plain

ざっくりみた感じでは、「すばやさ」「こうげき」「とくこう」が強く関連付いているように見えます。

すばやさ最強説

私がポケモンをやってる子供時代は、とりあえず、素早いポケモンで先手必勝が戦略だった気がします。

ヒトデのスターミーを大事に育ててる子供達が何人もいました。

ポケモンにおいて素早さは先手を取れるかなので、先手かどうかに変換します。

では、両者のすばやさを比較して、先手かどうかに変換し、その値で判定してみます。

f:id:rimever:20181223170607p:plain

え……。94%!?

これだけで、驚愕の精度。

こんなはずでは、なかったのですが。

ランダムフォレスト

ランダムフォレストを試してみます。

f:id:rimever:20181224090849p:plain

97.54%となりました。かなりの精度。

単純なすばやさ判定を上回りましたね。

94%という高いハードルでしたが、それものともせずに超えました。さすが、機械学習アルゴリズム

すばやさについては先制攻撃ができるかで十分と判断し、削除して精度を上げています。

世代(赤・緑の頃を第1世代、金・銀を第2世代と数える)とかポケモン番号は不要と思ったのですが、削除すると精度が下がってしまいました。

どうしてもこれだけのデータだとポケモンのわざとか特性が含められないので、それをこの辺りの値が多少補完してるのでしょうか。

LightGBMを試す

LightGBMを試すことにします。ローカルのインストールは苦戦した記憶があるのですが、Dataloreだと普通にインストールできました。

LightGBMの2値問題は0~1の値に変換されてしまうので、TrueとFalseの変換は自力で行わないとなさそう。

f:id:rimever:20181224090212p:plain

99.08% メリークリスマス。

おわっ、怖いくらいの精度になってしまいました。私の手柄というよりは、アルゴリズムがすごいだけです。

こんな簡単なゲームではないでしょう。ポケモンは。

でなければ、世界の人々が熱狂しないですから。

なんか、バグってないかが心配です。参考値でお願いします。

初代ポケモンもバグ技で一気にレベル100にするという裏技を思い出しました。

さいごに

実際のtest.csvを使ってどうなるかは、昔の攻略本風に言います。

この先は、君の目で確かめてくれ!

私のVisual Studio Codeの使い方まとめ〜Visual Studio Code Advent Calendar 2018 25日目

Visual Studio Code Advent Calendar 2018 25日目です。

Visual Studio Codeとの出会い

私が、Visual Studio Codeを使うようになったのはプロジェクトを掛け持ちせざるを得なくなったことでした。

掛け持ちといっても片方はメインで、これまでやっていたプロジェクトに関しては片手間で見る程度です。

ただ、これまでやっていたプロジェクトは巨大なプロジェクトでした。

C#のソースを見るために、いちいちVisual Studioでまともに開くと読み込みにとても時間がかかることがネックでした。

  • Sakura Editorのようなプレーンなエディタでは物足りない
  • Visual Studioでは、読み込みに時間がかかる

「帯に短し襷に長し」という状況でした。

そんな中で、出会ったのがVisual Studio Codeでした。

ちょっとソースを見るときにうってつけでした。

Markdownエディタとして

といっても、それまではVisual Studio Codeはソースを「見る」という使い方で、書くということはしてませんでした。

Visual Studio Codeで書くようになったのは、Markdownでした。

議事録をMarkdownで書いたのですが、楽しく書けてしまいました。

f:id:rimever:20181207213442p:plain

ですが、偉い人との会議ですので、 Markdownの.mdファイルを渡したところで、「なにこれ?」となってしまいます。

拡張機能が充実したVisual Studio Codeですので、MarkdownをPDFに変換する拡張機能がありますので、Markdownで書いた議事録をPDFに変換して提出すればOKです。

それ以降はメモ書きなどは Visual Studio CodeMarkdownで書くようにしてます。

PowerShellVisual Studio Code

職場はWindowsなので、PowerShellを書きます。

PowerShellにはPowerShell ISEという専用のIDEがあります。

が、Visual Studio Codeが書いた方がしっくりきます。

ただ、注意点としては、Visual Studio CodeUTF-8が標準であることに対して、PowerShellSJIS前提である点です。

新規作成するとき、開き直すときには 、文字コードに注意する必要があります。

下手すると、この問題で、全然動かず、時間を無駄にしてしまいます。

PowerShell ISEのテーマは、私のお気に入りです。

f:id:rimever:20181207213041p:plain

PowerShell拡張機能をインストールするとできるようです。

ActionScriptのファイルにも対応している!

最近、Flashで開発されたシステムの置き換えについて調査することになり、環境を見ることになったのですが、ここでもVisual Studio Codeの出番が

本格的な開発環境を用意した方がいいのですが、事前調査としては、Visual Studio CodeActionScript拡張機能を入れれば、ハイライトして見れます。

f:id:rimever:20181217170613p:plain

知り合いに

俺は、10のエディタを使い分けている

というエディタを湯水のように使うFateギルガメッシュみたいな人がいます。

が、私はそんなに使いこなせないので、なるべくエディタは一つで済ませたいです。

Visual Studio Codeはその理想に近づけてくれるツールです。

Visual Studio Code正規表現を使う場合、

検索ウインドウの右側の「.*」がそれです。

f:id:rimever:20181224140902p:plain

とてもわかりやすい場所にあるのですが、知らないために、SakuraEditorを取り出したりしていました。

拡張機能 Power Mode

拡張機能の一つとしてPower Modeを紹介したいと思います。

これは、キータイピングした時に、爆発したり、燃え上がったりします。

f:id:rimever:20181222122113p:plain

エフェクトは用意された中で選んだり、オフにすることも可能です。

燃えるように気分が高まってコーディングしてるんだ! 今は、声をかけないでくれ!

という燃える男を演出してみてください。

なぜVisual Studio CodeMicrosoftは開発したのか

こうして Visual Studioについて考えていると、Visual Studio CodeMicrosoftはなぜ開発したのかということです。

色々探したのですが、明確な答えは見つかりませんでした。

下記の質問記事(英語)で様々な方が意見していることが該当するのかな、と。

Why is Microsoft's Visual Studio Code IDE free? - Quora

最後に

Visual Studio Codeは、拡張機能により使い方は多種多様です。

勢いのあるツールですし、使ってない方は是非インストールしてあなたの使い方を見つけてください。