Как решить tigris :: call_geolocator () Внутренняя ошибка сервера (HTTP 500)? - PullRequest
2 голосов
/ 06 марта 2020

Я хотел получить коды переписи для города по адресам в моих данных. Проблема в том, что я не мог найти работающие шейп-файлы для Гейнсвилла, Флорида. Поэтому я пытался получить коды переписи, используя адреса людей, принявших участие в опросе, и как только я получил код переписи, я бы набрал substr первые 11 цифр, чтобы соответствовать ГЕОИДам пакета tidycensus, что дает перепись графства и шейп-файлы к нижней части иерархии. Так как у меня будет GEOID только жителей города, я получу эти шейп-файлы, а не весь округ. Поэтому я сделал следующее, чтобы получить коды переписи:

library(tigris)
library(readr)

gainsville_df2 <- readr::read_csv("311_Service_Requests__myGNV_.csv")

#gainsville_df2 is the dataframe of the csv file
jio<- apply(gainsville_df2["Address"], 1, function(row) tigris::call_geolocator(row, "Gainesville", "FL", zip = NA))

#It ran for ~1.5 hours, parsing through 1892 addresses, then I got this error out of nowhere:

#Error in tigris::call_geolocator(row, "Gainesville", "FL", zip = NA) : 
#  Internal Server Error (HTTP 500).
#Called from: httr::stop_for_status(r)

Ссылка на данные здесь, если вы хотите посмотреть (https://github.com/THsTestingGround/SO_tigris_question/blob/master/311_Service_Requests__myGNV_.csv). У меня есть ~ 9200 адресов для разбора, и это происходит в ~ 1800. Осмотрелся с ошибкой, я вижу, что нужно установить тайм-аут, к сожалению, я понятия не имею, как это сделать.

Буду очень признателен, если вы дадите мне подсказку или, возможно, лучшее решение. Мне нужны шейп-файлы, чтобы сделать важную часть моего личного проекта. Большое вам спасибо!

РЕДАКТИРОВАТЬ: Я также могу дать мой ключ API переписи, если вы думаете, что вам это нужно.

1 Ответ

2 голосов
/ 08 марта 2020

Все знаки препинания должны были быть удалены из вектора gainsville_df2$Address. Функция call_geolocator не выполняет или делает это, а затем работает нерегулярно над пунктами, состоящими из знаков препинания, и часто выдает ошибку HTTP 500 для адресов с пунктуацией, такой как # или {} и так далее. Поэтому лучше использовать функцию as.character(stringr::str_replace_all(gainsville_df2$Address, "[[:punct:]]", " ")) для удаления всех знаков препинания. И не волнуйтесь, функция геолокации по-прежнему выдает правильные коды переписи, даже если пунктуации нет. Он только ищет названия улиц, номера, квартал, город и штат.

...