r - 如何创建真正大数据的散点图
问题描述
我有一个超过 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))
解决方案
降低运行时间的一种方法是使用较小的数据集和不同的代码来查看哪个更快。
然后您可以使用system.time()
查看某件事需要多长时间并进行比较:
例如:
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
推荐阅读
- javascript - React-Native 中的匿名函数
- docker - Docker 在以我的主机用户为所有者的容器内创建文件
- c - 是否有一个 gcc 函数可以为 C 添加两个大数?
- python - python kubernetes 如何使用 postStart 和 preStop 处理程序创建作业
- python - Keras:如果我的火车数据在子文件夹中,我的验证数据也需要吗?
- javascript - VueJS 在不使用 jQuery 的情况下从 Javascript 激活 boostrap 模态
- rust - 当通过“include_str!”包含游戏时,着色器会导致游戏崩溃。(贝维)
- python - 用python修改非python窗口?
- networkx - 拿出带有属性的边
- c++ - 打印整数数组时显示最小和最大限制(令我沮丧)