找到最集中的区域

时间:2016-10-26 17:28:19

标签: r

我有一个大数据集(200万行),其中每行代表一个点,其空间坐标为米(x和y)及其分数。它看起来像这样:

my_points <- data.frame(ID = 1:2e6, 
    x = sample(x = 1:1e6, size = 2e6, replace = TRUE), 
    y = sample(x = 1:1e6, size = 2e6, replace = TRUE), 
    Score = sample(x = 1:1e3, size = 2e6, replace = TRUE))

head(my_points)
# ID      x      y Score
#  1  21984 628151    54
#  2 675714  27715   431
#  3 273248 127287    47
#  4 659750 795394   921
#  5 478142 417083   416
#  6 783249 440782   253

所有点都位于大面积(1000 x 1000公里)。

我试图在100米范围内找到收集最高分的点组。

到目前为止,我已经尝试了两种解决方案,但是没有一种能够处理如此多的数据(即使使用并行计算或data.table包):

第一个解决方案:

我建立了一个覆盖所有空间的空间网格。我为网格选择了一小步(10米),以确保我收集所有可能的解决方案。对于网格的每个点,我将小于100米的点的得分相加。 这个解决方案花费了太多时间(可能是我的计算机上的几周或几个月)......

第二个解决方案

我已经建立了一个函数,对于一对(x,y),返回包含在中心圆(x,y)和半径100米内的分数。 我试图找到这个函数的最大值,但我无法找到适合这种非连续函数的方法...

有关更快解决方案的任何想法(不到一天)?

1 个答案:

答案 0 :(得分:1)

好的 - 我认为我的解决方案有效,但速度很慢。

livereload:{
    options:{
      livereload:'<%= connect.options.livereload %>'
    },
    files:[
      'app/{,*/}*.html',
      'app/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
    ]
  }

我使用Rcpp加速 - 算法非常简单。

  1. 围绕每个点创建一个圆形多边形
  2. 检查所有其他点是否在圆形多边形内,并将正确的所有分数相加
  3. 1000点需要大约0.6秒。我想这意味着,你的2000000点需要一个月左右的时间。嗯。无论如何我决定发布这个帖子。也许它可以帮助别人。