このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】統計量の求め方

統計量の求め方

 機械学習やデータ分析の過程では、平均値・最大値・最小値など、さまざまな統計量を算出してデータを俯瞰することが大切です。PythonのNumPyライブラリには、これらの統計量を手軽に求めるための関数が標準で用意されています。ここでは、NumPyを使った代表的な統計量の求め方と、その応用法について解説します。JupyterLab上で動かせる形式のサンプルを紹介しているので、ぜひ実際に試してみてください。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.サンプルデータの準備

 まずは統計量を求めるためのサンプルデータとして、CSVファイル「results.csv」を用意します。以下の内容をテキストファイルとして保存し、カレントディレクトリ(または適切なパス)に配置してください。ここでは、5名のテスト結果を3列(例: 国語・数学・英語)で表していると想定します。

サンプルデータ:results.csv

72, 65, 81
50, 60, 62
100, 98, 99
66, 70, 58
87, 92, 84

2.NumPyを使って統計量を求める

 行や列のインデックスは、0から始まります。ここでは、インデックスに合わせて、行や列の番号を0から始めることにします。

 NumPyには、平均値を求めるmean()、最大値を求めるmax()、最小値を求めるmin()などの関数が用意されています。各列ごとに統計量を求めるには「軸(axis)」を指定するのがポイントです。

import numpy as np

def compute_statistics(file_name="results.csv"):
    """
    指定したCSVファイルから数値データを読み込んで、
    各列の統計量(平均・最大・最小)を求める。
    """
    # CSVファイルを読み込み
    data = np.loadtxt(file_name, delimiter=",")
    
    # 先に個別で一部確認してみる: 0列目(インデックス0)の平均
    mean_first_col = np.mean(data[:, 0])
    print("1列目の平均値:", mean_first_col)
    
    # 軸を指定して、各列の平均・最大・最小を取得
    mean_values = np.mean(data, axis=0)
    max_values = np.max(data, axis=0)
    min_values = np.min(data, axis=0)
    
    print("\n===== 各列の統計量 =====")
    print("平均値:", mean_values)
    print("最大値:", max_values)
    print("最小値:", min_values)

# メイン処理: CSVファイルを読み込み、統計量を出力
compute_statistics("results.csv")

実行結果

0列目の平均値: 75.0

===== 各列の統計量 =====
平均値: [75.  77.  76.8]
最大値: [100.  98.  99.]
最小値: [50. 60. 58.]

プログラムの解説

  1. np.loadtxt(file_name, delimiter=",")
    ・CSVファイルから数値データを読み込み、2次元配列として変数dataに格納。
    delimiter=","は、カンマ区切りファイルを読み込む際に必要です。
  2. data[:, 0]
    ・全行に対して、0列目(最初の列)だけを抽出。
  3. np.mean(data, axis=0)
    ・2次元配列の列方向(axis=0)について平均値を計算。
    ・返り値は各列の平均値をまとめた1次元配列となります。
  4. np.max(data, axis=0) / np.min(data, axis=0)
    ・同様に、列方向に対して最大値や最小値を計算。
  5. 結果表示
    各列の統計量を一覧で表示。

3.代表的な統計関数

NumPyでよく使われる統計関数は次のとおりです。

関数役割
numpy.mean平均値を計算
numpy.max最大値を計算
numpy.min最小値を計算
numpy.median中央値を計算(真ん中の位置の値)
numpy.std標準偏差を計算
numpy.var分散(標準偏差の2乗)を計算
numpy.average加重平均などが計算可能(weights引数あり)

 加重平均を使う場合には、numpy.average()関数のweights引数に重み(リストや配列)を指定すると、要素ごとの重み付け平均を求められます。

4.応用:列だけでなく行ごとにも適用する

軸(axis)の指定を変えることで、「行方向」「列方向」どちらにも統計関数を適用できます。

  • axis=0 : 列方向
  • axis=1 : 行方向

たとえば、行ごとの平均点を計算したい場合は以下のようにします。

import numpy as np

data = np.loadtxt("results.csv", delimiter=",")

# 行ごとの平均
row_means = np.mean(data, axis=1)
print("各行(各受験者など)の平均:", row_means)

実行結果

各行(各受験者など)の平均: [72.66666667 57.33333333 99.         64.66666667 87.66666667]

まとめ

 NumPyには、平均値や最大値などの統計量を手軽に求めるための関数が豊富に備わっています。axis(軸)を正しく指定すると、行方向・列方向のどちらに対して集計するのかを切り替えられ、大量のデータを効率的に分析可能です。
 機械学習やデータ解析においては、こうした基本統計量を用いてデータの傾向をつかんだり、前処理として正規化や外れ値の除去に活用したりするケースも多くあります。次のステップとして、標準偏差や中央値などの他の統計量も活用してみてください。