【问题标题】:one-hot-encoding (dummy variables) with BigQuery使用 BigQuery 进行一次热编码(虚拟变量)
【发布时间】:2020-11-12 13:25:38
【问题描述】:

我想使用 BigQuery 而不是 Pandas 为我的类别创建虚拟变量(单热编码)。 我最终会得到大约 200 列,因此我无法手动完成并对其进行硬编码

测试数据集(实际的变量比这个多得多)

WITH table AS (
SELECT 1001 as ID, 'blue' As Color, 'big' AS size UNION ALL
SELECT 1002 as ID, 'yellow' As Color, 'medium' AS size UNION ALL
SELECT 1003 as ID, 'red' As Color, 'small' AS size UNION ALL
SELECT 1004 as ID, 'blue' As Color, 'small' AS size)

SELECT *
FROM table

预期结果:

【问题讨论】:

    标签: google-bigquery one-hot-encoding dummy-variable


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    DECLARE Colors, Sizes ARRAY<STRING>;
    
    SET (Colors, Sizes) = (SELECT AS STRUCT ARRAY_AGG(DISTINCT Color), ARRAY_AGG(DISTINCT Size) FROM `project.dataset.table`);
    
    EXECUTE IMMEDIATE '''
    CREATE TEMP TABLE result AS  -- added line
    SELECT ID, ''' || (
      SELECT STRING_AGG("COUNTIF(Color = '" || Color || "') AS Color_" || Color ORDER BY Color)
      FROM UNNEST(Colors) AS Color
    ) || (
      SELECT ', ' || STRING_AGG("COUNTIF(Size = '" || Size || "') AS Size_" || Size ORDER BY Size)
      FROM UNNEST(Sizes) AS Size
    ) || '''
    FROM `project.dataset.table`
    GROUP BY ID
    ORDER BY ID
    ''';  -- added `;`
    
    SELECT * FROM result;  -- added line   
    

    如果应用于您问题中的样本数据 - 输出如下

    【讨论】:

    • 谢谢。它虽然没有返回表格,但返回了一些“工作”。如何将输出保存为 bigquery 上的表格?
    • 当然,抱歉 - 我认为这很明显可以以需要的方式使用。不过,请参阅我的答案中的更新。看一下添加的两条线和一条更新的线(它们有各自的 cmets,因此很容易识别它们):o)
    • 对不起,也许这很明显,但我之前没有使用 EXECUTE IMMEDIATE。即使添加了您包含的新行,我仍然需要单击“查看结果”来查看表格输出。我想自动保存一个热编码数据集
    • 你是对的 - 这很明显 - 而不是使用/保存到临时表中然后从中选择 - 只需使用永久表 - 比如 CREATE TABLE project.dataset.result AS - 我想我现在回答了你所有的问题!如果尚未投票并接受,请考虑投票。如果有更多问题,请发布一个新问题,我会很乐意回答:o)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2018-07-16
    • 2021-02-10
    相关资源
    最近更新 更多