・分析を始めるとき最初に行うのはヒストグラムをプロットする。
→その理由はデータによって峰が2つ以上ある分部(双峰型)は性質の異なるデータが混じりあっていることが多いため、何かでグループ分け(層別)をすると、峰が一つの分布(単峰型)が現れることが多く、現象の基礎にある本質が発見しやすいからである。
・「左・右に歪んだ分布」という表現だと何が歪んでいるのかわからないため、裾が左・右に歪んだと覚えたほうがよい。裾の意味は「物の下方の部分」という意味で、例えば山のふもとを「裾野」という。
・間隔尺度→間隔のみが意味を持つ
・比尺度→倍の意味を持てる
##ヒストグラム・度数分布のルール
階級数はスタージェスの公式が参考になる。
ただしデータ数が100以下に限って有効である。データ数が100以上だと少なすぎる階級数が算出されるため。
分布の両端に近いところで、中心付近と比較して度数が極端に小さい場合、階級の幅を広げることがよく行われる。
ヒストグラムで柱が分離している図は、階級幅が各階級で著しく異なっているか離散型(カテゴリー分け)データである。
##ローレンツ曲線とジニ係数
2つの異なるデータが与えられていて、、各データに対して累積相対度数を計算してそれぞれのカラムを縦軸・横軸でとってやるとローレンツ曲線が出来上がる。対角線から離れれば離れるほど、xにとってyは不平等・不均衡という意味を持つ。
縦軸・yの累積相対度数が全て同じであれば対角線がプロットされる。
また、三日月面積を三角形で割った値がジニ係数である。
##平均・中央値・最頻値
###平均の種類
算術平均:日常でよく使う平均
sample=[3,4,5]
mean=sum(sample)/len(sample)
加重平均:離散的なデータであり、同じ観測値をとる個体が複数存在する場合に使う。
各観測地に対して度数をかけてデータの個数で割って算出する。
df=pd.DataFrame({
'食事回数':[1,2,3,4,5], #度数
'人数' :[43,179,238,38,2]
})
#加重平均
num=sum(df['人数'])
W_mean=(1*43+2*179+3*239+4*38+5*2)/num
幾何平均:%・率の平均を算出したいときにつかう。たとえば年平均気温とか。
#幾何平均
import functools
import operator
rate=[1.218,1.305,1.536,1.500,1.129]
mul=functools.reduce(operator.mul,rate)
print(mul**(1/5))
#functools.reduceは引数の function(operator.mul) を iterable(rate) の要素に対して左から右に累積的に適用し、
#イテラブルを単一の値に縮約する。
#今回のreduceについて、reduce(lambda x, y: x*y, [1, 2, 3, 4, 5]) は ((((1*2)*3)*4)*5) という計算をする。
#左引数 x は累計の値で、右引数 y は iterable から取り出した更新値です。
調和平均:往復の平均時速などについて知りたいときに使う。
###平均・中央値・最頻値の大きさ
辞書順で
Mean>Median>Mode
と覚える。
裾が右に歪んでいるとき、峰は左に位置するので最頻値が一番小さいので
Mean>Median>Mode
である。
##平均偏差と標準偏差
平均偏差と標準偏差はともに分布の散らばらり程度を示す指標であるが、標準偏差がほとんど使われる。
理由は理論的に扱いやすいからである。
##変動係数
例えば40・20年前の所得平均をそれぞれ26・117万円・標準偏差を7.5・23.8万円とする。
標準偏差についてみると、およそ3倍の差があるので格差が増えていると言いいたいが平均も4.5倍くらい増えているのでその場合、標準偏差/平均という指標が使われる。これを変動係数と呼ぶ。平均を考慮したうえで、標準偏差を相対的に比較することができる。
##ジニ係数とエントロピーのpythonプログラム
#問題2.2:平均差・ジニ係数を求めよ 39ページ
def Dmean(a):
sigma=0
num=len(a)**2
sigma_list=[]
for i in range(len(a)):
sigma=sum(abs(a[i]-a[:]))
sigma_list.append(sigma)
mean_diff=(sum(sigma_list))/num
print('平均差: '+str(mean_diff))
Gini=mean_diff/(2*np.mean(a))
print('ジニ係数: '+str(Gini))
#エントロピー
#式中のlogの底として何を選んでも、情報量の値が定数倍変わるだけなので、本質的な差はないものの、底としては2を選ぶことが多い。
#今回は10
import math
def Entropy(a):
sigma_list=[]
for i in range(len(a)):
relative_freq=a[i]/100
log=math.log(relative_freq,10)
sigma_list.append(-relative_freq*log)
ans=sum(sigma_list)
print('エントロピー: '+str(ans))
print(sigma_list)