【保存版】NumPyの統計関数一覧まとめ

python

Pythonでデータ分析をするとき、データの特徴を数字で表すことがとても大切です。

NumPyを使えば、たった1行で次のようなことがわかります:

  • データの平均はいくつか
  • データのばらつきはどれくらいか
  • 一番大きい値、小さい値は何か
  • データに異常な値が含まれていないか

この記事では、NumPyでよく使う統計関数を、使い方と実例つきで詳しく説明します。

スポンサーリンク

準備:NumPyのインポート

説明 NumPyを使う前に、必ずインポートが必要です。

import numpy as np

# テスト用のデータを作成
test_data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print("テストデータ:", test_data)

基本的な統計関数

合計を求める:np.sum()

説明 配列のすべての数を足し合わせます。

data = np.array([1, 2, 3, 4, 5])
result = np.sum(data)
print(f"合計: {result}")

実行結果

合計: 15

平均を求める:np.mean()

説明 配列の平均値を計算します。

data = np.array([2, 4, 6, 8, 10])
result = np.mean(data)
print(f"平均: {result}")

実行結果

平均: 6.0

中央値を求める:np.median()

説明 データを小さい順に並べたときの真ん中の値です。

data = np.array([1, 2, 3, 100, 200])  # 100と200は極端に大きい
average = np.mean(data)
median = np.median(data)
print(f"平均: {average}")
print(f"中央値: {median}")

実行結果

平均: 61.2
中央値: 3.0

ポイント 極端に大きい値があるときは、中央値の方が「普通の値」を表します。

最大値・最小値:np.max()、np.min()

説明 配列の中で一番大きい値と一番小さい値を見つけます。

data = np.array([15, 3, 9, 1, 12, 7])
max_value = np.max(data)
min_value = np.min(data)
print(f"最大値: {max_value}")
print(f"最小値: {min_value}")

実行結果

最大値: 15
最小値: 1

範囲を求める:np.ptp()

説明 最大値から最小値を引いた「データの幅」を計算します。

data = np.array([10, 20, 30, 40, 50])
range_value = np.ptp(data)
print(f"データの範囲: {range_value}")

実行結果

データの範囲: 40

ばらつきを表す統計関数

標準偏差:np.std()

説明 データがどれくらいばらついているかを表します。値が大きいほどばらつきが大きいです。

# ばらつきの小さいデータ
data1 = np.array([5, 5, 5, 5, 5])
# ばらつきの大きいデータ  
data2 = np.array([1, 3, 5, 7, 9])

std1 = np.std(data1)
std2 = np.std(data2)

print(f"データ1の標準偏差: {std1}")
print(f"データ2の標準偏差: {std2}")

実行結果

データ1の標準偏差: 0.0
データ2の標準偏差: 2.8284271247461903

分散:np.var()

説明 標準偏差を2乗した値です。ばらつきを表すもう一つの指標です。

data = np.array([2, 4, 6, 8, 10])
variance = np.var(data)
std_dev = np.std(data)

print(f"分散: {variance}")
print(f"標準偏差: {std_dev}")
print(f"標準偏差の2乗: {std_dev**2}")

実行結果

分散: 8.0
標準偏差: 2.8284271247461903
標準偏差の2乗: 8.000000000000002

パーセンタイルと分位点

パーセンタイル:np.percentile()

説明 「下から数えて○○%の位置にある値」を求めます。

# テストの点数データ
scores = np.array([60, 65, 70, 75, 80, 85, 90, 95])

# 下から25%、50%、75%の位置の値
p25 = np.percentile(scores, 25)
p50 = np.percentile(scores, 50)  # 中央値と同じ
p75 = np.percentile(scores, 75)

print(f"25パーセンタイル: {p25}")
print(f"50パーセンタイル: {p50}")
print(f"75パーセンタイル: {p75}")

実行結果

25パーセンタイル: 68.75
50パーセンタイル: 77.5
75パーセンタイル: 86.25

分位点:np.quantile()

説明 パーセンタイルと同じですが、0から1の範囲で指定します。

data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# 0.25 = 25%と同じ意味
q1 = np.quantile(data, 0.25)  # 第1四分位
q2 = np.quantile(data, 0.50)  # 第2四分位(中央値)
q3 = np.quantile(data, 0.75)  # 第3四分位

print(f"第1四分位: {q1}")
print(f"第2四分位: {q2}")
print(f"第3四分位: {q3}")

実行結果

第1四分位: 3.25
第2四分位: 5.5
第3四分位: 7.75

位置を見つける関数

最大値・最小値の位置:np.argmax()、np.argmin()

説明 最大値や最小値が配列の何番目にあるかを教えてくれます。

scores = np.array([85, 92, 78, 96, 89])

max_index = np.argmax(scores)
min_index = np.argmin(scores)

print(f"最高点: {scores[max_index]} (位置: {max_index})")
print(f"最低点: {scores[min_index]} (位置: {min_index})")

実行結果

最高点: 96 (位置: 3)
最低点: 78 (位置: 2)

2次元配列での統計処理

軸を指定した計算:axis の使い方

説明 2次元配列では、行ごとや列ごとに統計を計算できます。

例:学生の成績データ

# 3人の学生の3科目の成績
# 行:学生、列:科目
scores = np.array([[80, 85, 90],  # 学生1
                   [75, 80, 85],  # 学生2  
                   [90, 95, 80]]) # 学生3

print("成績データ:")
print(scores)

# 各学生の平均点(行ごと)
student_avg = np.mean(scores, axis=1)
print("各学生の平均点:", student_avg)

# 各科目の平均点(列ごと)
subject_avg = np.mean(scores, axis=0)
print("各科目の平均点:", subject_avg)

# 全体の平均点
total_avg = np.mean(scores)
print("全体の平均点:", total_avg)

実行結果

成績データ:
[[80 85 90]
 [75 80 85]
 [90 95 80]]
各学生の平均点: [85.         80.         88.33333333]
各科目の平均点: [81.66666667 86.66666667 85.        ]
全体の平均点: 84.44444444444444

axisの覚え方

  • axis=0:縦方向(列ごと)に計算
  • axis=1:横方向(行ごと)に計算

条件付きの統計処理

特定の条件を満たすデータだけで統計

説明 条件を指定して、その条件に合うデータだけで統計を計算できます。

例:合格点以上の平均点

scores = np.array([45, 67, 89, 34, 78, 92, 56, 83])
passing_score = 60

# 合格点以上の点数だけを取り出す
passed_scores = scores[scores >= passing_score]
print("合格点以上の点数:", passed_scores)

# 合格者の平均点
passed_avg = np.mean(passed_scores)
print("合格者の平均点:", passed_avg)

# 合格率
pass_rate = len(passed_scores) / len(scores) * 100
print(f"合格率: {pass_rate:.1f}%")

実行結果

合格点以上の点数: [67 89 78 92 83]
合格者の平均点: 81.8
合格率: 62.5%

その他の便利な統計関数

重複を取り除く:np.unique()

説明 配列から重複を取り除いて、ユニークな値だけを取り出します。

data = np.array([1, 2, 2, 3, 3, 3, 4, 4, 5])
unique_values = np.unique(data)
print("元のデータ:", data)
print("重複なし:", unique_values)

# 各値の出現回数も知りたい場合
unique_values, counts = np.unique(data, return_counts=True)
print("値:", unique_values)
print("回数:", counts)

実行結果

元のデータ: [1 2 2 3 3 3 4 4 5]
重複なし: [1 2 3 4 5]
値: [1 2 3 4 5]
回数: [1 2 3 2 1]

相関係数:np.corrcoef()

説明 2つのデータの関係の強さを-1から1の値で表します。

# 身長と体重のデータ(仮想)
height = np.array([160, 165, 170, 175, 180])
weight = np.array([50, 55, 65, 70, 75])

# 相関係数を計算
correlation = np.corrcoef(height, weight)
print("身長と体重の相関係数:")
print(correlation)

# 相関係数の値だけを取得
corr_value = correlation[0, 1]
print(f"相関係数: {corr_value:.3f}")

実行結果

身長と体重の相関係数:
[[1.    0.969]
 [0.969 1.   ]]
相関係数: 0.969

相関係数の意味

  • 1に近い:正の強い関係(片方が増えるともう片方も増える)
  • 0に近い:関係なし
  • -1に近い:負の強い関係(片方が増えるともう片方が減る)

実際に使える応用例

データの要約統計

説明 データの全体像を一度に把握する関数を作ってみましょう。

def describe_data(data):
    """データの要約統計を表示する関数"""
    print("=== データの要約統計 ===")
    print(f"データ数: {len(data)}")
    print(f"平均: {np.mean(data):.2f}")
    print(f"中央値: {np.median(data):.2f}")
    print(f"最大値: {np.max(data)}")
    print(f"最小値: {np.min(data)}")
    print(f"標準偏差: {np.std(data):.2f}")
    print(f"25%: {np.percentile(data, 25):.2f}")
    print(f"75%: {np.percentile(data, 75):.2f}")

# 使用例
test_scores = np.array([78, 85, 92, 69, 88, 91, 76, 82, 89, 95])
describe_data(test_scores)

実行結果

=== データの要約統計 ===
データ数: 10
平均: 84.50
中央値: 86.50
最大値: 95
最小値: 69
標準偏差: 8.17
25%: 78.25
75%: 90.75

関数の使い分けガイド

代表値(中心の値)

関数いつ使う?特徴
np.mean()一般的な平均が欲しい極端な値に影響される
np.median()極端な値がある極端な値に影響されにくい

ばらつき

関数いつ使う?特徴
np.std()ばらつきを知りたいよく使われる
np.var()数学的な計算標準偏差の2乗
np.ptp()簡単な範囲を知りたい最大-最小

分布の理解

関数いつ使う?特徴
np.percentile()相対的な位置を知りたいパーセントで指定
np.quantile()統計的な分析0-1で指定

まとめ

必ず覚えたい基本5つ

  1. np.mean() – 平均
  2. np.median() – 中央値
  3. np.std() – 標準偏差
  4. np.max(), np.min() – 最大・最小
  5. np.sum() – 合計

データ分析でよく使う組み合わせ

# データの基本情報を一気に確認
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

print(f"平均: {np.mean(data):.2f}")
print(f"中央値: {np.median(data):.2f}")  
print(f"標準偏差: {np.std(data):.2f}")
print(f"最大値: {np.max(data)}, 最小値: {np.min(data)}")
print(f"25%-75%: {np.percentile(data, 25):.1f} - {np.percentile(data, 75):.1f}")

コメント

タイトルとURLをコピーしました