plotly treemap

SOOYEON·2022년 9월 26일
0

데이터 시각화

목록 보기
3/3
post-thumbnail

공공데이터 포털의 소상공인시장진흥공단_상가(상권)정보 데이터를 활용하여 특정 시군구 지역의 상권 분포를 시각화

상권업종대분류명

# 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값을 확인할 수 있다.

참고

0개의 댓글