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

過去記事
※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でグラフを作ってデータの特徴を把握しよう。


参考書籍:




【参考】機械学習エンジニアへの転職なら『マイナビIT AGENT』

マイナビ IT AGENT 」は、IT・ウェブ業界に特化した転職エージェントです。

1000名を超える営業体制を構築しており、最大手から優良ベンチャーまで15,000社を超える求人を保有しています。企業の採用責任者から定期的にヒアリングしており、離職率の高い企業や労働時間が長い企業など、職場環境や会社の雰囲気について情報収集している数少ない転職エージェントです。

ただし、関東と関西に案件が偏っているため、地方の方にはオススメできません。

また、職務経歴書や履歴書について丁寧なアドバイスをしてくれます。マイナビは、10年先のキャリアプランを考える方針で運営しており、他社の転職エージェントと比べ、利用者の満足度が極めて高いです。

20~30代のIT業界からAIエンジニアに転職されたい方におすすめです。


転職の体験談:転職エージェントにボコボコにされて未経験からAIエンジニアに転職した話