Python 基尼系数(Gini coefficient)(一)
定义:基尼系数是指国际上通用的、用以衡量一个国家或地区居民收入差距的常用指标。
目的:查看一个国家贫富差距的程度。
提出者:最早由意大利统计与社会学家Corrado Gini在1912年提出。
范围:最大值为1,最小值为0,基尼系数越接近0表明收入分配越是趋向平等。国际惯例把0.2以下视为收入绝对平均,0.2-0.3视为收入比较平均;0.3-0.4视为收入相对合理;0.4-0.5视为收入差距较大,当基尼系数达到0.5以上时,则表示收入悬殊。
计算理解:基尼系数的计算是根据洛伦兹曲线来的,设实际收入分配曲线和收入分配绝对平等曲线之间的面积为 A,实际收入分配曲线右下方的面积为 B。并以 A 除以(A+B)的商表示不平等程度。这个数值被称为基尼系数或称洛伦茨系数。

以上图为例,横坐标代表低收入到高收入的累计人数,纵坐标代表累积收入份额,当洛伦兹曲线向下的弯曲程度较大时,说明低收入人群的占有份额越低,此时区域A的面积较大,相应的 A/(A+B)的数值即基尼系数就较大,即贫富差距越大。
基尼系数在直观上有一个解释,即它可以解释为从人口中随机选取的两个个体(x1, x2)之间的预期收入差距,假设其中较大的数值为M,较小的数值为m,则可以推导基尼系数为

经典的计算方法是

其中,x是排序后的数值,n是观测数目,x_bar是平均值。
如果x是按照升序排序,即每一个x的排名为i,计算方法可以简化

最后采用Python代码进行计算,,需要注意的是必须是正值才能参与计算(>0)
def gini(x, w=None):
# The rest of the code requires numpy arrays.
x = np.asarray(x)
if w is not None:
w = np.asarray(w)
sorted_indices = np.argsort(x)
sorted_x = x[sorted_indices]
sorted_w = w[sorted_indices]
# Force float dtype to avoid overflows
cumw = np.cumsum(sorted_w, dtype=float)
cumxw = np.cumsum(sorted_x * sorted_w, dtype=float)
return (np.sum(cumxw[1:] * cumw[:-1] - cumxw[:-1] * cumw[1:]) /
(cumxw[-1] * cumw[-1]))
else:
sorted_x = np.sort(x)
n = len(x)
cumx = np.cumsum(sorted_x, dtype=float)
# The above formula, with all weights equal to 1 simplifies to:
return (n + 1 - 2 * np.sum(cumx) / cumx[-1]) / n
除了在居民收入水平领域,在其他的社会经济方面也经常采用基尼系数衡量差异,应用较为广泛。
参考来源:
定义:百度百科
计算:Gini Coefficient of Inequality
代码:https://stackoverflow.com/questions/48999542/more-efficient-weighted-gini-coefficient-in-python