Skip to content

第 3 章 演習解答

第 3 章「データ可視化」の演習問題の解答例です。問題は 第 3 章 演習問題 を参照してください。

演習 3-1: 棒グラフで比較

問題を見る

import matplotlib.pyplot as plt
import matplotlib_fontja

cities = ["東京", "大阪", "札幌", "福岡", "那覇"]
temps = [16.3, 17.1, 9.2, 17.3, 23.3]

plt.bar(cities, temps)
plt.title("都市ごとの平均気温")
plt.xlabel("都市")
plt.ylabel("平均気温(℃)")
plt.show()

実行すると、5都市の平均気温を比較する棒グラフが表示されます(那覇の23.3℃が最も高く、札幌の9.2℃が最も低い)。日本語のラベルを文字化けさせないため、matplotlib_fontja をインポートしています。

演習 3-2: グラフの基本要素

問題を見る

import matplotlib.pyplot as plt
import matplotlib_fontja

temps = [22, 25, 28, 27, 24, 21, 19]
days = ["月", "火", "水", "木", "金", "土", "日"]

plt.plot(days, temps, marker="o", label="最高気温")
plt.title("1週間の気温の推移")
plt.xlabel("曜日")
plt.ylabel("気温(℃)")
plt.grid(True)
plt.legend()
plt.show()

実行すると、月曜から日曜にかけての気温の推移が折れ線グラフで表示されます(水曜の28℃がピーク)。

演習 3-3: 複数グラフの配置

問題を見る

import matplotlib.pyplot as plt
import matplotlib_fontja

subjects = ["国語", "数学", "英語", "理科", "社会"]
averages = [72, 81, 76, 85, 69]
scores = [55, 62, 70, 74, 78, 80, 81, 85, 88, 92, 66, 73, 79, 84, 90]

fig, axes = plt.subplots(1, 2, figsize=(10, 4))

axes[0].bar(subjects, averages)
axes[0].set_title("教科ごとの平均点")

axes[1].hist(scores, bins=5)
axes[1].set_title("点数の分布")

plt.tight_layout()
plt.show()

左に棒グラフ(理科の85点が最高)、右に点数のヒストグラムが並んで表示されます。

演習 3-4: 散布図と色分け

問題を見る

import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset("iris")
sns.scatterplot(data=df, x="petal_length", y="petal_width",
                hue="species")
plt.show()

setosa が左下に明確に分離し、versicolor と virginica は右上に向かって分布します。petal_length と petal_width の組み合わせで品種がよく分離できることがわかります。

演習 3-5: 探索的データ分析

問題を見る

import matplotlib.pyplot as plt
import matplotlib_fontja
import seaborn as sns

tips = sns.load_dataset("tips")

# 1. 基本情報の確認
print(tips.head())
print(tips.shape)
print(tips.describe())
print(tips.isnull().sum())

# 2. ヒストグラムと箱ひげ図
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].hist(tips["total_bill"], bins=20)
axes[0].set_title("会計金額の分布")
axes[1].boxplot(tips["total_bill"])
axes[1].set_title("会計金額の箱ひげ図")
plt.tight_layout()
plt.show()

# 3. 相関係数
print(tips[["total_bill", "tip"]].corr())
  • データは244行・7列で、欠損値はどの列にもありません(すべて0)
  • 会計金額の分布は右に歪んでおり、箱ひげ図では40ドル以上が外れ値として表示されます
  • 会計金額とチップの相関係数は約 0.68 で、比較的強い正の相関があります(会計金額が大きいほどチップも多い傾向)