1. 공공데이터
공공데이터(data.go.kr)는 대한민국 정부에서 운영하는 공공데이터 포털로, 공공기관이 보유한 다양한 데이터를 국민과 기업, 개발자 등에게 개방하여 활용할 수 있도록 제공하는 플랫폼입니다. 데이터를 파일 형식(Excel, CSV 등)으로 다운로드하거나, API 형태로 실시간 연동하여 사용할 수 있습니다.
1. "소상공인시장진흥공단_상가(상권)정보"을 검색 후 압축파일을 다운로드합니다.
2. 압축을 해제하고 "서울" csv 데이터를 구글드라이브에 업로드합니다.
https://www.data.go.kr/data/15083033/fileData.do
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
shop = pd.read_csv('/content/drive/MyDrive/KDT 시즌4/9. LLM 서비스 기초/10.데이터 분석/Data/소상공인시장진흥공단_상가(상권)정보_서울_202409.csv', low_memory=False)
shop
#low_memory=False 메모리 불러오는거 문제 없게
pd.set_option('display.max_columns', 40)
shop
컬럼을 다 볼수 있게 max_columns 40으로 조정
shop.info()
shop.columns
# Index(['상가업소번호', '상호명', '지점명', '상권업종대분류코드', '상권업종대분류명', '상권업종중분류코드',
# '상권업종중분류명', '상권업종소분류코드', '상권업종소분류명', '표준산업분류코드', '표준산업분류명', '시도코드',
# '시도명', '시군구코드', '시군구명', '행정동코드', '행정동명', '법정동코드', '법정동명', '지번코드',
# '대지구분코드', '대지구분명', '지번본번지', '지번부번지', '지번주소', '도로명코드', '도로명', '건물본번지',
# '건물부번지', '건물관리번호', '건물명', '도로명주소', '구우편번호', '신우편번호', '동정보', '층정보',
# '호정보', '경도', '위도'],
# dtype='object')
view_columns = ['상호명', '지점명', '상권업종대분류명', '상권업종중분류명','상권업종소분류명', '시도명', '시군구명', '도로명', '도로명주소','경도', '위도']
shop = shop[view_columns]
shop.head()
shop.isnull().sum()
!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('경도') # x축 레이블
plt.ylabel('위도') # y축 레이블 #x축에는 경도 y축에는 위도
plt.grid(True) # 그리드 추가
plt.show() # 그래프 출력
맵을 보면 모양으로 봐서는 서울의 소상공인 데이터 셋인것 같다
len(shop)
# 466022
shop.loc[shop['도로명주소'].str.startswith('서울')]
shop.loc[~shop['도로명주소'].str.startswith('서울')]
도로명주소가 서울로 시작하지 않는 값이 혹시나 있나 확인
없음
2. Seaborn
Seaborn은 파이썬 데이터 시각화 라이브러리로, Matplotlib을 기반으로 하여 더 간결하고 미려한 그래프를 쉽게 그릴 수 있도록 설계된 도구입니다. Seaborn은 기본 스타일이 세련되고 미려하여 추가적인 스타일 설정 없이도 깔끔한 그래프를 그릴 수 있습니다.
pip install seaborn
import seaborn as sns
plt.figure(figsize=(14, 10))
sns.scatterplot(data=shop, x='경도', y='위도', hue='시군구명') # hue='시군구명' 범례 설정
서울에는 컴퓨터 학원이 몇개나 있는지 한번 찾아서 맵에 그려보도록 하자
shop['상권업종대분류명'].value_counts()
shop_edu = shop[shop['상권업종대분류명'] == '교육']
shop_edu
shop_edu_etc = shop_edu[shop_edu['상권업종중분류명'] == '기타 교육']
shop_edu_etc
shop_edu_etc_computer = shop_edu_etc[shop_edu_etc['상권업종소분류명'] == '컴퓨터 학원']
shop_edu_etc_computer
plt.figure(figsize=(14, 10))
sns.scatterplot(data=shop_edu_etc_computer, x='경도', y='위도', hue='상권업종소분류명')
3. Folium
Folium은 파이썬에서 대화형 지도(interactive map)를 생성할 수 있는 라이브러리입니다. 특히, 지리 데이터(Geospatial Data) 시각화에 최적화되어 있으며, 간단한 코드로 복잡한 지도 기능을 구현할 수 있도록 도와줍니다.
pip install folium
import folium
map_folium = folium.Map(location=[37.56652479270633, 126.9779129116262], zoom_start=15)
#Map 메소드를 이용해서 로케이션에 위도 경도를 넣고 지도 확대 수치를 zoom_start 여기에 넣어서 저장
popup = folium.Popup('서울특별시청', max_width=200)
#마커를 클릭했을때 뜨는 메세지를 popup에 저장 메세지의 가로 사이즈 설정
folium.Marker(location=[37.56652479270633, 126.9779129116262], popup=popup).add_to(map_folium)
#마커 (핀)을 찍어줌 지도 안에 포함된 위경도를 설정해서 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
저 위에 있는 칙칙한 핀들도 바꿀수 있다 한번 바꿔보자
#마커 바꾸는 방법
icon = folium.CustomIcon('/content/police.png',icon_size=(48,48))
#아이콘 바꾸기 icon=folium.Icon(icon='star',color='red')
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
edu_map = folium.Map(location=[data['위도'].mean(),data['경도'].mean()],zoom_start=12)
for i in data.index:
edu_name = data.loc[i,'상호명'] + " - " + data.loc[i,'도로명주소']
# print(edu_name)
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
아까 컴퓨터 학원을 분류해 낸걸로 지도에 핀을 찍어보자
'인공지능 > 데이터분석' 카테고리의 다른 글
커피 프랜차이즈의 입점전략 - 스타벅스 정보 크롤링 (0) | 2025.01.24 |
---|---|
서울시 공공자전거 실시간 대여정보 (0) | 2025.01.24 |
online Retail 데이터셋 - 캐글 (0) | 2025.01.17 |
Matplotlib (2) | 2025.01.17 |
판다스-기초2(데이터프레임 합치기,원-핫 인코딩) (0) | 2025.01.17 |