由于 R 中的数据集大小而需要聚合时如何访问未聚合的结果

Posted

技术标签:

【中文标题】由于 R 中的数据集大小而需要聚合时如何访问未聚合的结果【英文标题】:How to access unaggregated results when aggregation is needed due to dataset size in R 【发布时间】:2022-01-01 12:17:47 【问题描述】:

我的任务是获取一组客户的总入站潜在客户、同一组客户的每月潜在客户以及这些潜在客户的转化率。

我从中提取的数据集是 2000 万条记录,因此我无法查询整个数据。我已经成功完成了第一步(获得每个组织的总潜在客户数:

inbound_leads <- domo_get_query('6d969e8b-fe3e-46ca-9ba2-21106452eee2',
                                auto_limit = TRUE,
                                query = "select org_id,
                                          COUNT(*)
                                        from table
                                            GROUP BY org_id
                                            ORDER BY org_id"

DOMO 是我从中提取的双向工具,domo_get_query 是我公司构建的自定义库的内部函数。它需要一个查询参数,这是一个 mysql 查询)和其他各种现在不重要的参数。

示例数据如下所示:

    org_id, inserted_at, lead_converted_at
    1       10/17/2021    2021-01-27T03:39:03
    2       10/18/2021    2021-01-28T03:39:03
    1       10/17/2021    2021-01-28T03:39:03
    3       10/19/2021    2021-01-29T03:39:03
    2       10/18/2021    2021-01-29T03:39:03

我浏览了许多聚合在线教程,但似乎都没有讨论如何获取预聚合所需的数据(例如每个组织每月的潜在客户数量,一旦聚合发生,这是不可能的,因为在上面的示例聚合将删除从需要聚合以便首先访问的数据集中查看多个 org_id 1 实例的能力。也许我只是不太了解这一点,无法知道要问的正确问题。任何方向表示赞赏。

【问题讨论】:

您无法使用聚合结果来获取完整的未聚合数据。如果我告诉你一堆数字的平均值是 10,那么你可以告诉我的关于这些数字的信息就很少了——聚合会故意丢弃信息。您需要学习如何编写 SQL 查询以获取所需的信息。如果您想要每个组织每月的潜在客户,那么您的group by 中需要monthorg 【参考方案1】:

如果您无法将数据放入内存中,您有几个选择。您可以分批处理数据(即一次一年),以使其适合内存。您可以使用像 chunked 这样的包来提供帮助。

但在这种情况下,我敢打赌,处理您的问题的最简单方法是完全在您的 SQL 查询中解决它。要按月获取潜在客户,您需要截断日期列并按 org_id、月分组。

要获得这些月份内潜在客户的转化率,您可以添加一个列(除了计数列之外),类似于:

sum(case when conversion_date is not null then 1 else 0) as convert_count

【讨论】:

以上是关于由于 R 中的数据集大小而需要聚合时如何访问未聚合的结果的主要内容,如果未能解决你的问题,请参考以下文章

进行聚合时如何忽略数据框中的特定列

当我在 R 中使用聚合时,我可以将总和应用于每一行吗?

流分析聚合窗口

Azure 流分析:聚合时删除重复项

在 Spark 数据框中聚合时访问窗口外的行

如何通过Elasticsearch 6.x中的动态或未知字段进行聚合