年収の分布で平均値と中央値ってよく見るけど、中央値を出す意味が良く分からないな。平均値より低く出るものみたいだけど。
中央値を扱う心は、エンジニア目線ではノイズの除去です。例えば10人の年収の平均を取るときに、1人だけ年収5,000万円みたいに年収がバグっている人がいると、本当に知りたい一般的な国民の年収からズレてしますからです。
こんにちは、つちもぐらです。
ニュース記事で年収の分布が紹介されるときは、平均値と合わせて中央値が添えられています。
このような分布を取る人が知りたいのは、いわゆる一般的な国民の年収です。
ただ平均値だけを見ていては、年収上位の約10%程度の人達、特に上位1.2%の年収がバグっている人達が平均値を押し上げてしまうので、一般的な国民の年収からズレてしまいます。
そのズレを補正するために、中央値を使っています。
それでは実際に所得の分布を見てみましょう。
平均値と中央値を比較してみると、平均値が547万円,中央値が427万円と100万円以上の差が開いている事が分かります。
平均値と中央値のズレが大きいというのは、上位数パーセントの年収がそれだけ高いという事です。
それではここで5人の年収データ “500万円, 350万円, 2000万円, 400万円, 250万円” をPythonのlistに格納して、平均値と中央値を求めるプログラムを見てみましょう。
Python組み込み(build-in)の関数やメソッドを使ってスマートに実装する方法と、使わず愚直に実装する2つの方法を紹介しています。
Pythonで簡単に平均値を計算する方法
money_data = [500, 350, 2000, 400,250]
mean = sum(money_data)/len(money_data)
print ("mean=%d" % mean)
実行結果は次の通りです。
mean=700
Pythonで愚直に平均値を計算する方法
money_data = [500, 350, 2000, 400,250]
sum = 0
for data in money_data :
sum += data
mean = sum/len(money_data)
print ("mean=%d" % mean)
実行結果は次の通りです。
mean=700
Pythonで簡単に中央値を計算する方法
money_data = [500, 350, 2000, 400,250]
money_data.sort()
Median = money_data[(len(money_data)//2)]
print ("Median=%d" % Median)
実行結果は次の通りです。
Median=400
Pythonで愚直に中央値を計算する方法
money_data = [500, 350, 2000, 400 ,250]
money_data_num = len(money_data)
for i in reversed(range(money_data_num)):
for j in range(i):
if money_data[j] > money_data[j+1]:
tmp = money_data[j+1]
money_data[j+1] = money_data[j]
money_data[j] = tmp
#print(money_data) # デバッグ用
Median = money_data[money_data_num//2]
print ("Median=%d" % Median)
実行結果は次の通りです。
Median=400
まとめ
今回はPythonを用いて平均値と中央値を、組み込み関数を用いて簡単に求める方法と愚直に実装する方法を紹介してみました。
平均値の計算では余りありがたみが涌かないかもですが、中央値の計算ではPython listオブジェクトのメソッドsort()を用いる事で、コードがとても簡単に組めるようになる事が分かるかと思います。
ちなみにsort()はリスト内のデータを昇順に並べる組み込みメソッドです。インタラクティブモードで動作を確認してみましょう。
>>> money_data = [500, 350, 2000, 400 ,250]
>>> money_data.sort()
>>> money_data
[250, 350, 400, 500, 2000]
このようにコード内でわからない関数等があれば、実際に動かして直ぐに確認できるのがPythonの良いところです。
何かプログラムを組む時は、特にPythonのような高級言語では「自分が実装しようとしている関数は既に組み込み関数や拡張関数として用意されているのではないか?」とまずは調べてみる事が大切です。
既存の関数を使用したほうがバグが混入する可能性も下がりますし、後日あなたや他の人がコードを見直した時の分かり易さも格段に上がるでしょう。難しい言い方をすると、保守のコストが下がります。
一方このようなこのような並び替えのソースを自分で組める力も、時にはプログラマに求められます。
具体的には、欲しい機能を探してみたけど既存の関数ではなさそうなので、自分で組むしかない場合ですね。
その時はアルゴリズムがどれだけ頭に入っているかで、実装にかかる時間やコードの品質が変わってくるでしょう。
プログラムをある程度組めるようになったら、次のような本でアルゴリズムも学習される事をおススメします。本記事の並び替えソースも、この本を参考にしました。
それでは今日はこの辺で。
最後まで読んで頂き、ありがとうございました。