首页 > 解决方案 > 如何创建真正大数据的散点图

问题描述

我有一个超过 3 GB 的非常大的数据(只有 X 和 Y 变量)。数据框IBD有 3 亿行。有没有更好更快的方法来绘制这个?

首先,我阅读了数据框:

IBD <- fread("/40/AD/LL_Cohorts_MERGED-IBD.genome", select = c("X", "Y"))

并试图绘制,但已经超过 12 小时,我没有得到任何输出。

ggplot(IBD, aes(x=X, y=Y))+ 
  geom_point() + 
  ggtitle("ADGC EOAD") + 
  scale_x_continuous(limits=c(0,1)) + 
  scale_y_continuous(limits=c(0,1)) 

标签: rscatter-plot

解决方案


降低运行时间的一种方法是使用较小的数据集和不同的代码来查看哪个更快。

然后您可以使用system.time()查看某件事需要多长时间并进行比较:

在 R 中测量函数执行时间

例如:

size<-100000
IBD<-data.frame(X=rbeta(n = size,shape1=2,shape2 = 2),Y=rbeta(n = size,shape1=2,shape2 = 2))

在这个假数据集上使用您的代码:

system.time(
ggplot(IBD, aes(x=X, y=Y))+ geom_point() + ggtitle("ADGC EOAD") + scale_x_continuous(limits=c(0,1)) + scale_y_continuous(limits=c(0,1))
)

   user  system elapsed 
   0.01    0.00    0.01

使用基数plot作为比较点:

system.time(
plot(Y~X, data=IBD)
)

   user  system elapsed 
   2.13    2.34    4.56 

你可以看到这plot需要更长的时间。我意识到这不是使您的代码更快的解决方案,但它是一种工具,您可以使用它来确定在如此大的数据集上什么会更快。


编辑:

从@maydin 的评论中添加方法:

cluster<-kmeans(x = IBD, centers = 1000)
Clus<-data.frame(cluster$centers)

system.time(
  ggplot(Clus, aes(x=X, y=Y))+ geom_point() + ggtitle("ADGC EOAD") + scale_x_continuous(limits=c(0,1)) + scale_y_continuous(limits=c(0,1))
)

   user  system elapsed 
      0       0       0

推荐阅读