【Python入門】Matplotlibを使ってみよう



【Python入門】Matplotlibを使ってみよう

人工知能や機械学習の参考書によく登場してくる Matplotlib。
中にはコピペでとりあえず使っただけ、という方もいらっしゃるのでは。
今回はそんな「Matplotlib」について少し詳しく迫ってみます。
エクセルや表計算、スクレイピングなどに興味がある方も「Matplotlib」必見ですよ。

目次
  1. 【Python入門】Matplotlibを使ってみよう
  2. Matplotlibとは
  3. Matplotlibを使ってみる
  4. import matplotlib.pyplot の .pyplot について
  5. エクセルとMatplotlib
  6. 数式をMatplotlibでグラフ化
  7. Web上のデータをMatplotlibでグラフ化
  8. まとめ

【Python入門】Matplotlibを使ってみよう

Matplotlibとは

image

画像引用:Matplotlib

Matplotlibは、Pythonの描画ライブラリで、線グラフや棒グラフ、3Dグラフなどを描くことを手伝ってくれます。

主な用途としては、数値解析や人工知能開発、それから医療の画像解析(CTスキャン画像)、ロケットのシミュレーション、津波のシミュレーションなど幅広い分野で活用中。 つまり学生レベルから業務レベル、開発レベルまで広い世代の人に使われている特徴があります。

Matplotlib自体は、2003年に初回版がリリースされて、現在もオープンソースで開発が継続中。またMatplotlibは、Jupyter Notebookに標準で装備されてるライブラリになりますので、インストールでつまづくことなく学習を開始できる特徴もありますね。

Matplotlibを使ってみる

Matplotlibの理解の近道は、やっぱり使ってみることでしょう。 Jupyter Notebookを立ち上げて、以下のコードを入力してみて下さい。

import matplotlib.pyplot as plt
year = [1980, 1985, 1990, 2000, 2010, 2018]
weight = [3, 15, 25, 55, 62, 58]
plt.plot(year, weight)
plt.show()

<< 実行結果 >>

image

実はこのグラフ、私の体重推移です。。。

Matplotlibの基本的な使い方は、上記コードと照らし合わせながら解説していきますね。

コード 解説
import matplotlib.pyplot as plt Matplotlibを使う宣言文
year = [1980, 1985, 1990, 2000, 2010, 2018] 横軸の値、今回は年数。Matplotlibは、リスト化したデータを利用します。
weight = [3, 15, 25, 55, 62, 58] 縦軸の値、今回は体重。データはリストで取り扱います。
plt.plot(year, weight) matplotlib.pyplot の plot() 関数を使う命令文、変数 year と weight を線グラフで描画
plt.show() 作成したグラフの表示命令

import matplotlib.pyplot の .pyplot について

先ほどのコードの import matplotlib.pyplot.pyplot

気になりませんか? これは、Matplotlibとセットで使うAPIで、 pyplot 以外に 47種類用意されています。 pyplotは基本的な機能を装備し、他にアニメーション機能に関する animation や カラーリングに関する color などが用意。 そして各API毎にモジュール(機能)が用意されているという多重構造になっています。 上記コードの場合でいえば、モジュールは plot()show() になりますね。

この Matplotlib とAPI、モジュールの関係を図式化したものが以下になります。

image

【参考データ】

エクセルとMatplotlib

image

「図を書くだけなら慣れているエクセルで十分」と思う方も多いはず。

エクセルとMatplotlibの違いはいくつかありますが、主なポイントは以下のことでしょう。

  • 数式からグラフを書ける
  • Web上のデータを引用して、グラフを書ける
  • 書いたグラフをWebやアプリに出力できる
  • 現在進行形のデータをライブ描画できる

Matplotlibのイメージとしては、「頭で考えたことをそのまま描画できる」ということでしょう。 いちいちデータを用意しなくても数式やWeb上のデータから数値を拾ってきて、知りたい相関関係や比較をグラフ化できます。 これは使ってみないとわからないと思いますので、サンプルを2つご紹介しますね。

数式をMatplotlibでグラフ化

基本的な2次関数 y = x2 をグラフ化してみます。

import matplotlib.pyplot as plt
x = []
y = []
for i in range(0,10):
    x.append(i)
    y.append(i**2)
print(x)
print(y)
plt.plot(x,y)
plt.show()

<< 実行結果 >>

image

横軸xは0から10まで、縦軸はx2の値が出力されています。 今回はxを10までとしていますが、100でも1000でも一瞬でその数の2乗をグラフ化することができます。すばらしい。

Web上のデータをMatplotlibでグラフ化

image

画像引用:環境省熱中症予防情報サイト

今年の夏は、暑すぎます。イベント企画側としては来場者の健康管理も気にかかりますね。 そこで厚生労働省や環境省から様々なデータが公開されている中、バス停や駐車場など各スポット毎の気温がWeb上に存在。 このデータを可視化して、会場までに通る可能性のあるスポットの気温を表示してみます。 注意喚起やイベント成功、売上アップに役立ちそうなグラフとなりそうですね。

【サンプルコード】

import matplotlib.pyplot as plt
from matplotlib.pyplot import figure
import requests, bs4
font = {"family": "TakaoGothic"}
matplotlib.rc('font', **font)

TEMPERATURE = []
for x in range(1, 9):
    loop_url = "res" + str(x)
    loop_url = requests.get('http://www.wbgt.env.go.jp/graph_ref_td.php?region=07&prefecture=61&point=61286&refId='+str(x))
    loop_soup = "soup" + str(x)
    loop_soup = bs4.BeautifulSoup(loop_url.text, "html.parser")
    loop_elems = "elems" + str(x)
    loop_elems = loop_soup.select('span.num')
    loop_number = "number" + str(x)
    loop_number = loop_elems[0].getText()
    temp = loop_number[0:4]
    TEMPERATURE.append(temp)
print(TEMPERATURE)

figure(num=None, figsize=(10, 6))
point = ['基準','駐車場','交差点','バス停','住宅地','子供','ビニールハウス','体育館']
temp = [TEMPERATURE]
plt.title("熱中症注意!!京都市内各箇所の気温目安")
plt.xlabel("場所")
plt.ylabel("気温(℃)")
plt.scatter(point,temp, s=300)
plt.grid()
plt.show()

<< 実行結果 >>

image

環境省のWeb上では各スポットをクリックして気温を確認する必要があり、若干面倒ですが、各スポットをグラフ化すると見やすいですし、どこが危険なのかイメージしやすいですよね、 こんな感じで現在進行形で動いているデータを可視化できると人間にとっても有用で、社会に役立つ仕組みづくりにもMatplotlibは役立ちます。

尚、各コードの説明は、、、読解してみて下さい。

まとめ

人工知能やデータ解析に登場してくるMatplotlibですが、いきなり参考書に書いてあるコードを実行しただけでは恐らくMatplotlibのイメージが湧かないと思います。 基本的な使い方から理解すると非常に強力なツールと思いますので、これを機会に Matplotlib に迫ってみませんか?

Matplotlib以前に「PythonコードやJupyter Notebookの使い方が分からない」、「for文や変数、関数、モジュールってナニ?」という方、CodeCampでPythonの基礎学習はじめてみませんか? オンライン&マンツーマンで効率よくPythonスキルを習得できると思いますよ。

オシママサラ
この記事を書いた人
オシママサラ
\ 無料体験開催中!/自分のペースで確実に習得!
オンライン・プログラミングレッスンNo.1のCodeCamp