基尼系数的手工计算

基尼系数通常衡量一个国家或地区居民收入差距的常用指标。同样基尼系数也可以衡量影响因素差距的目标。

基尼系数衡量一个某些因素差距的常用指标。基尼系数介于0-1之间,基尼系数越大,表示不平等程度越高。

 

第一步:计算出差值、影响程度、前期值占比、斜率、环比波幅

      差值=7月份的值-6月份的值

      影响程度=某个差值/差值的总和

      前期值占比=6月份的值/6月份的总和

      斜率=影响程度/前期值占比

      环比波幅=差值/6月份的值

 2020/062020/07差值影响程度前期值占比斜率环比波幅
北京700200-5001.250.5833333332.142857143-71.43%
上海100400300-0.750.083333333-9300.00%
广州400200-2000.50.3333333331.5-50.00%
杭州00000#DIV/0!#DIV/0!
深圳00000#DIV/0!#DIV/0!
长沙00000#DIV/0!#DIV/0!
南京00000#DIV/0!#DIV/0!
天津00000#DIV/0!#DIV/0!
总和1200800-400111-33.33%

 

第二步:计算出影响程度累计值、前期值占比累计值。

  纵坐标 横坐标
 影响程度影响程度累计值前期值占比前期值占比累计值
上海-0.75-0.750.0833333330.083333333
广州0.5-0.250.3333333330.416666667
北京1.2510.583333333

1

 

第三步:根据影响程度、前期值占比、斜率计算影响系数,计算方法如下:

 

使用presto sql计算基尼系数,把sql稍微修改一下,同样也可以用hive计算基尼系数:

SELECT 1-sum(s) AS jini 
FROM
  (SELECT city,
          earlier_degree_sum/2*(influence_degree_sum+last_value(influence_degree_sum) OVER(
                                                                                           ORDER BY slope ROWS BETWEEN CURRENT ROW AND 1 following)+2) AS s 
   FROM
     (SELECT city,
             slope,influence_degree,earlier_degree,
             sum(influence_degree) over(
                                        ORDER BY influence_degree ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS influence_degree_sum, --影响程度累计值
             sum(earlier_degree) over(
                                      ORDER BY influence_degree ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS earlier_degree_sum --前期值占比累计值
      FROM (
              (SELECT city,
                      if(d_sum!=0,d_value*1.00/d_sum,NULL) AS influence_degree, --影响程度
                      if(last_sum!=0,last_month_value*1.00/last_sum,NULL) AS earlier_degree, --前期值占比
                      if(last_month_value!=0
                         AND d_sum!=0
                         AND last_sum!=0,(d_value*1.000000/d_sum)/(last_month_value*1.000000/last_sum)) AS slope --斜率
               FROM
                 (SELECT city, --计算6月和7月的每个城市的值
                         count(CASE
                                   WHEN create_time<TIMESTAMP '2020-07-01 00:00:00' THEN user_id
                                   ELSE NULL
                               END) AS last_month_value,
                         count(CASE
                                   WHEN create_time>=TIMESTAMP '2020-07-01 00:00:00' THEN user_id
                                   ELSE NULL
                               END) AS current_month_value,
                         (count(CASE
                                    WHEN create_time<TIMESTAMP '2020-07-01 00:00:00' THEN user_id
                                    ELSE NULL
                                END)-count(CASE
                                               WHEN create_time>=TIMESTAMP '2020-07-01 00:00:00' THEN user_id
                                               ELSE NULL
                                           END)) AS d_value
                  FROM dby_ods.ods_bi_sop_hourly
                  WHERE create_time<=TIMESTAMP '2020-07-31 00:00:00'
                    AND create_time>TIMESTAMP '2020-05-31 00:00:00'
                  GROUP BY city) t1
               JOIN
                 (SELECT count(CASE --计算6月和7月的总的值
                                   WHEN create_time<TIMESTAMP '2020-07-01 00:00:00' THEN user_id
                                   ELSE NULL
                               END) AS last_sum,
                         count(CASE
                                   WHEN create_time>=TIMESTAMP '2020-07-01 00:00:00' THEN user_id
                                   ELSE NULL
                               END) AS current_sum,
                         (count(CASE
                                    WHEN create_time>=TIMESTAMP '2020-07-01 00:00:00' THEN user_id
                                    ELSE NULL
                                END)-count(CASE
                                               WHEN create_time<TIMESTAMP '2020-07-01 00:00:00' THEN user_id
                                               ELSE NULL
                                           END)) AS d_sum
                  FROM dby_ods.ods_bi_sop_hourly
                  WHERE create_time<=TIMESTAMP '2020-07-31 00:00:00'
                    AND create_time>TIMESTAMP '2020-05-31 00:00:00') t2 ON 1=1) t3) t4
      ORDER BY influence_degree) t5
   ORDER BY slope) t6;

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值