티스토리 뷰

 

▶공공 데이터 상권 정보 분석하기

2016년 상권별 업종밀집 통계에 관한 데이터입니다. 다음 링크를 참고했습니다.

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

 

▷필요한 라이브러리 import

import pandas as pd
import numpy as np
import missingno as masno # 코랩이 아니라면 install 해주어야 함
import matplotlib as plt
import matplotlib.pyplot as pyplot
import seaborn as sns

 

▷사용할 데이터 불러오기 + encoding Error

shop_2018_06 pd.read_csv('shop_201806_01.csv', encoding='euc-kr')

+ encoding Error  해결하는 방법

encoding 관련해서 코멘트를 남기자면, 가끔 encoding 속성을 붙이지 않고 실행했을 때 encoding Error가 발생하는 경우가 있습니다.

그랬을 때 어떻게 해결해야 할까요?

우선 해당 csv파일을 우클릭해서 연결프로그램에서 메모장으로 열어줍니다.

메모장이 보이지 않다면 다른 앱 선택을 눌러 메모장을 선택해주시면 됩니다

메모장으로 열었다면 그 다음, 파일 > 다른 이름으로 저장을 눌러줍니다.

다른 이름으로 저장을 눌러주면 다음과 같은 '인코딩'이라는 부분을 확인할 수 있습니다.

이때 저는 ANSI로 되어있었기 때문에 'ms949' 혹은 'euc-kr'로 encoding 속성을 입력해주었습니다.

또 다른 방법으로는 UTF-8로 변경해주고, encoding='UTF-8'로 속성을 입력해주어도 되겠습니다.

 

 

▷데이터의 기본적인 형태 파악하기

① 데이터 shape

shop_2018_06.shape

out::::

(499328, 39)

 

② 데이터 head

shop_2018_06.head() # 상위 5개 행 나타내기

out::::

 

③ 데이터 columns

shop_2018_06_columns # 열 모두 확인하기

out::::

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

 

 

▷필요한 칼럼의 데이터만 가져오기

view_columns = ['상호명','지점명','상권업종대분류명','상권업종중분류명','상권업종소분류명',
                '시도명','시군구명','행정동명','법정동명','지번주소','도로명주소','경도','위도']
                
shop_2018_06[view_columns].head() # 위 칼럼들에 대한 head 정보

out::::

 

 

▷결측치 확인하기

shop_2018_06.insull().sum()

out::::

 

▷결측치 시각화 라이브러리 : missingno

맨 처음에 필요한 라이브러리 import 할 때, import missingno as msno 로 입력했습니다.

msno.matrix(shop_2018_06)

out::::

 

msno.matrix(shop_2018_06[view_columns]) # 우리가 필요한 정보들에게서만 결측치 확인

out::::

 

 

▷위도와 경도 이용해서 그래프에 표현하기

shop_2018_06.plot.scatter(x='경도', y='위도', grid=True, figsize=(12,16))

out::::

지역적으로 몰려있음을 알 수 있음. 서울과 부산을 의미

 

▷서울 데이터 가져오기 : str.startswith()

도로명주소에서 '서울'로 시작하는 데이터들을 가져오면 되겠습니다.

shop_seoul = shop_2018_06.loc[shop_2018_06['도로명주소'].str.startswith('서울')]

 

 

▷서울 데이터 제외하고 가져오기 : ~

~는 제외한다는 의미가 되겠습니다.

shop_except_seoul = shop_2018_06.loc[~shop_2018_06['도로명주소'].str.startswith('서울')]

 

 

▷서울 데이터 시각화

shop_seoul.plot.scatter(x='경도', y='위도', grid=True, figsize=(16,12))

out::::

위도와 경도를 이용했기 때문에 서울 지도와 유사한 모습을 보입니다

 

▷'도로명주소'를 이용해서 '시도', '구군' 파생변수 만들기

shop_2018_06['시도'] = shop_2018_06['도로명주소'].str.split(' ', expand=True)[0]
shop_2018_06['구군'] = shop_seoul['도로명주소'].str.split(' ', expand=True)[1]

즉 ' '띄어쓰기를 기준으로 split 해서 0/1번째를 가져와서 expand=True 하겠다. 즉 바로 저장하겠다는 의미입니다.

 

'시도'와 '구군' 칼럼이 추가 되었기 때문에 shop_seoul 데이터를 다시 저장해주겠습니다.

shop_seoul = shop_2018_06.loc[shop_2018_06['도로명주소'].str.startswith('서울')]

 

▷서울 데이터에서 '구군' 별로 시각화

위에서 시각화 했던 것 처럼 shop_seoul.plot.scatter( x='경도', y='위도', hue='구군') 하게 되면 Error가 발생합니다.

plot에는 범례 속성이 없기 때문에 이번에는 seaborn 라이브러리를 사용합시다.

plt.figure(figsize=(16,12))
sns.scatterplot(data=shop_seoul, x='경도', y='위도', hue='구군')

out:::

 

 

▷서울 데이터를 '상권업종대분류명' 별로 시각화

plt.figure(figsize=(16,12))
sns.scatterplot(data=shop_seoul, x='경도', y='위도', hue='상권업종대분류명')

out::::

 

 

▷서울 데이터를 '상권업종대분류명' 에서 '학문/교육'에 관련된 정보만 시각화

shop_seoul_edu = shop_seoul.loc[shop_seoul['상권업종대분류명']=='학문/교육']

plt.figure(figsize=(16,12))
sns.scatterplot(data=shop_seoul_edu, x='경도', y='위도', hue='상권업종대분류명')

out::::

 

▷'학문/교육'에 속한 '상권업종중분류명' 별로 시각화

plt.figure(figsize=(16,12))
sns.scatterplot(data=shop_seoul_edu, x='경도', y='위도', hue='상권업종중분류명')

out::::

 

▷'학문/교육'에 속한 '상권업종중분류명' 에서 '학원-컴퓨터' 정보만 시각화

shop_seoul_edu_computer = shop_seoul[shop_seoul['상권업종중분류명']=='학원-컴퓨터']

plt.figure(figsize=(16,12))
sns.scatterplot(data=shop_seoul_edu_computer, x='경도', y='위도', hue='상호명')

out::::

 

 

▷folium 라이브러리 이용해서 '학원-컴퓨터' 정보만 시각화

import folium

data= shop_seoul_edu_computer
# 지도 위치를 데이터들의 위도와 경도의 평균으로 잡아줌
edu_map = foliium.Map(location=[data['위도'].mean(), data['경도'].mean()], zoom_start=12)

for i in data.index:
	edu_name = data.loc[i, '상호명'] + '-' + data.loc[i, '도로명주소'] # 아이비씨에듀케이션 - 서울특별시 은평구 불광로 51
	popup = folium.Popup(edu_name, max_width=500)
	folium.Marker(location=[data.loc[i, '위도'], data.loc[i, '경도']], popup=popup).add_to(edu_map)

edu_map

out::::

 


여기까지 상권별 업종 밀집 통계 실습을 해보았습니다 :)

728x90
LIST
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함