Pythonで実施するデータ可視化のあれこれ

本日はpythonを用いたデータの可視化に関して説明します。
データ分析において可視化は「データの翻訳者」としての役割を果たします。
数値やテキストだけでは気付きにくい傾向や異常値が、視覚化することで直感的に理解できるようになります。
ぜひ習得してください。



Today's Contents



人間の脳はテキスト情報より視覚情報を6万倍速く処理できるという研究結果(MIT神経科学研究所)があります。
数値表で1時間かけて理解するデータ関係も、適切なグラフなら「一瞥」で把握可能です。
また、機械学習モデルの品質を左右するデータ前処理において、ボックスプロットやヒストグラムが不可欠。
数値的な外れ値検出(Z-score等)と視覚的検証の組み合わせが重要です。

【メリット】
1. チームコラボレーション促進:異分野メンバー間の共通言語として機能
2. 分析プロセスの透明性向上:データ加工の各段階を可視化可能
3. 仮説生成の加速:EDA段階での新たな問いの創出
4. モデル解釈性の向上:機械学習の特徴量重要度を可視化

【悪い例】
1. 誤解を招くスケール操作:y軸の不適切な切り取りで差を誇張
2. 過剰な装飾(チャートジャンク):3D効果で実際の数値が判別困難
3. カラーパレットの誤選択:色覚多様性への配慮不足
4. 不適切なグラフタイプ:円グラフで時系列比較を試みる

伝えるべき相手に誤解の生まれないよう心がけましょう。


主要な可視化手法とその特徴を整理します。


種類 用途 適したデータ型
折れ線グラフ 時系列変化 時間軸データ
棒グラフ カテゴリ比較 離散値
ヒストグラム 分布確認 連続値
散布図 相関分析 2変量連続値
ヒートマップ 密度表現 行列データ
ボックスプロット 分布要約 数値分布
円グラフ 構成比率 カテゴリ比率
ファンチャート プロセス分析 段階的データ

pythonでは基本的にmatplotlibと呼ばれるライブラリを用いてグラフを作成します。
matplotlibにはチートシートが存在しており、
とても有益ですのでぜひ一度御覧ください。
Matplotlib CheatSheets


今回はmatplotlibに加え、より簡単にかつ綺麗にグラフが作成できる、seabornを用いて実践します。
それではやってみましょう!

【ライブラリのインストール】
pip install seaborn


【環境設定】
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 日本語表示対応
plt.rcParams['font.family'] = 'MS Gothic'


【サンプルデータ作成】
# 時系列データ
date_rng = pd.date_range('2023-01-01', periods=90, freq='D')
ts_data = pd.Series(np.random.randn(90).cumsum(), index=date_rng)

# カテゴリデータ
categories = ['A', 'B', 'C', 'D']
values = np.random.randint(10, 100, size=4)

# 多次元データ
data = pd.DataFrame({
    'Age': np.random.normal(35, 10, 1000),
    'Income': np.random.normal(50000, 15000, 1000),
    'Category': np.random.choice(categories, 1000)
})

【1. 時系列分析(折れ線+棒グラフ)】
fig, ax1 = plt.subplots(figsize=(10,6))

color = 'tab:red'
ax1.set_xlabel('Date')
ax1.set_ylabel('Main Metric', color=color)
ax1.plot(ts_data.index, ts_data, color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()
color = 'tab:blue'
ax2.set_ylabel('Events', color=color)
ax2.bar(ts_data.index, np.random.randint(0,5,90), alpha=0.3, color=color)
plt.title('時系列トレンドとイベント発生状況')
plt.show()



【2. 分布比較(ヒストグラム+KDE)】
plt.figure(figsize=(10,6))
sns.histplot(data=data, x='Age', hue='Category', element='step', kde=True)
plt.title('カテゴリ別年齢分布')
plt.xlabel('Age')
plt.ylabel('Count')
plt.show()



【3. 相関分析(散布図行列)】
sns.pairplot(data[['Age', 'Income', 'Category']], hue='Category', height=2.5)
plt.suptitle('変数間相関分析', y=1.02)
plt.show()



【4. 異常値検出(ボックスプロット)】
plt.figure(figsize=(8,6))
sns.boxplot(x='Category', y='Income', data=data)
plt.title('カテゴリ別収入分布')
plt.xticks(rotation=45)
plt.show()



【5. 多次元データ可視化(ヒートマップ)】
corr_matrix = data[['Age', 'Income']].corr()
plt.figure(figsize=(8,6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0)
plt.title('変数間相関係数')
plt.show()




【ライブラリのインストール】
pip install plotly


【6. インタラクティブ化:Plotlyで動的グラフを作成】
import plotly.express as px
fig = px.scatter(data, x='Age', y='Income', color='Category')
fig.show()



Pythonの可視化技術は単なるグラフ作成を超え、データストーリーテリングの強力なツールとなります。
Matplotlibの基礎からSeabornの高レベルAPI、Plotlyのインタラクティブ機能まで、
目的に応じて適切なツールを選択することが重要です。
実装時は「誰が見るか」「何を伝えたいか」を常に意識し、データの本質を抽出する視覚化を心がけましょう。

本日はここまで。
お疲れ様でした!


コメント