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()