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個”以下”の成功を得る確率が返ってきます。
※元の記事では、Scipy statsパッケージをインポートするコードが1文字脱字(t)しています。
Pythonのインストール
まずはPythonのインストールをする。
以下のサイトのとおりにすればOK。
注意点は、
- Pythonは常にバージョンアップするので、最新版をインストールする
- 自分が使っているPCのOSとbit数に気をつける
以下の解説は、Windows10、Python3.6 32bit環境で行ってます。
皆さんは自分のPCにあった最新版でやってみてね。
インストールすると、Windowsメニュー一覧にPythonが表示される。
その中からIDLEのショートカットをデスクトップに作成しておくと後々便利。
IDLEは初心者向けの開発環境。
PythonのIDLEの使い方の基本は以下のサイトが明解。
実はAllen Wuプロの記事説明はちょっとだけ不親切で、説明が全てコマンドライン上でのやり方。
これでは書いたコードを保存できないので、上記サイトの保存方法までは覚えて欲しい。
Scipyライブラリのインストール
ライブラリって?
他のプログラムに再利用できるようにしたプログラムだ。
例えば『入力データを数値型に変換』したり『計算処理をする』といった汎用性の高いプログラムを毎回打ってたら面倒くさいだろう?
Pythonをインストールした時点で標準ライブラリもインストールされているが、標準ライブラリ以外のライブラリ(外部ライブラリ)は、別途インストールが必要。
Scipyは高水準の科学技術計算が出来る外部ライブラリのひとつ。
Allen Wuプロは、高度で煩雑な計算をScipyを使うことで簡単に行っている。
記事ではたった1文で書いているけど、実際には以下の通りに行う。
Windowsメニュー>Windowsシステムツール>コマンドプロンプトがある。
これも良く使うことになるので、ショートカットをIDLEと同じようにデスクトップに作成しておくと便利。
で、起動。
『pip install scipy』と入力しEnterキー。
これでScipyをインストールし始める。
インストールに数分かかるので、のんびり待つこと。
Pythonを起動してScipy statsパッケージをインポート
ここで記事は読者を振り切ったな~。
実際にやってみたらいくつか引っかかったので解説。
まず、コマンドプロンプトを閉じ、IDLEを起動。
コマンドラインでプログラムを打つと保存できないので、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文字脱字(t)していて、コピペだけだとエラー
- X >= 4となる確率を記事中のコードだけで求めようとすると、『100%』ー『3枚”以下”の成功を得る確率』となるので、小文字のkは4ではなく実際には3を代入する必要がある
コピペできたら保存。保存したら実行してみる。
実行は、Runタブから『Run Module』をクリックすればOK。
実行すると、すぐに別ウィンドウが立ち上がり、計算結果が表示される。
0.7069・・・約0.707=70.7%。Allen Wuプロが計算した結果と同じになったね。
記事中の『応用その3』までは、本コードの[k, N, K, n] = [3, 40, 17, 10] 部分の数値を入れ替えれば対応できるだろう。
応用その4 : 《虚ろな者》と《燃え立つ調査》のコード
ここは素直にAllen Wuプロがリンクページに残したコードをコピペしてみよう。
これを手動で計算すると、超幾何分布を少なくとも24回は見ないといけないので、代わりにスクリプトを書く絶好の機会です。スクリプトの記述は、読者のみなさんの練習のためにここには掲載しないでおきますね。
『スクリプトを描く絶好の機会』という部分のリンクを開くと、Allen Wuプロが作成したコードが掲載されている。
そのページ下部、RAW Paste Dataのコード全体をIDLEのNew fileにコピペする。
ファイル保存して実行してみる。
初手に《虚ろな者》が1枚ある場合 (後手)の結果だね。
ああ。それが確認できたら、コード中の『on_play = False』を『on_play = True』に書き換えて保存・実行してみてくれ。
初手に《虚ろな者》が1枚ある場合 (先手)の結果になったね。
初手に《虚ろな者》が2枚ある場合 (先手)については、・・・っと、全部手取り足取り教えては、ためにならないな。
コードの数値部分をいじってみて、探してみてくれ。
さいごに
Python独学するのに良い本ある?
私が一番はじめに読んだのはこれだな。
プログラミングを全くしたことがない人向けに書かれているので、とにかく丁寧。さらに例文コードがドラ●エ風なので、ゲーム好きには理解しやすい。
独学より誰かに教わりたい場合は?
書いたコードがエラーしたとき相談したくなるよね。
そうだな。
Pythonがユーザーに優しい点として、エラーしたときに理由を英文表示してくれる。
ただ、Pythonの日本語マニュアルはまだまだ少なく、独学にも限界がある。
なので、エラーやトラブルが起きたときに気軽に質問できるプログラミングスクールはとても心強い。
趣味と実益を兼ねるも良し、手に職を持つも良し。是非挑戦してみては?
コメント