Step 12:平均値を計算しよう

📊 ステップ12: 平均値を計算しよう

データの代表値を理解しよう!

ステップ11では、Python基礎の総復習をしました。今回からは、いよいよデータ分析の世界に入ります。まずは最も基本的な統計量である「平均値」について学びましょう。

📖 このステップで学ぶこと

・平均値とは何か

・Pythonで平均値を計算する方法

・sum()関数とlen()関数の使い方

・実際のデータで平均を計算する方法

・平均値を使うときの注意点

学習時間の目安: 2〜2.5時間

🎯 1. 平均値とは何か?

まず、「平均値」という言葉の意味を確認しましょう。

🔰 平均値の基本的な意味

平均値(へいきんち)とは、たくさんあるデータを、1つの値で代表させたものです。英語では「mean(ミーン)」または「average(アベレージ)」と言います。

📌 平均値を使う理由

例えば、10人分のテストの点数があったとします:

85点、92点、78点、95点、88点、76点、90点、84点、89点、91点

10個の数字を全部見るのは大変ですよね。

でも「平均点は86.8点」と言えば、クラス全体の成績が一目でわかります

これが平均値の便利なところです!

📝 平均値の計算方法

平均値の計算方法は、とてもシンプルです。

📝 平均値の計算式

平均値 = データの合計 ÷ データの個数

つまり、「全部足して、個数で割る」だけです。

具体的な例で見てみましょう。

💡 計算例:5人のテストの平均点

データ: 80点、90点、70点、85点、75点(5人分)

ステップ1:全部足す

80 + 90 + 70 + 85 + 75 = 400

ステップ2:個数で割る

400 ÷ 5 = 80

答え: 平均点は 80点

📘 日常生活での平均値

平均値は、日常のあちこちで使われています。

📌 身近な平均値の例

場面 何の平均? 何がわかる?
テストの平均点 クラス全員の点数 クラス全体の成績レベル
平均気温 1日・1ヶ月の気温 その期間の暑さ・寒さ
平均年収 働く人の収入 収入水準の目安
平均売上 毎日の売上 お店の業績

🔢 2. Pythonで平均値を計算する

手計算で平均を求めるのは大変です。Pythonを使えば、どんなに多いデータでも一瞬で計算できます。

🔰 平均計算に使う2つの関数

Pythonで平均値を計算するには、2つの便利な関数を組み合わせます。

📌 覚えておきたい2つの関数

関数 役割 使い方
sum() リストの中身を全部足す sum([1, 2, 3]) → 6
len() リストの要素数を数える len([1, 2, 3]) → 3

📝 ステップ1:sum()で合計を計算する

sum()関数は、リストの中の数字を全部足し算してくれます。

コード:sum()で合計を計算

# 数字のリストを作成
numbers = [10, 20, 30, 40, 50]

# sum()関数で合計を計算
total = sum(numbers)

# 結果を表示
print(f"リスト: {numbers}")
print(f"合計: {total}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

リスト: [10, 20, 30, 40, 50]
合計: 150

💡 コードの解説

numbers = [10, 20, 30, 40, 50]

 ・数字が入ったリストを作成しています

total = sum(numbers)

 ・sum()関数にリストを渡すと、中身を全部足します

 ・10 + 20 + 30 + 40 + 50 = 150

 ・結果の150がtotalに入ります

📝 ステップ2:len()でデータの個数を数える

len()関数は、リストに何個のデータが入っているかを教えてくれます。

コード:len()で個数を数える

# 数字のリストを作成
numbers = [10, 20, 30, 40, 50]

# len()関数で個数を数える
count = len(numbers)

# 結果を表示
print(f"リスト: {numbers}")
print(f"個数: {count}個")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

リスト: [10, 20, 30, 40, 50]
個数: 5個

💡 コードの解説

count = len(numbers)

 ・len()関数にリストを渡すと、要素の数を返します

 ・numbersには5個の数字が入っているので、5が返ります

 ・lenは「length(長さ)」の略です

📝 ステップ3:平均値を計算する

合計と個数がわかったら、割り算するだけで平均値が出ます!

コード:平均値を計算(ステップごと)

# 数字のリストを作成
numbers = [10, 20, 30, 40, 50]

# ステップ1:合計を計算
total = sum(numbers)
print(f"合計: {total}")

# ステップ2:個数を数える
count = len(numbers)
print(f"個数: {count}")

# ステップ3:平均を計算(合計 ÷ 個数)
average = total / count
print(f"平均: {average}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

合計: 150
個数: 5
平均: 30.0

💡 コードの解説

average = total / count

 ・total(合計150)をcount(個数5)で割ります

 ・150 ÷ 5 = 30.0

 ・Pythonの割り算は結果が小数になります(30ではなく30.0)

📘 1行でシンプルに書く

慣れてきたら、1行でまとめて書くこともできます。

コード:1行で平均を計算

# 数字のリスト
numbers = [10, 20, 30, 40, 50]

# 1行で平均を計算
average = sum(numbers) / len(numbers)

print(f"平均: {average}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

平均: 30.0

📝 平均値の書き方まとめ

average = sum(リスト) / len(リスト)

この1行を覚えておけば、どんなリストでも平均が計算できます!

📈 3. 実際のデータで平均を計算してみよう

ここからは、より実践的な例で平均値を計算してみましょう。

📘 例1:テストの平均点を計算する

10人分のテストの点数から、平均点を計算してみます。

コード:テストの平均点

# 10人分のテストの点数
scores = [85, 92, 78, 95, 88, 76, 90, 84, 89, 91]

# 平均点を計算
average = sum(scores) / len(scores)

# 結果を表示
print(f"テストの点数: {scores}")
print(f"人数: {len(scores)}人")
print(f"合計点: {sum(scores)}点")
print(f"平均点: {average}点")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

テストの点数: [85, 92, 78, 95, 88, 76, 90, 84, 89, 91]
人数: 10人
合計点: 868点
平均点: 86.8点

💡 ポイント

10個の点数を1つ1つ見るより、「平均86.8点」と言った方が、

クラス全体の成績がすぐに理解できます

これが平均値の便利なところです!

📘 例2:月別売上の平均を計算する

お店の1年間の売上データから、月平均を計算してみましょう。

コード:月別売上の平均

# 1月〜12月の売上(万円)
monthly_sales = [120, 135, 142, 158, 165, 172, 
                 180, 175, 168, 162, 155, 190]

# 平均売上を計算
average_sales = sum(monthly_sales) / len(monthly_sales)

# 結果を表示
print(f"年間合計: {sum(monthly_sales)}万円")
print(f"月数: {len(monthly_sales)}ヶ月")
print(f"月平均売上: {average_sales:.1f}万円")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

年間合計: 1922万円
月数: 12ヶ月
月平均売上: 160.2万円

💡 {average_sales:.1f} の意味

:.1f は「小数点以下1桁まで表示」という指定です。

・160.166666… → 160.2 のように見やすく表示されます

:.2f なら小数点以下2桁まで表示されます

📘 例3:目標と比較する

平均値を計算したら、目標と比較することで評価ができます。

コード:目標との比較

# 月別売上データ(万円)
monthly_sales = [120, 135, 142, 158, 165, 172, 
                 180, 175, 168, 162, 155, 190]

# 平均売上を計算
average_sales = sum(monthly_sales) / len(monthly_sales)

# 目標を設定
target = 160

# 結果を表示
print(f"月平均売上: {average_sales:.1f}万円")
print(f"目標: {target}万円")
print()

# if文で判定
if average_sales >= target:
    print("✅ 目標達成!おめでとうございます!")
else:
    diff = target - average_sales
    print(f"❌ 目標未達成(あと{diff:.1f}万円)")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

月平均売上: 160.2万円
目標: 160万円

✅ 目標達成!おめでとうございます!

📘 例4:辞書データから平均を計算する

辞書(dictionary)に入っているデータから平均を計算することもできます。

コード:辞書から平均を計算

# 生徒と点数の辞書
scores = {
    "太郎": 85,
    "花子": 92,
    "次郎": 78,
    "三郎": 88
}

# 辞書の値(点数)だけを取り出して平均を計算
average = sum(scores.values()) / len(scores)

# 結果を表示
print("【成績一覧】")
for name, score in scores.items():
    print(f"{name}: {score}点")

print(f"\n平均点: {average:.1f}点")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【成績一覧】
太郎: 85点
花子: 92点
次郎: 78点
三郎: 88点

平均点: 85.8点

💡 scores.values() の意味

辞書.values()は、辞書の値だけを取り出します。

・scores.values() → [85, 92, 78, 88] を返す

・キー(名前)は含まれません

・sum()やlen()と組み合わせて平均が計算できます

🔧 4. 平均を計算する関数を作ろう

何度も平均を計算する場合は、関数にしておくと便利です。

🔰 基本の平均関数

コード:平均値を計算する関数

def calculate_average(data):
    """
    リストの平均値を計算して返す関数
    
    引数:
        data: 数値のリスト
    
    戻り値:
        平均値(データがない場合は0)
    """
    # データがない場合のチェック
    if len(data) == 0:
        return 0
    
    # 平均を計算して返す
    return sum(data) / len(data)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

💡 各部分の解説

def calculate_average(data):

 ・calculate_averageという名前の関数を定義

 ・dataという引数でリストを受け取ります

if len(data) == 0:

 ・データが空の場合をチェック

 ・空のリストで割り算するとエラーになるため

return sum(data) / len(data)

 ・平均値を計算して、呼び出し元に返します

📘 関数を使ってみよう

コード:関数を使って平均を計算

# 平均値を計算する関数
def calculate_average(data):
    if len(data) == 0:
        return 0
    return sum(data) / len(data)

# --- ここから関数を使う ---

# テストの点数
test_scores = [85, 92, 78, 95, 88]
avg = calculate_average(test_scores)
print(f"テストの平均点: {avg}点")

# 売上データ
sales = [120000, 150000, 98000, 135000, 142000]
avg_sales = calculate_average(sales)
print(f"平均売上: {avg_sales:,.0f}円")

# 体温データ
temps = [36.5, 36.3, 36.7, 36.4, 36.6]
avg_temp = calculate_average(temps)
print(f"平均体温: {avg_temp:.2f}℃")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

テストの平均点: 87.6点
平均売上: 129,000円
平均体温: 36.50℃

💡 関数を作るメリット

・同じコードを何度も書かなくて済む

・コードが読みやすくなる

・エラーチェック(空のリスト対策)を毎回書かなくて済む

⚠️ 5. 平均値の注意点

平均値はとても便利ですが、使うときに気をつけることがあります

🔰 注意点1:外れ値の影響

外れ値(はずれち)とは、他のデータから極端に離れた値のことです。

平均値は、外れ値の影響を受けやすいという特徴があります。

コード:外れ値の影響を確認

# 通常のデータ
normal_data = [20, 22, 21, 23, 22, 21, 20]
avg_normal = sum(normal_data) / len(normal_data)
print(f"通常データ: {normal_data}")
print(f"平均: {avg_normal:.1f}")

print()

# 外れ値が含まれるデータ(100が外れ値)
with_outlier = [20, 22, 21, 23, 22, 21, 100]
avg_outlier = sum(with_outlier) / len(with_outlier)
print(f"外れ値あり: {with_outlier}")
print(f"平均: {avg_outlier:.1f}")

print()
print(f"平均の差: {avg_outlier - avg_normal:.1f}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

通常データ: [20, 22, 21, 23, 22, 21, 20]
平均: 21.3

外れ値あり: [20, 22, 21, 23, 22, 21, 100]
平均: 32.7

平均の差: 11.4

⚠️ 外れ値の影響

1つの値が100に変わっただけで、平均が21.3 → 32.7と大きく変化しました!

外れ値の例:

年収:1人の大富豪が平均を引き上げる

気温:異常気象の日が含まれる

売上:特別なイベントの日が含まれる

外れ値がある場合は、中央値も一緒に見ると良いです(次のステップで学習)。

🔰 注意点2:0で割るエラー

空のリストで平均を計算しようとすると、エラーが発生します。

⚠️ エラーが発生するケース

# 空のリスト
empty_list = []

# これはエラーになる!
average = sum(empty_list) / len(empty_list)  # ZeroDivisionError!

エラー内容:

ZeroDivisionError: division by zero(0で割ることはできません)

sum([]) は 0、len([]) も 0 なので、0 ÷ 0 になってしまいます。

このエラーを防ぐには、事前にチェックする必要があります。

コード:安全に平均を計算する関数

def safe_average(data):
    """安全に平均を計算する関数"""
    # データがない場合のチェック
    if len(data) == 0:
        print("データがありません")
        return None
    
    return sum(data) / len(data)

# テスト1:空のリスト
empty_list = []
result = safe_average(empty_list)
print(f"結果: {result}")

print()

# テスト2:データがある場合
numbers = [10, 20, 30]
result = safe_average(numbers)
print(f"結果: {result}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

データがありません
結果: None

結果: 20.0

📊 6. グループ別の平均を比較する

データ分析では、複数のグループの平均を比較することがよくあります。

📘 例1:店舗別の平均売上

コード:店舗別平均売上の比較

# 店舗別売上データ(万円)
stores = {
    "東京店": [150, 165, 142, 158, 172],
    "大阪店": [120, 135, 128, 142, 138],
    "名古屋店": [98, 105, 112, 108, 115]
}

print("【店舗別平均売上】")

# 各店舗の平均を計算して表示
for store, sales in stores.items():
    avg = sum(sales) / len(sales)
    print(f"{store}: {avg:.1f}万円")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【店舗別平均売上】
東京店: 157.4万円
大阪店: 132.6万円
名古屋店: 107.6万円

📘 例2:最優秀店舗を見つける

コード:最も平均が高い店舗を見つける

# 店舗別売上データ(万円)
stores = {
    "東京店": [150, 165, 142, 158, 172],
    "大阪店": [120, 135, 128, 142, 138],
    "名古屋店": [98, 105, 112, 108, 115]
}

# 各店舗の平均を計算して辞書に格納
store_averages = {}
for store, sales in stores.items():
    store_averages[store] = sum(sales) / len(sales)

print("【店舗別平均売上】")
for store, avg in store_averages.items():
    print(f"{store}: {avg:.1f}万円")

# 最も平均が高い店舗を見つける
best_store = max(store_averages, key=store_averages.get)
print(f"\n🏆 最優秀店舗: {best_store} ({store_averages[best_store]:.1f}万円)")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【店舗別平均売上】
東京店: 157.4万円
大阪店: 132.6万円
名古屋店: 107.6万円

🏆 最優秀店舗: 東京店 (157.4万円)

💡 max()関数の使い方

max(store_averages, key=store_averages.get)

 ・辞書の中で最大の値を持つキーを返します

 ・key=store_averages.get は「値を基準に比較する」という指定

 ・これにより、最も平均売上が高い店舗名が取得できます

📝 練習問題

ここまで学んだことを、実際に手を動かして確認しましょう。

問題1:基本の平均計算(初級)

📋 問題

リスト [12, 18, 15, 20, 16, 14, 19] の平均値を計算してください。

解答例を見る

コード

numbers = [12, 18, 15, 20, 16, 14, 19]

average = sum(numbers) / len(numbers)

print(f"データ: {numbers}")
print(f"平均値: {average:.1f}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

データ: [12, 18, 15, 20, 16, 14, 19]
平均値: 16.3

問題2:平均との差を計算する(初級)

📋 問題

リスト [80, 85, 90, 75, 95] の平均を計算し、各要素が平均からどれだけ離れているかを表示してください。

解答例を見る

コード

scores = [80, 85, 90, 75, 95]

# 平均を計算
average = sum(scores) / len(scores)
print(f"平均点: {average}点")
print()

# 各点数と平均の差を計算
for score in scores:
    diff = score - average
    print(f"{score}点: 平均との差 {diff:+.0f}点")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

平均点: 85.0点

80点: 平均との差 -5点
85点: 平均との差 +0点
90点: 平均との差 +5点
75点: 平均との差 -10点
95点: 平均との差 +10点

💡 {:+.0f} の意味

+ はプラス記号を表示する指定です

・正の数には + が、負の数には – が表示されます

問題3:辞書から平均を計算(中級)

📋 問題

辞書 {“1月”: 18.5, “2月”: 19.2, “3月”: 22.1} から、平均気温を計算してください。

解答例を見る

コード

temperatures = {"1月": 18.5, "2月": 19.2, "3月": 22.1}

# 辞書の値だけを取り出して平均を計算
avg_temp = sum(temperatures.values()) / len(temperatures)

print("【月別気温】")
for month, temp in temperatures.items():
    print(f"{month}: {temp}℃")

print(f"\n平均気温: {avg_temp:.1f}℃")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【月別気温】
1月: 18.5℃
2月: 19.2℃
3月: 22.1℃

平均気温: 19.9℃

問題4:合格判定(中級)

📋 問題

生徒の3科目の点数が辞書で与えられています。平均が60点以上なら「合格」、未満なら「不合格」と表示する関数を作成してください。

例:{“数学”: 70, “英語”: 55, “国語”: 65}

解答例を見る

コード

def judge_pass(scores):
    """合格判定を行う関数"""
    # 平均を計算
    avg = sum(scores.values()) / len(scores)
    
    # 成績を表示
    print("【成績】")
    for subject, score in scores.items():
        print(f"{subject}: {score}点")
    
    print(f"\n平均点: {avg:.1f}点")
    
    # 判定
    if avg >= 60:
        print("判定: ✅ 合格")
    else:
        print("判定: ❌ 不合格")

# テスト1
student1 = {"数学": 70, "英語": 55, "国語": 65}
judge_pass(student1)

print("\n" + "="*30 + "\n")

# テスト2
student2 = {"数学": 55, "英語": 50, "国語": 58}
judge_pass(student2)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【成績】
数学: 70点
英語: 55点
国語: 65点

平均点: 63.3点
判定: ✅ 合格

==============================

【成績】
数学: 55点
英語: 50点
国語: 58点

平均点: 54.3点
判定: ❌ 不合格

問題5:カテゴリ別平均(上級)

📋 問題

商品データのリストから、カテゴリ別の平均価格を計算してください。

データ例:[{“category”: “食品”, “price”: 300}, {“category”: “電子機器”, “price”: 15000}, …]

解答例を見る

コード

products = [
    {"category": "食品", "price": 300},
    {"category": "電子機器", "price": 15000},
    {"category": "食品", "price": 500},
    {"category": "衣類", "price": 3000},
    {"category": "電子機器", "price": 25000},
    {"category": "食品", "price": 400},
    {"category": "衣類", "price": 5000}
]

# カテゴリ別に価格を集める
category_prices = {}

for product in products:
    category = product["category"]
    price = product["price"]
    
    if category not in category_prices:
        category_prices[category] = []
    
    category_prices[category].append(price)

# カテゴリ別平均を計算
print("【カテゴリ別平均価格】")
for category, prices in category_prices.items():
    avg = sum(prices) / len(prices)
    print(f"{category}: {avg:,.0f}円 (商品数: {len(prices)})")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【カテゴリ別平均価格】
食品: 400円 (商品数: 3)
電子機器: 20,000円 (商品数: 2)
衣類: 4,000円 (商品数: 2)

🎯 このステップのまとめ

✅ 学んだこと

✓ 平均値はデータの代表値を表す

✓ 平均値 = 合計 ÷ 個数

sum()関数でリストの合計を計算

len()関数でリストの要素数を取得

average = sum(リスト) / len(リスト) で平均が計算できる

✓ 平均値は外れ値の影響を受けやすい

✓ 空のリストではエラーチェックが必要

✓ グループ別の平均を比較できる

💡 次のステップに進む前に確認

以下のことができるようになったか確認しましょう:

□ 平均値の意味を説明できる

□ sum()とlen()を使って平均を計算できる

□ 辞書のデータから平均を計算できる

□ 外れ値の影響を理解している

□ グループ別の平均を計算できる

これらができたら、次のステップに進みましょう!

❓ よくある質問

Q1: 平均値と中央値の違いは何ですか?

A: 平均値は全ての値を足して個数で割ったもの。中央値はデータを並べたときの真ん中の値です。中央値は次のステップで学習します。外れ値がある場合は、中央値の方が適切なこともあります。

Q2: 小数点以下の桁数はどう決めますか?

A: データの種類によります。点数なら小数第1位まで、金額なら整数、温度なら小数第1〜2位が一般的です。f-stringの:.1f(1桁)や:.2f(2桁)で調整できます。

Q3: データ数が0の場合はどうしますか?

A: 0で割るとエラーになるので、必ずデータ数をチェックしましょう。if len(data) == 0: でチェックし、Noneを返すか、エラーメッセージを表示します。

Q4: 統計ライブラリを使った方が良いですか?

A: NumPyやPandasなどのライブラリにはmean()メソッドがあり便利です。このコースの後半で学習します。今は基本を理解するために、sum()とlen()で計算しています。

Q5: 重み付き平均とは何ですか?

A: 各データに重み(重要度)をつけた平均です。例えば、中間テスト30%、期末テスト70%のように重みをつける場合に使います。通常の平均とは計算方法が異なり、より高度な内容なので、このコースでは基本の平均に集中しましょう。

📝

学習メモ

Pythonデータ分析入門 - Step 12

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE