読み込み中...

Pythonでペアプロットを使ってデータを可視化する方法と活用方法11選

ペアプロット 徹底解説 Python
この記事は約16分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●Pythonのペアプロットとは?

データ分析の世界で、ペアプロットが注目を集めています。

Pythonを使うデータサイエンティストにとって、ペアプロットは多変量データの関係性を一目で把握できる強力な味方となっています。

ペアプロットは、データセット内の複数の変数間の関係を同時に可視化する手法です。

散布図やヒストグラムを組み合わせた行列状のグラフで、変数間の相関や分布を効率的に分析できます。

○Seabornライブラリを使ったペアプロットの基本

Seabornは、Pythonの可視化ライブラリMatplotlibをベースにした、統計データ可視化のための高級ライブラリです。

Seabornを使うと、わずか数行のコードでペアプロットを作成できます。

まずは、Seabornをインストールしましょう。

コマンドプロンプトやターミナルで次のコマンドを実行します。

pip install seaborn

インストールが完了したら、Pythonスクリプトで次のようにSeabornをインポートします。

import seaborn as sns
import matplotlib.pyplot as plt

○ペアプロットが解決するデータ分析の課題

ペアプロットは、多変量データ分析における様々な課題を解決します。

例えば、変数間の相関関係の発見、外れ値の検出、データの分布の把握などが容易になります。

従来の方法では、各変数のペアごとに散布図を作成する必要がありましたが、ペアプロットを使えば、一度にすべての変数の関係を可視化できます。

○サンプルコード1:最初のペアプロット作成

それでは、実際にペアプロットを作成してみましょう。

Seabornに付属のアイリスデータセットを使用します。

import seaborn as sns
import matplotlib.pyplot as plt

# アイリスデータセットの読み込み
iris = sns.load_dataset("iris")

# ペアプロットの作成
sns.pairplot(iris)

# グラフの表示
plt.show()

このコードを実行すると、アイリスデータセットの4つの特徴量(がく片の長さ、がく片の幅、花びらの長さ、花びらの幅)と種類(setosa、versicolor、virginica)の関係を示すペアプロットが生成されます。

実行結果は次のようになります。

[ペアプロットの画像が表示されます]

生成されたペアプロットでは、対角線上にヒストグラムが、それ以外の部分に散布図が表示されています。

各点の色は、アイリスの種類を表しています。

●多変量データの相関を一目で把握

ペアプロットの魅力は、データセット内のすべての変数間の関係を一度に可視化できることです。

この特徴により、データの全体像を素早く把握し、重要な洞察を得ることができます。

例えば、先ほどのアイリスデータセットのペアプロットから、次のような情報を読み取ることができます。

  1. 花びらの長さと幅は強い正の相関がある
  2. がく片の長さと幅は弱い正の相関がある
  3. setosa種は他の2種と明確に区別できる

○サンプルコード2:hue引数を使った色分け

ペアプロットの視認性をさらに高めるために、hue引数を使って色分けを行うことができます。

次のサンプルコードでは、アイリスの種類ごとに色を変えています。

import seaborn as sns
import matplotlib.pyplot as plt

# アイリスデータセットの読み込み
iris = sns.load_dataset("iris")

# hue引数を使ったペアプロットの作成
sns.pairplot(iris, hue="species")

# グラフの表示
plt.show()

実行結果

[色分けされたペアプロットの画像が表示されます]

このペアプロットでは、各点の色がアイリスの種類を表しています。

色分けにより、各種類の特徴がより明確になりました。

○サンプルコード3:相関係数の可視化

ペアプロットに相関係数を追加することで、変数間の関係をより定量的に把握できます。

次のコードでは、ヒートマップを使用して相関係数を可視化します。

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# アイリスデータセットの読み込み
iris = sns.load_dataset("iris")

# 相関係数の計算
corr = iris.drop("species", axis=1).corr()

# ペアプロットの作成
g = sns.pairplot(iris, hue="species")

# 相関係数をヒートマップとして追加
for i, j in zip(*np.triu_indices_from(g.axes, 1)):
    g.axes[i, j].annotate(f"{corr.iloc[i, j]:.2f}", (0.5, 0.5), 
                          xycoords="axes fraction", 
                          ha='center', va='center')

# グラフの表示
plt.show()

実行結果

[相関係数が追加されたペアプロットの画像が表示されます]

このペアプロットでは、散布図の右上に相関係数が表示されています。

例えば、花びらの長さと幅の相関係数は0.96と非常に高いことがわかります。

●高度なペアプロット活用法

ペアプロットの基本を押さえたところで、より高度な活用法に踏み込んでみましょう。

データサイエンティストとして成長するには、ツールの応用力が欠かせません。

ペアプロットも例外ではありません。

適切に使いこなすことで、データの奥深い洞察を得られるでしょう。

○サンプルコード5:複数変数を使用したペアプロット

複数の変数を同時に分析することは、データサイエンスの醍醐味と言えるでしょう。

ペアプロットを使えば、多変量データの関係性を一目で把握できます。

例として、有名なタイタニック号の乗客データを使用してみましょう。

import seaborn as sns
import matplotlib.pyplot as plt

# タイタニックデータセットの読み込み
titanic = sns.load_dataset("titanic")

# 関心のある変数を選択
vars_of_interest = ['age', 'fare', 'pclass', 'survived']

# ペアプロットの作成
sns.pairplot(titanic[vars_of_interest], hue='survived')

plt.show()

実行結果

[タイタニックデータのペアプロット画像が表示されます]

生成されたグラフを見ると、年齢、運賃、客室クラス、生存の関係が一目瞭然です。

例えば、高額の運賃を支払った乗客ほど生存率が高いという傾向が読み取れます。

○サンプルコード6:ヒートマップとの組み合わせ

ペアプロットとヒートマップを組み合わせると、相関関係がより明確になります。

相関係数をヒートマップで表現し、ペアプロットと並べて表示してみましょう。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# アイリスデータセットの読み込み
iris = sns.load_dataset("iris")

# 図の設定
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20, 8))

# ペアプロットの作成
sns.pairplot(iris, hue="species", ax=ax1)

# 相関係数の計算
corr = iris.drop("species", axis=1).corr()

# ヒートマップの作成
sns.heatmap(corr, annot=True, cmap="coolwarm", ax=ax2)

plt.tight_layout()
plt.show()

実行結果

[ペアプロットとヒートマップを並べた画像が表示されます]

左側のペアプロットで変数間の関係性を視覚的に確認し、右側のヒートマップで具体的な相関係数を確認できます。

例えば、petal_lengthとpetal_widthの相関が非常に高いことが一目で分かります。

○サンプルコード7:matplotlibとの統合によるアニメーション

動的なデータ可視化は、時系列データの分析に特に有効です。

matplotlibのアニメーション機能を使って、時間とともに変化するペアプロットを作成してみましょう。

import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import pandas as pd
import numpy as np

# ダミーデータの作成(時系列データをシミュレート)
np.random.seed(0)
dates = pd.date_range('20210101', periods=100)
df = pd.DataFrame({
    'date': dates,
    'A': np.random.randn(100).cumsum(),
    'B': np.random.randn(100).cumsum(),
    'C': np.random.randn(100).cumsum(),
    'D': np.random.randn(100).cumsum()
})

# アニメーションの初期化関数
def init():
    sns.pairplot(df.iloc[:1, 1:])
    return plt.gcf()

# アニメーションの更新関数
def update(frame):
    plt.clf()
    sns.pairplot(df.iloc[:frame, 1:])
    plt.suptitle(f'Date: {df.iloc[frame-1].date.strftime("%Y-%m-%d")}')
    return plt.gcf()

# アニメーションの作成
ani = animation.FuncAnimation(plt.figure(), update, frames=range(1, len(df)+1),
                              init_func=init, interval=100)

# アニメーションの保存(GIF形式)
ani.save('pairplot_animation.gif', writer='pillow')

実行結果

[時間とともに変化するペアプロットのアニメーションGIFが生成されます]

生成されたアニメーションを見ると、時間経過とともに変数間の関係性がどのように変化するかが分かります。

例えば、特定の時点で相関が急激に変化する様子などが観察できるかもしれません。

●よくあるエラーと対処法

ペアプロットを使用する際、いくつかの一般的なエラーに遭遇することがあります。

このエラーを理解し、適切に対処することで、スムーズなデータ分析が可能になります。

○DataFrameの列名が一致しない場合

ペアプロットを作成する際、指定した列名がDataFrameに存在しないとエラーが発生します。

エラーメッセージの例

KeyError: "['非存在の列名'] not in index"

対処法として、DataFrameの列名を確認し、正しい列名を指定しましょう。

次のコードでDataFrameの列名を確認できます。

print(df.columns)

○メモリ不足エラーの解決策

大規模なデータセットを使用する場合、メモリ不足エラーが発生することがあります。

エラーメッセージの例

MemoryError: Unable to allocate array with shape (1000000, 1000000) and data type float64

対処法として、データのサブセットを使用するか、データをダウンサンプリングしてみましょう。

ここでは、データの一部を使用する例を紹介します。

# データの一部(例:最初の1000行)を使用
sns.pairplot(df.head(1000))

○グラフが正しく表示されない時の対処

グラフが期待通りに表示されない場合、データ型の不一致や欠損値が原因であることがあります。

対処法として、データ型を確認し、必要に応じて変換します。

また、欠損値を適切に処理しましょう。

# データ型の確認
print(df.dtypes)

# データ型の変換(例:文字列を数値に変換)
df['数値列'] = pd.to_numeric(df['文字列列'], errors='coerce')

# 欠損値の処理(例:欠損値を含む行を削除)
df_cleaned = df.dropna()

# クリーニング後のデータでペアプロットを作成
sns.pairplot(df_cleaned)

●ペアプロットの実践的応用例

ペアプロットは単なるデータ可視化ツールではありません。

実務において、様々な分野で活躍する強力な味方となります。

ここからは、ペアプロットの実践的な応用例を見ていきましょう。

皆さんのプロジェクトにすぐに活かせるヒントが見つかるかもしれません。

○サンプルコード8:機械学習の特徴量選択

機械学習モデルの精度向上には、適切な特徴量の選択が欠かせません。

ペアプロットを使えば、特徴量間の関係性を視覚的に把握でき、効果的な特徴量の選択に役立ちます。

import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston

# ボストン住宅価格データセットの読み込み
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['PRICE'] = boston.target

# 相関の強い特徴量を選択
corr_matrix = df.corr().abs()
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool))
to_drop = [column for column in upper.columns if any(upper[column] > 0.8)]

# 選択された特徴量のペアプロット
sns.pairplot(df.drop(to_drop, axis=1), plot_kws={'alpha': 0.6})
plt.tight_layout()
plt.show()

実行結果

[選択された特徴量のペアプロット画像が表示されます]

生成されたグラフから、住宅価格(PRICE)と各特徴量の関係性が一目瞭然です。

例えば、LSTAT(低所得者層の割合)と住宅価格に強い負の相関があることが分かります。

○サンプルコード9:金融データの分析

金融業界では、複数の指標間の関係性を把握することが重要です。

ペアプロットを使えば、株価、取引量、経済指標などの関係を効果的に可視化できます。

import yfinance as yf
import seaborn as sns
import matplotlib.pyplot as plt

# 株価データの取得(例:Apple, Google, Microsoft)
tickers = ['AAPL', 'GOOGL', 'MSFT']
data = yf.download(tickers, start="2022-01-01", end="2023-01-01")

# 終値のみを使用
close_prices = data['Close']

# 日次リターンの計算
returns = close_prices.pct_change()

# ペアプロットの作成
sns.pairplot(returns, diag_kind='kde')
plt.tight_layout()
plt.show()

実行結果

[株価リターンのペアプロット画像が表示されます]

生成されたグラフから、各企業の株価リターンの分布と相関関係が見て取れます。

例えば、AppleとMicrosoftのリターンに正の相関があることが分かります。

○サンプルコード10:医療データの可視化

医療分野では、患者のバイタルサインや検査結果など、多くの変数を同時に考慮する必要があります。

ペアプロットを使用すれば、複数の指標間の関係性を効率的に把握できます。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 架空の医療データの作成
np.random.seed(0)
n = 1000
df = pd.DataFrame({
    'Age': np.random.normal(50, 15, n),
    'BMI': np.random.normal(25, 5, n),
    'Blood_Pressure': np.random.normal(120, 20, n),
    'Cholesterol': np.random.normal(200, 40, n),
    'Glucose': np.random.normal(100, 20, n),
    'Heart_Disease': np.random.choice([0, 1], n, p=[0.8, 0.2])
})

# ペアプロットの作成
sns.pairplot(df, hue='Heart_Disease', palette={0: "blue", 1: "red"})
plt.tight_layout()
plt.show()

実行結果

[医療データのペアプロット画像が表示されます]

生成されたグラフから、心疾患の有無(青:なし、赤:あり)と各指標の関係が分かります。

例えば、年齢が高く、BMIが高い患者ほど心疾患のリスクが高い傾向が見て取れます。

○サンプルコード11:マーケティングデータの解析

マーケティング分野では、顧客の行動や特性を多角的に分析することが重要です。

ペアプロットを使えば、様々な指標間の関係性を一目で把握できます。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 架空のマーケティングデータの作成
np.random.seed(0)
n = 1000
df = pd.DataFrame({
    'Age': np.random.normal(35, 10, n),
    'Income': np.random.normal(50000, 15000, n),
    'Spending': np.random.normal(5000, 2000, n),
    'Time_on_Site': np.random.normal(30, 10, n),
    'Clicks': np.random.poisson(20, n),
    'Customer_Type': np.random.choice(['New', 'Returning'], n, p=[0.3, 0.7])
})

# ペアプロットの作成
sns.pairplot(df, hue='Customer_Type', palette={'New': "green", 'Returning': "orange"})
plt.tight_layout()
plt.show()

実行結果

[マーケティングデータのペアプロット画像が表示されます]

生成されたグラフから、新規顧客(緑)とリピーター(オレンジ)の特性の違いが分かります。

例えば、リピーターの方が平均的に収入が高く、サイト滞在時間も長い傾向が見て取れます。

まとめ

ペアプロットは、データ可視化の基本的なツールでありながら、非常に強力な分析手法です。

本記事では、Pythonを使ったペアプロットの基本から応用まで、幅広く解説しました。

紹介した技術を実践し、皆さんのデータ分析スキルを一段階上のレベルに引き上げて。

データサイエンスの世界での成功を心からお祈りしています。