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によるグラフ作成の基本
  • 様々なグラフの種類と使い分け
  • グラフの見やすさを高める工夫
  • 実践的なデータ可視化の方法

次の章では、より進んだ統計の基礎について学び、データ分析の手法を深めていきます!