8. データ処理の基礎と可視化(見える化)
前回はエラー処理について学びました。今回は、データを分析して視覚的に表現する方法を学んでいきましょう。
8.1 平均・合計・最大値・最小値を求めてみよう
基本的な統計値の計算方法を学びます:
テストの点数データ
# テストの点数データ
scores = [78, 85, 92, 67, 88, 73, 95, 82, 89, 70]
# 基本的な統計値の計算
total = sum(scores) # 合計
average = total / len(scores) # 平均
maximum = max(scores) # 最大値
minimum = min(scores) # 最小値
print(f"合計点:{total}")
print(f"平均点:{average:.1f}")
print(f"最高点:{maximum}")
print(f"最低点:{minimum}")
# 独自の関数で計算する場合
def calculate_stats(numbers):
"""リストの基本統計量を計算する"""
if not numbers:
return 0, 0, 0, 0
total = sum(numbers)
avg = total / len(numbers)
max_val = max(numbers)
min_val = min(numbers)
return total, avg, max_val, min_val
8.2 テスト結果からクラスの傾向を読む
データを整理して傾向を分析します:
テスト結果からクラスの傾向を読む
import statistics # 統計関連の機能を使用
# テストの点数データ
test_scores = {
"国語": [75, 82, 91, 68, 88, 85, 77, 93, 84, 79],
"数学": [82, 79, 88, 92, 75, 85, 88, 90, 78, 84],
"英語": [88, 85, 92, 78, 85, 82, 87, 95, 89, 83]
}
for subject, scores in test_scores.items():
# 基本統計量の計算
mean = statistics.mean(scores) # 平均
median = statistics.median(scores) # 中央値
stdev = statistics.stdev(scores) # 標準偏差
print(f"\n{subject}の分析結果:")
print(f"平均点:{mean:.1f}")
print(f"中央値:{median}")
print(f"標準偏差:{stdev:.1f}")
print(f"点数分布:{min(scores)}~{max(scores)}")
8.3 matplotlib で簡単なグラフを描いてみる(折れ線図)
matplotlibを使って折れ線グラフを作成します:
日々の気温データ
import matplotlib.pyplot as plt
# 日々の気温データ
days = list(range(1, 8)) # 1週間分
temperatures = [22, 24, 23, 25, 26, 24, 23]
# グラフの作成
plt.figure(figsize=(10, 6)) # グラフのサイズ指定
plt.plot(days, temperatures, marker='o') # 折れ線グラフの描画
# グラフの表示
plt.title('1週間の気温変化')
plt.xlabel('日付')
plt.ylabel('気温(℃)')
plt.grid(True) # グリッド線の表示
plt.show()
8.4 軸ラベルやタイトルを付けて分かりやすくする
グラフを見やすくするための工夫を学びます:
月ごとの販売数データ
import matplotlib.pyplot as plt
# 月ごとの販売数データ
months = ['1月', '2月', '3月', '4月', '5月']
sales = [120, 150, 180, 160, 210]
# グラフの作成
plt.figure(figsize=(10, 6))
plt.plot(months, sales, marker='o', linewidth=2, color='blue')
# グラフの装飾
plt.title('月間販売数の推移', fontsize=14, pad=15)
plt.xlabel('月', fontsize=12)
plt.ylabel('販売数(個)', fontsize=12)
# グリッドの追加
plt.grid(True, linestyle='--', alpha=0.7)
# 各点にデータ値を表示
for i, v in enumerate(sales):
plt.text(i, v + 5, str(v), ha='center')
plt.show()
8.5 棒グラフや散布図にも挑戦!
異なる種類のグラフの作成方法を学びます:
教科別テスト結果
import matplotlib.pyplot as plt
# データの準備
subjects = ['国語', '数学', '英語', '理科', '社会']
scores = [75, 82, 88, 85, 78]
# 棒グラフの作成
plt.figure(figsize=(10, 6))
plt.bar(subjects, scores, color='skyblue')
plt.title('教科別テスト結果')
plt.xlabel('教科')
plt.ylabel('点数')
plt.show()
# 散布図の例
study_hours = [2, 3, 1.5, 4, 2.5, 3.5, 3, 4.5]
test_scores = [65, 75, 60, 85, 70, 80, 75, 90]
plt.figure(figsize=(10, 6))
plt.scatter(study_hours, test_scores)
plt.title('勉強時間とテスト結果の関係')
plt.xlabel('勉強時間(時間)')
plt.ylabel('テスト点数')
plt.grid(True)
plt.show()
8.6 目で見て理解しやすい「見える化」の力
データの可視化が持つ利点を学びます:
今月の天気の割合
import matplotlib.pyplot as plt
import numpy as np
# 月間の天気データ
weather_data = {
'晴れ': 18,
'曇り': 8,
'雨': 4
}
# 円グラフの作成
plt.figure(figsize=(10, 8))
plt.pie(weather_data.values(),
labels=weather_data.keys(),
autopct='%1.1f%%',
colors=['lightblue', 'gray', 'lightgreen'])
plt.title('今月の天気の割合')
# 凡例の表示
plt.legend()
plt.show()
8.7 部活の練習データなど身近な情報をグラフ化
実践的なデータの可視化例を学びます:
部活動の練習時間データ
import matplotlib.pyplot as plt
# 部活動の練習時間データ
days = ['月', '火', '水', '木', '金']
morning = [30, 45, 30, 45, 30] # 朝練時間(分)
evening = [90, 60, 90, 60, 90] # 放課後練習時間(分)
# 積み上げ棒グラフの作成
plt.figure(figsize=(10, 6))
plt.bar(days, morning, label='朝練')
plt.bar(days, evening, bottom=morning, label='放課後')
# グラフの装飾
plt.title('部活動の練習時間')
plt.xlabel('曜日')
plt.ylabel('練習時間(分)')
plt.legend()
plt.grid(True)
# 合計時間を表示
for i in range(len(days)):
total = morning[i] + evening[i]
plt.text(i, total + 5, f'計{total}分', ha='center')
plt.show()
課題 1. クラス全員の点数をグラフ化し、平均点を表示するプログラム
クラス全員の点数をグラフ化し、平均点を表示するプログラム
import matplotlib.pyplot as plt
import numpy as np
def visualize_class_scores():
# テストデータ
students = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
scores = [85, 92, 78, 88, 95, 73, 89, 84, 91, 87]
# 平均点の計算
average = np.mean(scores)
# グラフの作成
plt.figure(figsize=(12, 6))
# 棒グラフの描画
bars = plt.bar(students, scores, color='skyblue')
# 平均点の線を追加
plt.axhline(y=average, color='red', linestyle='--', label=f'平均点: {average:.1f}')
# グラフの装飾
plt.title('クラスのテスト結果', fontsize=14, pad=15)
plt.xlabel('生徒', fontsize=12)
plt.ylabel('点数', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.3)
plt.legend()
# 各棒グラフの上に点数を表示
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height,
f'{int(height)}',
ha='center', va='bottom')
plt.show()
# プログラムの実行
visualize_class_scores()
課題 2. 部活動の練習日数を棒グラフで表示し、タイトルやラベルを付けるプログラム
部活動の練習日数を棒グラフで表示し、タイトルやラベルを付けるプログラム
import matplotlib.pyplot as plt
def visualize_club_activities():
# 月ごとの練習日数データ
months = ['4月', '5月', '6月', '7月', '8月', '9月']
regular_days = [15, 18, 20, 16, 22, 19] # 通常練習
special_days = [2, 3, 5, 8, 10, 4] # 特別練習
# グラフのサイズ設定
plt.figure(figsize=(12, 7))
# バーの位置を計算
x = np.arange(len(months))
width = 0.35
# 棒グラフの作成
plt.bar(x - width/2, regular_days, width, label='通常練習',
color='lightblue')
plt.bar(x + width/2, special_days, width, label='特別練習',
color='lightgreen')
# グラフの装飾
plt.title('部活動月間練習日数', fontsize=14, pad=15)
plt.xlabel('月', fontsize=12)
plt.ylabel('練習日数', fontsize=12)
plt.xticks(x, months)
plt.legend()
plt.grid(True, linestyle='--', alpha=0.3)
# 各棒グラフの上に日数を表示
for i, v in enumerate(regular_days):
plt.text(i - width/2, v + 0.5, str(v), ha='center')
for i, v in enumerate(special_days):
plt.text(i + width/2, v + 0.5, str(v), ha='center')
# 合計日数を表示
total_days = [r + s for r, s in zip(regular_days, special_days)]
for i, total in enumerate(total_days):
plt.text(i, max(regular_days[i], special_days[i]) + 2,
f'計{total}日', ha='center')
plt.show()
# プログラムの実行
visualize_club_activities()
# チャレンジ:
# - 複数の部活動のデータを比較する
# - 練習時間も含めたグラフを作成する
# - 3ヶ月ごとの推移を折れ線グラフで表示する
まとめ
この章で学んだこと:
- 基本的な統計値の計算方法
- matplotlibによるグラフ作成の基本
- 様々なグラフの種類と使い分け
- グラフの見やすさを高める工夫
- 実践的なデータ可視化の方法
次の章では、より進んだ統計の基礎について学び、データ分析の手法を深めていきます!