Pythonで平均値・分散・標準偏差を求めてみた【記述統計】

記述統計の入門として、平均値・分散・標準偏差を求めてみたいと思います。

使用するライブラリは「pandas」「math」と、サンプルデータとして「アヤメ(Iris plants datasets)」を使います。

解説多めなので、最初に全コード貼り付けておきます。

 

import pandas  as pd
from sklearn import datasets
df = pd.DataFrame(iris.data, columns = iris.feature_names)

# 平均値
mean = sum(df["sepal length (cm)"]) / df.shape[0]

# 分散
variance = sum((df["sepal length (cm)"] - mean)**2) / df.shape[0]

#標準偏差
import math
stdev = math.sqrt(variance)

 

まずデータを読み込む

まずはデータを読み込みましょう。とりあえず以下のコードを入力しましょう。

 

import pandas as pd
from sklearn import datasets
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)

 

では解説。

「import pandas as pd」について、

pandasを使うと、データの読み込み、クリーニング、欠損値の補完、正規化などの前処理と言われる作業のほとんどを処理してくれます。「as pd」というのはpandasというライブラリに名前をつけてあげています。基本pandasに名前をつけるときは「pd」と付けます(暗黙のルール)。

 

「from sklearn import datasets」について、

直訳すると「sklearnからdatasetsをインポート」ですね。sklearn(scikit-learn)は機械学習を行うときに便利なライブラリでして、サンプルデータも内包してます(それがdatasets)。そして、datasets.load_iris() により、「アヤメ」のデータセットをロードします。

 

「pd.DataFrame(iris.data, columns=iris.feature_names)」について、

pandasの中にはDataFrameとSeriesという基本構造があるのですが、DataFrameは二次元配列、Seriesは一次元配列となります。今回の場合、サンプルデータは二次元配列となるのでDataFrameを使用します。DataFrameオブジェクトは、DataFrame(データ, 行ラベル, 列ラベル, データ型, bool値)を指定できます。今回の場合、データと列ラベルを指定したいので、上記のコードとなりました。

では出力してみましょう。0〜9番目までのデータだけ見てみます。

 

df.head(10)

 

 

平均値を算出する

次は平均値を算出しましょう。

今回はsepal length (cm) の平均値を求めます。以下の1行だけです。

 

mean = sum(df["sepal length (cm)"]) / df.shape[0]

 

平均値の求め方は、合計 / データ数 ですね。

合計について、

df[“sepal length (cm)”] で、ラベル名「sepal length (cm)」のデータを抽出します。列sepal length (cm) のデータらの合計値を出すためにsum関数を使います。

データ数について、

.shapeにより、(行数・列数)を出力できます。.shape[0]だと行数のみを、.shape[1]だと列数のみを出力します。今回の場合、行数の値がデータ数を示しているので、df.shape[0] としました。

出力すると「5.8433…」と求まると思います。

print (mean)

 

分散を算出する

この式で求められます。これをコードで示せばいいだけ。

variance = sum((X["sepal length (cm)"] - mean)**2) / X.shape[0]
print(variance)

0.681122…という値が出力されると思います。

 

標準偏差を算出する

標準偏差は分散の平方根ですね。

ここでライブラリ「math」を使います。

import math
stdev = math.sqrt(variance)
print(stdev)

math.sqrt() で () 内のデータの平方根を求めることができます。

0.83という値が出力されると思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です