이전 게시물에서 저는 Python에서 Nominatim을 사용하여 (Geopy 모듈 사용) 위치 이름을 경도 및 위도 좌표로 지오 코딩하는 방법을 이미 시연했습니다. 이 게시물에서는 Geopy를 사용하여 위치 목록을 지오 코딩하는 방법을 보여주고 싶습니다. 이를 위해 Pandas 모듈을 사용하여 국가, 도시 및 거리 열의 항목에 지정된 위치 이름이 포함 된 간단하고 간단한 csv 파일을 읽는 것으로 시작합니다.
# 판다 가져 오기 import pandas # 위치 데이터를 포함하는 csv 파일에서 읽음 data = pandas.read_csv("locations.csv") # csv 파일의 테이블 표시 data
country | city | street | metric | |
---|---|---|---|---|
0 | Germany | Berlin | Alexanderplatz 1 | 10 |
1 | Germany | Berlin | Dircksenstrasse 2 | 5 |
2 | Germany | Berlin | Rathausstrasse 1 | 16 |
테이블 형식 데이터의 데이터 유형을 확인해 보겠습니다.
type(data)
pandas.core.frame.DataFrame
이제 데이터를 읽었으므로 위치를 지오 코딩하고 지오 코딩 된 좌표를 새 열에 할당합니다. 데이터가 pandas DataFrame이므로 apply () 메서드를 사용하여 관련 Nominatim 지오 코딩 서비스를 데이터 프레임의 모든 주소에 적용 할 수 있습니다. 먼저 모든 열 항목을 주소로 수렴하여 표 형식의 DataFrame의 새 열에 추가해야합니다. 그런 다음 Nominatim Geopy 서비스를 참조하는 서비스 객체를 만들고 해당 서비스를 모든 위치에 적용하여 지오 코딩 된 결과를 추가 새 열에 반환 할 수 있습니다.
# 국가, 도시 및 거리를 단일 주소 문자열로 병합 data["addresses"] = data["country"] + ", " + data["city"] + ", " + data["street "] # geopy 모듈 가져 오기 import geopy # 서비스 객체 생성 service = geopy.Nominatim(user_agent = "myGeocoder") # Pandas DataFrame에 .apply () 메서드를 사용하여 모든 주소를 지오 코딩합니다. from geopy.extra.rate_limiter import RateLimiter data["coordinates"] = data["addresses"].apply(RateLimiter(service.geocode,min_delay_seconds=1)) # 표 형식 데이터 표시 data
country | city | street | metric | addresses | coordinates | |
---|---|---|---|---|---|---|
0 | Germany | Berlin | Alexanderplatz 1 | 10 | Germany, Berlin, Alexanderplatz 1 | (Alexanderstraße, Spandauer Vorstadt, Mitte, B… |
1 | Germany | Berlin | Dircksenstrasse 2 | 5 | Germany, Berlin, Dircksenstrasse 2 | (2, Dircksenstraße, Luisenstadt, Mitte, Berlin… |
2 | Germany | Berlin | Rathausstrasse 1 | 16 | Germany, Berlin, Rathausstrasse 1 | (1-14, Rathausstraße, Spandauer Vorstadt, Mitt… |
“좌표”열 항목의 데이터 유형을 확인하겠습니다.
type(data["coordinates"][0])
geopy.location.Location
지오 코딩 된 위치는 Geopy Location 유형입니다. Location 클래스의 객체는 다양한 속성을 가지고 있습니다. 그중 하나는 위도이고 다른 하나는 경도입니다.
data["coordinates"][0].longitude
13.4144809
data["coordinates"][0].latitude
52.5228654
이제 “평균”경도 및 위도 점수를 계산합니다. 내 Folium 위치 마커 맵 플롯의 중심점으로 사용하고 싶습니다.
# 경도와 위도 값을 추출하여 목록을 분리 longs = [coord.longitude for coord in data["coordinates"]] lats = [coord.latitude for coord in data["coordinates"]] # 평균 경도 및 위도 값 계산 import statistics meanLong = statistics.mean(longs) meanLat = statistics.mean(lats) # 표시 결과 print("meanLong = " + str(meanLong) + "; meanLat = " + str(meanLat))
meanLong = 13.412910038576356; meanLat = 52.52100943333333
[longs,lats]
[[13.4144809, 13.4136431, 13.410606115729072], [52.5228654, 52.5208149, 52.519348]]
Folium 모듈을 사용하여 이제 위치에 대한 마커를 만들고지도 타일에 플로팅 할 수 있습니다.
# folium 가져 오기 import folium # 베를린을 중심으로 한 기본지도 만들기 mapObj = folium.Map(location = [meanLat,meanLong], zoom_start = 15) # 데이터 DataFrame의 모든 위치에 대해 하나씩 베를린에 대한 마커 개체를 만듭니다. for i in range(0,data.shape[0]): # 위치 i에 대한 마커 생성 markerObj = folium.Marker(location = [lats[i],longs[i]]) #지도에 마커 추가 markerObj.add_to(mapObj) # 디스플레이지도 mapObj
최적화 및 시뮬레이션을 전문으로하는 산업 엔지니어 (R, Python, SQL, VBA)
Leave a Reply