공공데이터 포털의 소상공인시장진흥공단_상가(상권)정보 데이터를 활용하여 특정 시군구 지역의 상권 분포를 시각화
상권업종대분류명
# category 1
c1 = store.value_counts('상권업종대분류명').to_frame('count').reset_index()
c1
# output
상권업종대분류명 count
0 소매 3068
1 음식 2659
2 생활서비스 1843
3 학문/교육 1033
4 부동산 508
5 관광/여가/오락 220
6 스포츠 134
7 숙박 34
상권업종중분류명
상권업종대분류명에서 '음식' 에 해당되는 카테고리의 중분류만 포함
food = store[store['상권업종대분류명']=='음식']
# categoty 2
c2 = food.value_counts('상권업종중분류명').to_frame('count').reset_index()
c2
# output
상권업종중분류명 count
0 한식 884
1 커피점/카페 381
2 유흥주점 271
3 분식 220
4 일식/수산물 200
5 닭/오리요리 174
6 패스트푸드 150
7 제과제빵떡케익 126
8 양식 81
9 중식 80
10 별식/퓨전요리 69
11 부페 11
12 기타음식업 10
13 음식배달서비스 2
melt + concat
카테고리를 하나로 결합하기 위해 각 열에 있는 분류명을 melt
를 적용하여 행으로 정리한 뒤, 각 데이터 프레임을 concat
으로 병합
melt
id_vars
: 고정시킬 컬럼명value_name
: 행으로 변환시킬 컬럼명var_name
: 변환된 컬럼에 대한 이름
concat
pd.concat([df1, df2])
# melt
c11 = pd.melt(c1,id_vars = 'count',var_name = '분류',value_name = '상권업종대분류명')
c22 = pd.melt(c2,id_vars = 'count',var_name = '분류',value_name = '상권업종중분류명')
# concat
c3 = pd.concat([c11,c22])
c3['상권업종대분류명'] = c3['상권업종대분류명'].fillna('음식')
output
plotly treemap
import plotly.express as px
import numpy as np
df = c3.copy()
fig = px.treemap(df, path=[px.Constant("분류"),'분류', '상권업종대분류명', '상권업종중분류명'], values='count',
color='count',
color_continuous_scale='dense',
color_continuous_midpoint=np.average(df['count'], weights=df['count']))
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()
result
- 마우스를 각 영역위에 올리면 해당되는 영역의 count값을 확인할 수 있다.