R和spark:比较不同地理点之间的距离

2024-06-23

我正在处理纽约市出租车数据集。该数据集的列包括日期时间、接送纬度/经度、下车纬度/经度等。现在我想对纬度/经度进行反向地理编码以找到行政区/社区。

我有两个数据框。 1)第一个数据框包含我想要用最近的纽约社区名称进行分类的所有点。 2)第二个数据框包含邻域名称及其质心。

我给你看一个小例子。

df_points_to_classify: 单击此处下载原始 csv https://s3.amazonaws.com/nyc-tlc/trip+data/yellow_tripdata_2015-01.csv

     longitude   latitude     
         <dbl>      <dbl>
1    -73.99037   40.73470
2    -73.98078   40.72991
3    -73.98455   40.67957 
4    -73.99347   40.71899 

df_neighborhood_names_and_their_centroids: 单击此处下载原始 csv https://data.cityofnewyork.us/City-Government/Neighborhood-Names-GIS/99bc-9p23

            longitude           latitude  neighborhood
                <dbl>              <dbl>         <chr>
1   -73.8472005205491  40.89470517661004     Wakefield 
2  -73.82993910812405  40.87429419303015    Co-op City
3  -73.82780644716419  40.88755567735082   Eastchester 
4  -73.90564259591689 40.895437426903875     Fieldston 

要将单个点分配给邻域,我必须计算从该点到每个邻域质心的距离。显然,该点将属于距离最短的邻域。

预期输出包括向要分类的点的数据帧添加一列,其中包含每个点所属的邻域。

预期输出:

     longitude   latitude  neighborhood
         <dbl>      <dbl>         <chr>
1    -73.99037   40.73470     Fieldston
2    -73.98078   40.72991    Co-op City
3    -73.98455   40.67957        etc...
4    -73.99347   40.71899        etc...

我想使用一种计算效率高的方法,因为我要分类的点的数据库非常大(超过一千兆字节)。 因此,我在 R 上使用 Spark。文件已通过这种方式加载。

library(sparklyr)
sc <- spark_connect(master = "local")
df_points_to_classify <- spark_read_csv(sc, "D:\df_points_to_classify.csv")

是否可以使用 dplr 来解决这个问题?

编辑: 该解决方案在使用 Spark 时不适用,因为以下结果df_points_to_classify$any_variable is NULL

library(spatialrisk)
ans <- purrr::map2_dfr(df_points_to_classify$longitude, 
                       df_points_to_classify$latitude, 
                       ~spatialrisk::points_in_circle(df_neighborhood_names_and_their_centroids, .x, .y, 
                                                      lon = longitude, 
                                                      lat = latitude, 
                                                      radius = 2000000)[1,])

我在下面添加了使用空间风险包的解决方案。该包中的关键函数是用 C++ (Rcpp) 编写的,因此速度非常快。

首先,加载数据:

df1 <- data.frame(longitude = c(-73.99037, -73.98078, -73.98455, -73.99347), 
                  latitude = c(40.73470, 40.72991, 40.67957, 40.71899))

df2 <- data.frame(longitude = c(-73.8472005205491, -73.82993910812405, -73.82780644716419, -73.90564259591689), 
                  latitude = c(40.89470517661004, 40.87429419303015, 40.88755567735082, 40.895437426903875), 
                  neighborhood = c("Wakefield", "Co-op City", "Eastchester", "Fieldston"))

函数spatialrisk::points_in_circle()计算以中心点为中心的半径内的观测值。请注意,距离是使用半正弦公式计算的。由于输出的每个元素都是一个数据帧,因此 purrr::map_dfr 用于将它们行绑定在一起:

ans <- purrr::map2_dfr(df1$longitude, 
                       df1$latitude, 
                       ~spatialrisk::points_in_circle(df2, .x, .y, 
                                                      lon = longitude, 
                                                      lat = latitude, 
                                                      radius = 2000000)[1,])


cbind(df1, ans)

 longitude latitude longitude latitude neighborhood distance_m
1 -73.99037 40.73470 -73.90564 40.89544    Fieldston   19264.50
2 -73.98078 40.72991 -73.90564 40.89544    Fieldston   19483.54
3 -73.98455 40.67957 -73.90564 40.89544    Fieldston   24933.59
4 -73.99347 40.71899 -73.90564 40.89544    Fieldston   20989.84
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R和spark:比较不同地理点之间的距离 的相关文章

  • 如何重新格式化数据并映射它?

    假设我有数据 其中列名称是城市 行名称是经度和纬度 Columbus Nashville Austin Washington D C London Manchester lon 82 99879 86 7816 97 74306 77 03
  • 为什么流式聚合总是延迟到两批数据?

    我使用 Spark 2 3 0 我的问题是 每当我在输入目录中添加第三批数据时 第一批数据就会被处理并打印到控制台 为什么 val spark SparkSession builder appName micro1 enableHiveSu
  • 计算网络中的周期

    最好的方法是什么 或者是否有任何方法可以实现对网络中的 3 个和 4 个周期进行计数 3 个周期等于从一个模式网络计算的三个节点 三角形 的连接组 4 个周期等于由两个模式网络计算的四个节点 方块 的连接组 如果我有这样的网络 onemod
  • 在 heatmap.2 中将行标签设置为斜体

    我正在尝试使用 R 函数将行标签设置为斜体heatmap 2 没有默认选项 我无法通过设置找到解决方法par font 3 例如 如何将行标签设置为斜体heatmap 2 set seed 123 data matrix sample 10
  • 如何使用R在csv文件中按列添加数据?

    我有向量中包含的信息 例如 sequence1 lt seq 1 20 sequence2 lt seq 21 40 我想将该数据附加到文件中 所以我使用 write table sequence1 file test csv sep ap
  • 使用地理位置按钮检索当前位置和邮政编码

    我想放置一个Geolocation button靠近我的UISearchBar 点击后 它应该返回 zip 例如 20043 我将使用 ZIP 中的值来获取我附近的建筑物列表 如果有人可以帮助我使用位置按钮 以及实现仅返回 ZIP 的方法是
  • 使用 dplyr::mutate 重新编码而不在函数中工作

    我正在尝试使用dplyr mutate across 重新编码 a 中的指定列tbl 单独使用它们效果很好 但我无法让它们在函数中工作 library dplyr library tidyr df1 lt tibble Q7 1 1 5 Q
  • 库存推文、文本挖掘、表情符号错误

    我希望您能够协助进行文本挖掘练习 我对 AAPL 推文感兴趣 并且能够从 API 中提取 500 条推文 我自己克服了几个障碍 但最后一部分需要帮助 由于某种原因 tm 包没有删除停用词 您能看一下可能是什么问题吗 表情符号会引起问题吗 绘
  • R:在 glm() 中的逻辑回归中预测 (0,1)

    我正在尝试在二进制 Logit 模型中模拟 假设 情况 我正在估计通过测试的概率 考虑到测试的难度级别 1 最简单 5 最难 并以性别为控制 数据是here http dl dropbox com u 1791181 bayesglm cs
  • 更改分配新变量的默认环境

    我经常想在全局环境下的一个环境中创建很多变量 这可以通过以下方式轻松完成envir论证sys source 如果由正在获取的文件创建的所有变量都应该进入单个环境 但我通常使用创建变量集的文件 一组应该进入一个环境 另一组应该进入另一个环境
  • 将最新的 R 安装路径从注册表添加到 PATH windows 7/8/10

    嗨 我是 Windows 批处理新手 我想向打电话的同事分发一个 runMe bat 文件Rscript myRfile R处理一些数据文件 但众所周知 我的同事在不同地方安装了 R 我不能指望他们知道如何将 Rscript 添加到 PAT
  • R 中循环函数返回什么值

    我正在阅读 R 语言手册 想知道循环函数返回什么值 手册第 3 3 2 节循环中说 三个语句 for while repeat 中的每一个都返回最后计算的语句的值 循环语句的返回值始终为 NULL 并且是不可见返回的 那么返回什么值 NUL
  • 按组连接/粘贴列并添加到原始数据

    我有一个名称数据框 名称 按 部门 分组 Dept Date Name 30 07 DEC 02 Raphaely 30 18 MAY 03 Khoo 40 07 JUN 02 Mavris 50 01 MAY 03 Kaufling 50
  • 求R中3列中每一行的最大值

    我需要计算 3 列中每行的最大值 一个表可以是 x c 1 2 3 4 5 y c 2 3 3 1 1 z c 4 3 2 1 1 df lt data frame x y z 我需要得到 x y z max 1 1 2 4 4 2 2 3
  • R 数据框中的重复行

    我正在尝试使用下面的代码复制数据框中的行 但是 我发现它很慢 duprow df 1 for i in 1 2000 print i df rbind df duprow 有更快的方法吗 您可以使用rep 例如对于数据框第 1 行的 5 个
  • 在 R 中调用“boot”时没有数据

    我有一个包含很多列的数据框 第一列包含 系统 1 系统 2 等类别 第二列包含代表 0 和 1 的数字 请看下面 例如 SYSTEM Q1 Q2 S1 0 1 S1 1 0 S2 1 1 S2 0 0 S2 1 1 我在 R 中有这段代码来
  • 按组渐进串联列[重复]

    这个问题在这里已经有答案了 假设我有这个输入 ID date 1 date 2 str 1 1 2010 07 04 2008 01 20 A 2 2 2015 07 01 2011 08 31 C 3 3 2015 03 06 2013
  • 如何在R中绘制堆积柱形图?

    有谁知道如何使用 R 绘制由超过 1 个变量堆叠的列的直方图 就像excel中的 堆积柱形图 一样 谢谢你 我假设您确实想要一个条形图而不是直方图 在这种情况下 barplot从标准图形或barchart格子包中的两者都可以做到 或者使用
  • 根据值绘制具有条件颜色的折线图

    我想绘制折线图 根据值 它应该改变它的颜色 我发现的是 plot sin seq from 1 to 10 by 0 1 type p col ifelse sin seq from 1 to 10 by 0 1 gt 0 5 red ye
  • 合并共享属性的节点

    EDITED 我真的需要 Networkx graph 专家的帮助 假设我有以下数据框 我想将这些数据框转换为图表 然后我想根据描述和优先级属性将两个图映射到相应的节点 df1 From description To priority 10

随机推荐