follium
그림에 원하는 정보를 표시 할 수 있도록 도와주는 모듈. 지도의 중심 위도와 경도를 이용해서 좌표에 마커를 찍어 지도를 시각화 해주는 도구이다. 외부모듈이기 때문에 설치가 필요하다.
아나콘다 prompt 열기 - pip install folium 설치
import folium
folium.Map(location=[지도 중심점의 위도, 경도], zoom_start=지도확대값, tiles='표시되는 형식') : 지도만들기
tiles : 지도 표시되는 형식 설정.
openstreetmap : 기본값
cartodbdark_matter
cartodbpositron
cartodbpositrononlylabels
stamentonerbackground
stamentonerlabels
stamenterrain, Stamen Terrain
stamenwatercolor
stamentoner, Stamen Toner
folium.Marker([위도, 경도], popup=name, tooltip=name) : 지도에 마커 출력하기
folium.CircleMarker([위도, 경도], radius=원의 반지름, color=''원 둘레 색상', fill=True,
fill_color='원 내부 색상', fill_opacity=투명도, popup=name) : 지도에 원형마커 출력하기
popup=name : 마커를 클릭하는 경우 표시되는 내용
tooltip=name : 마커에 마우스 커서가 들어온 경우 표시되는 내용
radius=반지름 : 원의 반지름
color='색상' : 원의 둘레 색상
fill=True : 원 내부를 채움
fill_color='색상' : 원 내부 색상
fill_opacity=투명도 : 1:불투명, 0:투명
icon=folium.Icon(color='색',icon='home') : 아이콘 마커 표시하기 icon=[home,flag,bookmark,star,...]
line_opacity=투명도 : 경계면 투명도
threshold_scale : 데이터와 색상 표시할때 범위 지정.
key_on='feature.properties.name' : 데이터와 지도표현을 위한 연결 컬럼 설정
서울지도 만들기
import folium
# location=[37.55,126.98] : 지도의 중심 위도,경도
# zoom_start=10 : 지도 확대 값
seoul_map = folium.Map(location=[37.55,126.98],zoom_start=13)
seoul_map.save("map/seoul.html")
# tiles='cartodbpositron' : 지도 표시되는 형식 설정 (기본값 openstreetmap)
seoul_map2 = folium.Map(location=[37.55,126.98],zoom_start=12, tiles='stamenwatercolor')
seoul_map2.save("map/seoul2.html")
서울지역 대학교 위치 지도 만들기
엑셀파일(서울지역 대학교 위치.xlsx) 등록된 위도 경도 정보 읽어서 지도에 표시하기
#엑셀파일 등록된 위도 경도를 읽어서 지도에 표시하기
import pandas as pd
import folium
#index_col=0 : 첫번째 컬럼의 값으로 인덱스로 설정하기
df = pd.read_excel('../data/서울지역 대학교 위치.xlsx', index_col=0)
df.head()
# 서울 대학교 위치 지도 생성하기 : zip함수이용
#folium.Marker : 지도에 마커를 위한 객체
#popup=name : 마커를 클릭하는 경우 표시되는 내용
#tooltip=name : 마커에 마우스 커서가 들어온 경우 표시되는 내용
seoul_map = folium.Map(location=[37.55,126.98],zoom_start=12)
for name, lat, lng in zip(df.index, df.위도, df.경도):
folium.Marker([lat, lng], popup=name,tooltip=name).add_to(seoul_map)
seoul_map.save('map/seoul_colleges.html')
# 원형 마커 표시하기
seoul_map = folium.Map(location=[37.55,126.98],zoom_start=12)
for name, lat, lng in zip(df.index, df.위도, df.경도):
folium.CircleMarker([lat, lng], #위도 경도 : 마커의 위치
radius=10, #원의 반지름
color='brown', #원 둘레 색상
fill=True, # 원 내부를 채움
fill_color='coral', #원 내부 색상
fill_opacity=0.7, #투명도. 1:불투명, 0:투명
popup=name #클릭시 나타나는 내용
).add_to(seoul_map)
seoul_map.save('map/seoul_colleges2.html')
# 아이콘 마커 표시하기
seoul_map = folium.Map(location=[37.55,126.98],zoom_start=12)
for name, lat, lng in zip(df.index, df.위도, df.경도):
#icon = [home,flag,bookmark,star,...]
folium.Marker(location = [lat, lng],
popup=name,
icon=folium.Icon(color='red',icon='home')
).add_to(seoul_map)
seoul_map.save("map/seoul_colleges3.html")
서울 도서관 위치 정보 지도 만들기
csv파일(Library.csv) 등록된 위도 경도 정보 읽어서 지도에 표시하기
# ibrary.csv 파일을 읽어서 libray 변수에 저장하기
import pandas as pd
import folium
library = pd.read_csv('../data/Library.csv')
library.head()
library["시설명"].head()
# 지도에 도서관 표시하기
seoul_map = folium.Map(location=[37.55,126.98],zoom_start=12)
for name, lat, lng in zip(library.시설명,library.위도, library.경도):
folium.Marker(location = [lat, lng],
popup=name,
tooltip=name,
).add_to(seoul_map)
seoul_map.save("map/seoul_library.html")
# 시설 구분별로 색상 설정하기
library["시설구분"].unique()
seoul_map = folium.Map(location=[37.55,126.98],zoom_start=12)
for name, lat, lng, kbn in zip(library.시설명,library.위도, \
library.경도,library.시설구분):
if kbn == '구립도서관' or kbn=='국립도서관' :
color = 'green'
elif kbn=='사립도서관' :
color = 'red'
else :
color = 'blue'
folium.Marker(location = [lat, lng],
popup=name,
tooltip=kbn,
icon=folium.Icon(color=color,icon="bookmark")
).add_to(seoul_map)
seoul_map.save("map/seoul_library2.html")
# MarkerCluster 기능 : 지도 확대 정도에 따른 마커 표시 방법을 달리 설정
from folium.plugins import MarkerCluster
from folium import Marker
seoul_map = folium.Map(location=[37.55,126.98],zoom_start=12)
mc = MarkerCluster()
'''
library.iterrows() : 인덱스와 레코드 한개씩 목록
_ : 인덱스값. 사용안함. 변수명을_로 설정함.
i,a 등등의 변수명으로 사용 가능.
row : 레코드 값
'''
for _, row in library.iterrows():
mc.add_child( #MarkerCluster 객체에 마커 등록.
Marker(location = [row['위도'], row['경도']],
popup=row['시설구분'],
tooltip=row['시설명']
)
)
seoul_map.add_child(mc) #MarkerCluster 를 지도에 추가
seoul_map.save("map/seoul_library3.html")
경기도인구 데이터 가지고 있는 경기도지도 만들기
엑셀(경기도인구데이터.xlsx) 등록된 인구데이터와 json(경기도행정구역경계.json) 등록된 행정구역경계 데이터를 읽어서 지도에 표시하기
#json(경기도행정구역경계.json) 등록된 행정구역경계 데이터를 읽어서 지도에 표시하기
# 경기도 인구 데이터 읽어 df 데이터 저장하기. 단 구분컬럼은 인덱스로 저장하기
import folium
import pandas as pd
file_path = '../data/경기도인구데이터.xlsx'
df=pd.read_excel(file_path,index_col='구분')
df.head()
df.info()
df.columns #정수값으로 컬럼명이 설정됨
#columns 데이터의 자료형을 문자열형 목록으로 변경하기
df.columns = df.columns.map(str)
df.columns #문자열형으로 컬럼명이 설정됨.
# 경기도 행정 구역 경계 좌표 데이터 geo_data에 저장하기
import json #json 형태의 파일 처리를 위한 모듈
geo_path = '../data/경기도행정구역경계.json' #텍스트파일
#geo_data : 경기도의 시군의 경계부분을 좌표로 가지고 있는 데이터.
# json.load : json 파일을 읽기
try:
geo_data = json.load(open(geo_path, encoding='utf-8'))
except:
geo_data = json.load(open(geo_path, encoding='utf-8-sig'))
print(type(geo_data)) #딕셔너리 위도 경도값저장
# 지도로 표시하기 : 인구데이터에 따라 지도에 색상으로 표시
g_map = folium.Map(location=[37.5502,126.982],zoom_start=9)
year = '2007'
'''
geo_data : 위도 경도 값.
data = df[year] : 지도에 표시할 데이터. 데이값에 따라서 색상 결정
fill_color='YlOrRd' : 색상표. 파렛트. 데이터 맞는 색상값
'BuGn', 'BuPu', 'GnBu', 'OrRd', 'PuBu', 'PuBuGn',
'PuRd', 'RdPu', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd'
fill_opacity=0.7 : 투명도.
line_opacity=0.3 : 경계면 투명도
threshold_scale : 데이터와 색상 표시할때 범위 지정.
key_on='feature.properties.name' : 데이터와 지도표현을 위한 연결 컬럼 설정
'''
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)
g_map.save('map/gyonggi_population_' + year + '.html')
미국 실업지도 만들기
### 미국 지도 ###
#csv(US_Unemployment_Oct2012.csv) 2012년10월미국실업률과
#json(us-states.json) 미국 위도 경도 데이터를 읽어서 지도에 표시하기
# 2012년10월미국실업률 state_data에 데이터 저장하기.
import folium
import pandas as pd
state_unemployment = "../data/US_Unemployment_Oct2012.csv"
state_data = pd.read_csv(state_unemployment)
state_data.head()
state_data.info()
# 미국 좌표 데이터 state_geo에 저장하기
import json #json 형태의 파일 처리를 위한 모듈
state_geo = "../data/us-states.json"
# 지도로 표시하기 : 실업률에 따라 지도에 색상으로 표시
m = folium.Map(location=[48, -102],
zoom_start=3, tiles="Stamen Toner")
folium.Choropleth(
state_geo, #위도 경도를 위한 지도파일(json형태 )의 이름
data=state_data, #데이터
columns=["State", "Unemployment"], #컬럼명 설정
key_on="feature.id", #데이터와 지도표시를 연결
fill_color="YlGn",
fill_opacity=0.7,
line_opacity=0.2,
legend_name="Unemployment Rate (%)",
).add_to(m)
m.save('map/usa1.html')
'프로그래밍언어 > Python' 카테고리의 다른 글
[Python] 데이터 시각화-그래프연습 (python-pandas, matplotlib.pyplot, serborn) (0) | 2022.01.13 |
---|---|
[Python] 데이터 시각화 - 그래프 (0) | 2022.01.12 |
[Python] seaborn 모듈 (0) | 2022.01.12 |
[Python] pandas 모듈 (0) | 2022.01.12 |
[Python] Numpy 모듈 (0) | 2022.01.11 |