いっかくのデータサイエンティストをいく

1からプログラミングとデータサイエンスを独習したい

【経済学】ローレンツ曲線とジニ係数(Python)

前々回ローレンツ曲線とジニ係数Pythonで実装します。 前回の関数をもとにPythonでも関数を実装してみました。

import numpy as np
import matplotlib.pyplot as plt

#関数
def Gini_index(data, main, xlab, ylab):
    print(data)
    n = len(data)                   #dataの要素数
    data = sorted(data)            #並び替え
    data = np.array(data)
    data = data.cumsum()            #累積度数をとる
    # 累積相対度数(先頭に 0 を加える)    
    data_2 = data / max(data)
    data_3 = data_2.tolist()
    data_3.insert(0, 0)
    print(data_3)
    print(len(data_3))
    x = np.linspace(0, 1, n+1)
    print(x)
    print(len(x))
    x.tolist()
    #グラフ描写
    plt.plot(x, data_3, label = "ローレンツ曲線", color = "red")
    plt.plot(x, x, label = "完全平等線", color = "blue")    
    plt.xlabel(xlab)
    plt.ylabel(ylab)
    plt.title(main)
    plt.legend(loc = 2)

    plt.show()
    
    return 2*sum(x - data_3)/n


#データ
x = [0, 3, 3, 5, 5, 5, 5, 7, 7, 10]

#関数
Gini_index(x, main="ローレンツ曲線", xlab="累積相対度数", ylab="累積相対所得")
#Out[75]: 0.27600000000000008

f:id:imakoto0323:20180611231318p:plain

もっときれいに書けそうですけどね。。。