Лучшие практики многоадресного поиска Google API с использованием Python и Pandas - PullRequest
0 голосов
/ 06 февраля 2019

Конечная цель, учитывая большой набор адресов, получить 'lat' и 'lng' от службы геокодирования API Google (что я могу сделать).Затем проанализируйте данные так, чтобы lat и long могли войти в кадр данных pandas в той же строке, что и предоставленный адрес (что я тоже могу сделать).

Мой набор данных будет расширяться, но я получилзастрял при разборе небольшого подмножества этого, так как я хочу избежать выполнения для циклов по кадрам данных, поскольку это, вероятно, будет медленным, когда набор данных переходит от 30 строк к нескольким тысячам.

Вот гдеЯ начал:

import pandas as pd
import googlemaps

Прочитать в фрейме данных

df = pd.read_csv("SmallDecember2018")

connect

gmaps = googlemaps.Client(key='shhhItsSecret')

получить геокод для каждого элемента на основе адресов (AddressConcat) в моем файле,поместите их в DF.

df['geo_result'] = df['AddressConcat'].apply(lambda x: gmaps.geocode(x))

Это прекрасно работает.
Я получаю данные в df, но это несколько неловко.Python видит его как список со встроенным словарем.

Чтобы получить первую строку данных, которую я хочу получить из df, этот код работает для элементов, которые меня интересуют

lat = df['geo_result'][0][0].get('geometry').get('location').get('lat')
lng = df['geo_result'][0][0].get('geometry').get('location').get('lng')
print (lat + " " lng)

в идеале я хотел сделать другую лямбда-функцию, чтобы посмотреть на ['geo_result'] и разобрать lat/lng

Я пытался, просто для 'lat' ...

df['lat'] = df['geo_result'].apply(lambda x: df['geo_result'].[x][0].get('geometry').get('location').get('lat')

Это неМне кажется, что этот подход нравится, так как функция lambda не хочет хэшировать словарь или список - я попытался пойти обоими путями.

Извлечение его в кадр данных с помощью лямбда-функции будет работать на 2-3k запросов одновременно?У меня есть учетная запись GCP, и я могу поместить их в BigQuery, если это будет рекомендация, если в конечном итоге я смогу передать ее в DataFrame.Как мне отформатировать его после получения ответа?(json? словарь?) Как мне разобрать данные при возврате (для циклов или есть более плавный способ?)

Я начинаю с Python, но не женат на нем, так как ищу большеНаправление и рекомендации, чем код.Я пытаюсь не взломать эту часть этого.

Заранее спасибо!

1 Ответ

0 голосов
/ 06 февраля 2019

Не применяйте API / поиск в пандах.

Я рекомендую разделить это на две функции (если бы это были десятки или сотни тысяч, я бы использовал SQS или Pub / Sub для распараллеливанияпоиск адреса и сохранение результата в базе данных).Если это несколько тысяч, я бы просто сделал это локально:

Цикл по каждому адресу (из файла CSV) и сохранить ответ в файл (возможно, хэш address.json или какой-то другой уникальный идентификатор).). Я мог бы разбить CSV на несколько частей и запустить его параллельно / с несколькими экземплярами Python (в зависимости от того, насколько медленным он был) ...

После завершения в виде отдельного скрипта Python I 'd перебрать каждый файл и разобрать его в список диктовок (и преобразовать его в pandas DataFrame - и csv).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...