5. 상권_데이터셋

2024. 12. 19. 10:04LLM(Large Language Model)의 기초

1. 공공데이터
* 공공데이터(data.go.kr)는 대한민국 정부에서 운영하는 공공데이터 포털로, 공공기관이 보유한 다양한 데이터를 국민과 기업, 개발자 등에게 개방하여 활용할 수 있도록 제공하는 플랫폼입니다.
* 데이터를 파일 형식(Excel, CSV 등)으로 다운로드하거나, API 형태로 실시간 연동하여 사용할 수 있습니다.

 

1. import 해준다

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

 

2. 데이터를 구글 드라이브에 붙혀서 경로 복사후 자기 경로로 맞춰준다

shop = pd.read_csv('/content/drive/MyDrive/KDT 시즌 4/10. 데이터분석/Data/소상공인시장진흥공단_상가(상권)정보_서울_202409.csv', low_memory=False) #low_memory는 메모리를 적게 불러옴
shop

-->

 

3. 파일을 붙히면 돌려본다

데이터가 커서 여기서 https://www.data.go.kr/data/15083033/fileData.do 다운로드 받아서 압축푸시면 됩니다.

 

예시 1)

pd.set_option('display.max_columns', 40) # 최대로 40개의 열로 가져와서 보여줌
shop

-->

 

예시 2)

shop.info()  #데이터 확인
-->
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 466022 entries, 0 to 466021
Data columns (total 39 columns):
 #   Column     Non-Null Count   Dtype  
---  ------     --------------   -----  
 0   상가업소번호     466022 non-null  object 
 1   상호명        466022 non-null  object 
 2   지점명        11406 non-null   object 
 3   상권업종대분류코드  466022 non-null  object 
 4   상권업종대분류명   466022 non-null  object 
 5   상권업종중분류코드  466022 non-null  object 
 6   상권업종중분류명   466022 non-null  object 
 7   상권업종소분류코드  466022 non-null  object 
 8   상권업종소분류명   466022 non-null  object 
 9   표준산업분류코드   465931 non-null  object 
 10  표준산업분류명    465931 non-null  object 
 11  시도코드       466022 non-null  int64  
 12  시도명        466022 non-null  object 
 13  시군구코드      466022 non-null  int64  
 14  시군구명       466022 non-null  object 
 15  행정동코드      466022 non-null  int64  
 16  행정동명       466022 non-null  object 
 17  법정동코드      466022 non-null  int64  
 18  법정동명       466022 non-null  object 
 19  지번코드       466022 non-null  int64  
 20  대지구분코드     466022 non-null  int64  
 21  대지구분명      466022 non-null  object 
 22  지번본번지      466022 non-null  int64  
 23  지번부번지      389662 non-null  float64
 24  지번주소       466022 non-null  object 
 25  도로명코드      465993 non-null  float64
 26  도로명        466022 non-null  object 
 27  건물본번지      465992 non-null  float64
 28  건물부번지      61598 non-null   float64
 29  건물관리번호     465993 non-null  object 
 30  건물명        221552 non-null  object 
 31  도로명주소      466022 non-null  object 
 32  구우편번호      466022 non-null  int64  
 33  신우편번호      466022 non-null  int64  
 34  동정보        0 non-null       float64
 35  층정보        322768 non-null  object 
 36  호정보        0 non-null       float64
 37  경도         466022 non-null  float64
 38  위도         466022 non-null  float64
dtypes: float64(8), int64(9), object(22)
memory usage: 138.7+ MB

 

예시 3)

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

 

예시 4)

# 보여줄 컬럼명 정의 후 top으로 보여줌
view_columns = ['상호명', '지점명', '상권업종대분류명', '상권업종중분류명','상권업종소분류명', 
                '시도명', '시군구명', '도로명', '도로명주소',
                '경도', '위도']   
shop = shop[view_columns]
shop.head()

-->

 

예시 5)

shop.isnull().sum()

-->

 

예시 6)

# 설치 후 런타임에 재시작 후 실행한다
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf

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

 

예시 6-1)

plt.rc('font', family='NanumBarunGothic') #폰트를 NanumBarunGothic체를 사용한다는 의미

 

예시 7)

# 산점도 그리기
plt.figure(figsize=(10, 8))  # 그래프 크기 설정
plt.scatter(shop['경도'], shop['위도'])  # 산점도 그리기
plt.xlabel('경도')  # x축 레이블
plt.ylabel('위도')  # y축 레이블
plt.grid(True)  # 그리드 추가
plt.show()  # 그래프 출력

-->

 

예시 8)

len(shop)
-->
466022

 

예시 9)

# 'shop' 데이터프레임에서 '도로명주소' 열의 값이 '서울'로 시작하는 행들을 필터링
filtered_shop = shop.loc[shop['도로명주소'].str.startswith('서울')]

-->

 

예시 10)

# 'shop' 데이터프레임에서 '도로명주소' 열의 값이 '서울'이 아닌 행들을 필터링
shop.loc[~shop['도로명주소'].str.startswith('서울')]

-->

 

2.Seaborn
* Seaborn은 파이썬 데이터 시각화 라이브러리로, Matplotlib을 기반으로 하여 더 간결하고 미려한 그래프를 쉽게 그릴 수 있도록 설계된 도구입니다.
* Seaborn은 기본 스타일이 세련되고 미려하여 추가적인 스타일 설정 없이도 깔끔한 그래프를 그릴 수 있습니다.
> 공식 사이트 : https://seaborn.pydata.org/

 

seaborn: statistical data visualization — seaborn 0.13.2 documentation

seaborn: statistical data visualization

seaborn.pydata.org

 

seaborn을 설치해줍니다.

!pip install seaborn

 

예시 1)

import seaborn as sns
plt.figure(figsize=(14,10))
sns.scatterplot(data=shop, x='경도', y='위도', hue='시군구명')

-->

 

예시 2)

shop.head()

-->

 

예시 3)

shop['상권업종대분류명'].value_counts() #상권업종대분류명의 카운트 수

-->

 

예시 4)

shop_edu = shop[shop['상권업종대분류명'] == '교육'] #상권업종대분류명에서 교육인 경우 보여줌
shop_edu

-->

 

예시 5)

shop_edu.shape #교육의 모양
-->
(26186, 11)

 

예시 6)

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

-->

 

예시 7)

shop_edu_etc = shop_edu[shop_edu['상권업종중분류명'] == '기타 교육'] #상권업종중분류명의 기타 교육에 들어가 있는 데이터 추출
shop_edu_etc

-->

 

예시 8)

shop_edu_etc.shape
-->
(15619, 11)

 

예시 9)

plt.figure(figsize=(14,10))
sns.scatterplot(data=shop_edu_etc, x='경도', y='위도', hue='상권업종소분류명')

-->

 

예시 10)

# 상권업종소분류명이 컴퓨터 학원인 데이터를 추출
shop_edu_etc_computer = shop_edu_etc[shop_edu_etc['상권업종소분류명'] == '컴퓨터 학원']
shop_edu_etc_computer

-->

 

예시 11)

shop_edu_etc_computer.shape
-->
(210, 11)

 

예시 12)

plt.figure(figsize=(14, 10))
sns.scatterplot(data=shop_edu_etc_computer, x='경도', y='위도', hue='상권업종소분류명')

-->

 

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

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

 

folium을 설치 해줍니다.

!pip install folium

 

folium을 import 해줍니다.

import folium

 

예시 1)

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).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

-->

 

예시 2)

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

-->

 

예시 3)

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

-->

 

작성중...

# 서울특별시 - 강남구 - 커피전문점
# folium 맵에 표시
shop_coffe_etc = shop_coffe_etc[shop_coffe_etc['상권업종소분류명'] == '커피 전문점']
shop_coffe_etc


data = shop_coffe_etc

coffe_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

 

 

728x90
LIST

'LLM(Large Language Model)의 기초' 카테고리의 다른 글

7. 커피프랜차이즈 이점 전략  (0) 2024.12.23
6.서울시 공공자전거 실시간 대여정보  (0) 2024.12.23
Matplotlib  (4) 2024.12.19
4. Online Retail 데이터셋  (1) 2024.12.18
판다스(Pandas) 2  (4) 2024.12.18