简介
基尼系数是根据洛伦兹曲线定义的判断收入分配公平程度的指标,0.4
为收入分配警戒线。
基尼系数越小,年收入分配越平均。
、
为图形面积,则基尼系数
定义为:
具体案例
数据来源看准网的北京搜狗的2019-06-15数据,过滤掉员工数小于2的数据,计算得到基尼系数为0.28
import numpy as np
from matplotlib import pyplot as plt
from scipy.interpolate import make_interp_spline
def GiniIndex(p):
'''基尼系数'''
cum = np.cumsum(sorted(np.append(p, 0)))
sum = cum[-1]
x = np.array(range(len(cum))) / len(p)
y = cum / sum
B = np.trapz(y, x=x)
A = 0.5 - B
G = A / (A + B)
'''绘图'''
plt.rcParams['font.sans-serif'] = ['SimHei']
fig, ax = plt.subplots()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('data', -0))
ax.spines['left'].set_position(('data', 0))
plt.xticks([0, 1.0])
plt.yticks([1.0])
plt.axis('scaled')
x_smooth = np.linspace(x.min(), x.max(), 100)
y_smooth = make_interp_spline(x, y)(x_smooth)
ax.plot(x_smooth, y_smooth, color='black')
ax.plot(x, x, color='black')
ax.plot([0, 1, 1, 1], [0, 0, 0, 1], color='black')
ax.fill_between(x, y)
ax.fill_between(x, x, y, where=y <= x)
ax.set_xlabel('职位')
ax.set_ylabel('工资')
plt.show()
return G
if __name__ == '__main__':
salary = {'算法研究员': 42100,
'产品经理': 31600,
'c++软件工程师': 38900,
'java开发工程师': 32650,
'测试开发': 33700,
'数据开发': 31600,
'android开发工程师': 26850,
'自然语言处理': 47300,
'web前端开发工程师': 31600,
'测试工程师': 11600,
'运维开发工程师': 31600,
'产品总监': 57800,
'数据分析师': 30000,
'深度学习': 42100,
'语音识别': 38900,
'javascript': 32600,
'移动产品经理': 31600,
'数据产品经理': 31600,
'ios开发工程师': 31600,
'产品助理': 2200,
'机器学习': 63050,
'python': 18450,
'图像算法': 52550,
'c#': 31600,
'node.js': 23700,
'内容运营': 4300,
'数据挖掘工程师': 23700,
'产品运营': 5300,
'视觉设计师': 24250,
'算法工程师': 49950,
'ui设计师': 25800,
'英语翻译': 3200,
'编辑': 3200, }
print(GiniIndex(list(salary.values()))) # 0.27963407313931665