Python绘制基尼系数图

简介

基尼系数是根据洛伦兹曲线定义的判断收入分配公平程度的指标,0.4为收入分配警戒线。

基尼系数越小,年收入分配越平均。

在这里插入图片描述
A A B B 为图形面积,则基尼系数 G G 定义为:
G = A A + B G=\frac{A}{A+B}

具体案例

数据来源看准网的北京搜狗的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

参考文献

  1. 基尼系数 - 维基百科
  2. 【北京北京搜狗科技发展有限公司待遇怎么样】- 看准网
  3. 基尼系数如何计算? - 知乎
  4. matplotlib.pyplot.fill
发布了248 篇原创文章 · 获赞 89 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/lly1122334/article/details/104253254