前回の記事でPythonの外部パッケージとして、Web情報取得のための外部モジュール「requests」について使い方などを説明しました。
今回はデータを視覚的に表現する方法としてグラフ作成のための「matplotlib」という外部パッケージについて、その内容と使い方などを説明していきたいと思います。
- 外部パッケージについての内容がわかる
- matplotlibパッケージについて、その内容と具体的な使い方が分かる
matplotlibのインストール
データ処理を行う場合、ただ数値を計算するだけでなく、グラフなどを使って視覚的に表現したい場合もあります。
ここまで実行結果はターミナルで出力してたから、視覚的な表現はいまいちピンとこないかもしれないですね
そうしたデータをグラフ表示してくれる外部パッケージも存在します。
「matplotlib」はグラフ作成のパッケージとして広く使われているモジュールで、以下のサイトで公開、紹介されています。
ですので、matplotlibのドキュメントやサンプルなどの情報を得るのに利用すると良いかと思います。
ちなみにプログラム本体はpipでインストール出来ます。
この外部モジュールを利用することで非常に簡単にグラフを作成することが出来ます。
matplotlibパッケージのインストール
では、「matplotlib」パッケージをインストールしてみましょう。
インストールは前回説明した「pip」コマンドを使ってインストールします。
ターミナルを起動して、以下のコマンドを実行すると「matplotlib」モジュールの最新バージョンがインストールされます。
ちなみに、筆者の環境でインストールを実行すると以下の表示がされました。
$ pip install matplotlib
Collecting matplotlib
Downloading matplotlib-3.5.1-cp310-cp310-macosx_10_9_x86_64.whl (7.3 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.3/7.3 MB 9.2 MB/s eta 0:00:00
Collecting pyparsing>=2.2.1
Downloading pyparsing-3.0.8-py3-none-any.whl (98 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.5/98.5 KB 5.9 MB/s eta 0:00:00
Collecting fonttools>=4.22.0
Downloading fonttools-4.32.0-py3-none-any.whl (900 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 900.8/900.8 KB 9.0 MB/s eta 0:00:00
Collecting kiwisolver>=1.0.1
Downloading kiwisolver-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl (65 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 65.3/65.3 KB 6.2 MB/s eta 0:00:00
Collecting pillow>=6.2.0
Downloading Pillow-9.1.0-cp310-cp310-macosx_10_9_x86_64.whl (3.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 9.0 MB/s eta 0:00:00
Collecting packaging>=20.0
Downloading packaging-21.3-py3-none-any.whl (40 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 KB 3.7 MB/s eta 0:00:00
Collecting python-dateutil>=2.7
Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 KB 8.2 MB/s eta 0:00:00
Collecting numpy>=1.17
Downloading numpy-1.22.3-cp310-cp310-macosx_10_14_x86_64.whl (17.6 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.6/17.6 MB 9.0 MB/s eta 0:00:00
Collecting cycler>=0.10
Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB)
Collecting six>=1.5
Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, pyparsing, pillow, numpy, kiwisolver, fonttools, cycler, python-dateutil, packaging, matplotlib
Successfully installed cycler-0.11.0 fonttools-4.32.0 kiwisolver-1.4.2 matplotlib-3.5.1 numpy-1.22.3 packaging-21.3 pillow-9.1.0 pyparsing-3.0.8 python-dateutil-2.8.2 six-1.16.0
最終行に「Successfully installed」もしくは「Requirement already satisfied」と表示されていれば、matplotlibのインストールが正しく行われています。
折れ線グラフの作成
matplotlibには、さまざまなグラフ作成を行う機能が用意されています。
グラフの描写(プロット)には、matplotlibにあるpyplotモジュールを使います。
この中には様々なグラフ描写のための関数がありますが、まずは一番シンプルな折れ線グラフの描写関数から使ってみましょう。
折れ線グラフは「plot」という関数を使います。
plot関数には2つの引数があり、x軸のデータとy軸のデータをそれぞれ用意します。
データはシーケンスのオブジェクト(リスト、タプル、レンジなど)で設定します。
グラフはplot関数を利用するだけでは表示されません。
作成後に「show」関数で表示させる必要があります。
では実際にplot関数を使って折れ線グラフを描写してみましょう。
以下、簡単な折れ線グラフのプログラムです。
from matplotlib import pyplot
x = range(10)
y = [0,1,2,3,5,8,13,21,34,55]
pyplot.plot(x,y)
pyplot.show()
3行目でx軸に0から10までの数字を格納し、4行目でy軸にフィボナッチ数列を入れています。
6行目で変数x,yにデータをまとめて、それを使ってグラフをプロットしています。
そして7行目でshow関数でプロットしたグラフをウィンドウ表示します。
ではこのプログラムを実行してみるとどうなるでしょうか。
プログラムを実行してみると、下記のような新たなウィンドウが現れて、そこに折れ線グラフが表示されます。
ウィンドウは、マウスでリサイズすると自動的にグラフもウィンドウサイズに合うようにリサイズされます。
また、左下に表示の操作をするアイコンが並んでおり、ズームやパンといったグラフ表示の操作やファイル保存といったことも出来ます。
グラフ表示を整える
グラフが表示されましたが、正直これだと何のグラフか分かりません。
ですので、グラフにタイトルや凡例などを表示してみましょう。
グラフの表示に関する関数
グラフのタイトルを設定するのが「title」関数です。
引数に指定した文字列をタイトルとして表示します。
x軸とy軸のラベル(軸の役割を示したテキスト表示)を設定する関数には「xlabel」「ylabel」関数を使います。
これも引数に指定した文字列をx軸、y軸のラベルとして表示します。
凡例は「legend」関数を使います。
これは、plot関数でグラフをプロットするときにキーワード引数「label=」を指定することで、そのラベルを使って凡例が作成されます。
では、上記の関数を使ってグラフの表示を整えてみましょう。
先ほど作成したグラフに直線のグラフを追加して、表示に「タイトル」「xy軸のラベル」「凡例」を追加して表示します。
from matplotlib import pyplot
x = range(10)
y1 = [0,1,2,3,5,8,13,21,34,55]
y2 = [0,5,10,15,20,25,30,35,40,45]
pyplot.plot(x,y1,label="fibonacci sequence")
pyplot.plot(x,y2,label="equivalent sequence")
pyplot.title("Graph of fibonacci and equivalent")
pyplot.xlabel("inclease in x")
pyplot.ylabel("inclease in y")
pyplot.legend()
pyplot.show()
日本語は入らないみたいなので、英語でラベルを入れてみました
7,8行目で、グラフをプロットする際に、キーワード引数「label=」に凡例用の文字列を追加しています。
また10行目から、グラフのタイトル、xy軸のラベル、凡例を作って表示しています。
プログラムを実行してみると、下記のような新たなウィンドウが現れて、そこにラベル付きの折れ線グラフが表示されます。
散布図の作成
グラフのplot関数は、デフォルトで折れ線グラフになります。
これはデフォルトで各要素間を線で結ぶように設定されているからなのですが、これを線で結ばずにドットなどで表すようにすれば散布図が作成できます。
では、簡単な散布図を作ってみましょう。
from random import randrange
from matplotlib import pyplot
x1 = []
y1 = []
for i in range(1000):
x1 += [randrange(100)*i]
y1 += [randrange(100)*i]
pyplot.plot(x1,y1,".")
pyplot.show()
ランダムな数字とインクリメントした数字を掛けた値を1000個作ってリストに入れてグラフ出力しました。
注目して欲しいのは11行目のplotの第3引数に「.」を設定しています。
こうすることで、1つ1つのデータをドット表示するようになります。
ちなみに第3引数は「-」がデフォルトで折れ線グラフとなり、その他「.」「x」「+」「*」「o」などが設定可能です。
こちらを実行してみると下記のような散布図が表示されます。
棒グラフの作成
グラフの中で最も一般的に使われるのが「棒グラフ」だと思います。
こちらもpyplotモジュールのbar関数で簡単に作成できます。
使い方はこれまでのplot関数と同じで、x軸のデータとy軸のデータを指定すればそれぞれのデータを棒グラフとして描きます。
ただし棒グラフではx軸(グラフの横幅)は数字よりも項目名を表示することが多いと思います。
ですので、この場合はキーワード引数「tick_label=」を設定します。
表示するラベル名のリストをこの引数に設定することで、x軸データの数値の代わりにラベル表示することができます。
では、こちらも簡単な棒グラフを作ってみましょう。
from matplotlib import pyplot
x = range(10)
y = range(500,1000,50)
data = ["2013","2014","2015","2016","2017","2018","2019","2020","2021","2022",]
pyplot.bar(x,y,tick_label=data)
pyplot.show()
10個のデータを棒グラフにして表示しています。
yのデータはrangeを使って500から1000までを50刻みに作成し、ラベルは2013から2022までの文字列のリストをキーワード引数「tick_label=」に設定しています。
こちらを実行すると以下のグラフが表示されます。
このようにデータを用意するだけでほぼ自動的に棒グラフが作成されるのが分かります。
円グラフの作成
円グラフはpie関数を使って描くことができます。
表示するデータをまとめたリストなどのシーケンスオブジェクトを引数に指定するだけです。
またそれぞれの項目にラベルをつけたい場合は「labels」というキーワード引数にラベル文字列をリストにまとめたものを指定します。
こちらも簡単な円グラフを作ってみましょう。
from matplotlib import pyplot
data = [12300,9800,7600,4500,2100]
label = ["Tokyo","Osaka","Nagoya","Sapporo","kobe",]
pyplot.pie(data,labels=label)
pyplot.legend(loc="upper left")
pyplot.show()
変数dataに円グラフにするデータを設定し、labelに各項目のラベルをまとめて設定します。
これらを引数に指定してpie関数を呼び出しています。
凡例を描写するlegend関数では「loc」というキーワード引数を設定しています。
これは、凡例の表示位置を指定するもので、upper、lower、right、leftといった単語を組み合わせてグラフの四隅のどこかに表示を指定できます。
こちらを実行すると以下となります。
ヒストグラムの作成
多数のデータを集計しグラフ化するのに用いられるのがヒストグラムです。
ヒストグラムは、多数のデータを一定の範囲ごとに集計し表示する必要がありますが、matplotlibを利用すればそうした集計処理も全てmatplotlib自身が自動で行います。
ヒストグラムは、hist関数で作成します。
引数は、データをまとめたリストなどのシーケンスを設定します。
こちらも簡単なヒストグラムを作ってみましょう。
from random import randrange
from matplotlib import pyplot
data = []
for i in range(100):
data += [randrange(100)*i]
pyplot.hist(data)
pyplot.show()
実行するとランダムに作成された100個のデータを元にヒストグラムを作成し表示します。
データはランダムなので、実行するごとに微妙に異なるグラフが描かれます。
データは特に集計処理などはしておらず、ただ数値をリストにまとめているだけですが、ヒストグラム化はpyplotが自動で行っていることが分かります。
まとめ
今回は、Pythonでの外部ライブラリのグラフ作成のモジュールmatplotlibの利用方法について学びました。