본문 바로가기
수업(국비지원)/Python

[Python] 지도를 이용한 시각화2

by byeolsub 2023. 4. 25.

📌

# 경기도의 인구 데이터와 위치 정보를 이용하여 인구를 지도에 표시하기
import pandas as pd
import folium
import json # json형태의 파일을 처리하기 위한 모듈
#1 경기도 인구 데이터를 읽어 df 변수에 저장하기. 구분컬럼을 인덱스로 지정
df = pd.read_excel("data/경기도인구데이터.xlsx",index_col='구분')
df.info()
df.columns # 컬럼명의 자료형이 정수형

# 컬럼의 자료형을 문자열형으로 변경하기
df.columns = df.columns.map(str)
df.columns # 컬럼명의 자료형이 문자열형

#2 위치정보를 가지고 잇는 경기도행정구역경계.json 파일 읽기
# 경기도행정구역경계.json 파일의 내용을 읽어서 json형식의 객체(dict 객체)로 load
# json 형식 : {"키":"값","키2":"값2",...}
geo_data = json.load(open("data/경기도행정구역경계.json",encoding="utf-8"))
type(geo_data) # 딕셔너리 객체

#3 지도표시하기
g_map = folium.Map(location=[37.5502,126.982],zoom_start=9)
year = '2017'
# 데이터와 위치값 매칭
'''
지도에 데이터의 크기만큼 색상으로 표시
# geo_data : 위치정보를 저장하는 딕셔너리 객체 설정. 
             경계를 표시해주는 데이터. 위도,경도 정보
# data : 표시하고자 하는 데이터
# fill_color : 색상표. 데이터에 맞는 색상값을 가져오기 위한 색상표     
# fill_opacity : 내부 색상 투명도
# line_opacity : 경계선 투명도
# 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=[1000,100000,200000,300000,400000,500000,
                                   600000,700000],
                  key_on='feature.properties.name', # 데이터와 지역구분을 연결을 시켜주는 값
                  ).add_to(g_map)
g_map.save('gyonggi1_' + year + '.html')

df.index
df[year]
df.loc["남양주시"]
df.loc["화성시"]
df.loc["과천시"]

df.index
df[year]
df.loc["남양주시"] df.loc["화성시"] df.loc["과천시"]


📌

###################
# us-states.json, US_Unemployment_Oct2012.csv 사용하여 지도로 표시하기
import folium
import pandas as pd
state_geo = "data/us-states.json"
state_unemployment = "data/US_Unemployment_Oct2012.csv"
state_data = pd.read_csv(state_unemployment)
m = folium.Map(location=[48,-102], zoom_start=3)
folium.Choropleth(
    state_geo, # 문자열. 파일의 위치 인식. 
    data = state_data, # 표시할 데이터
    columns=["State","Unemployment"], # 컬럼명 설정(지역명,데이터 컬럼)
    # state_geo 데이터의 id값
    key_on = "feature.id", # 데이터값과 지도의 위치 연결컬럼.
    fill_color="YlGn", # 컬러맵 지정
    fill_opacity=0.7, 
    line_opacity=0.2,
    legend_name="Unemployment Rate (%)", # 범례명 
    ).add_to(m)
m.save('usa1.html')