基尼系数近似计算:sql (hive)实现 简单高效

基尼系数近似计算:sql (hive)实现 简单高效通过近似的方法,如何在sql中计算基尼系数。如何在python中实现基尼系数计算的两种方法,可以查看我的另一篇文章。两篇文章取数相同,可以结合去看。如果想加深对基尼系数计算的逻辑:可查看文章http://www.cnblogs.com/longwind09/p/8047539.html。本文中采用的近似方法,如何建立近似计算公式、如何简化推导公式可查看文章,本文基于这篇文章进行注…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

通过近似的方法,如何在sql中计算基尼系数。

如何在python中实现基尼系数计算的两种方法,可以查看我的另一篇文章。两篇文章取数相同,可以结合去看。

如果想加深对基尼系数计算的逻辑:可查看文章基尼系数计算方法 – longwind09 – 博客园

本文中采用的近似方法,如何建立近似计算公式、如何简化推导公式可查看文章,本文基于这篇文章进行注释

http://www.360doc.com/content/14/0911/13/87990_408644530.shtml

 ————————————————————————————————-

近似的精确度取决于分组数量。如果样本数量为100个,如果分组数量为100,近似的方法取得的结果跟实际值相等。

但随着分组数量的减少,精确度也减少。

本文是在hive中实现,需要使用到hive中的over函数。

包括如何使用over函数进行分组、计算每组的总和以及取得累计加和等等。

使用文章中的近似公式推导简化,最后得到下面的公式。

select * from gini;

-- gini为table名称。

-- gini中的100个数据如下,字段名为wealth。

/*
346,  559,  198,  420,  39,  709,  225
,  731,  708,  369,  519,  46,  48,  446
,  117,  127,  905,  652,  528,  832,  217
,  536,  942,  608,  37,  802,  422,  884
,  746,  959,  759,  397,  245,  83,  542
,  907,  128,  933,  740,  506,  458,  830
,  874,  570,  914,  592,  585,  574,  636
,  462,  86,  321,  174,  238,  670,  690
,  456,  918,  70,  801,  695,  908,  57,  497
,  605,  334,  265,  255,  235,  199,  739,  81
,  131,  68,  229,  602,  390,  571,  733,  440
,  528,  409,  222,  55,  876,  606,  906,  549
,  487,  552,  796,  454,  301,  914,  635,  304,  503,  688,  631,  705
*/

-- 计算基尼系数时候先进行cumsum或者是先进行分组都可以。
-- 这里由于over函数计算cumsum的特殊性,先进行分组。

-- 这里显示的是分成9组
-- 9出现在两个地方:第二行,最后的计算公式中,还有就是出现在ntile之后,分成9组的时候。
-- 第二行中:计算最后的结果时候,跟推导出来的公式有所补桶。外面的sum之前多做了一个处理,减掉了1。
-- 而且上面的文章中也提到:分成了n组的情况下,1至n-1的w是需要加和的,而第n的w是不加入计算的。
-- 这是因为最后一个样本数据的cumsum是占全部的样本的总和的100%,这个数据需要去掉。
-- cum_sum_1和cum_sum_2的结果是相同的,目前简单的数据上如此,复杂之后可能不是,需要确认。
-- 在样本数量不能被分组数量整除的时候,ntile的处理,可以搜索一下hive是怎么做的。

select 
(1 - (1/9) * (2*(sum(cum_sum_1)/sum(bar_sum) - 1) + 1))
from
(
select bar
, sum(wealth) as bar_sum
-- 即使bar_sum最后不需要用,也不能省略,下面的cum_sum的生成需要它,不然会报错。
-- , sum(sum(wealth)) over (order by bar rows between unbounded preceding and current row) as cum_sum_2
, sum(sum(wealth)) over(order by bar) as cum_sum_1
from
(
select wealth
, ntile(9) over (order by wealth) as bar
-- 分成9组
from gini
) a
group by bar
order by bar
limit 1000
) b
;



-- 一些结果

100组
0.310964174
-- 这个跟使用相同数据,在python上精确的求曲线下方面积的结果是相等的。
-- 可见我的另一片使用pyhton计算基尼系数的文章。

20组
0.31025484587225693

9组
0.300356286353766


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183550.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java删除linux文件_Java删除文件

    java删除linux文件_Java删除文件//将缓冲文件夹中的文件删除Strings=”D:\\txt\\inBuffer\\”+fileInfo[0]+”\\”+fileID;//文件的绝对路径Filefile=newFile(s);if(file.exists()){booleand=file.delete();if(d){System.out.print(“删除成功!”);}else{System.out…

    2022年6月14日
    100
  • 6G要启动了! 6G究竟有多快?你真的应该提前知道

    点击上方蓝色字体,关注我们 写在前面 6G概念研究在今年启动。按照过去通信发展的规律推测,6G的理论下载速度可以达到每秒1TB,预计2020年将正式开始6G研发,2030年投入商用…

    2021年6月21日
    112
  • java tess4j 示例_java 使用tess4j实现OCR的最简单样例[通俗易懂]

    java tess4j 示例_java 使用tess4j实现OCR的最简单样例[通俗易懂]网上很多教程没有介绍清楚tessdata的位置,以及怎么配置,并且对中文库的描述也存在问题,这里介绍一个最简单的样例。1、使用maven,直接引入依赖,确保你的工程JDK是1.8以上net.sourceforge.tess4jtess4j4.3.12、实现代码publicclassOCRDemo{publicstaticvoidmain(Stringargs[])throwsExce…

    2022年5月12日
    35
  • bfs官网_山谷和山脉

    bfs官网_山谷和山脉FGD小朋友特别喜欢爬山,在爬山的时候他就在研究山峰和山谷。为了能够对旅程有一个安排,他想知道山峰和山谷的数量。给定一个地图,为FGD想要旅行的区域,地图被分为 n×n 的网格,每个格子 (i,j) 的高度 w(i,j) 是给定的。若两个格子有公共顶点,那么它们就是相邻的格子,如与 (i,j) 相邻的格子有(i−1,j−1),(i−1,j),(i−1,j+1),(i,j−1),(i,j+1),(i+1,j−1),(i+1,j),(i+1,j+1)。我们定义一个格子的集合 S 为山峰(山谷)当且仅当:

    2022年8月9日
    4
  • python安装uwsgi_微服务怎么部署到服务器的

    python安装uwsgi_微服务怎么部署到服务器的什么是uWSGIuWSGI旨在为部署分布式集群的网络应用开发一套完整的解决方案。主要面向web及其标准服务。由于其可扩展性,能够被无限制的扩展用来支持更多平台和语言。uWSGI是一个web服务器,实现了WSGI协议,uwsgi协议,http协议等。uWSGI的主要特点是:超快的性能低内存占用多app管理详尽的日志功能高度可定制uWSGI服务器自己实现了基于uwsgi协议的ser…

    2022年9月4日
    2
  • 数码视讯Q5刷armbian+squeezelite

    数码视讯Q5刷armbian+squeezelite数码视讯Q5刷armbian+squeezelite数码视讯Q5机顶盒介绍:数码视讯Q5CPU:晶晨S905M4核1.5G内存:1g存储:8G显卡:Mali-450接口:HDMIUSB2.0(两个)AVTF卡槽RJ45(1000M)带2.4无线电源:DC12V1A目前闲鱼的售价在:50-70元。购买数码视讯Q5时,必须问清楚,是否可以插tf卡打游戏,可以插tf卡打游戏才买,可以插tf卡打游戏才买,可以插tf卡打游戏才买,以…

    2025年6月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号