学习西方经济学时接触了很多系数,比如恩格尔系数,基尼系数等,都是反映宏观经济状况的。其中基尼系数是用来综合考察居民收入分配差异状况的指标。居民收入差距小时,基尼系数就低,反之,基尼系数就高。

收入绝对平均时,基尼系数是0,收入只集中在一个人手里,基尼系数是1,很显然,现实情况下的基尼系数在0到1之间。

一般而言,基尼系数所反映的居民收入状况如下:

基尼系数 低于0.2 0.2 ~ 0.3 0.3 ~ 0.4 0.4 ~ 0.5 高于0.5
收入状况 过于平均 较为平均 比较合理 差距过大 差距悬殊

从国家统计局网站上可以查到,2019年我国居民人均可支配收入基尼系数为0.465,属于收入差距过大的范畴。 https://www.stats.gov.cn/zs/tjws/tjzb/202301/t20230101_1903941.html

基尼系数的计算方式如下:

G = 1 - SUM1_n(Pi * (2Qi - Wi))

我们需要对数据按收入从低到高排序,其中Wi 表示第i户所代表人口收入占总收入比重,Pi表示第i户所代表人口占总人口比重,Qi = SUM1_k(Wi)

下面使用模拟数据来计算一下。

import numpy as np

np.random.seed(1)
income_data = np.random.lognormal(mean=10, sigma=0.6, size=100)

def calculate_gini(data):
    n = data.size
    total = np.sum(data)
    sorted_data = np.sort(data)
    
    normalized_data = sorted_data / total  
    
    print(sorted_data)
    print(normalized_data)
    
    cum_sum_data = np.cumsum(normalized_data)
    print(cum_sum_data)

    gini1 = 1.0
  
    for i in range(n): 
        gini1 = gini1 - (2 * cum_sum_data[i] - normalized_data[i]) / n 

    return gini1


gini = calculate_gini(income_data)
print(f"使用模拟收入数据得到的基尼系数:{gini:.3f}")

结果:

[ 5536.27284613  6399.11881237 ...]
使用模拟收入数据得到的基尼系数0.293