PR

『超幾何分布を使ってみよう』のPythonプログラミングをやってみた

燃え立つ調査 戦略
記事内にプロモーションが含まれています。
スポンサーリンク

2019年1月9日付け 晴れる屋Allen Wuプロの記事

カジュアル統率者戦に関する記事しか書かない本サイトだけど、もちろんマジックそのものが好きだから、色んなサイトのマジック記事を日々読んでいる。

そんな数多の記事の中に、明らかにベクトルが違う記事が晴れる屋で投稿されててビビった。

かざろふ伯爵
かざろふ伯爵

これからのマジックプレイヤーには、Pythonの知識も求められているのだ。(断言)

ウィニー君
ウィニー君

いやいやいや!日本中のマジックプレイヤーの何%がこの記事に付いていけるのさ!?

エクセル、グーグルシートまではまだ付いていこうって思ったのに、プログラミングまで要求されたんですけど!?(白目)

かざろふ伯爵
かざろふ伯爵

Pythonについて勉強する良い機会だと思うぞ。

ウィニー君
ウィニー君

!?

Pythonは将来有望なプログラミング言語

プログラマーの言語別年収ランキングが2018年8月に発表されていて、Pythonは3位になっている。

特徴的なのは、1位Go、2位Scalaと比べて数倍高い求人率
ゲームや各種アプリケーション開発といったマジックプレイヤーに近しいジャンルから、研究者やデータサイエンティストによる人工知能(AI)機械学習や統計分析まで幅広く使われるとあって、とにかく需要が高い。

ウィニー君
ウィニー君

でもプログラミングだし、専門学校とかで勉強しなきゃ扱えないでしょ?

かざろふ伯爵
かざろふ伯爵

いやいや。数多くあるプログラミング言語の中で、Pythonはもっとも覚えやすい言語。かくゆう私も独学で覚えた。

ウィニー君
ウィニー君

え!?

ということで、今回はノンプログラマーの立場からプログラミング超初心者向けに、『超幾何分布を使ってみよう』のPythonプログラミングを実際にやってみた。

ウィニー君
ウィニー君

これであなたもパイソニスト(Pythonを操る人)!

記事の通りにやってみた

少しだけ踏み込んだ方法としては、Pythonでscipy.statsを使う方法もあります。これを自分の手でやるなら、Pythonをインストールした後、Scipyをインストールします (‘pip install scipy’)。その後、Pythonを起動 (コマンドラインで’python’とタイプ) して、Scipy statsパッケージをインポート (‘import scipy.stats as sps’) したなら、’sps.hypergeom.pmf (k, N, K, n)’ でk個の成功を得る確率を、’sps.hypergeom.cdf (k, N, K, n)’ でk個”以下”の成功を得る確率が返ってきます。

超幾何学分布を使ってみよう|晴れる屋>Hareruya Pros Blog より

※元の記事では、Scipy statsパッケージをインポートするコードが1文字脱字(t)しています。

Pythonのインストール

かざろふ伯爵
かざろふ伯爵

まずはPythonのインストールをする。

以下のサイトのとおりにすればOK。

注意点は、

  • Pythonは常にバージョンアップするので、最新版をインストールする
  • 自分が使っているPCのOSとbit数に気をつける
ウィニー君
ウィニー君

以下の解説は、Windows10、Python3.6 32bit環境で行ってます。

皆さんは自分のPCにあった最新版でやってみてね。

かざろふ伯爵
かざろふ伯爵

インストールすると、Windowsメニュー一覧にPythonが表示される。

Windowsメニュー

その中からIDLEのショートカットをデスクトップに作成しておくと後々便利。

IDLEは初心者向けの開発環境。
PythonのIDLEの使い方の基本は以下のサイトが明解。

実はAllen Wuプロの記事説明はちょっとだけ不親切で、説明が全てコマンドライン上でのやり方。
これでは書いたコードを保存できないので、上記サイトの保存方法までは覚えて欲しい。

Scipyライブラリのインストール

ウィニー君
ウィニー君

ライブラリって?

かざろふ伯爵
かざろふ伯爵

他のプログラムに再利用できるようにしたプログラムだ。

例えば『入力データを数値型に変換』したり『計算処理をする』といった汎用性の高いプログラムを毎回打ってたら面倒くさいだろう?

Pythonをインストールした時点で標準ライブラリもインストールされているが、標準ライブラリ以外のライブラリ(外部ライブラリ)は、別途インストールが必要。
Scipyは高水準の科学技術計算が出来る外部ライブラリのひとつ。
Allen Wuプロは、高度で煩雑な計算をScipyを使うことで簡単に行っている。

かざろふ伯爵
かざろふ伯爵

記事ではたった1文で書いているけど、実際には以下の通りに行う。

Windowsメニュー>Windowsシステムツール>コマンドプロンプトがある。
これも良く使うことになるので、ショートカットをIDLEと同じようにデスクトップに作成しておくと便利。
で、起動。

コマンドプロンプト

『pip install scipy』と入力しEnterキー。
これでScipyをインストールし始める。

ウィニー君
ウィニー君

インストールに数分かかるので、のんびり待つこと。

Scipyインポート

Pythonを起動してScipy statsパッケージをインポート

かざろふ伯爵
かざろふ伯爵

ここで記事は読者を振り切ったな~。

実際にやってみたらいくつか引っかかったので解説。

まず、コマンドプロンプトを閉じ、IDLEを起動。
コマンドラインでプログラムを打つと保存できないので、File>New Fileで新しいファイルを出しておく。

New file
新しいファイルに、以下のコードをコピペする。

かざろふ伯爵
かざろふ伯爵

これは、記事中の『応用その1 : リミテッドの土地の枚数 土地が17枚の場合』をコードで書いたものだ。

<リミテッドの土地の枚数.py>

import scipy.stats as sps
#記事ではstatsのtが抜けているので注意 
from scipy.stats import hypergeom

[k, N, K, n] = [3, 40, 17, 10] 
#小文字のkは、引く土地の枚数
#大文字のNは、デッキの全カード枚数
#大文字のKが、デッキの土地カード枚数
#小文字のnは、見ることになるカード枚数

Ans1 = sps.hypergeom.cdf (k, N, K, n)
#記事中の『k個”以下”の成功を得る確率』を求める式

#X >= 4となる確率を求める
#求め方は、『100%』から『3枚”以下”の成功を得る確率』を引けば良い
Ans2 = 1 - Ans1 

print(Ans2)

今回引っかかった点は以下の2点。

  1. 記事のインポート命令文が1文字脱字(t)していて、コピペだけだとエラー
  2. X >= 4となる確率を記事中のコードだけで求めようとすると、『100%』ー『3枚”以下”の成功を得る確率』となるので、小文字のkは4ではなく実際には3を代入する必要がある

コピペできたら保存。保存したら実行してみる。
実行は、Runタブから『Run Module』をクリックすればOK。

プログラムの実行

実行すると、すぐに別ウィンドウが立ち上がり、計算結果が表示される。

実行結果2

ウィニー君
ウィニー君

0.7069・・・約0.707=70.7%。Allen Wuプロが計算した結果と同じになったね。

かざろふ伯爵
かざろふ伯爵

記事中の『応用その3』までは、本コードの[k, N, K, n] = [3, 40, 17, 10] 部分の数値を入れ替えれば対応できるだろう。

応用その4 : 《虚ろな者》と《燃え立つ調査》のコード

ここは素直にAllen Wuプロがリンクページに残したコードをコピペしてみよう。

これを手動で計算すると、超幾何分布を少なくとも24回は見ないといけないので、代わりにスクリプトを書く絶好の機会です。スクリプトの記述は、読者のみなさんの練習のためにここには掲載しないでおきますね。

超幾何学分布を使ってみよう|晴れる屋>Hareruya Pros Blog より

『スクリプトを描く絶好の機会』という部分のリンクを開くと、Allen Wuプロが作成したコードが掲載されている。
そのページ下部、RAW Paste Dataのコード全体をIDLEのNew fileにコピペする。
ファイル保存して実行してみる。

虚ろな者計算結果

ウィニー君
ウィニー君

初手に《虚ろな者》が1枚ある場合 (後手)の結果だね。

かざろふ伯爵
かざろふ伯爵

ああ。それが確認できたら、コード中の『on_play = False』を『on_play = True』に書き換えて保存・実行してみてくれ。

虚ろな者計算結果2

ウィニー君
ウィニー君

初手に《虚ろな者》が1枚ある場合 (先手)の結果になったね。

かざろふ伯爵
かざろふ伯爵

初手に《虚ろな者》が2枚ある場合 (先手)については、・・・っと、全部手取り足取り教えては、ためにならないな。

コードの数値部分をいじってみて、探してみてくれ。

さいごに

ウィニー君
ウィニー君

Python独学するのに良い本ある?

かざろふ伯爵
かざろふ伯爵

私が一番はじめに読んだのはこれだな。

プログラミングを全くしたことがない人向けに書かれているので、とにかく丁寧。さらに例文コードがドラ●エ風なので、ゲーム好きには理解しやすい。

ウィニー君
ウィニー君

独学より誰かに教わりたい場合は?

書いたコードがエラーしたとき相談したくなるよね。

かざろふ伯爵
かざろふ伯爵

そうだな。

Pythonがユーザーに優しい点として、エラーしたときに理由を英文表示してくれる。

ただ、Pythonの日本語マニュアルはまだまだ少なく、独学にも限界がある。
なので、エラーやトラブルが起きたときに気軽に質問できるプログラミングスクールはとても心強い。

趣味と実益を兼ねるも良し、手に職を持つも良し。是非挑戦してみては?

  • 自宅にいながらオンライン完結で勉強できる
  • 受講生に1人ずつ現役のプロのパーソナルメンターがつく
  • チャットで質問すればすぐに回答が返ってくる
  • Python以外にも様々なプログラミング言語コースを用意

  • 日本で唯一AI教育重点校!
    人工知能機械学習といった最先端の分野を重点的に学習可能
  • 現役エンジニアやAIの研究者が教える実践形式のカリキュラム
  • 転職・フリーランス・起業支援あり
  • 受講生の約90%は未経験からのスタート!

コメント

タイトルとURLをコピーしました