基尼系数的计算公式,python是什么,基尼系数的计算公式,python是什么样的
用python计算基尼系数有两种方法。
如何用sql计算基尼系数,可以看我的另一篇文章。两篇文章编号相同,可以放在一起看。
文章中方法1的代码来自()包含注释,简单易懂)。为了正确计算。
如果不知道基尼系数的概念,可以看原文第一部分。
基尼系数的计算方法-long wind 09-博客公园
方法2和3参考:方法2和3是近似算法。其中,方法3:只适用于一些特殊情况。
3358 www.360doc.com/content/14/0911/13/87990 _ 408644530 . shtml
-请参考
方法一:
#方法1 importnumpyasnpimportdas aspportmatplotlibasmplportmatplotlib。PyploasplFromscipy。集成IntegrationImportDeintDeintDefgini配置559、198、420、39、709、225、731、708、369、519、46、48、446、117、127、905、652、802、422、884、746……592、552、690、456、918、70、801、695、900Float) Len) Cum _ Wealth均衡收入曲线)指45度曲线upper=xarray #累计收入份额yarray=Cum _ Wealth Yarray) pl。Plot) Xarray,Upper) #上45度线#ax.plot) xarray,Yarray)# ax . plot)(xaaarray)))Upper)ax。set _ xlabel(美国人口的累积份额))ax。set _ xlabel(美国收入的累积份额))计算曲线B=NP下面积的常用方法。Trapz) yarray x=xarray (#总面积为0.5a=0.5-bg=a/) ab) print(g) #执行函数gini的输出结果)# result 0.58008.000000000005
方法二:
近似的求上图中的面积,将其分割成多个梯形,通过近似计算多个梯形面积,将其加
得到了蓝线下的面积。
通过简化推到多个梯形面积求和公式,得到一个比较简单的公式,就是链接2中结尾的公式。
如果组数与样本数相同,就可以得到准确的数字,计算出的基尼系数等于上面方法1的结果。
如果减少组数,得到的基尼系数会比确切的基尼系数略低,因为更多的非线性曲线被假定为直线,即梯形的一边。
#第二种方法#后面跟着上面的定义#可能会导致样本数不能被组数等分的情况,需要借助python自带的分布数组pd.cut#分成N组。N=100m=PD . cut(PD . series(range(1,len (cum _ wealth))),bins=n,Labels=False)#将1到样本数的整数分成‘均匀’的N组# labels=false生成一些组号,表示该位置的原值属于1到N中的哪一组。y=m。Group by(by=m)。大小()。Cumsum () #每组中最后一个数得到的位置在哪里?大小表示每个组中有多少个元素。Cumsum #后每组最后一个元素显示的位置是分点数的位置t=yarray[y[:]]# yarray上得到的值#是图中的值g=1-(1/n)*(2 *(sum(t)-1)# 1,与文献中的不同。最后计算的时候减去1#,其实是一样的。文档分为五组,w1到w5,以及四个Y轴值的和。是sum #到n-1,所以可以改写为(不用刻意减1,按照公式,加起来是n-1)g=1-(1/n)*(2 *(sum(t[0:n-1])1)g #,结果是0.31735512395 #。如果第一组有6个元素,需要取第6个元素。在python中,索引是5,所以需要减去1n=100m=PD . cut(PD . series(range(0,len (cum _ wealth))),bins=n,Labels=false) Y=m.groupby (by=m)。大小()。cumsum()-1t=yarray[y[:]]G=1-(1/n)*(2 *(sum(t)-1)1)#或G=1-结果为0.3109641735512395n=19m=PD . cut(PD . series(range(1,len (cum _ wealth)),bins=n,labels=False)y=m group by(by=m)。大小()。cumsum()t=yarray[y[:]]g=1-(1/n)*(2 *(sum(t)-1)1)g #结果为0.3133532456894873n=9m=PD . cut(PD . series(range(1,len (cum _ wealth))),bins=n,labels=False)y=m.groupby(by=m)。大小()。cumsum()t=yarray[y[:]]g=1-(1/n)*(2 *(sum(t)-1)1)g #结果为0.300356286353766n=20m=PD . cut(PD . series(range(1,len (cum _ wealth))),bins=n,Labels=false) y=m.groupby (by=m)。大小()。cumsum()t=yarray[y[:]]g=1-(1/n)*(2 *(sum(t[0:n-1]))1)g #
-
最初的计算是一个简单的思路,但不适用于样本数不能被组数整除的情况。但可能对了解基尼系数的大概计算有帮助,所以在这里。
方法三
样本数量能够被分组数均匀分配的情况(仅适用于这个情况),更好的方法详见方法二。
数据的准确性也可能受到样本大小和分组大小之间关系的影响。在本文中,100个样本和100/20/50都是均匀分布的。如果不能均匀分布,取M的方法可能需要优化,要采用python中包含的最大强度甚至分组的功能。
#第二种方法#只适用于样本数可被组数整除的情况#那么上述定义n=100#分为100组,100个数据分为100组。计算每个点的面积和点与点之间的梯形,最精确近似 m=round (len (wealth)/n) #每组之间的距离y=yarray [ len(wealths),M)]#选择那些矩形底部X轴对应的Y轴上的Y轴值g=1-(1/100)*(2*sum(y) 1)g#。结果是0.3109641735512395#等于上面算出的图形下的面积#分成20组N=20m=round (len (wealen)每组的距离y=yarray [range (0,len (wealth),M)]#这些点的y坐标是g=1-(1/n)*(2*sum(y) 1)g#,结果是0.31025484587225693N=round有关优化,请参见方法3。n=40m=round(len (wealths)/n)y=yarray[range(0,len(wealths),M)]g=1-(1/n)*(2*sum(y) 1)g#结果为0.1385864556020072 #不准确n=9m=round(len(wealth)/n)y=yarray[range(0,len(wealth
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。