- 更新日: 2018年10月23日
- 公開日: 2018年10月12日
【Python入門】Matplotlibを使ってみよう
人工知能や機械学習の参考書によく登場してくる Matplotlib。
中にはコピペでとりあえず使っただけ、という方もいらっしゃるのでは。
今回はそんな「Matplotlib」について少し詳しく迫ってみます。
エクセルや表計算、スクレイピングなどに興味がある方も「Matplotlib」必見ですよ。
【Python入門】Matplotlibを使ってみよう
Matplotlibとは
画像引用: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()
<< 実行結果 >>
実はこのグラフ、私の体重推移です。。。
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、モジュールの関係を図式化したものが以下になります。
【参考データ】
エクセルとMatplotlib
「図を書くだけなら慣れているエクセルで十分」と思う方も多いはず。
エクセルと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()
<< 実行結果 >>
横軸xは0から10まで、縦軸はx2の値が出力されています。 今回はxを10までとしていますが、100でも1000でも一瞬でその数の2乗をグラフ化することができます。すばらしい。
Web上のデータをMatplotlibでグラフ化
画像引用:環境省熱中症予防情報サイト
今年の夏は、暑すぎます。イベント企画側としては来場者の健康管理も気にかかりますね。 そこで厚生労働省や環境省から様々なデータが公開されている中、バス停や駐車場など各スポット毎の気温が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()
<< 実行結果 >>
環境省のWeb上では各スポットをクリックして気温を確認する必要があり、若干面倒ですが、各スポットをグラフ化すると見やすいですし、どこが危険なのかイメージしやすいですよね、 こんな感じで現在進行形で動いているデータを可視化できると人間にとっても有用で、社会に役立つ仕組みづくりにもMatplotlibは役立ちます。
尚、各コードの説明は、、、読解してみて下さい。
\AIエンジニアに必要なスキルが身に付く/
まとめ
人工知能やデータ解析に登場してくるMatplotlibですが、いきなり参考書に書いてあるコードを実行しただけでは恐らくMatplotlibのイメージが湧かないと思います。 基本的な使い方から理解すると非常に強力なツールと思いますので、これを機会に Matplotlib に迫ってみませんか?
Matplotlib以前に「PythonコードやJupyter Notebookの使い方が分からない」、「for文や変数、関数、モジュールってナニ?」という方、CodeCampでPythonの基礎学習はじめてみませんか? オンライン&マンツーマンで効率よくPythonスキルを習得できると思いますよ。
- この記事を書いた人
- オシママサラ