-
서울시 전통시장 현황 분석 With Python, Mapbox, PydeckData Analysis/Real Estate 2021. 4. 17. 17:21
아래 서울 열린데이터 서비스에서 제공해주고 있는 전통시장 현황 데이터를 사용해서 간략한 지도 시각화를 해보도록 하겠다. 대표적인 시각화 패키지 Mapbox와 Pydeck 라이브러리를 사용하도록 하겠다.
data.seoul.go.kr/dataList/OA-1176/S/1/datasetView.do
1. 데이터 가져오기
코드가 문제 없이 돌아간다면 아래와 같이 시장 이름, 주소 그리고 위경도 데이터를 확인할 수 있다.
import requests import pandas as pd api='~~' url=f'http://openapi.seoul.go.kr:8088/{api}/json/ListTraditionalMarket/1/999/' res=requests.get(url) obj=res.json() df=pd.DataFrame(obj['ListTraditionalMarket']['row'])
2. Mapbox 전통시장 지도 시각화
전통시장 위치에다가 원 포인트 하나씩 찍도록 하겠다. 확실히 강남보다는 강북 지역에 전통시장이 많은 점을 볼 수 있다.
from mapboxgl.utils import * from mapboxgl.viz import * from mapboxgl.utils import df_to_geojson import json df['LAT']=df['LAT'].astype(float) df['LNG']=df['LNG'].astype(float) geo_data = df_to_geojson( df=df, properties=['GUNAME', 'M_NAME','M_ADDR'], lat='LAT', lon='LNG', precision=5, filename = "local_market.geojson" ) geo_data = 'local_market.geojson' with open(geo_data) as f: gdata = json.loads(f.read()) token = '~~' center = [126.981497, 37.518623] viz = CircleViz( data=gdata, access_token=token, center=center, zoom=10.3, radius=3, stroke_color='black' ) viz.show() viz.create_html('local_market.html')
다음으로는 전통시장 수치를 클러스터링 형식으로 시각화해보았다.
color_stops = create_color_stops([5,10,15,20,25,30], colors='BrBG') cviz = ClusteredCircleViz(gdata, access_token=token, color_stops=color_stops, radius_stops=[[1,5], [10, 10], [50, 15], [100, 20]], radius_default=2, cluster_maxzoom=10, cluster_radius=30, label_size=12, opacity=0.9, center=center, zoom=10.4 ) cviz.show() cviz.create_html('시장.html')
3. 서울시 행정구역별 전통시장 수
마지막으로 서울시 행정구역 별 전통시장 수를 Pydeck을 통해서 지도에 시각화해보도록 하겠다.
아래 지도에서 볼 수 있듯이 서울 중구와 영등포구에서 전통시장이 30개로 가장 많았다.
import json state=json.load(open('C:/Users/banad/Downloads/TL_SCCO_SIG.zip.geojson', encoding='utf-8')) total=pd.DataFrame(df.groupby(['GUNAME']).count()['M_NAME']).reset_index() for idx, sigun in enumerate(state['features']): code=sigun['properties']['SIG_CD'] if code[:2] =='11': gu=sigun['properties']['SIG_KOR_NM'] number= total.loc[(total['GUNAME']==gu),'M_NAME'].iloc[0] state['features'][idx]['properties']['전통시장 수']=float(number) data=[x for x in state['features'] if len(x['properties'])>3 ] state['features']=data kor=[] markets=[] cor=[] for i in state['features']: kor.append(i['properties']['SIG_KOR_NM']) markets.append(i['properties']['전통시장 수']) cor.append(i['geometry']['coordinates'][0]) pyd=pd.DataFrame({'행정구역':kor,'전통시장 수':markets,'cor':cor}) pyd['정규화'] = pyd['전통시장 수'] / pyd['전통시장 수'].max() pyd['number']=pyd['전통시장 수']*500 import pydeck as pdk mm = pdk.Layer( 'PolygonLayer', # 사용할 Layer 타입 pyd, # 시각화에 쓰일 데이터프레임 get_polygon='cor', # geometry 정보를 담고있는 컬럼 이름 get_fill_color='[0, 255*정규화, 0]', # 각 데이터 별 rgb 또는 rgba 값 (0~255) pickable=True, # 지도와 interactive 한 동작 on auto_highlight=True, # 마우스 오버(hover) 시 박스 출력 extruded = True, get_elevation = 'number', elevation_scale = 0.2 ) center = [126.981540, 37.565] view_state = pdk.ViewState( longitude=center[0], latitude=center[1], zoom=10, bearing=15, pitch=45 ) r = pdk.Deck(layers=[mm], initial_view_state=view_state, tooltip={ "html": '''<b>행정구역:</b> {행정구역} <br/> <b>전통시장 수:</b> {전통시장 수}''' } ) r.show() r.to_html('행정구역별 전통마켓.html')
'Data Analysis > Real Estate' 카테고리의 다른 글
국내 외국인 토지 보유 현황 분석 with 파이썬 (0) 2021.08.14 서울 주요 핫플레이스(홍대입구, 건대입구, 이태원, 명동) 방문객 분석 with 지하철역 하차 인원 수 (0) 2021.05.19 국민 임대 주택 총 세대 수 현황 알아보자 with 공공데이터 & 파이썬 (0) 2021.04.08 서울 내 스타벅스가 가장 많은 지역을 알아보자 - 스타벅스 위치 데이터 분석 With Python (0) 2021.04.01 국내 대형마트(홈플러스, 이마트, 롯데마트) 위치 데이터 분석 & 시각화 With Python/Mapbox (0) 2021.03.30