카테고리 없음

소상공인시장진흥공단_상가정보 DataSet

dldbwls0818 2025. 1. 29. 04:03

※ 데이터 분석보다는 Seaborn과 Folium을 사용 해보는 것에 초점을 뒀습니다.

1. 공공데이터

- 공공데이터는 대한민국 정부에서 운영하는 공공데이터 포털로, 공공기관이 보유한 다양한 데이터를 국민과 기업, 개발자 등에게 개방하여 활용할 수 있도록 제공하는 플랫폼입니다.

- 데이터를 파일 형식(Excel, CSV 등)으로 다운로드 하거나, API 형태로 실시간 연동하여 사용할 수 있습니다.

 

2. 데이터 셋 확인

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# low_memory = False : 너무 큰 데이터라면 사용함
shop = pd.read_csv('/content/drive/MyDrive/(상위폴더1)/(상위폴더2)/Data/소상공인시장진흥공단_상가(상권)정보_서울_202409.csv', low_memory=False)
shop
# 컬럼 수가 많아서 set_option을 통해 40개까지 볼 수 있도록 조절
pd.set_option('display.max_columns', 40)
shop.info()

shop.columns

# 이번 데이터 분석에 필요한 컬럼들만 사용하기
view_columns = ['상호명', '지점명', '상권업종대분류명', '상권업종중분류명', '상권업종소분류명', '시도명', '시군구명', '도로명', '도로명주소', '경도', '위도']
shop = shop[view_columns]
shop.head()

# 결측값 개수 확인
shop.isnull().sum()

 

3. Seaborn

- Seaborn은 파이썬 데이터 시각화 라이브러리로, Matplotlib을 기반으로 하여 더 간결하고 미려한 그래프를 쉽게 그릴 수 있도록 설계된 도구입니다.


#Seaborn 라이브러리 설치 및 사용

!pip install seaborn
import seaborn as sns

 

#pyplot 한글 설정

# 이전 포스팅에 했던 pyplot 한글 지원 테크닉
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf

plt.rc('font', family='NanumBarunGothic')

# 산점도 그리기
plt.figure(figsize=(10,8))
plt.scatter(shop['경도'], shop['위도'])
plt.xlabel('경도')
plt.ylabel('위도')
# 격자 무늬
plt.grid(True)
plt.show()
# 서울로 시작하지 않은 문자열이 있는지 확인
shop.loc[~shop['도로명주소'].str.startswith('서울')]

 

※ plt로 그렸던 산점도보다 간결하고 깔끔하게 그릴 수 있습니다.

plt.figure(figsize=(14,10))
# data에는 DataFrame이 들어가고 hue는 범례(반드시 있는 컬럼으로 해야함)
sns.scatterplot(data=shop, x='경도', y='위도', hue='시군구명')

 

# 교육으로 대분류 되어있는 데이터들 뽑기
shop_edu = shop[shop['상권업종대분류명'] == '교육']
shop_edu.shape

plt.figure(figsize=(14,10))
sns.scatterplot(data=shop_edu, x='경도', y='위도', hue='상권업종대분류명')
# 기타 교육으로 중분류 되어있는 데이터들 뽑기(shop_edu에서)
shop_edu_etc = shop_edu[shop_edu['상권업종중분류명'] == '기타 교육']
shop_edu_etc.shape

plt.figure(figsize=(14,10))
sns.scatterplot(data=shop_edu_etc, x='경도', y='위도', hue='상권업종중분류명')
# 컴퓨터 학원으로 소분류 되어있는 데이터들 뽑기
shop_edu_etc_computer = shop_edu_etc[shop_edu_etc['상권업종소분류명'] == '컴퓨터 학원']
shop_edu_etc_computer.shape

plt.figure(figsize=(14,10))
# data에는 df이 들어가고 hue는 범례(반드시 있는 컬럼으로 해야함)
sns.scatterplot(data=shop_edu_etc_computer, x='경도', y='위도', hue='상권업종소분류명')

 

4. Folium 

- Folium은 파이썬에서 대화형 지도(interactive map)를 생성할 수 있는 라이브러리 입니다.

- 특히, 지리 데이터(Geospatial Data) 시각화에 최적화 되어있으며, 간단한 코드로 복잡한 지도 기능을 구현할 수 있도록 도와줍니다.

 

#Folium라이브러리 설치 및 사용

!pip install folium
import folium

 

※ 입력값은 정보 확인 후 입력하였습니다.

# 최초 지도의 중앙 경도, 위도 값을 설정 후 확대 정도를 설정함 
map_folium = folium.Map(location=[37.56652479270633, 126.9779129116262], zoom_start=15)

# popup : 지도에 핀을 꽂을 수 있도록 함
popup = folium.Popup('서울특별시청', max_width=200)
folium.Marker(location=[37.56652479270633, 126.9779129116262], popup=popup).add_to(map_folium)

popup = folium.Popup('덕수궁', max_width=200)
folium.Marker(location=[37.56585320879458, 126.97514572197248], popup=popup).add_to(map_folium)

popup = folium.Popup('서울지방경찰청', max_width=200)
folium.Marker(location=[37.57504045678939, 126.97195576938117], popup=popup).add_to(map_folium)

popup = folium.Popup('광화문', max_width=200)
folium.Marker(location=[37.57617987638928, 126.97694467807803], popup=popup).add_to(map_folium)

popup = folium.Popup('영풍문고-종로본점', max_width=200)
folium.Marker(location=[37.56999947440024, 126.98228391170936], popup=popup).add_to(map_folium)

map_folium
# 핀(popup)을 커스터마이징 할 수 있는 모듈
from folium.features import CustomIcon

icon = CustomIcon('police.png', icon_size=(48, 48))

map_folium = folium.Map(location=[37.56652479270633, 126.9779129116262], zoom_start=15)
popup = folium.Popup('서울특별시청', max_width=200)
folium.Marker(location=[37.56652479270633, 126.9779129116262], popup=popup, icon=folium.Icon(icon='star', color='red')).add_to(map_folium)

popup = folium.Popup('덕수궁', max_width=200)
folium.Marker(location=[37.56585320879458, 126.97514572197248], popup=popup, icon=folium.Icon(icon='ok', color='pink')).add_to(map_folium)

popup = folium.Popup('서울지방경찰청', max_width=200)
folium.Marker(location=[37.57504045678939, 126.97195576938117], popup=popup, icon=icon).add_to(map_folium)

popup = folium.Popup('광화문', max_width=200)
folium.Marker(location=[37.57617987638928, 126.97694467807803], popup=popup).add_to(map_folium)

# CircleMarker(): 원의 범위를 마커로 설정
popup = folium.Popup('내 땅', max_width=200)
folium.CircleMarker(location=[37.56999947440024, 126.98228391170936], popup=popup, radius=30, color='blue', fill_color='deepskyblue').add_to(map_folium)

map_folium

 

※ 진행중인 데이터 셋을 그려보겠습니다.

data = shop_edu_etc_computer
adu_map = folium.Map(location=[data['위도'].mean(), data['경도'].mean()], zoom_start=12)

for i in data.index :
  edu_name = data.loc[i, '상호명'] + '-' + data.loc[i, '도로명주소']
  popup = folium.Popup(edu_name, max_width=500)
  folium.Marker(location=[data.loc[i, '위도'], data.loc[i, '경도']], popup=popup).add_to(adu_map)

adu_map