開発はひらめきから始めるのもアリ
「これで分析してみたい」という感覚は、間違いではありません。分析では「解明したいこと」を明確にし、証明のために可視化を行うのが一般的ですが、可視化には「ひらめき」を得るという意義もあります。
正確さにこだわりすぎず、「このグラフを使ってみたい」という興味から試してみることも、新たな発見につながるかもしれません。
📊丸い形のヒートマップ
6×6の数値データを円のサイズと色で視覚的に表現しています。値が大きいほど円が大きく、赤に近い色で表示され、値が小さいほど青に近く円も小さくなります。また、カラーバーは値の範囲を示しています。
全体コードはこちら
python
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# サンプルデータの作成
np.random.seed(42)
data = pd.DataFrame(np.random.rand(6, 6), columns=list('ABCDEF'), index=list('123456'))
# 正規化: データをサイズ用にスケーリング(0-1)
normalized_data = (data - data.min().min()) / (data.max().max() - data.min().min())
# 色付け用のカラーマップ設定
cmap = plt.cm.coolwarm
# プロット設定
fig, ax = plt.subplots(figsize=(8, 8))
# 丸い形のヒートマップを作成
for y in range(data.shape[0]):
for x in range(data.shape[1]):
value = data.iloc[y, x]
size = normalized_data.iloc[y, x] * 1500 # 円のサイズをスケーリング
color = cmap(value) # 値をカラーマップで色に変換
ax.scatter(x + 0.5, y + 0.5, s=size, color=color, edgecolor='black', alpha=0.8)
# 軸設定
ax.set_xticks(np.arange(data.shape[1]) + 0.5)
ax.set_xticklabels(data.columns, fontsize=12)
ax.set_yticks(np.arange(data.shape[0]) + 0.5)
ax.set_yticklabels(data.index, fontsize=12)
# グリッド設定
ax.set_xlim(0, data.shape[1])
ax.set_ylim(0, data.shape[0])
ax.invert_yaxis()
ax.set_aspect('equal')
# カラーバーを追加
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=data.min().min(), vmax=data.max().max()))
sm.set_array([])
cbar = fig.colorbar(sm, ax=ax)
cbar.set_label('Value', fontsize=9)
# タイトル設定
plt.title('Circle-Shaped Heatmap', fontsize=16)
plt.show()
📊カテゴリ順位の推移を示すバンプチャート
各カテゴリ(A, B, C)の順位変化を年ごとに可視化したものです。縦軸は順位(低い値ほど上位)を、横軸は年を表し、線とマーカーで順位の推移を示しています。順位が逆転するポイントやトレンドが一目でわかるようになっています
全体コードはこちら
python
import matplotlib.pyplot as plt
import pandas as pd
# サンプルデータの作成
data = {
"Year": [2020, 2020, 2020, 2021, 2021, 2021, 2022, 2022, 2022],
"Category": ["A", "B", "C", "A", "B", "C", "A", "B", "C"],
"Rank": [1, 2, 3, 2, 1, 3, 3, 1, 2]
}
df = pd.DataFrame(data)
# ピボットテーブルを作成(カテゴリごとに順位を軸に持つ)
pivot_df = df.pivot(index="Category", columns="Year", values="Rank")
# プロット設定
plt.figure(figsize=(10, 6))
# 各カテゴリの線を描画
for category in pivot_df.index:
plt.plot(
pivot_df.columns, # 年
pivot_df.loc[category], # 順位
marker="o", label=category
)
# 軸の反転(順位が低い値ほど下に来るようにする)
plt.gca().invert_yaxis()
# グラフの装飾
plt.title("Bump Chart", fontsize=16)
plt.xlabel("Year", fontsize=12)
plt.ylabel("Rank", fontsize=12)
plt.xticks(pivot_df.columns, fontsize=10)
plt.yticks(range(1, len(pivot_df.index) + 1), fontsize=10)
plt.grid(axis="y", linestyle="--", alpha=0.5)
plt.legend(title="Category", fontsize=10)
# 表示
plt.show()
📊3D位置プロット
ランダムに生成された15個の3D座標データ(x, y, z)の分布を示しています。各点はz軸の値に応じて色付けされ、カラーマップ(viridis)でその高さを表現しています。また、3次元空間でのデータ位置や分布を視覚的に確認するためのプロットです。
全体コードはこちら
python
import matplotlib.pyplot as plt
import numpy as np
# サンプルデータの作成 (3D位置データ)
np.random.seed(42)
x = np.random.uniform(0, 10, 15) # x座標
y = np.random.uniform(0, 10, 15) # y座標
z = np.random.uniform(0, 10, 15) # z座標
# 3Dプロットの作成
fig = plt.figure(figsize=(7, 5))
ax = fig.add_subplot(111, projection='3d')
# プロット (scatter)
ax.scatter(x, y, z, c=z, cmap='viridis', s=30, alpha=0.8)
# 軸ラベルとタイトル
ax.set_xlabel('X Position', fontsize=12)
ax.set_ylabel('Y Position', fontsize=12)
ax.set_zlabel('Z Position', fontsize=9)
ax.set_title('3D Position Plot', fontsize=16)
# 表示
plt.show()