728x90
In [1]:
# 기본 라이브러리
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from statsmodels.formula.api import ols
# 지도 시각화를 위한 라이브러리
import folium
import requests
import json
In [ ]:
# 서울 행정구역 web 사이트 연결
r = requests.get('https://raw.githubusercontent.com/vuski/admdongkor/master/ver20220401/HangJeongDong_ver20220401.geojson')
c = r.content
seoul_geo = json.loads(c)
In [ ]:
# 대한민국 시군구 단위 분류 (파일로 구분)
with open('C:/Users/90000527/Desktop/TL_SCCO_SIG.json', 'r' , encoding="UTF8") as f:
kor_data = json.load(f)
print(json.dumps(kor_data) )
In [2]:
# 대한민국 시 단위 분류 (파일로 구분)
with open('C:/Users/90000527/Desktop/TL_SCCO_CTPRVN.json', 'r' , encoding="UTF8") as f:
kor_data = json.load(f)
In [3]:
# 어떤 도시가 있는지 확인
geozips = []
for i in range(len(kor_data['features'])):
geozips.append(kor_data['features'][i]['properties']['CTP_KOR_NM'])
geozips
Out[3]:
['강원도',
'경기도',
'경상남도',
'경상북도',
'광주광역시',
'대구광역시',
'대전광역시',
'부산광역시',
'서울특별시',
'세종특별자치시',
'울산광역시',
'인천광역시',
'전라남도',
'전라북도',
'제주특별자치도',
'충청남도',
'충청북도']
In [4]:
# 데이터 불러오기
data1= pd.read_csv('C:/Users/90000527/Desktop/data/data1.csv', encoding='cp949')
data1.head()
Out[4]:
name | person | total | percent | |
---|---|---|---|---|
0 | 경기도 | 2428355.0 | 13565000.0 | 0.1790 |
1 | 서울특별시 | 1453693.0 | 9509000.0 | 0.1529 |
2 | 경상남도 | 666006.0 | 3314000.0 | 0.2010 |
3 | 부산광역시 | 595755.0 | 3350000.0 | 0.1778 |
4 | 강원도 | 516749.0 | 1538000.0 | 0.3360 |
In [5]:
# 유니크한 code 이루어진 리스트 만들기
ziplist = list(data1['name'].unique())
ints = [item for item in ziplist]
ziplist
Out[5]:
['경기도',
'서울특별시',
'경상남도',
'부산광역시',
'강원도',
'경상북도',
'충청남도',
'인천광역시',
'전라남도',
'전라북도',
'충청북도',
'대구광역시',
'제주특별자치도',
'대전광역시',
'광주광역시',
'울산광역시',
'세종특별자치시',
nan]
In [ ]:
# 지도에 칠해져야할 부분이 검은색으로 나올때 사용하는 코드
# remove codes not in our dataset
geozips = []
for i in range(len(kor_data['features'])):
if int(kor_data['features'][i]['properties']['SIG_CD']) in ints: # 매칭 변수에 맞게 변환
geozips.append(kor_data['features'][i])
# creating new JSON object
new_json = dict.fromkeys(['type','features'])
new_json['type'] = 'FeatureCollection'
new_json['features'] = geozips
# save JSON object as updated-file
open("updated-file.json", "w").write(
json.dumps(new_json, sort_keys=True, indent=4, separators=(',', ': '))
)
In [6]:
# 도시별 위도 경도
# 대전 36.3545224, 127.3836025
# 서울 37.559819, 126.963895
# 합천 35.5665758,128.1657995
#bins = list(data1['percent'].quantile([0, 0.25, 0.5, 0.75, 1])) # 1/4, 2/4, 3/4분위수별로 구간을 나누어 시각화
m = folium.Map(
location=[36.5 , 127.3836025], # 중앙에 놓을 위도 경도 값
zoom_start=6, # 줌-인, 줌-아웃
#tiles='Stamen Toner' # Stamen Toner, cartodbpositron # 지도 종류
)
folium.GeoJson(
kor_data,
).add_to(m)
m.choropleth(geo_data=kor_data,
data=data1,
columns=['name', 'person'],
fill_color='PuRd', # 색상 변경도 가능하다 BuPu, YlOrRd, Blues, RdYlGn, RdPu, PuRd
fill_opacity=0.7,
#line_opacity=0.2,
key_on='properties.CTP_KOR_NM',
#Highlight= True,
legend_name = "도시별 가입자 수",
#bins=bins
)
# Marker 생성 코드
folium.Marker([37.559819, 126.963895], icon = folium.Icon(color = 'red'),
tooltip = ('<h4><b>서울특별시</h4></b><br>'
'<b> 가입자 수: </b> {num}명<br>'
).format(num = format(int(data1[data1['name']=='서울특별시']['person']),','))).add_to(m)
m
In [7]:
# HTML로 저장
m.save('C:/Users/90000527/Desktop/map1.html')
In [8]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:80% !important;}</style>"))
728x90
'Ccode > 데이터 시각화' 카테고리의 다른 글
데이터 시각화 Tableau 로 시작하기 (0) | 2021.11.14 |
---|---|
주가 분석 (0) | 2021.08.18 |
신용카드 사용자 연체 예측_EDA(2) (0) | 2021.08.17 |
신용카드 사용자 연체 예측_EDA(1) (0) | 2021.08.13 |
Netflix 데이터 간략히 EDA 해보기 (0) | 2021.08.05 |