こんにちは,米国データサイエンティストのかめ(@usdatascientist)です.
データサイエンスのためのPython入門20回目です(講座の目次はこちら).もう20になってもうた・・・ 30までには終わらせます!!「超絶わかりやすく」をモットーに書いていると,どうしても長くなってしまいます.
(「データサイエンスのためのPython講座」動画版がでました!詳細はこちら)
今回の記事から数回に分けて「Data Visualization」についてやっていきます.
Data Visualizationというのは,データの可視化です.データをグラフで描画したり,画像を表示したりします.
今までタイタニックのデータ等を使って統計量を見たりしてきましたが,実務では人に数値を見せるときはグラフを使って見せるのが基本です.
グラフを見ることで値を比較したり,時系列データの傾向を見れたりできるので,わかりやすく&かっこよくData Visualizationするスキルはデータサイエンティスト必須のスキルと言えるでしょう.
Pythonでは主に以下の二つのライブラリを使って描画することがほとんどです.
- matplotlib
- seaborn
本講座ではこの二つのライブラリの使い方を紹介します.基本はmatplotlibで,seabornは中でmatplotlibを使っていて,matplotlibより綺麗でかっこいいグラフを簡単に作れるラッパーライブラリです.
まずはmatplotlibを学習しましょう.
自由自在にグラフを作れるようになると,データサイエンスが一段と楽しくなりますよ!
目次
matplotlibってなに??
matplotlibはPythonでグラフを描画(「plotする」と言います)する際に使うplotting libraryです.
MATLAB(マトラボ)という有名な数値解析ソフトウェアがあるんですが,MATLABと使い勝手が似ており,MATLABを使ったことがある人は簡単に扱えると思います.
じゃぁ実際なにができるのか?
matplotlibの公式サイトに色々なサンプルがあるので見てみてください.
様々な種類のグラフを描画することができることがわかると思います.
どれもすごく凝っててかっこいいんですが,いきなり複雑なグラフを描画するのは難しいので,本講座では簡単なグラフの作り方をレクチャーし,あとは色々ご自身で試行錯誤してください.
とはいったものの,ほとんどの方はそんなに難しいグラフが必要になる機会はないんじゃないかなと思いますw
私も普段そんなに複雑なグラフは使わないです.
matplotlibをimportする
さて,このmatplotlibですがNumPyやPandas同様,Anacondaにすでに入っており第一回の環境セットアップをした人はすでに使える状態です.
別途インストールが必要な人は $pip install matplotlib でインストールしてください.
まず最初に,NumPyやPandas同様にmatplotlibをimportします.matplotlibでは基本は以下のようにimportします.(ここでは一緒にnumpyもimportします.)
1 2 |
import numpy as np import matplotlib.pyplot as plt |
めっちゃ覚えにくそうな感じですが,私は指が勝手に動くレベルで体に染み付いてます...なので今は心配せず,なるべくコピペせずに毎回打つようにしましょう.いずれ勝手に指が動きます,まじです.
plt という名前を使って,matplotlibの関数を呼び出すことになります.また,Jupyterでグラフ描画をするために一つおまじないのコードが必要です.
1 |
%matplotlib inline |
このコードを実行しないと,Jupyterで描画処理が行われません.一度実行すればあとはそのJupyterのプロセス中は描画処理ができます.
matplotlibでplotしてみる
さて,それでは早速plotしてみましょう!
第9回で紹介した指数関数のグラフを描画してみようと思います.
1 2 3 4 |
x = np.linspace(-3, 3, 10) y = np.exp(x) print(x) print(y) |
1 2 3 4 |
[-3. -2.33333333 -1.66666667 -1. -0.33333333 0.33333333 1. 1.66666667 2.33333333 3. ] [ 0.04978707 0.09697197 0.1888756 0.36787944 0.71653131 1.39561243 2.71828183 5.29449005 10.3122585 20.08553692] |
-3〜3を10等分した値のarray x と,そのarrayを底数eの指数関数に入れた結果のarray y を作りました.(この辺怪しい人は第9回に戻ってくださいね!)
さて,このグラフを描画したいと思います.第9回でグラフを描画していますが,あれはこのmatplotlibを使って描画(plot)しています.
plotするには plt.plot() 関数を使います.横軸のarray,縦軸のarrayの順で渡しましょう.つまり,plt.plot(x, y)です.
1 |
plt.plot(x,y) |
10個の点を直線で結んでplotしてるのがわかると思います.(もしJupyterを使ってない場合は,追加で plt.show() を実行する必要があります.)
引数を与えることで色々なパターンでplotすることが可能です.MATLABユーザの方はお手の物だと思います.
詳細はShift+Tabでリファレンスを確認してください.(リファレンスの確認の仕方は第2回参照)
付属情報をつける
matplotlibで描画する際に,様々な付属情報をつける(もしくは消す)ことができます.よく使うのは以下の通りです.
- plt.xlabel()でx軸にラベルをつける
- plt.ylabel()でy軸にラベルをつける
- plt.title()で図にタイトルをつける
- plt.plot(label=’ラベル’)でplotにラベルをつけ, plt.legend()で凡例をつける
- plt.xticks()でx軸に任意のticksをつける
- plt.yticks()でy軸に任意のticksをつける
- plt.axis(‘off’)で軸を消す
盛りだくさんですが,一つ一つ紹介すると長くなってしまうので3つに分けて紹介します.
ご自分で一つ一つJupyterで試して,図がどう変わるかをみてください.また,本講座で何度も出てくるので,今完全に覚える必要はないです.
1 2 3 4 5 6 7 |
plt.plot(x,y) # plt.xlabel()でx軸にラベルをつける plt.xlabel('Effort') # plt.ylabel()でy軸にラベルをつける plt.ylabel('Earning') # plt.title()で図にタイトルをつける plt.title('This is how your effor earns') |
x軸,y軸,グラフ,にラベルをつけることができます.あとでグラフを見返したときになんのグラフだっけ?ってならないように,このようにラベリングする習慣をつけるといいと思います.
ちなみに’Text(0.5, 1.0, ‘This is how your effor earns’)’は最後の plt.title('This is how your effor earns') の返り値がprintされています.鬱陶しいので次からはあえてplt.show()を追加します.すると最後に描画処理が発生するのでこのような無駄な返り値がprintされません.
1 2 3 4 5 6 7 8 |
# plt.plot(label='ラベル')でplotにラベルをつけ, plt.legend()で凡例をつける plt.plot(x,y, label='Earning with effort') plt.legend() # plt.xticks()でx軸に任意のticksをつける plt.xticks(np.arange(-3, 4, 0.5)) # plt.yticks()でy軸に任意のticksをつける plt.yticks([0, 5, 10, 20]) plt.show() |
ticksというのは目盛りのことです.任意のリストやarrayを入れることで,好きなように目盛りを設定できます.
また,label引数をplot()に渡すことでグラフにラベリングすることができ, plt.legend() を実行することで凡例(legend)を入れてくれます.グラフが複数あるときに便利です.
なお,複数plotするには単にもう一つ plt.plot() を実行するだけです(それぞれのグラフを並べて表示する方法は次回紹介します.).以下の例は複数のグラフを描画し,凡例をつけ,グラフの軸を消しています.
1 2 3 4 5 6 7 |
x = np.linspace(-3, 3, 10) y1 = np.exp(x) y2 = np.exp(x)*2 plt.plot(x, y1, label='first') plt.plot(x, y2, label='second') # plt.axis('off')で軸を消す plt.legend() |
今後画像の描画を紹介しますが,画像の描画時に軸を消すことが多いです.
まとめ
今日はData Visualization1回目ということで,matplotlibでグラフをplotしてみました!
1回目にしては色々詰め込みすぎた感ありますが,今後の記事でも出てくるので,今は暗記しなくてOKです.
なんども出会って反復練習することで覚えるようになると思います.
データを思うがままに描画できるようになると本当に楽しいですし,データサイエンティストのスキルとして非常に重要だと思います.
是非自分でデータを作って,今回紹介した内容をいろんな関数でplotしてみてください!
それでは!
追記)次回は複数のグラフを並べて表示する方法を解説します!かなりよく使います.オブジェクト指向での書き方もレクチャーするので読んでみてください!
データサイエンスのためのPython入門21〜matplotlibのsubplotとオブジェクト指向を使って複数のグラフを並べる〜