ggmap в R: как извлечь отдельные объекты местоположения из геокодирования? - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь очистить введенные пользователем адреса, поэтому я подумал, что использование GGMAP для извлечения использованных Долготы / Широты и Адреса было бы способом очистить все. Однако адрес, который он выделяет, иногда имеет разговорные имена в адресе, и это затрудняет анализ отдельных аспектов местоположения.

Вот код, который я использую

for(i in 1:nrow(Raw_Address))
   {
     result <- try(geocode(Raw_Address$Address_Total[i], output = "more", source = "google"))
     Raw_Address$lon[i] <- as.numeric(result[1])
     Raw_Address$lat[i] <- as.numeric(result[2])
     Raw_Address$geoAddress[i] <- as.character(result[3])

   }

Я пытался изменить "latlona" на "more" и просмотреть номера результатов, но вернул только разные долготу / широту. Я не видел нигде в документации, которая показывает векторы результатов.

В основном мне нужны название улицы, город, штат, почтовый индекс, долгота и широта.

Редактировать: вот пример данных

Пользовательский ввод: 1651 SE TIFFANY AVE. ПОРТ ST. Люси FL

GGMAP Выход: Martin Health Health Systems - пр. Тиффани, 1651 пр. Тиффани, порт ул. Люси, fl 34952, США

Это трудно разобрать из-за разговорного названия. Я мог бы использовать пакет stringr, чтобы попытаться выполнить синтаксический анализ, но, вероятно, он не был бы полным. Но он возвращает отдельный адрес, в то время как некоторые пользователи пишут «Тиффани» неправильно или произносят «Святой» вместо «Св.»

1 Ответ

0 голосов
/ 31 августа 2018

Вместо использования цикла for, purrr::map_dfr будет перебирать вектор и связывать результирующие кадры данных в один, что здесь удобно. Например,

library(tidyverse)

libraries <- tribble(
    ~library,                      ~address,
    "Library of Congress",         "101 Independence Ave SE, Washington, DC 20540",
    "British Library",             "96 Euston Rd, London NW1 2DB, UK",
    "New York Public Library",     "476 5th Ave, New York, NY 10018", 
    "Library and Archives Canada", "395 Wellington St, Ottawa, ON K1A 0N4, Canada"
)

library_locations <- map_dfr(libraries$address, ggmap::geocode, 
                             output = "more", source = "dsk")

Это выведет много сообщений, некоторые из которых сообщают вам, что звонит geocode, например,

#> Information from URL : http://www.datasciencetoolkit.org/maps/api/geocode/json?address=101%20Independence%20Ave%20SE,%20Washington,%20DC%2020540&sensor=false

и некоторые предупреждения о том, что факторы приводятся к характеру:

#> Warning in bind_rows_(x, .id): Unequal factor levels: coercing to character
#> Warning in bind_rows_(x, .id): binding character and factor vector,
#> coercing into character vector

какими они должны быть, чтобы вы могли игнорировать их все. (Если вы действительно хотите, вы можете написать больше кода, чтобы они исчезли, но в итоге вы получите то же самое.)

Объедините полученные фреймы данных, и вы получите все данные о местоположении, связанные с вашим исходным набором данных:

full_join(libraries, library_locations)
#> Joining, by = "address"
#> # A tibble: 4 x 15
#>   library address      lon   lat type  loctype north south    east     west
#>   <chr>   <chr>      <dbl> <dbl> <chr> <chr>   <dbl> <dbl>   <dbl>    <dbl>
#> 1 Librar… 101 In…  -77.0    38.9 stre… rooftop  38.9  38.9 -77.0    -77.0  
#> 2 Britis… 96 Eus…   -0.125  51.5 stre… rooftop  51.5  51.5  -0.124   -0.126
#> 3 New Yo… 476 5t…  -74.0    40.8 stre… rooftop  40.8  40.8 -74.0    -74.0  
#> 4 Librar… 395 We… -114.     60.1 coun… approx…  83.1  41.7 -52.3   -141.   
#> # … with 5 more variables: street_number <chr>, route <chr>,
#> #   locality <chr>, administrative_area_level_1 <chr>, country <chr>

Вы можете заметить, что Data Science Toolkit совершенно не удалось геокодировать библиотеки и архивы Канады по любой причине - он помечен как страна, а не как адрес. Геокодеры иногда неисправны. Отсюда выделите все, что вам не нужно.

Если вам нужна еще больше информации, вы можете использовать метод geocode output = "all", но он возвращает список, который вам нужно проанализировать, что требует больше работы.

...