コンテンツにスキップ

第3章 統計値

1 代表値

データからそれを代表する値、つまり代表値を算出します。 最もよく使う代表値は平均値です。グループごとに代表値を算出し、比較することでどちらが優秀か、などグループの違いが分かります。

まず、国語の平均値を出してみます。

df["国語"].mean()

このように列を指定してmean()で平均が出せます。df全体にmeanとすることで全体の平均を表示できますが、列には文字列の列もあるので数値の列だけを対象とするため、引数にnumeric_only=Trueを指定します。

df.mean(numeric_only=True)

以下のような値が出ます。

国語    72.647059
算数    68.647059
理科    69.000000
社会    73.235294

平均点を見ると社会が一番問題が簡単で算数が一番難しかったことが分かります。

ただし、点数に偏りが多い場合には、平均は実態を反映しない場合があります。そのようなときに使用するのが中央値です。 中央値は順番に並べたときに中央に来る値です。

df.median(numeric_only=True)

以下のようになりました。

国語    72.0
算数    70.0
理科    60.0
社会    73.0

算数と理科を比較すると平均では理科が高いですが、中央値では算数が高くなっています。理科は一部の高得点の人が平均点を引き上げていることが分かります。

2 統計値

その他の統計値を表示してみます。最高点はmaxで分かります。

df.max()

最低点はminで分かります。

df.min()

データの個数はcountで分かります。

df.count()

これらの統計値は基本統計量と呼ばれ、describeで表示することが出来ます。

df.describe()

stdは標準偏差(後で解説)、25%は下から数えて25%の人が何点かを表します。ですから50%は中央値と同じです。

3 グループ化

DataFarmeのgroupby メソッドを使うことでデータをある列の値ごとにまとめることができます。 まとめた結果に対して統計値を得ることができます。

例えばクラスごとにデータをまとめて平均を計算してみます。

df.groupby("クラス").mean(numeric_only=True)

他にも median(中央値)、sum(合計)、max(最大)、min(最小)、std(標準偏差)、count(件数)などが使用できます。

問題

男女毎に各教科の中央値を表示しよう。

4 整列

データを整列させるには sort_valuesを使用します。

df.sort_values(["国語"])

降順で並び替えるには引数 ascending=False を付け加えます。

df.sort_values(["国語"], ascending=False)

逆順にするにはスライスで iloc を-1ずつにします。

df.iloc[::-1]

縦と横を入れ替えるにはTを使います。

df.T