google API(지도활용)

ro_ot ㅣ 2020. 2. 20. 14:05

Google API 활용하기 구글 지오코딩(geocoding)이란 특정 위치나 주소를 입력하면 위도와 경도 좌표 정보를 제공해 주는 서비스 이다.

이 서비스를 이용하려면 사용자 인증 후에 google API 키를 발급 받아야 한다.

 

# -*- coding: utf-8 -*-
# google 지오코딩 API를 이용해서 위도, 경도 데이터 가져오기

import googlemaps
import pandas as pd

# my_key = "본인이 발급받은 API키를 입력"
my_key = "발급받은 google API key 입력"

# 구글맵스 객체 생성하기
maps = googlemaps.Client(key=my_key)  # my_key값 입력
lat = []  # 위도
lng = []  # 경도

# 장소(또는 주소) 리스트
places = ["서울시청", "국립국악원", "해운대해수욕장", '제주도', '독도','London', '울릉도']

i = 0
for place in places:
    i = i + 1
    try:
        print(i, place)

    # 지오코딩 API 결과값 호출하여 geo_location 변수에 저장
        geo_location = maps.geocode(place)[0].get('geometry')
        lat.append(geo_location['location']['lat'])
        lng.append(geo_location['location']['lng'])

    except:
        lat.append('')
        lng.append('')
        print(i)

# 데이터프레임으로 변환하기
df = pd.DataFrame({'위도': lat, '경도': lng}, index=places)
print(df)

* Folium

 

Folium 라이브러리를 이용핚 지도 만들기

 

Folium 라이브러리는 지도를 시각화핛 때 유용핚 도구이다.

 

세계 지도를 기본적으로 지원하고 다양핚 스타일의 지도 이미지를 제공하고 있다.

 

Folium은 웹 기반으로 지도를 만들기 때문에, PyCharm이나 스파이더(Spyder) 같은 IDE 프로그램에서 실행해도 지도가 표시되지 않는다.

지도를 보려면 지도 객체를 save() 함수로 HTML 파일로 저장하고, 웹브라우저로 저장된 HTML파일을 열어서 확인해야 핚다.

 

Jupyter Notebook 등 웹 기반 IDE 프로그램에서는 지도를 바로 확인 핛 수 있다

 

# -*- coding: utf-8 -*-

# 라이브러리 불러오기
import folium

# 서울 지도 만들기
seoul_map = folium.Map(location=[37.55, 126.98], zoom_start=12)

# 지도를 HTML 파일로 저장하기
seoul_map.save('./seoul.html')

→ 서울 지도만들기

 

import pandas as pd
import folium
import webbrowser

# 대학교 리스트를 데이터프레임 변환(에러 발생시 xlrd 모듈 설치)
# df = pd.read_excel('서울지역 대학교 위치.xlsx', sheet_name='Sheet1')
df = pd.read_excel('data/서울지역 대학교 위치.xlsx')
print(df.head())                # 앞에서 5개의 데이터를 불러옴
print()

# 대학교명이 저장된 컬럼명이 없으므로 collage로 추가
df.columns = ['collage', '위도', '경도']
print(df)

# 서울 지도 만들기
seoul_map = folium.Map(location=[37.55,126.98], zoom_start=12, tiles='Stamen Terrain')

# 대학교 위치정보를 Marker로 표시
for name, lat, lng in zip(df.collage, df.위도, df.경도):
 folium.Marker([lat, lng], popup=name).add_to(seoul_map)

# for index, row in df.iterrows():
# folium.Marker([row['위도'], row['경도']], popup=row['collage']).add_to(seoul_map)
# 지도를 HTML 파일로 저장하기
seoul_collage = 'seoul_colleges.html'
seoul_map.save(seoul_collage)

# 웹브라우저로 지도 출력
webbrowser.open(seoul_collage)

→ 지도에 마크 찍기

import pandas as pd
import folium
import webbrowser

# 대학교 리스트를 데이터프레임 변홖
df = pd.read_excel('data/서울지역 대학교 위치.xlsx')

# 대학교명이 저장된 컬럼명이 없으므로 collage로 추가
df.columns = ['collage', '위도', '경도']

# 서울 지도 만들기
seoul_map = folium.Map(location=[37.55, 126.98], tiles='Stamen Terrain', zoom_start=12)

# 대학교 위치정보를 CircleMarker로 표시
for name, lat, lng in zip(df.collage, df.위도, df.경도):
    folium.CircleMarker([lat, lng],
                        radius=10,  # 원의 반지름
                        color='brown',  # 원의 둘레 색상
                        fill=True,
                        fill_color='coral',  # 원을 채우는 색
                        fill_opacity=0.3,  # 투명도
                        popup=name
                        ).add_to(seoul_map)

# 지도를 HTML 파일로 저장하기
seoul_collage2 = 'seoul_colleges2.html'
seoul_map.save(seoul_collage2)

# 웹브라우저로 지도 출력
webbrowser.open(seoul_collage2)

경기도 인구분포 단계구분도(Choropleth Map)

행정구역과 같이 지도 상의 어떤 경계에 둘러쌓인 영역에 색을 칠하거나 음영 등으로 정보를 나타내는 시각화 방법이다.

경기도 지역의 시굮구별 인구 변화 데이터(2007 ~ 2017년), 경기도 행정구역 경계 지리 정보를 이용하여 인구수에 따른 경계구분도로 시각화 핚다.

 

단계 구분도

folium.Choropleth(geo_data=geo_data, # 지도 경계

                        data = df[year], # 표시하려는 데이터

                        columns = [df.index, df[year]], # 열 지정

                        fill_color='YlOrRd', fill_opacity=0.7, line_opacity=0.3,

                        threshold_scale=[10000, 100000, 300000, 500000, 700000],

                        key_on='feature.properties.name',

                        ).add_to(g_map)

 

 

'python' 카테고리의 다른 글

Python 변수  (0) 2020.09.29
python 가상환경(pyenv)  (0) 2020.06.12
웹 API  (0) 2020.02.21
crawling and scraping  (0) 2020.02.20
wordcloud  (0) 2020.02.18