구글 Geocoding API로 도로명 주소를 좌표값으로 받으려고 한다.
그러려면 Google Cloud에서 API Key를 발급받아야 한다.
1. 구글 API 발급 받기
1. 상단 측에 있는 콘솔을 클릭
2. 위 상단의 My project 부분에서 새 프로젝트를 만들어준다.
3. API 개요로 이동
4. 검색창에 Geocoding API 입력 후 사용신청 누르기
참고로 유료 API도 많지만, 무료로 제공되는 API도 많으니 여러 API를 사용할 수 있다.
5. 카드등록 하기 (API 오류 방지)
console.cloud.google.com/project/_/billing/enable
에서 카드 등록을 해주는 것은 '필수'이다.
그렇지 않으면 API 요청할 때 REQUEST_DENIED라는 에러가 난다.
이제 데이터를 추출해보면,
import pandas as pd
df = pd.read_excel('../서울특별시 가로쓰레기통 현황_202106.xlsx')
df.head()
여기서 '발급 받은 키' 부분에 자신이 발급받은 API Key를 적어주면 된다.
필자의 경우 AIzaSyDeC28v5SGx9Y6UMUsbgoUvx---- 이런식으로 있어 이 부분을 적어주었다.
import googlemaps
gmaps = googlemaps.Client(key='발급 받은 키')
geocode_result = gmaps.geocode(df['세부 위치(상세 주소)'][0], language='ko')
geocode_result
데이터 전처리
df['도로전체명']='서울특별시 '+df['자치구명'].astype(str)+' '+df['세부 위치(상세 주소)'].astype(str)
address=df['도로전체명']
address
위와 같이 도로명 주소를 구글 API를 통하여 활용할 수 있도록 변경해주었다.
df['위도']='-'
df['경도']='-'
gmaps = googlemaps.Client(key='발급 받은 키')
geocode_result = gmaps.geocode(address[159], language='ko')
geocode_result
데이터 전처리 이후, 도로명 주소로 좌표값을 받는 것을 볼 수 있고, 이를 시각화까지 하는 코드를 진행했다.
import folium
import pandas as pd
x=[]
y=[]
for i in range(len(df['위도'])):
if df['위도'][i]==0.0 or df['경도'][i]==0.0:
pass
else:
x.append(df['위도'][i])
y.append(df['경도'][i])
print(len(x))
map_osm = folium.Map(lacation=[x[13],y[13]],zoom_start=14)
for i in range(len(x)):
folium.Marker([x[i],y[i]],popup='강서구CCTV_%d'%i,icon=folium.Icon(color='red',icon='info-sign')).add_to(map_osm)
folium.CircleMarker(location=[x[13],y[13]],popup='강서구 CCTV',radius=300).add_to(map_osm)
map_osm.save('서울특별시 강서구.html')
마지막으로 '서울특별시 강서구'라는 html로 저장해주었다.
시각화는 아래와 같다.
관련 github code
https://github.com/rootofdata/Gangseo-gu_contest.git
'도전 : 더 나은 사람으로 > GIS 아이템 최적화 프로젝트' 카테고리의 다른 글
[2022 강서구 공모전] #4.1 알고리즘 및 방법론 [무단투기 방지 CCTV] (0) | 2022.04.30 |
---|---|
[2022 강서구 공모전] #4.1 알고리즘 및 방법론 [가로 쓰레기통] (2) | 2022.04.29 |
[2022 강서구 공모전] 동별 가로쓰레기통_생활인구 (0) | 2022.04.01 |
[2022 강서구 공모전] #2 분석 배경 & #3 분석 데이터 (0) | 2022.03.30 |
[공모전] 2022년 강서구 빅데이터 활용 공모전 (0) | 2022.03.21 |