본문 바로가기
  • 紹睿: 자유롭고 더불어 사는 가치있는 삶
Project/데이터 가지고 놀기

[Seoul Store] 내맘대로 하는 서울상가 데이터 탐색기 (1)

by 징여 2018. 7. 14.
반응형

심심해서 하는 내맘대로 서울상가 데이터 탐색기

Store data in Seoul¶

서울에 있는 상가 데이터를 탐색해보자

In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

1. 상가업소정보 201803 데이터 탐색¶

In [3]:
data1 = pd.read_csv('./소상공인시장진흥공단_상가업소정보_201803/소상공인시장진흥공단_상가업소정보_201803_01.csv', encoding='cp949')
data1.head(3)
Out[3]:
상가업소번호 상호명 지점명 상권업종대분류코드 상권업종대분류명 상권업종중분류코드 상권업종중분류명 상권업종소분류코드 상권업종소분류명 표준산업분류코드 ... 건물관리번호 건물명 도로명주소 구우편번호 신우편번호 동정보 층정보 호정보 경도 위도
0 15502838 김관선스포츠용품 NaN D 소매 D14 운동/경기용품소매 D14A01 운동/경기용품 G47631 ... 2.626010e+24 사직쌍용예가 부산광역시 동래구 사직로 80 607786 47863.0 122 NaN 1706 129.053851 35.197052
1 15514817 국제컴퓨터속셈웅변학원 NaN R 학문/교육 R07 학원-예능취미체육 R07A15 학원-웅변 P85699 ... 1.168010e+24 성창빌딩 서울특별시 강남구 도곡로 510 135501 6282.0 NaN NaN NaN 127.062161 37.499013
2 15521403 더엘가커피 NaN Q 음식 Q12 커피점/카페 Q12A01 커피전문점/카페/다방 I56220 ... 2.647010e+24 부산아시아드주경기장노외주차장 부산광역시 연제구 종합운동장로 7 611807 47500.0 NaN 1 NaN 129.062033 35.191284

3 rows × 39 columns

In [4]:
data1['도로명주소'].str.split(' ', n=2)[0]
Out[4]:
['부산광역시', '동래구', '사직로 80']
In [5]:
data1['시'], data1['구'], data1['상세주소'] = data1['도로명주소'].str.split(' ', n=2).str
In [6]:
data1.tail(3)
Out[6]:
상가업소번호 상호명 지점명 상권업종대분류코드 상권업종대분류명 상권업종중분류코드 상권업종중분류명 상권업종소분류코드 상권업종소분류명 표준산업분류코드 ... 구우편번호 신우편번호 동정보 층정보 호정보 경도 위도 상세주소
472984 16069560 천향오 NaN Q 음식 Q01 한식 Q01A01 한식/백반/한정식 I56111 ... 150814 7415.0 NaN 1 NaN 126.897362 37.495103 서울특별시 영등포구 대림로29길 19
472985 16069720 부산대원어묵 NaN Q 음식 Q04 분식 Q04A01 라면김밥분식 I56194 ... 150839 7349.0 NaN 1 NaN 126.917025 37.510972 서울특별시 영등포구 도신로60길 10
472986 16027937 박가네 NaN Q 음식 Q01 한식 Q01A01 한식/백반/한정식 I56111 ... 132822 1330.0 NaN 1 NaN 127.046531 37.670402 서울특별시 도봉구 마들로 676

3 rows × 42 columns

In [7]:
seoul_data = data1[data1['시']=='서울특별시']
seoul_data.shape
Out[7]:
(327904, 42)

2. 상권정보업종코드를 분석하여 문화, 유흥과 관련된 코드를 알아내자¶

In [8]:
code = pd.read_csv('./소상공인시장진흥공단_상가업소정보_201803/상권정보업종코드집_201512.csv', encoding='cp949')
In [9]:
code.head(3)
Out[9]:
업종대분류코드 업종대분류명 업종중분류코드 업종중분류명 업종소분류코드 업종소분류명 데이터기준일자
0 B 제조 B01 식품가공/제조 B01B18 수산물가공/저장처리-기타 2015-12-17
1 B 제조 B01 식품가공/제조 B01B19 과실/채소가공/저장처리-종합 2015-12-17
2 B 제조 B01 식품가공/제조 B01B20 과실통조림제조 2015-12-17
In [10]:
code_name = list(set(code['업종대분류명']))
print(code_name)
['제조', '1차산업', '관광/여가/오락', '학문/교육', '부동산', '음식', '도매/유통/무역', '생활서비스', '의료', '전자/정보통신', '소매', '문화/예술/종교', '숙박', '스포츠', '기술/건축/환경', '국가기관/단체', '언론/미디어', '전기/가스/수도', '금융', '교통/운송']
In [11]:
for i in code_name:
    tmp = list(code['업종소분류명'][code['업종대분류명']==i])
    print("{}, {}개".format(i, len(tmp)))
제조, 1138개
1차산업, 117개
관광/여가/오락, 64개
학문/교육, 168개
부동산, 18개
음식, 117개
도매/유통/무역, 461개
생활서비스, 161개
의료, 61개
전자/정보통신, 53개
소매, 256개
문화/예술/종교, 25개
숙박, 5개
스포츠, 48개
기술/건축/환경, 154개
국가기관/단체, 208개
언론/미디어, 71개
전기/가스/수도, 19개
금융, 54개
교통/운송, 149개
In [12]:
code[code['업종소분류명']=='목욕업-찜질방'] #F09
Out[12]:
업종대분류코드 업종대분류명 업종중분류코드 업종중분류명 업종소분류코드 업종소분류명 데이터기준일자
2795 F 생활서비스 F09 대중목욕탕/휴게 F09A03 목욕업-찜질방 2015-12-17
In [13]:
code[code['업종소분류명'].str.contains('카페')] # Q12 Q09
Out[13]:
업종대분류코드 업종대분류명 업종중분류코드 업종중분류명 업종소분류코드 업종소분류명 데이터기준일자
1070 Q 음식 Q12 커피점/카페 Q12A04 보드게임카페 2015-12-17
1071 Q 음식 Q12 커피점/카페 Q12A05 사주카페 2015-12-17
1073 Q 음식 Q12 커피점/카페 Q12A07 애견카페 2015-12-17
1541 Q 음식 Q09 유흥주점 Q09A08 빠/카페/스탠드빠 2015-12-17
1545 Q 음식 Q09 유흥주점 Q09A09 락카페 2015-12-17
1550 Q 음식 Q12 커피점/카페 Q12A01 커피전문점/카페/다방 2015-12-17
1822 D 소매 D07 가정/주방/인테리어 D07A06 카페트판매 2015-12-17
2405 B 제조 B02 섬유/직물제조 B02B11 카페트제조 2015-12-17
In [14]:
code[code['업종소분류명']=='관광/유흥주점'] #Q09
Out[14]:
업종대분류코드 업종대분류명 업종중분류코드 업종중분류명 업종소분류코드 업종소분류명 데이터기준일자
1548 Q 음식 Q09 유흥주점 Q09A06 관광/유흥주점 2015-12-17
In [15]:
print(code['업종중분류명'][code['업종대분류명']=='학문/교육'].unique())
print(code['업종중분류명'][code['업종대분류명']=='관광/여가/오락'].unique())
print(code['업종중분류명'][code['업종대분류명']=='스포츠'].unique())
print(code['업종중분류명'][code['업종대분류명']=='의료'].unique())
print(code['업종중분류명'][code['업종대분류명']=='숙박'].unique())
['학교' '기타교육기관' '도서관/독서실' '연구소' '유아교육' '특수교육기관' '학원기타' '학원-예능취미체육'
 '학원-창업취업취미' '학원-자격/국가고시' '학원-보습교습입시' '학원-음악미술무용' '학원-어학' '학원-컴퓨터'
 '학문교육기타']
['놀이/여가/취미' '무도/유흥/가무' '연극/영화/극장' '전시/관람' '경마/경륜/성인오락' '스포츠/운동'
 'PC/오락/당구/볼링등' '요가/단전/마사지']
['실내운동시설' '실외운동시설' '운영관리시설']
['병원' '유사의료업' '의료관련서비스업' '수의업' '약국/한약방' '수용복지시설' '비수용복지시설']
['호텔/콘도' '유스호스텔' '모텔/여관/여인숙' '캠프/별장/펜션' '민박/하숙']

3. 업종소분류명으로 분류하기¶

  • 중분류명: 학문/교육, 관광/여가/오락, 스포츠, 의료, 숙박
  • 소분류명: 관광/유흥주점, 카페, 목욕업-찜질방
In [16]:
s_details = ['관광/유흥주점', '보드게임카페','사주카페', '애견카페', '빠/카페/스탠드빠', '락카페', '커피전문점/카페/다방','목욕업-찜질방']
m_details = []
for tmp in code['업종중분류명'][code['업종대분류명']=='학문/교육'].unique():
    m_details.append(tmp)
for tmp in code['업종중분류명'][code['업종대분류명']=='관광/여가/오락'].unique():
    m_details.append(tmp)
for tmp in code['업종중분류명'][code['업종대분류명']=='스포츠'].unique():
    m_details.append(tmp)
for tmp in code['업종중분류명'][code['업종대분류명']=='의료'].unique():
    m_details.append(tmp)
for tmp in code['업종중분류명'][code['업종대분류명']=='숙박'].unique():
    m_details.append(tmp)
print(m_details)
print(s_details)
['학교', '기타교육기관', '도서관/독서실', '연구소', '유아교육', '특수교육기관', '학원기타', '학원-예능취미체육', '학원-창업취업취미', '학원-자격/국가고시', '학원-보습교습입시', '학원-음악미술무용', '학원-어학', '학원-컴퓨터', '학문교육기타', '놀이/여가/취미', '무도/유흥/가무', '연극/영화/극장', '전시/관람', '경마/경륜/성인오락', '스포츠/운동', 'PC/오락/당구/볼링등', '요가/단전/마사지', '실내운동시설', '실외운동시설', '운영관리시설', '병원', '유사의료업', '의료관련서비스업', '수의업', '약국/한약방', '수용복지시설', '비수용복지시설', '호텔/콘도', '유스호스텔', '모텔/여관/여인숙', '캠프/별장/펜션', '민박/하숙']
['관광/유흥주점', '보드게임카페', '사주카페', '애견카페', '빠/카페/스탠드빠', '락카페', '커피전문점/카페/다방', '목욕업-찜질방']
In [18]:
code1 = code[code['업종중분류명'].isin(m_details)]
code2 = code[code['업종소분류명'].isin(s_details)]
print('code1:',code1.shape, 'code2:', code2.shape)
code_df = code1.append(code2)
print('code df complete!', code_df.shape)
code_df.head(3)
code1: (346, 7) code2: (8, 7)
code df complete! (354, 7)
Out[18]:
업종대분류코드 업종대분류명 업종중분류코드 업종중분류명 업종소분류코드 업종소분류명 데이터기준일자
664 N 관광/여가/오락 N07 놀이/여가/취미 N07A03 주말농장 2015-12-17
764 N 관광/여가/오락 N02 무도/유흥/가무 N02A02 나이트클럽 2015-12-17
765 S 의료 S01 병원 S01B01 종합병원 2015-12-17

4. 상가 업종 정보에서 우리가 원하는 업종소분류? 중분류들만 골라내보자¶

  • seoul_data: 서울지역 상가정보
  • code_df: 업종코드
In [19]:
seoul_data.head(3)
Out[19]:
상가업소번호 상호명 지점명 상권업종대분류코드 상권업종대분류명 상권업종중분류코드 상권업종중분류명 상권업종소분류코드 상권업종소분류명 표준산업분류코드 ... 구우편번호 신우편번호 동정보 층정보 호정보 경도 위도 상세주소
1 15514817 국제컴퓨터속셈웅변학원 NaN R 학문/교육 R07 학원-예능취미체육 R07A15 학원-웅변 P85699 ... 135501 6282.0 NaN NaN NaN 127.062161 37.499013 서울특별시 강남구 도곡로 510
3 15525799 더소망치과의원 NaN S 의료 S01 병원 S01B04 치과의원 Q86202 ... 134843 5373.0 NaN 3 302 127.136501 37.534154 서울특별시 강동구 천호대로 1128
4 15538554 대우인테리어 NaN D 소매 D07 가정/주방/인테리어 D07A01 인테리어/욕실용품/커튼 G47599 ... 131811 2200.0 NaN NaN NaN 127.095579 37.589992 서울특별시 중랑구 겸재로 252-1

3 rows × 42 columns

In [20]:
code_df.head(3)
Out[20]:
업종대분류코드 업종대분류명 업종중분류코드 업종중분류명 업종소분류코드 업종소분류명 데이터기준일자
664 N 관광/여가/오락 N07 놀이/여가/취미 N07A03 주말농장 2015-12-17
764 N 관광/여가/오락 N02 무도/유흥/가무 N02A02 나이트클럽 2015-12-17
765 S 의료 S01 병원 S01B01 종합병원 2015-12-17

4-1. 상권업종소분류 코드를 통해 해당 업종소분류 코드만 있는 아이들을 걸러보자¶

나중에 코드가 어떤 업종인지 알기 쉽게? 하기위해 dictionary에 저장한다

In [21]:
small_info = {}
for i in range(code_df.shape[0]):
    name = code_df['업종소분류명'].iloc[i]
    code = code_df['업종소분류코드'].iloc[i]
    small_info[code] = name

middle_info = {}
for i in range(code_df.shape[0]):
    name = code_df['업종중분류명'].iloc[i]
    code = code_df['업종중분류코드'].iloc[i]
    middle_info[code] = name

big_info = {}
for i in range(code_df.shape[0]):
    name = code_df['업종대분류명'].iloc[i]
    code = code_df['업종대분류코드'].iloc[i]
    big_info[code] = name
In [22]:
small_info['N07A03'], middle_info['N07'], big_info['N']
Out[22]:
('주말농장', '놀이/여가/취미', '관광/여가/오락')
In [24]:
seoul_data = seoul_data[seoul_data['상권업종소분류코드'].isin(list(small_info.keys()))]
seoul_data.head(3)
Out[24]:
상가업소번호 상호명 지점명 상권업종대분류코드 상권업종대분류명 상권업종중분류코드 상권업종중분류명 상권업종소분류코드 상권업종소분류명 표준산업분류코드 ... 구우편번호 신우편번호 동정보 층정보 호정보 경도 위도 상세주소
1 15514817 국제컴퓨터속셈웅변학원 NaN R 학문/교육 R07 학원-예능취미체육 R07A15 학원-웅변 P85699 ... 135501 6282.0 NaN NaN NaN 127.062161 37.499013 서울특별시 강남구 도곡로 510
3 15525799 더소망치과의원 NaN S 의료 S01 병원 S01B04 치과의원 Q86202 ... 134843 5373.0 NaN 3 302 127.136501 37.534154 서울특별시 강동구 천호대로 1128
17 15538974 남도모텔 NaN O 숙박 O02 모텔/여관/여인숙 O02A01 모텔/여관/여인숙 I55112 ... 131800 2061.0 NaN 3 127.106052 37.605227 서울특별시 중랑구 양원역로 53

3 rows × 42 columns

In [25]:
seoul_data.columns
Out[25]:
Index(['상가업소번호', '상호명', '지점명', '상권업종대분류코드', '상권업종대분류명', '상권업종중분류코드',
       '상권업종중분류명', '상권업종소분류코드', '상권업종소분류명', '표준산업분류코드', '표준산업분류명', '시도코드',
       '시도명', '시군구코드', '시군구명', '행정동코드', '행정동명', '법정동코드', '법정동명', '지번코드',
       '대지구분코드', '대지구분명', '지번본번지', '지번부번지', '지번주소', '도로명코드', '도로명', '건물본번지',
       '건물부번지', '건물관리번호', '건물명', '도로명주소', '구우편번호', '신우편번호', '동정보', '층정보',
       '호정보', '경도', '위도', '시', '구', '상세주소'],
      dtype='object')

4-2. 관련 없는 컬럼명은 다 지워주자¶

In [26]:
seoul_data_result = seoul_data[['상호명','상권업종대분류코드','상권업종중분류코드', '상권업종소분류코드','경도', '위도', '시', '구', '상세주소' ]]
seoul_data_result.head(3)
Out[26]:
상호명 상권업종대분류코드 상권업종중분류코드 상권업종소분류코드 경도 위도 상세주소
1 국제컴퓨터속셈웅변학원 R R07 R07A15 127.062161 37.499013 서울특별시 강남구 도곡로 510
3 더소망치과의원 S S01 S01B04 127.136501 37.534154 서울특별시 강동구 천호대로 1128
17 남도모텔 O O02 O02A01 127.106052 37.605227 서울특별시 중랑구 양원역로 53
In [28]:
seoul_data_result.shape, seoul_data_result[seoul_data_result['상권업종소분류코드'].isin(list(small_info.keys()))].shape
# 서울은 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 다 놀이시설과 병원..기타등등이었던것임..ㅂㄷ
Out[28]:
((69508, 9), (69508, 9))

5. 해당되는 분류코드가 얼마나 존재하는지 확인해볼 거다¶

  • 소분류코드: 354
  • 중분류코드: 41
  • 대분류: 7
In [29]:
len(small_info), len(middle_info), len(big_info)
Out[29]:
(354, 41, 7)

5-1. 가장 가지수가 적은 대분류 부터 가즈아¶

In [30]:
seoul_data_result.head(3)
Out[30]:
상호명 상권업종대분류코드 상권업종중분류코드 상권업종소분류코드 경도 위도 상세주소
1 국제컴퓨터속셈웅변학원 R R07 R07A15 127.062161 37.499013 서울특별시 강남구 도곡로 510
3 더소망치과의원 S S01 S01B04 127.136501 37.534154 서울특별시 강동구 천호대로 1128
17 남도모텔 O O02 O02A01 127.106052 37.605227 서울특별시 중랑구 양원역로 53
In [31]:
big = list(big_info.keys())
big
Out[31]:
['N', 'S', 'R', 'O', 'P', 'Q', 'F']
In [32]:
seoul_data_count = seoul_data_result.groupby(['구', '상권업종대분류코드']).count()
In [33]:
seoul_data_count = seoul_data_count[['상호명']]
seoul_data_count.T
Out[33]:
강남구 강동구 ... 중구 중랑구
상권업종대분류코드 F N O P Q R S F N O ... Q R S F N O P Q R S
상호명 8 763 149 8 1945 2589 1991 6 457 95 ... 831 355 493 4 362 106 1 283 837 454

1 rows × 167 columns

In [34]:
from matplotlib import font_manager, rc

rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus'] = False
In [37]:
seoul_data_count.groupby('구').sum().sort_values('상호명').plot(kind='barh', grid='True', figsize=(10, 10))
Out[37]:
<matplotlib.axes._subplots.AxesSubplot at 0x112e5aa90>
In [43]:
seoul_gu = list(seoul_data_result['구'].unique())
len(seoul_gu)
Out[43]:
25
In [44]:
seoul_count_result = seoul_data_count.T[seoul_gu[0]].rename({'상호명': seoul_gu[0]}, axis='index')
for i in seoul_gu[1:]:
    tmp = seoul_data_count.T[i].rename({'상호명': i}, axis='index')
    seoul_count_result = seoul_count_result.append(tmp)
In [45]:
seoul_count_result
Out[45]:
상권업종대분류코드 F N O P Q R S
강남구 8.0 763 149 8.0 1945 2589 1991
강동구 6.0 457 95 1.0 502 1404 627
중랑구 4.0 362 106 1.0 283 837 454
서대문구 4.0 207 81 NaN 662 639 450
관악구 9.0 534 110 NaN 495 1232 570
마포구 5.0 267 123 NaN 1273 832 543
도봉구 2.0 187 23 1.0 284 892 367
양천구 4.0 302 19 2.0 408 1630 462
성동구 NaN 261 92 2.0 444 684 470
서초구 9.0 491 86 6.0 1147 1603 1024
강서구 9.0 474 101 4.0 577 1206 596
구로구 3.0 391 109 1.0 521 1057 434
용산구 3.0 251 108 1.0 603 449 334
종로구 2.0 283 230 1.0 1000 525 418
동대문구 5.0 312 140 NaN 384 816 882
송파구 4.0 523 85 2.0 766 1520 866
영등포구 9.0 454 210 2.0 902 857 650
성북구 5.0 299 126 2.0 568 1172 652
중구 5.0 275 306 NaN 831 355 493
노원구 6.0 319 34 1.0 498 1451 660
광진구 6.0 661 102 NaN 625 1297 555
동작구 5.0 273 34 1.0 366 962 453
은평구 7.0 271 71 1.0 420 1078 519
강북구 1.0 266 124 NaN 278 495 367
금천구 4.0 271 76 2.0 323 638 288
In [46]:
seoul_count_result.fillna(0, inplace=True)
In [47]:
big_info['F'], big_info['N'], big_info['O'], big_info['P'],big_info['Q'] , big_info['R'], big_info['S']
Out[47]:
('생활서비스', '관광/여가/오락', '숙박', '스포츠', '음식', '학문/교육', '의료')
In [48]:
seoul_count_result.columns = ['생활서비스', '관광/여가/오락', '숙박', '스포츠', '음식', '학문/교육', '의료'] 
In [49]:
seoul_count_result.plot(kind='bar', grid='True', figsize=(20, 5))
Out[49]:
<matplotlib.axes._subplots.AxesSubplot at 0x10c543470>
In [50]:
seoul_count_result['계'] = seoul_count_result.apply(np.sum, axis=1)
seoul_count_result['생활서비스 비율']=seoul_count_result['생활서비스']/seoul_count_result['계'] * 100
seoul_count_result['관광/여가/오락 비율']=seoul_count_result['관광/여가/오락']/seoul_count_result['계'] * 100
seoul_count_result['숙박 비율']=seoul_count_result['숙박']/seoul_count_result['계'] * 100
seoul_count_result['스포츠 비율']=seoul_count_result['스포츠']/seoul_count_result['계'] * 100
seoul_count_result['음식 비율']=seoul_count_result['음식']/seoul_count_result['계'] * 100
seoul_count_result['학문/교육 비율']=seoul_count_result['학문/교육']/seoul_count_result['계'] * 100
seoul_count_result['의료 비율']=seoul_count_result['의료']/seoul_count_result['계'] * 100
seoul_count_result
Out[50]:
생활서비스 관광/여가/오락 숙박 스포츠 음식 학문/교육 의료 생활서비스 비율 관광/여가/오락 비율 숙박 비율 스포츠 비율 음식 비율 학문/교육 비율 의료 비율
강남구 8.0 763 149 8.0 1945 2589 1991 7453.0 0.107339 10.237488 1.999195 0.107339 26.096874 34.737690 26.714075
강동구 6.0 457 95 1.0 502 1404 627 3092.0 0.194049 14.780078 3.072445 0.032342 16.235446 45.407503 20.278137
중랑구 4.0 362 106 1.0 283 837 454 2047.0 0.195408 17.684416 5.178310 0.048852 13.825110 40.889106 22.178798
서대문구 4.0 207 81 0.0 662 639 450 2043.0 0.195791 10.132159 3.964758 0.000000 32.403328 31.277533 22.026432
관악구 9.0 534 110 0.0 495 1232 570 2950.0 0.305085 18.101695 3.728814 0.000000 16.779661 41.762712 19.322034
마포구 5.0 267 123 0.0 1273 832 543 3043.0 0.164312 8.774236 4.042064 0.000000 41.833717 27.341439 17.844233
도봉구 2.0 187 23 1.0 284 892 367 1756.0 0.113895 10.649203 1.309795 0.056948 16.173121 50.797267 20.899772
양천구 4.0 302 19 2.0 408 1630 462 2827.0 0.141493 10.682703 0.672091 0.070746 14.432260 57.658295 16.342412
성동구 0.0 261 92 2.0 444 684 470 1953.0 0.000000 13.364055 4.710701 0.102407 22.734255 35.023041 24.065540
서초구 9.0 491 86 6.0 1147 1603 1024 4366.0 0.206138 11.245992 1.969766 0.137426 26.271186 36.715529 23.453962
강서구 9.0 474 101 4.0 577 1206 596 2967.0 0.303337 15.975733 3.404112 0.134816 19.447253 40.647118 20.087631
구로구 3.0 391 109 1.0 521 1057 434 2516.0 0.119237 15.540541 4.332273 0.039746 20.707472 42.011129 17.249603
용산구 3.0 251 108 1.0 603 449 334 1749.0 0.171527 14.351058 6.174957 0.057176 34.476844 25.671812 19.096627
종로구 2.0 283 230 1.0 1000 525 418 2459.0 0.081334 11.508743 9.353396 0.040667 40.666938 21.350142 16.998780
동대문구 5.0 312 140 0.0 384 816 882 2539.0 0.196928 12.288302 5.513982 0.000000 15.124065 32.138637 34.738086
송파구 4.0 523 85 2.0 766 1520 866 3766.0 0.106213 13.887414 2.257037 0.053107 20.339883 40.361126 22.995220
영등포구 9.0 454 210 2.0 902 857 650 3084.0 0.291829 14.721141 6.809339 0.064851 29.247730 27.788586 21.076524
성북구 5.0 299 126 2.0 568 1172 652 2824.0 0.177054 10.587819 4.461756 0.070822 20.113314 41.501416 23.087819
중구 5.0 275 306 0.0 831 355 493 2265.0 0.220751 12.141280 13.509934 0.000000 36.688742 15.673289 21.766004
노원구 6.0 319 34 1.0 498 1451 660 2969.0 0.202088 10.744358 1.145167 0.033681 16.773324 48.871674 22.229707
광진구 6.0 661 102 0.0 625 1297 555 3246.0 0.184843 20.363524 3.142329 0.000000 19.254467 39.956870 17.097967
동작구 5.0 273 34 1.0 366 962 453 2094.0 0.238777 13.037249 1.623687 0.047755 17.478510 45.940783 21.633238
은평구 7.0 271 71 1.0 420 1078 519 2367.0 0.295733 11.449092 2.999578 0.042248 17.743980 45.542881 21.926489
강북구 1.0 266 124 0.0 278 495 367 1531.0 0.065317 17.374265 8.099282 0.000000 18.158067 32.331809 23.971261
금천구 4.0 271 76 2.0 323 638 288 1602.0 0.249688 16.916355 4.744070 0.124844 20.162297 39.825218 17.977528
In [51]:
seoul_count_result[['생활서비스 비율', '관광/여가/오락 비율', '숙박 비율', '스포츠 비율', '음식 비율', '학문/교육 비율', '의료 비율']]
Out[51]:
생활서비스 비율 관광/여가/오락 비율 숙박 비율 스포츠 비율 음식 비율 학문/교육 비율 의료 비율
강남구 0.107339 10.237488 1.999195 0.107339 26.096874 34.737690 26.714075
강동구 0.194049 14.780078 3.072445 0.032342 16.235446 45.407503 20.278137
중랑구 0.195408 17.684416 5.178310 0.048852 13.825110 40.889106 22.178798
서대문구 0.195791 10.132159 3.964758 0.000000 32.403328 31.277533 22.026432
관악구 0.305085 18.101695 3.728814 0.000000 16.779661 41.762712 19.322034
마포구 0.164312 8.774236 4.042064 0.000000 41.833717 27.341439 17.844233
도봉구 0.113895 10.649203 1.309795 0.056948 16.173121 50.797267 20.899772
양천구 0.141493 10.682703 0.672091 0.070746 14.432260 57.658295 16.342412
성동구 0.000000 13.364055 4.710701 0.102407 22.734255 35.023041 24.065540
서초구 0.206138 11.245992 1.969766 0.137426 26.271186 36.715529 23.453962
강서구 0.303337 15.975733 3.404112 0.134816 19.447253 40.647118 20.087631
구로구 0.119237 15.540541 4.332273 0.039746 20.707472 42.011129 17.249603
용산구 0.171527 14.351058 6.174957 0.057176 34.476844 25.671812 19.096627
종로구 0.081334 11.508743 9.353396 0.040667 40.666938 21.350142 16.998780
동대문구 0.196928 12.288302 5.513982 0.000000 15.124065 32.138637 34.738086
송파구 0.106213 13.887414 2.257037 0.053107 20.339883 40.361126 22.995220
영등포구 0.291829 14.721141 6.809339 0.064851 29.247730 27.788586 21.076524
성북구 0.177054 10.587819 4.461756 0.070822 20.113314 41.501416 23.087819
중구 0.220751 12.141280 13.509934 0.000000 36.688742 15.673289 21.766004
노원구 0.202088 10.744358 1.145167 0.033681 16.773324 48.871674 22.229707
광진구 0.184843 20.363524 3.142329 0.000000 19.254467 39.956870 17.097967
동작구 0.238777 13.037249 1.623687 0.047755 17.478510 45.940783 21.633238
은평구 0.295733 11.449092 2.999578 0.042248 17.743980 45.542881 21.926489
강북구 0.065317 17.374265 8.099282 0.000000 18.158067 32.331809 23.971261
금천구 0.249688 16.916355 4.744070 0.124844 20.162297 39.825218 17.977528
In [52]:
seoul_count_result.iloc[:,8:].sort_values('관광/여가/오락 비율', ascending=False).plot(kind='bar', grid='True', figsize=(20, 5))
Out[52]:
<matplotlib.axes._subplots.AxesSubplot at 0x1307e2978>
In [530]:
seoul_count_result.iloc[:,:7].sort_values('관광/여가/오락', ascending=False).plot(kind='bar', grid='True', figsize=(20, 5))
Out[530]:
<matplotlib.axes._subplots.AxesSubplot at 0x18e55a668>
In [59]:
for i in range(len(seoul_count_result)):
    name = seoul_count_result.iloc[i,:7].name
    label = list(seoul_count_result.iloc[i,:7].index)
    size = [int(x) for x in list(seoul_count_result.iloc[i,:7])]
    color = ['#d6ecfa', '#f15c5c', '#a8dba8', '#6d819c', '#c72e45', '#f9a11b', '#ede574']
    plt.pie(size, labels=label, colors=color, autopct='%1.1f%%')
    plt.title(name)
    plt.axis('equal')
    plt.show()
In [66]:
seoul_count_result = seoul_count_result.reset_index()

6. 내맘대로 기준, 상가건수기준 유흥시설 많은 비율top5¶

In [70]:
seoul_count_result.sort_values('관광/여가/오락 비율', ascending=False)['index'][:10]
Out[70]:
20     광진구
4      관악구
2      중랑구
23     강북구
24     금천구
10     강서구
11     구로구
1      강동구
16    영등포구
12     용산구
Name: index, dtype: object


반응형

댓글