PandasとMatplotlib / Seabornの高度な可視化
Pandasには基本的なプロット機能が組み込まれており、MatplotlibとSeabornを組み合わせることで、より豊富な可視化チャートを作成できます。
Pandasの組み込みプロット
折れ線グラフ
例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 中国語表示の設定(システムに中国語フォントのインストールが必要)
# plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.rcParams['axes.unicode_minus'] = False
# 時系列データを作成
dates = pd.date_range("2024-01-01", periods=30, freq="D")
df = pd.DataFrame({
"日付": dates,
"売上額": 100 + np.random.randn(30).cumsum(),
"訪問者数": 50 + np.random.randn(30).cumsum() * 10
})
df = df.set_index("日付")
print("データ:")
print(df.head())
print("\nプロットデータの準備が完了しました。plt.show() を使用してグラフを表示してください。")
import numpy as np
import matplotlib.pyplot as plt
# 中国語表示の設定(システムに中国語フォントのインストールが必要)
# plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.rcParams['axes.unicode_minus'] = False
# 時系列データを作成
dates = pd.date_range("2024-01-01", periods=30, freq="D")
df = pd.DataFrame({
"日付": dates,
"売上額": 100 + np.random.randn(30).cumsum(),
"訪問者数": 50 + np.random.randn(30).cumsum() * 10
})
df = df.set_index("日付")
print("データ:")
print(df.head())
print("\nプロットデータの準備が完了しました。plt.show() を使用してグラフを表示してください。")
棒グラフ
例
import pandas as pd
import matplotlib.pyplot as plt
# カテゴリデータ
data = {
"製品": ["A", "B", "C", "D", "E"],
"販売量": [120, 150, 90, 180, 110]
}
df = pd.DataFrame(data)
# 棒グラフ
print("df.plot.bar() を使用して棒グラフを描画します")
print("\nデータ:")
print(df)
import matplotlib.pyplot as plt
# カテゴリデータ
data = {
"製品": ["A", "B", "C", "D", "E"],
"販売量": [120, 150, 90, 180, 110]
}
df = pd.DataFrame(data)
# 棒グラフ
print("df.plot.bar() を使用して棒グラフを描画します")
print("\nデータ:")
print(df)
円グラフ
例
import pandas as pd
# 円グラフのデータ
s = pd.Series([30, 25, 20, 15, 10], index=["A", "B", "C", "D", "E"])
print("s.plot.pie() を使用して円グラフを描画します")
print("\nデータ:")
print(s)
# 円グラフのデータ
s = pd.Series([30, 25, 20, 15, 10], index=["A", "B", "C", "D", "E"])
print("s.plot.pie() を使用して円グラフを描画します")
print("\nデータ:")
print(s)
Matplotlibとの連携
例
import pandas as pd
import numpy as np
# データを作成
df = pd.DataFrame({
"x": range(10),
"y1": np.random.randn(10).cumsum(),
"y2": np.random.randn(10).cumsum() + 5
})
print("Matplotlib プロットのサンプルコード:")
print("""
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))
# 折れ線グラフ
ax1.plot(df["x"], df["y1"], label="Y1", color="blue")
ax1.plot(df["x"], df["y2"], label="Y2", color="red")
ax1.set_title("折れ線グラフ")
ax1.legend()
ax1.grid(True)
# 散布図
ax2.scatter(df["y1"], df["y2"], alpha=0.6)
ax2.set_title("散布図")
ax2.set_xlabel("Y1")
ax2.set_ylabel("Y2")
plt.tight_layout()
plt.show()
""")
import numpy as np
# データを作成
df = pd.DataFrame({
"x": range(10),
"y1": np.random.randn(10).cumsum(),
"y2": np.random.randn(10).cumsum() + 5
})
print("Matplotlib プロットのサンプルコード:")
print("""
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))
# 折れ線グラフ
ax1.plot(df["x"], df["y1"], label="Y1", color="blue")
ax1.plot(df["x"], df["y2"], label="Y2", color="red")
ax1.set_title("折れ線グラフ")
ax1.legend()
ax1.grid(True)
# 散布図
ax2.scatter(df["y1"], df["y2"], alpha=0.6)
ax2.set_title("散布図")
ax2.set_xlabel("Y1")
ax2.set_ylabel("Y2")
plt.tight_layout()
plt.show()
""")
サブプロットレイアウト
例
import pandas as pd
import numpy as np
# 2x2 サブプロットの例
print("2x2 サブプロットレイアウトの例:")
print("""
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
# 1. 折れ線グラフ
df["y1"].plot(ax=axes[0, 0])
axes[0, 0].set_title("折れ線グラフ")
# 2. 棒グラフ
df["y2"].plot.bar(ax=axes[0, 1])
axes[0, 1].set_title("棒グラフ")
# 3. ヒストグラム
df["y1"].hist(ax=axes[1, 0], bins=10)
axes[1, 0].set_title("ヒストグラム")
# 4. 円グラフ
pd.Series([10, 20, 30]).plot.pie(ax=axes[1, 1])
axes[1, 1].set_title("円グラフ")
plt.tight_layout()
plt.show()
""")
import numpy as np
# 2x2 サブプロットの例
print("2x2 サブプロットレイアウトの例:")
print("""
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
# 1. 折れ線グラフ
df["y1"].plot(ax=axes[0, 0])
axes[0, 0].set_title("折れ線グラフ")
# 2. 棒グラフ
df["y2"].plot.bar(ax=axes[0, 1])
axes[0, 1].set_title("棒グラフ")
# 3. ヒストグラム
df["y1"].hist(ax=axes[1, 0], bins=10)
axes[1, 0].set_title("ヒストグラム")
# 4. 円グラフ
pd.Series([10, 20, 30]).plot.pie(ax=axes[1, 1])
axes[1, 1].set_title("円グラフ")
plt.tight_layout()
plt.show()
""")
Seabornの高度な可視化
例
import pandas as pd
import numpy as np
# Seabornの機能をデモする
print("Seaborn 可視化の例:")
print("""
import seaborn as sns
import matplotlib.pyplot as plt
# スタイルを設定
sns.set_style("whitegrid")
# 1. 関係図
fig, ax = plt.subplots(figsize=(8, 5))
sns.lineplot(data=df, x="x", y="y1", ax=ax)
ax.set_title("折れ線グラフ")
# 2. 分布図
sns.histplot(df["y1"], kde=True, ax=ax)
# 3. 箱ひげ図
sns.boxplot(data=df, x="category", y="value")
# 4. ヒートマップ
sns.heatmap(df.corr(), annot=True, cmap="coolwarm")
plt.show()
""")
import numpy as np
# Seabornの機能をデモする
print("Seaborn 可視化の例:")
print("""
import seaborn as sns
import matplotlib.pyplot as plt
# スタイルを設定
sns.set_style("whitegrid")
# 1. 関係図
fig, ax = plt.subplots(figsize=(8, 5))
sns.lineplot(data=df, x="x", y="y1", ax=ax)
ax.set_title("折れ線グラフ")
# 2. 分布図
sns.histplot(df["y1"], kde=True, ax=ax)
# 3. 箱ひげ図
sns.boxplot(data=df, x="category", y="value")
# 4. ヒートマップ
sns.heatmap(df.corr(), annot=True, cmap="coolwarm")
plt.show()
""")
その他の拡張Matplotlibは低レベルの制御を提供し、Seabornは高レベルのインターフェースを提供します。この2つを組み合わせることで、さまざまなプロフェッショナルなグラフを作成できます。