반응형
심심해서 하는 내맘대로 서울상가 데이터 탐색기
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]:
In [4]:
data1['도로명주소'].str.split(' ', n=2)[0]
Out[4]:
In [5]:
data1['시'], data1['구'], data1['상세주소'] = data1['도로명주소'].str.split(' ', n=2).str
In [6]:
data1.tail(3)
Out[6]:
In [7]:
seoul_data = data1[data1['시']=='서울특별시']
seoul_data.shape
Out[7]:
2. 상권정보업종코드를 분석하여 문화, 유흥과 관련된 코드를 알아내자¶
In [8]:
code = pd.read_csv('./소상공인시장진흥공단_상가업소정보_201803/상권정보업종코드집_201512.csv', encoding='cp949')
In [9]:
code.head(3)
Out[9]:
In [10]:
code_name = list(set(code['업종대분류명']))
print(code_name)
In [11]:
for i in code_name:
tmp = list(code['업종소분류명'][code['업종대분류명']==i])
print("{}, {}개".format(i, len(tmp)))
In [12]:
code[code['업종소분류명']=='목욕업-찜질방'] #F09
Out[12]:
In [13]:
code[code['업종소분류명'].str.contains('카페')] # Q12 Q09
Out[13]:
In [14]:
code[code['업종소분류명']=='관광/유흥주점'] #Q09
Out[14]:
In [15]:
print(code['업종중분류명'][code['업종대분류명']=='학문/교육'].unique())
print(code['업종중분류명'][code['업종대분류명']=='관광/여가/오락'].unique())
print(code['업종중분류명'][code['업종대분류명']=='스포츠'].unique())
print(code['업종중분류명'][code['업종대분류명']=='의료'].unique())
print(code['업종중분류명'][code['업종대분류명']=='숙박'].unique())
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)
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)
Out[18]:
4. 상가 업종 정보에서 우리가 원하는 업종소분류? 중분류들만 골라내보자¶
- seoul_data: 서울지역 상가정보
- code_df: 업종코드
In [19]:
seoul_data.head(3)
Out[19]:
In [20]:
code_df.head(3)
Out[20]:
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]:
In [25]:
seoul_data.columns
Out[25]:
4-2. 관련 없는 컬럼명은 다 지워주자¶
In [26]:
seoul_data_result = seoul_data[['상호명','상권업종대분류코드','상권업종중분류코드', '상권업종소분류코드','경도', '위도', '시', '구', '상세주소' ]]
seoul_data_result.head(3)
Out[26]:
In [28]:
seoul_data_result.shape, seoul_data_result[seoul_data_result['상권업종소분류코드'].isin(list(small_info.keys()))].shape
# 서울은 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 다 놀이시설과 병원..기타등등이었던것임..ㅂㄷ
Out[28]:
5. 해당되는 분류코드가 얼마나 존재하는지 확인해볼 거다¶
- 소분류코드: 354
- 중분류코드: 41
- 대분류: 7
In [29]:
len(small_info), len(middle_info), len(big_info)
Out[29]:
5-1. 가장 가지수가 적은 대분류 부터 가즈아¶
In [30]:
seoul_data_result.head(3)
Out[30]:
In [31]:
big = list(big_info.keys())
big
Out[31]:
In [32]:
seoul_data_count = seoul_data_result.groupby(['구', '상권업종대분류코드']).count()
In [33]:
seoul_data_count = seoul_data_count[['상호명']]
seoul_data_count.T
Out[33]:
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]:
In [43]:
seoul_gu = list(seoul_data_result['구'].unique())
len(seoul_gu)
Out[43]:
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]:
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]:
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]:
In [51]:
seoul_count_result[['생활서비스 비율', '관광/여가/오락 비율', '숙박 비율', '스포츠 비율', '음식 비율', '학문/교육 비율', '의료 비율']]
Out[51]:
In [52]:
seoul_count_result.iloc[:,8:].sort_values('관광/여가/오락 비율', ascending=False).plot(kind='bar', grid='True', figsize=(20, 5))
Out[52]:
In [530]:
seoul_count_result.iloc[:,:7].sort_values('관광/여가/오락', ascending=False).plot(kind='bar', grid='True', figsize=(20, 5))
Out[530]:
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]:
반응형
'Project > 데이터 가지고 놀기' 카테고리의 다른 글
[League of Legends] 2018 Spring 경기 (1) - 진영별 승리 (0) | 2018.09.17 |
---|---|
[Seoul Store] 내맘대로 하는 서울상가 데이터 탐색기 (2) (0) | 2018.07.16 |
[서울시 도서관] 서울시 도서관 개수 시각화 (0) | 2018.07.11 |
pixel-art :: openCV 기초 (4) - 이미지 임계처리 (1) | 2018.03.06 |
pixel-art :: openCV 기초 (3) - 이미지 연산 (0) | 2018.03.06 |
댓글