【Python】平均・分散・標準偏差・中央値・最頻値を計算

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
関連記事

Pythonで理解する統計学、第1回は平均・分散・標準偏差をPythonを使って表現します。

日常生活で平均を使う場面は多いですが、データを解析する上では、分散や標準偏差の理解も大切となります。

本記事では、統計の基本である平均・分散・標準偏差について解説をします。

高校生の時に学んだという方も今一度確認しておくべき内容です。

KeyWord
  • 平均
  • 分散
  • 標準偏差
スポンサーリンク

平均

平均は、数値の集合に対してその値を代表する指標の一つで、すべての数値を合計して、その合計値を集合の数で割った値のことを指します。一般に、数学記号で表すと以下のようになります。

$$ 平均 = \frac{数値の合計}{数値の個数} $$

例えば、{2, 4, 6, 8}という4つの数値がある場合、これらの数値の平均は、

$$ 平均 = \frac{2+4+6+8}{4} $$

となります。したがって、この集合の平均値は5となります。

Pythonで平均を表現

Pythonで平均を計算するには、組み込みの関数である sum()len() を使って、数値のリストやタプルを合計し、個数で割ることができます。

sum() 関数は数値の合計を計算します。また、 len() 関数は数値の個数を取得しています。

最後に、計算結果を表示するために print() 関数を使用しています。

以下は、Pythonで平均を計算する方法の例です。

# リストの平均を計算する例
numbers = [2, 4, 6, 8]
average = sum(numbers) / len(numbers)
print("平均値:", average)

# タプルの平均を計算する例
numbers = (3, 5, 7, 9)
average = sum(numbers) / len(numbers)
print("平均値:", average)

また、NumPyは、多次元配列や行列の平均を計算するための numpy.mean() 関数が用意されています。

NumPyを使う場合は、以下のように記述することができます。

import numpy as np

# NumPyを使ったリストの平均を計算する例
numbers = [2, 4, 6, 8]
average = np.mean(numbers)
print("平均値:", average)

# NumPyを使ったタプルの平均を計算する例
numbers = (3, 5, 7, 9)
average = np.mean(numbers)
print("平均値:", average)

出力は次のようになります。(google colaboratory使用)

平均の注意点

平均は、手軽な計算でデータの特徴を簡単に表すことができます。

一方で、外れ値の影響を受けやすいです。例えば、100点満点のテストがあり、10人の平均を計算したところ平均点が50点でした。
しかし、各々の点数を確認すると、「scores1」は、50点付近の点数ですが、「scores2」は、90点、80点の高得点から、10点、20点の低得点とばらつきがあります。
特に、「scores3」は,0点5人、100点5人と極端な分布ですが、3つの平均点はいずれも50点です。

import numpy as np
scores1 = [48, 53, 55, 50, 44, 50, 50, 53, 52, 45]
scores2 = [93, 98, 32, 80, 10, 20, 0, 99, 28, 40]
scores3 = [100, 100, 100, 100, 100, 0, 0, 0, 0, 0]

average1=np.mean(scores1)
average2=np.mean(scores2)
average3=np.mean(scores3)
print("平均点1:", average1)
print("平均点2:", average2)
print("平均点3:", average3)

##########出力結果##########
#平均点1: 50.0
#平均点2: 50.0
#平均点3: 50.0
###########################

このように、平均は外れ値に影響されやすいので、使用には注意が必要です

分散

分散とは、データの散らばり具合を表す統計量の一つで、平均からの偏差の二乗平均を表します。具体的には、データの各要素から平均値を引いた差を二乗し、その平均を求めたものです。

値が平均からどの程度離れているかを示す指標として使用されます。

分散が大きいほど、データの散らばりが大きいといえます。

分散は以下の式で表されます。

分散公式

$$\frac {1}{n}\sum_{i = 1}^n (x_i – \bar{x})^2 $$

\(n\)はデータの個数、\( x_i \)はデータの\(i\)番目の値、\(\bar{x} \)はデータの平均値を表します。

Pythonで分散を表現

Pythonで分散を計算するには、NumPyのnumpy.var()関数を使用します。

import numpy as np

data = [2, 4, 6, 8, 10]

variance = np.var(data)

print("分散:", variance)

dataリストにデータの値を格納し、np.var()関数を使用して分散を計算しています。

計算結果はvariance変数に格納され、print()関数を使用して表示されます。

前述した平均の問題は、外れ値に影響されやすいことでした。

データにばらつきがあるものの、全ての平均値が50であるため、正しい評価ができないことが問題でした。

しかし、分散は、データのばらつきの大きさを示すので、データの散らばりを数値化できます。
データが全て50の場合は分散が0で、ばらつきが大きくなるにつれて分散が大きくなっていることが分かります。

import numpy as np

scores0 = [50, 50, 50, 50, 50, 50, 50, 50, 50, 50]
scores1 = [48, 53, 55, 50, 44, 50, 50, 53, 52, 45]
scores2 = [93, 98, 32, 80, 10, 20, 0, 99, 28, 40]
scores3 = [100, 100, 100, 100, 100, 0, 0, 0, 0, 0]

variance0 = np.var(scores0)
variance1 = np.var(scores1)
variance2 = np.var(scores2)
variance3 = np.var(scores3)

print("分散0:", variance0)
print("分散1:", variance1)
print("分散2:", variance2)
print("分散3:", variance3)

##########出力結果##########
#分散0: 0.0
#分散1: 11.2
#分散2: 1336.2
#分散3: 2500.0
###########################

分散の注意点

分散も平均点と同様に外れ値によって値が変わり、影響を受けることがいえます。

また分、データのばらつきを二乗しているので、単位も二乗されています。

例えば、テストの分散の単位は「点」ではなく、「\(点^2\)」であるためデータの解釈が難しくなります。

したがって、この単位の違和感を解消に「標準偏差」を使用します。

標準偏差

標準偏差は、データセットのばらつきやばらつきの度合いを表す統計的な尺度で、データ点が平均値からどれだけ離れているかを示す指標です。

標準偏差公式

$$\sqrt{\frac {1}{n}\sum_{i = 1}^n (x_i – \bar{x})^2 }$$

\(n\)はデータの個数、\( x_i \)はデータの\(i\)番目の値、\(\bar{x} \)はデータの平均値を表します。

Pythonで標準偏差を表現

Pythonで標準偏差を計算するには、NumPyのnumpy.std()関数を使用します。

import numpy as np

data = [2, 4, 6, 8, 10]

standard_deviation = np.std(data)

print("標準偏差:", standard_deviation)

dataリストにデータの値を格納し、np.std()関数を使用して標準偏差を計算しています。計算結果はstandard_deviation変数に格納され、print()関数を使用して表示されます。

標準偏差は、データのばらつきの尺度として非常に一般的に使用されます。

分散と同様にデータの散らばり具合を表し、平均値に対する偏差の大きさを示します。
ただし、標準偏差は分散と異なり、元のデータと同じ単位を持つため解釈が容易です。

前回の分散では、データの散らばりが0から2500と尺度の幅が大きかったです。それを平方根で単位を揃えたことで、データのばらつきに関して評価がしやすくなります。

import numpy as np

scores0 = [50, 50, 50, 50, 50, 50, 50, 50, 50, 50]
scores1 = [48, 53, 55, 50, 44, 50, 50, 53, 52, 45]
scores2 = [93, 98, 32, 80, 10, 20, 0, 99, 28, 40]
scores3 = [100, 100, 100, 100, 100, 0, 0, 0, 0, 0]

variance0 = np.var(scores0)
variance1 = np.var(scores1)
variance2 = np.var(scores2)
variance3 = np.var(scores3)

std_deviation0 = np.sqrt(variance0)
std_deviation1 = np.sqrt(variance1)
std_deviation2 = np.sqrt(variance2)
std_deviation3 = np.sqrt(variance3)

print("標準偏差0:", std_deviation0)
print("標準偏差1:", std_deviation1)
print("標準偏差2:", std_deviation2)
print("標準偏差3:", std_deviation3)

##########出力結果##########
#標準偏差0: 0.0
#標準偏差1: 3.3470980089691406
#標準偏差2: 36.54426863293218
#標準偏差3: 50.0
###########################

標準偏差の注意点

標準偏差も平均値、分散と同様に外れ値の影響が受けやすいです。

また、標準偏差は単位を揃えたものの、複数の単位を扱うことは適切な評価はできません。

例えば、「テストの点数は身長と体重は関係あるのか」と考えたときに、「点」、「kg」,「cm」と3つの単位を抱えて、標準偏差から評価することは正しいと言えません。

Pythonの学習進め方

Pythonでできることは多岐に渡ります。

Pythonでできること
  • 機械学習・人工知能
  • データ解析・統計分析
  • ファイル操作・システム管理
  • GUIアプリ開発

Pythonは強力で柔軟なプログラミング言語ですが、常に情報がアップデートされるので、
新しいライブラリやフレームワークを独学で学び続けることは困難です。

Udemyは動画で目的に応じた講座を受講できるのでレベルを合わせて学習できます。
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで独学できます。

Udemyの特徴
  • プロのエンジニアによる講習が受けられる
  • 自分のペースで学習を進められる
  • オンデマンド形式だから何度でも視聴可能
  • 不満足なコースは視聴していても返金可能返金ポリシー

Pythonでデータサイエンスや人工知能、GUIを学びたい人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を5つ紹介します。

初夏のセール開催中!(5月23日まで)
対象のコースが1300円から。

Pythonをインストールから環境設定、基本文法が学習できる。さらに、モジュールの使い方やファイル操作の他に暗号化、並列化、インフラ自動化、キューイングシステム、非同期処理についても学べます。

Pythonの基礎を押さえつつ、人口知能やニューラルネットワーク、機械学習を取り扱う。機械学習ライブラリで文字認識や株価分析などを行う。

データサイエンティストになるために必要なツールについて学ぶことができる。統計分析、NumpyやPandasなどを使ったPythonのプログラミング、機械学習の実装、ディープラーニングの実装を学習できる。

PythonでGUIを作成する方法を取り扱う。Tkinterの発展的な操作まで学習できる。翻訳アプリ、家計簿アプリ、電卓アプリ、音楽再生アプリなど作成して、exeファイル化する。

まとめ

numpyで平均を扱うには、 numpy.mean() 。分散を扱うには、numpy.var()。標準偏差をあつかうには、numpy.std()を使います。

項目関数
平均np.mean()
分散np.var()
標準偏差np.std()

3つの計算はいずれも外れ値によって計算値が変わるので、使用には注意が必要です。

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Python
フォローする
タイトルとURLをコピーしました