【问题标题】:How to get the points for a Lorenz curve plot with SQL?如何使用 SQL 获取 Lorenz 曲线图的点?
【发布时间】:2020-01-25 09:51:17
【问题描述】:

我正在使用 BigQuery,并且我对绘制洛伦兹曲线感兴趣(对于不平等,与基尼系数有关)。

如何使用 SQL 为这样的绘图生成数据?

曲线是显示底层 x% 的人所承担的总收入或财富比例的图表,尽管这对于有限的人口来说并不严格(见下文)。它通常用于表示收入分配,其中显示了最低 x% 的家庭,他们拥有的总收入的百分比 (y%)。家庭百分比绘制在 x 轴上,收入百分比绘制在 y 轴上。它也可以用来显示资产的分布。在这种用途中,许多经济学家认为它是衡量社会不平等的指标。 https://en.wikipedia.org/wiki/Lorenz_curve

【问题讨论】:

    标签: sql google-bigquery gini


    【解决方案1】:

    首先定义您的数据 - 在我的例子中,这些是维基百科中的所有页面及其浏览量(也删除特殊页面):

    WITH wiki_prefixes AS (SELECT ['File:', 'Talk:', 'Template_talk:', 'Wikipedia:', 'Category:', 'User_talk:', 'Page:', 'Template:', 'Category_talk:' , 'User:', 'Author:', 'Portal:', 'Wikipedia_talk:', 'Portal_talk:', 'File_talk:', 'Draft:', 'Help:', 'Draft_talk:', 'en:', 'Book_talk:', 'Module:', 'MOS:', 'Special:', 'Book:'] x)
    
    , data AS (
      SELECT *
      FROM `fh-bigquery.wikipedia_extracts.201912_en_totals`
      WHERE title NOT IN ('-', 'Main_Page')
      AND (
        title NOT LIKE '%:%'
        OR REGEXP_EXTRACT(title, '[^:]*:') NOT IN UNNEST((SELECT(x) FROM wiki_prefixes))
      )
    )
    

    一旦您有了要绘制的数据,您就可以将每一行放入 100 或 1000 个存储桶中的一个 - 加上每个用此查询表示的总数的累积百分比:

    
    SELECT ROUND(100*cum_views/total_views,3) cum_percent, *
    FROM (
      SELECT SUM(views) OVER(ORDER BY bucket) cum_views, *, SUM(views) OVER() total_views
      FROM (
        SELECT 1+fhoffa.x.int(rn/(SELECT (1+COUNT(*))/1000 FROM data)) bucket, COUNT(*) pages, SUM(views) views
          , STRING_AGG(title ORDER BY views DESC LIMIT 3) sample_titles
        FROM (
          SELECT title, views, ROW_NUMBER() OVER (ORDER BY views) rn
          FROM data
        )
        GROUP BY 1
      ) 
    )
    

    如果您想在 Data Studio 中对其进行可视化,请检查以下步骤:

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 2022-01-13
      • 2021-06-24
      • 1970-01-01
      • 2015-06-20
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多