【问题标题】:Is shiny a good solution to display a computationally intensive fixed big dataset?闪亮是显示计算密集型固定大数据集的好解决方案吗?
【发布时间】:2017-04-12 14:27:51
【问题描述】:

这是我的问题: 我有一个大数据集,它在 R 中表示我用 ggplot2 绘制的约 500MB 的对象。 有 2000 万个 num 值可沿 int 轴绘制,这些值与 5 级 因素 相关联,用于颜色美学。
我想建立一个网络应用程序,用户可以在其中可视化这个数据集,使用不同的过滤器,这些过滤器依赖于因子来显示所有数据是一次,或者例如对应于因子的 1 个级别的子集。
问题是当我写情节时需要几分钟(~10分钟)

解决方案 1: 对用户来说最好的解决方案是使用 Shiny UI。但是有没有办法通过 ggplot2 或闪亮的技巧让情节以某种方式预先编写好,以便可以快速显示?

解决方案 2: 如果没有闪亮,我可能已经对数据集进行了不同的绘图,我将不得不重建一个 UI 以让用户可视化不同的图片。如果这样做,我将不得不限制显示数据的可能用例。

期待建议和讨论

【问题讨论】:

  • 如果你的情节需要 10 分钟。每次更改输入时,闪亮的应用程序将在 10 分钟内加载。所以它不是很好......除非你的情节不依赖于用户的输入,你可以加载一个PNG文件。
  • 你真的不需要绘制这么大的东西。如果您从数据库中获取数据,那么只需编写一系列查询,这些查询将在 DB 端聚合数据并将很少的数据拖到 shiny 中的输出。对你来说似乎是一个糟糕的设计。
  • @Smich7 这实际上是一个有趣的混合解决方案,使用闪亮显示图片,我会考虑的。但是为此使用闪亮有点矫枉过正
  • @PorkChop 我同意。这里实际上有过度绘制,但是这种表示必须遵循一些规则,我无法转换数据。
  • 我有一个肮脏的把戏。用 geom_rect() 替换过度绘图并删除这些数据点。

标签: r ggplot2 shiny


【解决方案1】:

理想情况下,你真的不需要绘制这么大的东西。如果您要从数据库中获取数据,那么只需编写一系列查询,这些查询将在 DB 端聚合数据并将很少的数据拖到 shiny 中输出。对你来说似乎是一个糟糕的设计。

话虽如此,highcharter 包的作者确实致力于实现boost.js module 以帮助绘制数百万个点。 https://rpubs.com/jbkunst/highcharter-boost.

还可以查看 bigvis 包,它允许“对大型数据集(10-1 亿次观察)进行探索性数据分析”,由 @Hadley Wickham https://github.com/hadley/bigvis 构建。关于包at this meetup

有一个很好的介绍

【讨论】:

    【解决方案2】:

    考虑以下程序:

    使用ggplot2,您可以生成一个 R 对象。

    plot_2_save <- ggplot()
    

    一个对象可以被保存

    saveRDS(object, "file.rds")
    

    在闪亮的server.R 中,您可以加载这些数据

    plot_from_data <- readRDS("path/.../file.rds")
    

    我将此设置用于某种文本分类,其中一个非常(非常)巨大的支持向量机模型实现为闪亮服务器上的应用程序。

    【讨论】:

    • 这里的问题不是 ggplot 对象,而是渲染绘图所需的时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2012-05-26
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多