続・玩式草子 ―戯れせんとや生まれけん―

第28回 ガチャと確率とPython[その2]

この記事を読むのに必要な時間:およそ 4 分

2月も下旬になると暖かい日が増えてきました。新型コロナ対策の緊急事態宣言は続いているものの,そのような人間の営みとは無関係に,季節は着実に進んでいます。

さて前回は,提供割合「1%」のガチャを何回くらい回せば目的のキャラが手に入るかを,確率とシミュレーションを使って考えました。その結果,⁠4割弱の人は100回引いても当たらない」一方,クジ運がいい順に参加者を並べてみると,⁠全体の1/4は30回程度,半数は70回程度,3/4は140回程度で当たる一方,残りの1/4の人は140回以上かかる」ということがわかりました。

この種の結果は,数字だけで示すよりグラフ等を添えると理解が深まります。Pythonには簡単にグラフを描くことのできるmatplotlibという便利なツール(モジュール)があるので,今回はこのmatplotlibを紹介しつつ,前回の結果をグラフ化してみましょう。

matplotlibの使い方

matplotlibはPythonのパッケージコレクションPyPI(Python Package Index)に登録されているので,簡単にインストールできます。

$ python -m pip install -U matplotlib
Defaulting to user installation because normal site-packages is not writeable
Collecting matplotlib
  Downloading matplotlib-3.3.4-cp39-cp39-manylinux1_x86_64.whl (11.5 MB)
     |████████████████████████████████| 11.5 MB 10.3 MB/s 
Requirement already satisfied: pillow>=6.2.0 in /usr/lib/python3.9/site-packages (from matplotlib) (8.1.0)
....
  Downloading kiwisolver-1.3.1-cp39-cp39-manylinux1_x86_64.whl (1.2 MB)
     |████████████████████████████████| 1.2 MB 29.9 MB/s 
Requirement already satisfied: six in /usr/lib/python3.9/site-packages (from cycler>=0.10->matplotlib) (1.15.0)
Installing collected packages: python-dateutil, kiwisolver, cycler, matplotlib
Successfully installed cycler-0.10.0 kiwisolver-1.3.1 matplotlib-3.3.4 python-dateutil-2.8.1

この例では一般ユーザ権限でインストールしたので,そのユーザのホームディレクトリの.local/以下にパッケージがインストールされます。

$ ls ~/.local/lib/python3.9/site-packages/
__pycache__/                                matplotlib/
cycler-0.10.0.dist-info/                    matplotlib-3.3.4-py3.9-nspkg.pth
cycler.py                                   matplotlib-3.3.4.dist-info/
dateutil/                                   mpl_toolkits/
kiwisolver-1.3.1.dist-info/                 pylab.py
kiwisolver.cpython-39-x86_64-linux-gnu.so*  python_dateutil-2.8.1.dist-info/

上記コマンドをルート権限で実行すれば/usr/lib/python3.9/site-packages/以下にインストールされ,システム全体で利用可能になります。

matplotlibにはさまざまな機能があるものの,今回はpyplotと呼ばれるグラフ描画機能を試してみます。まずPythonを起動し,matplotlibからpyplotモジュールをimportします。

$ python
Python 3.9.1 (default, Jan 24 2021, 16:05:20) 
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from matplotlib import pyplot

次に適当なX,Yのデータを用意し,折れ線グラフを書くメソッドpyplot.plot()に渡します。

>>> x = [1,2,3,4]
>>> y = [10,30,50,20]
>>> pyplot.plot(x,y)
[<matplotlib.lines.Line2D object at 0x7fe290071580>]

描いたグラフを表示するメソッドpyplot.show()で作成されたグラフを描画します。

>>> pyplot.show()

図1 matplotlibで描いたグラフ

図1 matplotlibで描いたグラフ

このように,グラフ化したいデータを渡すだけで,後はmatplotlibが自動的にグラフを作成してくれます。独立したウィンドウに描かれたグラフは,マウス操作で拡大縮小したり,軸のラベルを付けたり,線の種類や色,各ポイントのマーカーの有無や種類等を変更できます。また,これらの設定はpyplot.plot()へ渡すオプションとしても指定できるので,かなり凝ったグラフを作ることもできます。

もっとも本稿ではごく基本的な機能しか使わないので,より詳しい使い方は別途優れた解説ページをご参照ください。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html