PythonのMatplotlibとSeabornを活用した実戦的なデータ可視化手法

Pythonにおけるデータ解析の要となるライブラリ「Matplotlib」および「Seaborn」を使用し、統計データを効果的に視覚化する手法を解説します。基本的なチャートから、データの傾向を掴むための応用的なグラフまで、具体的な実装コードと共に紹介します。

1. 構成比を可視化する円グラフ(Pie Chart)

データの割合を示す円グラフでは、特定の要素を強調するための「explode」設定や、日本語表示のためのフォント設定が重要になります。

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

# 日本語フォントの設定(環境に合わせて変更してください)
plt.rcParams['font.sans-serif'] = ['IPAexGothic'] 

# データの定義
labels = ['専門職', '短期大学', '学士', '修士', 'その他']
shares = [0.25, 0.32, 0.33, 0.04, 0.06]
emphasis = [0, 0.1, 0, 0, 0] # 2番目の要素を切り出す

plt.figure(figsize=(8, 6))
plt.pie(x=shares, 
        labels=labels, 
        autopct='%.1f%%', 
        explode=emphasis, 
        startangle=90,
        shadow=True)

plt.title('最終学歴の構成比')
plt.show()

2. 比較に適した棒グラフ(Bar Chart)

垂直方向および水平方向の棒グラフを作成します。データの並び替え(ソート)を行うことで、比較が容易になります。

# サンプルデータの作成
gdp_data = pd.DataFrame({
    'Area': ['北京', '上海', '広東', '江蘇', '重慶', '浙江'],
    'GDP': [2.8, 3.0, 8.9, 8.5, 1.9, 5.1]
})

# 垂直棒グラフ
plt.figure(figsize=(10, 6))
bars = plt.bar(x=gdp_data['Area'], height=gdp_data['GDP'], color='skyblue', edgecolor='navy')

# 数値ラベルの追加
for bar in bars:
    yval = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2, yval + 0.1, yval, ha='center', va='bottom')

plt.ylabel('GDP (兆円)')
plt.title('地域別GDP分布')
plt.show()

# 水平棒グラフ(ソート済み)
sorted_gdp = gdp_data.sort_values(by='GDP')
plt.figure(figsize=(10, 6))
plt.barh(y=sorted_gdp['Area'], width=sorted_gdp['GDP'], color='green')
plt.xlabel('GDP (兆円)')
plt.title('地域別GDP推移(昇順)')
plt.show()

3. 時系列データの推移を示す折れ線グラフ(Line Chart)

時系列データの可視化では、日付フォーマットの調整が重要です。

import matplotlib.dates as mdates

# ダミーの時系列データ作成
date_range = pd.date_range(start='2023-10-01', periods=10)
traffic_stats = pd.DataFrame({
    'Date': date_range,
    'Users': [400, 120, 80, 65, 70, 310, 450, 420, 380, 390]
})

fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(traffic_stats['Date'], traffic_stats['Users'], 
        linestyle='-', marker='o', color='steelblue', label='ユーザー数')

# 日付フォーマットの設定
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d'))

plt.ylabel('訪問者数')
plt.title('日次ユーザーアクセス推移')
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend()
plt.show()

4. 多次元データを表現するヒートマップ(Heatmap)

Seabornライブラリを使用すると、相関や時間経過による密度の変化を直感的に表現できます。事前にpivot_tableでデータを整形する必要があります。

import seaborn as sns

# サンプル売上データ
sales_records = pd.DataFrame({
    'OrderDate': pd.to_datetime(['2021-01-10', '2021-01-15', '2021-02-20', '2022-01-05', '2022-02-14']),
    'Amount': [1500, 2300, 1200, 1800, 2100]
})

# 年月を抽出
sales_records['Year'] = sales_records['OrderDate'].dt.year
sales_records['Month'] = sales_records['OrderDate'].dt.month

# クロス集計
pivot_sales = sales_records.pivot_table(index='Month', columns='Year', values='Amount', aggfunc=np.sum)

# ヒートマップの描画
plt.figure(figsize=(8, 6))
sns.heatmap(data=pivot_sales, 
            cmap='YlGnBu', 
            annot=True, 
            fmt='.0f', 
            linewidths=.5)

plt.title('年度別・月別売上ヒートマップ')
plt.show()

タグ: matplotlib Pandas Seaborn data-visualization Python

8月15日 00:37 投稿