【发布时间】:2016-04-10 07:19:21
【问题描述】:
我正在处理Gowalla location-based checkin dataset,它有大约 644 万签到。这些签到的唯一位置为 128 万个。但 Gowalla 只给出纬度和经度。所以我需要为每个纬度和经度找到城市、州和国家。从 StackOverflow 上的另一篇文章中,我能够在下面创建 R 查询,该查询查询开放的街道地图并找到相关的地理细节。
不幸的是,处理 125 行大约需要 1 分钟,这意味着 128 万行需要几天时间。有没有更快的方法来找到这些细节?也许有一些内置世界城市经纬度的软件包可以找到给定经纬度的城市名称,所以我不必进行在线查询。
场地表是一个包含 3 列的数据框:1: vid(venueId), 2 lat(latitude), 3: long(longitude)
for(i in 1:nrow(venueTable)) {
#this is just an indicator to display current value of i on screen
cat(paste(".",i,"."))
#Below code composes the url query
url <- paste("http://nominatim.openstreetmap.org/reverse.php? format=json&lat=",
venueTableTest3$lat[i],"&lon=",venueTableTest3$long[i])
url <- gsub(' ','',url)
url <- paste(url)
x <- fromJSON(url)
venueTableTest3$display_name[i] <- x$display_name
venueTableTest3$country[i] <- x$address$country
}
我在 R 中使用 jsonlite 包,这使得 x 这是 JSON 查询的结果,作为存储返回的各种结果的数据框。所以使用x$display_name 或x$address$city 我使用我的必填字段。
我的笔记本电脑是 Core i5 3230M,配备 8gb 内存和 120gb SSD,使用 Windows 8。
【问题讨论】:
-
不确定如何在 R 中执行此操作,但我认为您的代码是同步的,这意味着一次只发送 1 个 HTTP 请求。如果您能够一次发送大约 10 个,您的速度可能会提高约 5 倍。
-
您的问题有一个内置假设,即您需要为每个 1.28m 不同的位置进行 API 调用,因为您查看的 SO 解决方案确实如此。但离线查找更好。您可能想编辑您的问题以区分假设。
标签: r dataframe geolocation