Я новичок в Python, и у меня была задача найти почтовый индекс США на основе широты и долготы. После экспериментов с arcgis я понял, что это дает мне пустые значения для определенных мест. Я закончил кодирование чего-то, что выполняет мою задачу, взяв набор данных, содержащий все коды США, и используя евклидово расстояние, чтобы определить ближайший почтовый индекс на основе их широты / долготы. Однако в среднем это занимает около 1,3 секунды, чтобы вычислить, что для моих почти миллиона записей потребует времени, так как для каждой записи потребуется почтовый индекс. Я смотрел, что векторизация — это вещь на Python для ускорения задач. Но я не могу найти способ применить это к моему коду. Вот мой код, и мы будем благодарны за любые отзывы:
for j in range(len(myFile)):
p1=0
p1=0
point1 = np.array((myFile["Latitude"][j], myFile["Longitude"][j])) # This is the reference point
i = 0
resultZip = str(usZips["Zip"][0])
dist = np.linalg.norm(point1 - np.array((float(usZips["Latitude"][0]), float(usZips["Longitude"][0]))))
for i in range(0, len(usZips)):
lat = float(usZips["Latitude"][i])
lon = float(usZips["Longitude"][i])
point2 = np.array((lat, lon)) # This will serve as the comparison from the dataset
temp = np.linalg.norm(point1 - point2)
if (temp <= dist): # IF the temp euclidean distance is lower than the alread set it will:
dist = temp # set the new distance to temp and...
resultZip = str(usZips["Zip"][i]) # will save the zip that has the same index as the new temp
# p1=float(myFile["Latitude"][58435])
# p2=float(myFile["Longitude"][58435])
i += 1
Я знаю, что у Google также есть API обратного геокодирования, но у него есть ограничение на количество запросов в день. Файл с названием myFile представляет собой CSV-файл с атрибутами userId, latitude, longitude, timestamp с примерно миллионом записей. Файл usZips — это общедоступный набор данных с информацией о городе, широте, долготе, почтовом индексе и часовом поясе, содержащий около 43 тыс. Записей почтовых индексов по США.
