Pythonによるデータの代表値(平均値、中央値など)の計算

Pythonでデータを読み込み、列ごとに平均値や中央値などの「データの代表値」を計算してみましょう。

データ分析の初めの一歩は、何はともあれ平均値、中央値などの「代表値」を求めることです。
Excelでも計算は可能ですが、ファイルサイズが巨大な場合や、後々にもっと複雑な計算をしたくなってきた場合などはExcelでは手に負えません。

そこまで難しくない上に、慣れればExcelよりも簡素で高速に計算できますので、是非多くの学生や社会人の皆様に覚えて頂ればなと思います。

データの読み込み

まずは集計したいcsvを準備します。
今回は、以下のような「都道府県別の17歳時点における身長・体重データ」を実験データとして読み込んでみましょう。

※参照元:e-Stat「学校保健統計調査」

何はともあれ、まずはPythonにデータを読み込ませます。

「index_col=0」というのは、「すでに行名(今回の場合は県名)は付いてますので、行名は付けないで良いですよ」という意味の引数です。

この時、文字コードがおかしいと正しく読み込まれない場合がありますので、ご注意ください。
もしこの時点でエラーが出たら、csvの文字コードを「utf-8」に変えておくのが一番てっとり早いかなと思います。

色々な代表値を一気に求める

さて、それではデータの代表値を色々と求めてみましょう。
実は、pythonのnumpyパッケージには、「decsribe」というデータの平均値、中央値などを一気に求められる便利関数が用意されています。

早速適用してみましょう。

実行してみると。。。

一気に色々出てきましたね。
上から、「データ数」「平均」「標準偏差」「最小値」「第1四分位数」「中央値」「第3四分位」「最大値」となります。
有効数字が多すぎて見づらい場合は、以下のようにお尻に「.round(有効桁数)」を付けると、有効数字の桁数を変えられます。

例えば小数点以下2桁にしたければ、

とすれば、

これで見やすくなりましたね。

知りたい所だけ求める

「そんな全部いらないから、知りたいやつだけ知りたい」という場合もあります。
また、describeの中にはない代表値(合計値、最頻値など)を求めたい場合もあります。
そういう場合のために、代表値別に個別のメソッドが用意されています。

例えば、「平均値」だけ欲しい場合は以下。

有効数字を変更したければ、先程と同じくお尻に「.round(有効数字)」を付けてください。

また、「平均値」でも、「男子の身長」だけで良いという場合は以下でOKです。

こちらも「.round(有効数字)」が使えます。
それでは、平均値以外の関数も色々用意されてしまいますので、整理しておきます。

データの代表値を求める関数一覧

上記の例における「mean()」の部分を以下に変えるだけでOKです。

describeに存在するもの

データ数 count()
平均値 mean()
標準偏差 std()
最小値 min()
第1四分位(25%点) quantile(0.25)
中央値(50%点) median()
第3四分位(75%点) quantile(0.75)
最大値 max()

第1四分位、第3四分位の書き方を見れば分かるかもしれませんが、カッコの中の数字を変えれば「小さい方から〜%の点」の値はどこでも計算できます。

describeに存在しないもの

describeメソッドでは計算されない代表値は以下のように求めます。

合計値 sum()
分散値 var()
最頻値 mode()
歪度 skew()
尖度 kurt()
最大値を取る項目名 idxmax()
最小値を取る項目名 idxmin()

歪度と尖度は使う場面は限られるかもしれませんが、データの代表値としては代表的なものなので掲載しました。

あと「idxmax」「idxmin」は便利です。例えば、「idxmin」を先程のデータに適用してみると・・・

なるほど。。。なんとなく考えさせられる結果です。

まとめ

これだけ押さえておけば、ざっくりとしたデータの集計はいつでも出来ます。
無論、上記の関数をすべて記憶しておく必要はなく、このページなどを参照しながらプログラムを書けばOKです。

もっと詳しく知りたい方は、以下の書籍などもおすすめです。

created by Rinker
¥2,728 (2024/11/21 11:20:36時点 楽天市場調べ-詳細)

以上が、Pythonでデータ分析を始める際の第一歩となります。