什么是基尼系数

基尼系数是指国际上通用的、用以衡量一个国家或地区居民收入差距的常用指标。是20世纪初意大利经济学家基尼,于1922年提出的定量测定收入分配差异程度的指标。它是根据洛伦兹曲线找出了判断分配平等程度的指标(如下图)。

设实际收入分配曲线和收入分配绝对平等曲线之间的面积为A,实际收入分配曲线右下方的面积为B。并以A除以A+B的商表示不平等程度。这个数值被称为基尼系数或称洛伦茨系数。如果A为零,基尼系数为零,表示收入分配完全平等;如果B为零则系数为1,收入分配绝对不平等。该系数可在零和1之间取任何值。收入分配越是趋向平等,洛伦茨曲线的弧度越小,基尼系数也越小,反之,收入分配越是趋向不平等,洛伦茨曲线的弧度越大,那么基尼系数也越大。如果个人所得税能使收入均等化,那么,基尼系数即会变小。

基尼系数最大为“1”,最小等于“0”。基尼系数越接近0表明收入分配越是趋向平等。国际惯例把0.2以下视为收入绝对平均,0.2-0.3视为收入比较平均;0.3-0.4视为收入相对合理;0.4-0.5视为收入差距较大,当基尼系数达到0.5以上时,则表示收入悬殊。

基尼系数的计算公式推导

A+B的面积=1/2*100%*100%=1/2

其次计算B的面积的话,由于洛伦茨曲线是一条不规则的曲线,无法直接计算B的面积,因此采用近似梯形的面积来代替。

假定全部人口平均分为n组,已累积到第i组人口总收入占全部人口总收入的比重Wi为下底,已累计的第i-1组人口总收入收入占全部人口总收入的比重Wi-1为上底,以每组人口占全部人口的比例即1/n为高,计算一个个小梯形的面积,并加总,即得到近似B的面积:

因此基尼系数的计算公式为:

例子:用户补贴从小到大排列,均分n=100份,前1%用户的总补贴,(0%-2.0%) 用户的总补贴,。。。 0%-100%用户的总补贴为:[1,1+2,1+2+3,…,1+2+…+100]

1、全部用户总补贴累计为1+2+3+…+100=5050

2、每一组已累计补贴占用比重分别为[1/5050,(1+2)/5050,(1+2+3)/5050,…,(1+2+…+100)/5050],假设分别对应到y轴上的高为a,b,c,d, … ,ma,max,a=1/5050,……,max=(1+2+…+100)/5050

3、B的面积就是计算每一个小梯形面积之后进行累加,梯形的高均为1/n,面积累加就是1/n*[(0+a)/2+(a+b)/2+(b+c)/2+……(ma+max)/2] = 1/n*[(b+c+…+ma+max) - max/2]

第一个小梯形实际是个三角形,面积是1/n*[(0+a)/2],注意最后一个梯形的下底只加了一次max/2,最后汇总完之后会减去一个max/2

B的面积=[(1)+(1+2)+(1+2+3)+……+(1+2+3+……+100) - (1+2+3+……+100)/2 ]/5050/100

4、基尼系数G=1-2B=1-2[(1)+(1+2)+(1+2+3)+……+(1+2+3+……+100) - (1+2+3+……+100)/2 ]/5050/100

代码实现

Python实现

import numpy as np
n = 100
wealths = [i for i in range(1,101)] #[1,2,3…100]
cum_wealths = np.cumsum(sorted(np.append(wealths, 0))) #加上0,再排序,再计算cumsum
max = cum_wealths[-1]  # 取最后一个,也就是原数组的和
print(np.sum(cum_wealths)) #np.sum(cum_wealths) 是将所有元素求和
print(1-2*((np.float(np.sum(cum_wealths))-max/2)/max/n) #代入基尼系数公式

其他的Python实现方式可参考:  http://www.pianshen.com/article/85166463/

SQL实现

with userdaystat as (select COALESCE(total_cash,0) total_cash,ntile(100) over(order by COALESCE(total_cash,0) asc ) as bucket_id --按补贴升序的顺序平均分成100份 --  Ntile:是一个窗口函数,它把有序的数据集合 平均分配 到 指定的数量(num)个桶中, 将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。from sync_mongo_box.extract_source__userdaystatwhere pt = '2019-09-01'
) , subsidy_rank as (select bucket_id,avg(total_cash) total_cash_avg --按照分组分别计算每一组补贴的平均值from userdaystatgroup by bucket_id
)
select 1-(sum(total_cash_avg * (101-bucket_id))-sum(total_cash_avg)/2)/sum(total_cash_avg)/50  --代入基尼系数公式
from subsidy_rank--最后结果公式约分后with userdaystat as (select COALESCE(total_cash,0) total_cash,ntile(100) over(order by COALESCE(total_cash,0) asc ) as bucket_id --按补贴升序的顺序平均分成100份 --  Ntile:是一个窗口函数,它把有序的数据集合 平均分配 到 指定的数量(num)个桶中, 将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。from sync_mongo_box.extract_source__userdaystatwhere pt = '2019-09-01'
)
select 1-(sum(total_cash * (101-bucket_id))-sum(total_cash)/2)/sum(total_cash)/50
from userdaystat;

基尼系数的推导及Python和SQL实现相关推荐

  1. 链接1: 学习Python以及SQL的好去处----仅链接

    https://www.liaoxuefeng.com/ 声明: 自己对Python以及SQl的了解,大都是通过该网站

  2. 数学推导+纯Python实现机器学习算法:GBDT

    Datawhale推荐 作者:louwill,Machine Learning Lab 时隔大半年,机器学习算法推导系列终于有时间继续更新了.在之前的14讲中,笔者将监督模型中主要的单模型算法基本都过 ...

  3. python连sql server学生管理系统_Python 跨平台连接 SQL Server

    前言 使用 python 访问 SQL Server 数据库,还需要支持跨平台.关于 SQL Server 的吐槽就免了,既然存在,总会有遇到这个问题的时候. 首先在 SQLAlchemy 文档中介绍 ...

  4. 深度学习(神经网络) —— BP神经网络原理推导及python实现

    深度学习(神经网络) -- BP神经网络原理推导及python实现 摘要 (一)BP神经网络简介 1.神经网络权值调整的一般形式为: 2.BP神经网络中关于学习信号的求取方法: (二)BP神经网络原理 ...

  5. Python 执行SQL带参数

    Python 执行SQL带参数 转载于:https://www.cnblogs.com/xibuhaohao/p/10451456.html

  6. 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟

    Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...

  7. 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...

  9. 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法

    Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...

最新文章

  1. IDEA自定义快捷指令,快捷生成代码、注释
  2. Sublime Text使用教程【转】
  3. java反编器中文版,java反编译软件下载
  4. LoadRunner 11.0 - 安装破解(个人试用成功)
  5. BitSet之为什么用long保存信息
  6. 干不掉的钉钉:从哪来,往哪去?
  7. 如何给定两个gps坐标 算出航向角_机器人开发如何配置ROS中的TF变换关系?
  8. Ubuntu 硬盘”分区“图文教程(用于光盘,U盘安装Ubuntu)
  9. jQuery 文档操作方法大全(也适用于 XML 文档和 HTML 文档)
  10. 「UG/NX」BlockUI 控件集合
  11. Leetcode_206_Reverse Linked List
  12. js callee与caller 区别
  13. 问卷调查 批量模拟真人填写 爬虫 实战
  14. 中国汽车电子市场和发展机会分析
  15. H5上传图片并使用canvas制作海报
  16. html 悬浮菜单按钮,HTML右侧悬浮菜单
  17. 【SAP Abap】X-DOC:SE10 - SAP 传输请求 副本传输请求的应用
  18. itchat实现微信收到特定消息自动回复特定内容
  19. java编程实现人物对打_Java Lab(1)控制台下的人物PK
  20. 微信小程序 - 接入腾讯地图 SDK 及详细使用教程,结合小程序 mpa 地图组件展示腾讯地图(基础使用 / 授权当前位置 / 配合小程序map组件的使用 / 腾讯地图逆地址解析 / 坐标系的转化)

热门文章

  1. 武汉理工大学自动化学院研究生07年就业情况(官方统计)
  2. Nokia查询手机固件版本(手机型号或类型标志符)及CODE
  3. Citavi插件的安装和使用以及注意事项
  4. Linux 编译内核且增加一个系统调用
  5. DirectX SDK去哪了?
  6. python 生日悖论_python自学日记6——列表
  7. 基于单片机的烟雾浓度监测报警设计
  8. Android+Sqlite 实现古诗阅读应用(二)
  9. 华为商城 删除订单_顶级对决!iPhone12开售排队 余承东暗讽苹果!iPhone12和华为Mate40你选哪个?...
  10. LittleTools之批量替换工具