データサイエンスや機械学習では、グラフ作成ツールとしてmatplotlibが大変利用されています。なぜmatplotlibを使うのか、なぜグラフを作成するのか、その理由とグラフの作成方法をまとめました。

過去記事
※pandas編:python機械学習でなぜpandasが利用されているのか
※scikit-learn編:python機械学習(AI)のデータ処理(pandas/scikit-learn)

matplotlibとは

matplotlibは、グラフ描画のためのpython用ライブラリです。データをいろんなグラフで可視化することが出来ます。折れ線グラフや散布図などたくさんのグラフが用意されています。

グラフの持つ力はすごいです。グラフは事実を分かりやすく人に伝えることが出来ます。例えば、横軸にビタミンCの摂取量、縦軸に肌の健康度を取り、棒グラフを作成したところ、右肩上がりなグラフができたとします。そのグラフを広告で大々的に打てば、明日には女性陣がビタミンCを買い込んですぐに売り切れてしまうでしょう。事実を目で見える形で示すこと、これがグラフの持つ力です。

matplotlibは、そんなグラフを簡単に無料で作ることが出来ます。

なぜ機械学習でグラフを作成するのか

機械学習でグラフを作成する一番の目的は、分析者がデータの特徴を把握することです。
本来なら特にグラフ作成などしなくとも、データを機械学習アルゴリズムで計算すれば、モデルの作成は可能です。

しかし、機械学習の前にグラフ化して眺めることで、どのようなアルゴリズムが良さそうか、データのスケーリングは必要か、相関はありそうかなど、データ全体を俯瞰することで、より良い分析方針を立てることが出来ます。

また、分析の依頼者である業務部門や顧客に、分析報告を行う時にもグラフは役立ちます。機械学習を行う前に、いろんなグラフを作って見せることで、データの中身を理解してもらうことができます。いわば、依頼者とのコミュニケーションツールですね。

データサイエンティストには、目的に沿ったグラフを作成するスキルが強く求められるのです。

グラフの種類一覧(pythonのコード付き)

データの特徴と一言で言っても、いろんな特徴があります。そのため、データから何を知りたいかによって作成するグラフが異なってきます。ここでは、目的別にグラフの種類を一覧化しました。またpythonでのmatplotlibの実装方法も載せました。

①データの分布を見たい

まずはデータの分布を確認します。平均値あたりでデータはどのくらいあるか、データのばらつきはどのくらいあるかなどを確認します。特に箱ひげ図は、外れ値の確認などにも利用できます。

■ヒストグラム

データを一定の範囲で分けて、各区間に入る数を柱の形で表したグラフです。度数分布表をグラフ化したものになります。

#各種ライブラリをインポート
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 平均 50, 標準偏差 15 の正規乱数を500件生成
x = np.random.normal(50, 15, 500)
 
# ヒストグラムを出力
plt.hist(x)
plt.show()

figure_1

■箱ひげ図

箱ひげ図は、四分位数(データの値を大きさの順に並べて4等分した値)をグラフ化したものです。データのばらつきを確認することが出来ます。
複数のデータ項目について、箱ひげ図を並べてグラフ化することで、データのばらつきを比較することが出来ます。とても便利です。

#3つのデータを作成
df1 = [36,62,78,50,65,40]
df2 = [20,55,58,70,75,60]
df3 = [50,55,61,70,65,55]
data = (df1,df2,df3)

fig = plt.figure()
ax = fig.add_subplot(111)

# 箱ひげ図をつくる
bp = ax.boxplot(data)

plt.grid()
plt.ylim([0,100])
plt.show()
figure_2

②データ量を比較したい

データ量を比較したいときは、棒グラフや折れ線グラフを利用します。棒グラフは、集計したデータを比較することが多いです。折れ線グラフは、連続データを可視化する際によく利用されます。

■棒グラフ

棒の高さで量の大小を比較できます。連続したデータを可視化するときによく利用されます。

num = [1, 2, 3, 4, 5, 6]
df1 = [36,62,78,50,65,40]
plt.bar(num, df1)
plt.show()
pic3

■折れ線グラフ

折れ線グラフは、時系列データを可視化できます。特に時間ごとの変量の推移を確認するときに利用されます。

#-20から20までを100ステップに区切った列を配列として作成
x = np.linspace(-20, 20, 100)
#サイン関数
y = np.sin(x)

#plot関数は、一方の配列に対して他方の配列をプロットする。
plt.plot(x, y, marker="x")
plt.show()
pic4


③データ間の関係性を見たい

複数の変量間で相関がありそうかどうかを確認します。

■散布図

散布図は、連続データ同士の関係性を見るグラフとして非常によく利用されています。相関係数のような線形の関係性だけでなく、非線形の関係性なども目視で確認することができます(前半ではxの増加と共にyは増加するが、後半になるとxの増加と共にyが減少するといった事象は、相関係数では特徴把握できない)。

# 散布図を描画
df1 = [36,62,78,50,65,40]
df2 = [20,55,58,70,75,60]
plt.scatter(df1, df2)
plt.show()
pic5

本日のまとめ
AI開発の前には、pythonとmatplotlibでグラフを作ってデータの特徴を把握しよう。


参考図書:

参考記事:これだけは知っておけ!PythonでAI開発の基礎まとめ