首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇总/汇总数据中的地块密度

汇总/汇总数据中的地块密度
EN

Stack Overflow用户
提问于 2020-09-27 19:45:04
回答 1查看 335关注 0票数 1

假设我有一个非常大的SQL数据库,并且我想为浮点数列中的值创建一个密度图。我可以很容易地导入R中的所有值并绘制密度。但是,由于表有那么多行,所以我希望避免导入所有值,而是使用查询在SQL server上计算汇总统计信息(例如min、q25、中位数、q75、max),并且只导入这几个摘要值,从而减少通信量。

因此,在R中,我将获得类似于agg对象的数据:

代码语言:javascript
复制
require(data.table)

# test data
set.seed(1234)
vec = rgamma(1000, shape = 0.75)
dt = data.table(group = 'A',
                val = vec)
agg = dt[ ,
          .(min = min(val),
            q25 = quantile(val, .25),
            med = median(val),
            q75 = quantile(val, .75),
            max = max(val)) ]

如何使用{ggplot2}包从这些聚集的数据构建密度或小提琴图?我假设geom_density()无论如何都会在幕后计算这样的值,但我不能直接将它们输入函数。

我只想通过使用agg对象来检索这样一个图:

代码语言:javascript
复制
require(ggplot2)
ggplot(dt) +
  geom_density(aes(x = val))

旁注:另一种方法是只导入一个值的样本。

EN

回答 1

Stack Overflow用户

发布于 2020-09-27 20:46:42

您可以在数据库端用足够小的回收箱对数据进行分组和计数,导出(小得多的)聚合数据,然后重建密度图。这里的“足够小”意味着数据的实际分布与聚合数据的估计分布之间的差异很小,不足以影响您的目标。

你可能需要做一些实验,因为它取决于密度变化的尺度。在下面的示例中,我使用了10,000个回收箱,这仍然是一个相对较小的数据集,可以从数据库导出。注意,我已经将您的vec示例数据扩展到了100万个值:

代码语言:javascript
复制
require(tidyverse)
require(patchwork) # Needed only for laying out the two plots
require(data.table)

# test data
set.seed(1234)
vec = rgamma(1e6, shape = 0.75) 
dt = data.table(group = 'A',
                val = vec)
agg = dt[ ,
          .(min = min(val),
            q25 = quantile(val, .25),
            med = median(val),
            q75 = quantile(val, .75),
            max = max(val)) ]

# Set breaks for aggregrating
br = seq(min(vec), max(vec), length.out=10000)
dx = median(diff(br))

# Aggregate data
agg2 = dt %>% 
  count(val = cut(val, breaks=br, labels=(br + dx)[-length(br)], 
                  include.lowest=TRUE),
        val = as.numeric(as.character(val)))

p = ggplot(data=dt, aes(val)) +
  geom_density(size=1, colour="blue", n=2^11) +
  geom_density(data=agg2 %>% uncount(weight=n), colour="orange", n=2^11) +
  theme_bw() 

p + {p + coord_cartesian(xlim=c(0,0.3))}

左手图将实际数据的密度图与从数据聚合到10,000个桶中重建的密度进行比较。右图在x轴上放大到接近于零的薄峰区域.注意极佳的重叠。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64092614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档