スキルUP!データ分析実践

データ可視化の実践:PythonのMatplotlibとSeabornでグラフを作成しよう

Tags: データ可視化, Python, Matplotlib, Seaborn, グラフ作成

はじめに:データ可視化の重要性とPythonを使った実践

データ分析において、収集したデータを分かりやすく示す「データ可視化」は非常に重要なステップです。数字や表だけでは見えにくいデータの傾向やパターンも、グラフにすることで直感的に理解できるようになります。データ可視化は、分析結果を他者と共有する際にも、説得力のあるコミュニケーションツールとなります。

データ可視化のためのツールは数多く存在しますが、Pythonはデータ分析でよく使われるプログラミング言語であり、強力な可視化ライブラリが豊富に用意されています。特にMatplotlibとSeabornは、Pythonでデータ可視化を行う上での標準的なライブラリとして広く利用されています。

この記事では、Pythonを使ったデータ可視化の基礎として、MatplotlibとSeabornを用いて基本的なグラフを作成する方法を学びます。プログラミングの経験が少なくても理解できるよう、具体的なコード例を交えながら解説を進めます。

データ可視化に必要な準備:Pythonライブラリ

Pythonでデータ可視化を行うためには、主に以下のライブラリを利用します。

これらのライブラリは、Pythonの環境にインストールして使用します。インストール済みであれば、以下のコードでプログラム内で利用できるようになります。通常、これらは慣例的に plt および sns という別名をつけてインポートされます。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd # データ操作によく使われるpandasも合わせてインポートすることが多いです
import numpy as np # 数値計算ライブラリnumpyもよく使われます

Matplotlibを使った基本的なグラフ作成

まずはMatplotlibを使って、基本的なグラフを作成してみましょう。ここでは、簡単なサンプルデータを用意し、折れ線グラフと散布図を作成します。

データ分析では、多くの場合データを表形式で扱います。ここでは、Pythonで表データを扱う際に便利なpandasライブラリを使って簡単なデータフレームを作成します。

# サンプルデータの作成
data = {
    'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
    'Sales': [150, 180, 220, 200, 250, 280]
}
df = pd.DataFrame(data)

print(df)

上記を実行すると、以下のような表形式のデータが表示されます。

  Month  Sales
0   Jan    150
1   Feb    180
2   Mar    220
3   Apr    200
4   May    250
5   Jun    280

このデータを使って、月ごとの売上の推移を示す折れ線グラフを作成します。

# 折れ線グラフの作成
plt.figure(figsize=(8, 5)) # グラフのサイズを指定します
plt.plot(df['Month'], df['Sales']) # x軸にMonth、y軸にSalesを指定します
plt.title('Monthly Sales Trend') # グラフのタイトルを設定します
plt.xlabel('Month') # x軸のラベルを設定します
plt.ylabel('Sales') # y軸のラベルを設定します
plt.grid(True) # グリッド線を表示します
plt.show() # グラフを表示します

plt.plot() 関数にX軸とY軸のデータを渡すことで、簡単に折れ線グラフを描くことができます。plt.title(), plt.xlabel(), plt.ylabel() でグラフのタイトルや軸ラベルを設定し、plt.grid(True) で背景にグリッド線を追加すると、より見やすいグラフになります。最後に plt.show() で描画したグラフを表示します。

次に、2つの数値データの関係性を見るための散布図を作成してみましょう。ランダムなサンプルデータを作成します。

# 散布図用のサンプルデータ作成
np.random.seed(0) # 乱数のシードを固定して再現性を保ちます
x = np.random.rand(50) * 100 # 0から100までのランダムな数値50個
y = np.random.rand(50) * 100 # 0から100までのランダムな数値50個

# 散布図の作成
plt.figure(figsize=(6, 6)) # グラフサイズ
plt.scatter(x, y) # xデータとyデータを指定します
plt.title('Sample Scatter Plot') # タイトル
plt.xlabel('X Value') # x軸ラベル
plt.ylabel('Y Value') # y軸ラベル
plt.grid(True) # グリッド線
plt.show() # 表示

plt.scatter() 関数を使うと、xとyのペアを点でプロットした散布図を描くことができます。これは2つの変数間の相関関係などを視覚的に確認するのに役立ちます。

Seabornを使った表現力豊かなグラフ作成

Seabornは統計データの可視化に特化しており、より少ないコードで複雑なグラフや統計情報を表現したグラフを作成できます。Matplotlibと組み合わせて使用することが多いです。

Seabornを使ってみましょう。まずは、ある数値データの分布を見るためのヒストグラムを作成します。

# ヒストグラム用のサンプルデータ作成
np.random.seed(0)
data = np.random.randn(200) # 平均0、標準偏差1の正規分布に従う乱数200個

# ヒストグラムの作成 (Seaborn)
plt.figure(figsize=(8, 5))
sns.histplot(data, kde=True) # データと、必要であればカーネル密度推定曲線(kde=True)を指定
plt.title('Distribution of Sample Data (Histogram)')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()

sns.histplot() は、データの度数分布を棒グラフで表示します。kde=True を指定すると、データの分布形状を滑らかな曲線(カーネル密度推定曲線)で重ねて表示でき、分布の様子をより分かりやすく示せます。

次に、グループごとの数値のばらつきを見るための箱ひげ図を作成します。これもサンプルデータを作成して行います。

# 箱ひげ図用のサンプルデータ作成
np.random.seed(0)
group_a = np.random.normal(loc=60, scale=10, size=50) # 平均60, 標準偏差10
group_b = np.random.normal(loc=70, scale=15, size=50) # 平均70, 標準偏差15
group_c = np.random.normal(loc=65, scale=8, size=50) # 平均65, 標準偏差8

# データをDataFrame形式にまとめる (SeabornはDataFrameと相性が良いです)
df_box = pd.DataFrame({
    'Score': np.concatenate([group_a, group_b, group_c]),
    'Group': ['A']*50 + ['B']*50 + ['C']*50
})

# 箱ひげ図の作成 (Seaborn)
plt.figure(figsize=(8, 5))
sns.boxplot(x='Group', y='Score', data=df_box) # x軸にカテゴリ、y軸に数値データを指定
plt.title('Scores Distribution by Group (Box Plot)')
plt.xlabel('Group')
plt.ylabel('Score')
plt.show()

sns.boxplot() は、データの四分位数や外れ値などを視覚的に示す箱ひげ図を簡単に作成できます。x, y, data の引数にDataFrameのカラム名を指定するだけで、グループごとの比較が容易に行えます。

このように、SeabornはMatplotlibよりも高レベルなインターフェースを提供し、統計的なグラフを直感的に作成できるのが特徴です。

複数のグラフを比較する

データ分析では、複数の側面からデータを可視化し、それらを比較することがよくあります。Matplotlibの plt.subplots() 関数を使うと、1つの図の中に複数のグラフ(サブプロット)を配置することができます。

# 複数のグラフを配置
plt.figure(figsize=(12, 5)) # 全体の図のサイズ

# 1番目のグラフ (左側): 折れ線グラフ
plt.subplot(1, 2, 1) # 1行、2列の1番目
plt.plot(df['Month'], df['Sales'])
plt.title('Monthly Sales Trend')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.grid(True)

# 2番目のグラフ (右側): 棒グラフ (Seabornを使用)
plt.subplot(1, 2, 2) # 1行、2列の2番目
sns.barplot(x='Month', y='Sales', data=df) # 月ごとの売上を棒グラフで表示
plt.title('Monthly Sales Bar Chart')
plt.xlabel('Month')
plt.ylabel('Sales')

plt.tight_layout() # グラフ間の重なりを防ぐためにレイアウトを調整します
plt.show()

plt.subplot(nrows, ncols, index) は、指定した行数 (nrows) と列数 (ncols) で分割した領域のうち、index 番目の位置にグラフを描画するための領域を作成します。ここでは plt.subplot(1, 2, 1) で1行2列の1番目(左側)に折れ線グラフを、plt.subplot(1, 2, 2) で2番目(右側)に棒グラフを描画しています。plt.tight_layout() は、サブプロット間のスペースを自動的に調整してくれる便利な関数です。

まとめ:データ可視化実践の第一歩

この記事では、PythonのMatplotlibとSeabornライブラリを使って、データ可視化の基本的なステップと、折れ線グラフ、散布図、ヒストグラム、箱ひげ図といった代表的なグラフを作成する方法を学びました。

データ可視化は、データ分析の結果を理解し、他者に伝えるための強力な手段です。Pythonのライブラリを使うことで、柔軟かつ表現力豊かなグラフを作成することが可能です。

今回紹介したグラフはごく一部です。MatplotlibやSeabornには、他にも様々な種類のグラフを作成する機能や、グラフをさらに細かくカスタマイズするオプションが豊富に用意されています。

まずは、手持ちのデータを使い、この記事で学んだ基本的なグラフを作成することから始めてみましょう。様々な種類のグラフを試したり、軸ラベルやタイトルを工夫したりすることで、データからより多くの洞察を得られるようになるでしょう。

データ分析スキルをさらに深めるためには、様々なデータを対象に可視化を実践し、データの特性に応じた適切なグラフを選択する経験を積むことが重要です。