データの可視化(data visualization)は,データを視覚的に表現することで,データの特徴やパターンを理解しやすくする手法である.Python では,主に matplotlib や seaborn といったライブラリを用いてデータの可視化を行う.
目的に応じたグラフを選択することで,伝えたい情報をより効果的に相手に伝えることができる.
ここでは,よく使われるグラフをいくつか紹介する.
折れ線グラフ
折れ線グラフ(line chart / line graph)は,時系列データを表現するのに適している.横軸に時間,縦軸に数値をとり,各データポイントを直線で結ぶ.データの変化を視覚的に把握しやすく,傾向を示すのに適している.
以下は,日本の平均寿命を示す表である.
| 2005年 |
78.56 |
85.52 |
| 2010年 |
79.55 |
86.3 |
| 2015年 |
80.75 |
86.99 |
| 2018年 |
81.25 |
87.32 |
| 2019年 |
81.41 |
87.45 |
import matplotlib.pyplot as plt
import numpy as np
years = [2005, 2010, 2015, 2018, 2019]
male = [78.56, 79.55, 80.75, 81.25, 81.41]
female = [85.52, 86.3, 86.99, 87.32, 87.45]
plt.plot(years, male, marker="o", label="Male")
plt.plot(years, female, marker="o", label="Female")
plt.xlabel("Year")
plt.ylabel("Life Expectancy")
plt.title("Life Expectancy in Japan")
plt.legend()
plt.show()
棒グラフ
棒グラフ(bar chart / bar graph)は,棒の高さで数値を表現する.横軸に項目,縦軸に数値をとり,各項目の値を棒で示す.横棒グラフの場合は,縦軸に項目,横軸に数値をとる.棒グラフは,項目ごとの数値を比較するのに適している.
import matplotlib.pyplot as plt
items = ["A", "B", "C", "D"]
sales = [30, 80, 45, 60]
plt.bar(items, sales, color="skyblue")
plt.xlabel("Items")
plt.ylabel("Sales")
plt.title("Sales by Item")
plt.show()
箱ひげ図
箱ひげ図(box plot)は,データの分布を視覚的に示すのに適している.箱ひげ図は,下記の統計量をグラフで示すことができる.
- 最小値
- 第1四分位数(Q1)
- 中央値(median)
- 第3四分位数(Q3)
- 最大値
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
peach_weights = np.random.normal(130, 10, size=100)
orange_weights = np.random.normal(125, 20, size=100)
tomato_weights = np.random.normal(120, 30, size=100)
data = [peach_weights, orange_weights, tomato_weights]
labels = ["Peach", "Orange", "Tomato"]
plt.boxplot(data, tick_labels=labels)
plt.ylabel("Weight (g)")
plt.title("Box Plot of Fruit Weights")
plt.grid()
plt.show()
練習問題
練習 11.1 以下のデータを用いて,折れ線グラフを作成せよ.
import matplotlib.pyplot as plt
years = [2010, 2011, 2012, 2013, 2014, 2015]
sales_A = [50, 55, 60, 65, 70, 75]
sales_B = [30, 35, 40, 45, 50, 55]
sales_C = [20, 25, 30, 35, 40, 45]
# ここにコードを記述する
練習 11.2 以下のデータを用いて,棒グラフを作成せよ.
日本FP協会の小学生『将来なりたい職業』ランキングより,男子児童のデータは以下の通りである.
| サッカー選手・監督など |
70 |
| 野球選手・監督など |
68 |
| 医師 |
33 |
| ユーチューバー |
28 |
| 教師 |
23 |
| バスケットボール選手・コーチ |
22 |
| 会社員・事務員 |
22 |
| ゲーム制作関連 |
17 |
| 建築士 |
14 |
| 鉄道の運転士・鉄道関連 |
14 |
import matplotlib.pyplot as plt
jobs = [
"Soccer",
"Baseball",
"Doctor",
"YouTuber",
"Teacher",
"Basketball",
"Office Worker",
"Game Developer",
"Architect",
"Train Operator",
]
votes = [70, 68, 33, 28, 23, 22, 22, 17, 14, 14]
# ここにコードを記述する
練習 11.3 以下のデータを用いて,箱ひげ図を作成せよ.
A地点,B地点,C地点の1LDKの家賃をそれぞれ100件ずつランダムに生成したデータは以下の通りである.
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
location_A = np.random.normal(10, 2, size=100)
location_B = np.random.normal(12, 3, size=100)
location_C = np.random.normal(15, 5, size=100)
data = [location_A, location_B, location_C]
labels = ["Location A", "Location B", "Location C"]
# ここにコードを記述する
練習 11.4 興味のあるデータセットを見つけ,そのデータを用いて適切なグラフを作成し,そのグラフから得られる知見を述べよ.
Excel や csv ファイルなどは,Pandas を用いて読み込むことができる.