Bomb Kirby Running
본문 바로가기
데이터 분석

상권별 업종 밀집 통계 예제

by 코낄2 2023. 12. 23.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

shop = pd.read_csv('/content/drive/MyDrive/KDT/데이터분석/데이터/shop_201806_01.csv')
pd.set_option('display.max_columns', 40)

shop.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 499328 entries, 0 to 499327
Data columns (total 39 columns):
 #   Column     Non-Null Count   Dtype  
---  ------     --------------   -----  
 0   상가업소번호     499328 non-null  int64  
 1   상호명        499327 non-null  object 
 2   지점명        66741 non-null   object 
 3   상권업종대분류코드  499328 non-null  object 
 4   상권업종대분류명   499328 non-null  object 
 5   상권업종중분류코드  499328 non-null  object 
 6   상권업종중분류명   499328 non-null  object 
 7   상권업종소분류코드  499328 non-null  object 
 8   상권업종소분류명   499328 non-null  object 
 9   표준산업분류코드   470597 non-null  object 
 10  표준산업분류명    470597 non-null  object 
 11  시도코드       499328 non-null  int64  
 12  시도명        499328 non-null  object 
 13  시군구코드      499328 non-null  int64  
 14  시군구명       499328 non-null  object 
 15  행정동코드      499328 non-null  int64  
 16  행정동명       499328 non-null  object 
 17  법정동코드      499328 non-null  int64  
 18  법정동명       499328 non-null  object 
 19  지번코드       499328 non-null  int64  
 20  대지구분코드     499328 non-null  int64  
 21  대지구분명      499328 non-null  object 
 22  지번본번지      499328 non-null  int64  
 23  지번부번지      412776 non-null  float64
 24  지번주소       499328 non-null  object 
 25  도로명코드      499328 non-null  int64  
 26  도로명        499328 non-null  object 
 27  건물본번지      499328 non-null  int64  
 28  건물부번지      64827 non-null   float64
 29  건물관리번호     499328 non-null  object 
 30  건물명        225178 non-null  object 
 31  도로명주소      499328 non-null  object 
 32  구우편번호      499328 non-null  int64  
 33  신우편번호      499319 non-null  float64
 34  동정보        43908 non-null   object 
 35  층정보        308195 non-null  object 
 36  호정보        71972 non-null   object 
 37  경도         499328 non-null  float64
 38  위도         499328 non-null  float64
dtypes: float64(5), int64(11), object(23)
memory usage: 148.6+ MB
  • 필요한 컬럼만 다시 저장
# shop.columns
view_columns = ['상호명','지점명','상권업종대분류명','상권업종중분류명','상권업종소분류명','시도명','시군구명','지번주소','도로명주소','도로명','경도','위도']
shop = shop[view_columns]
shop.head()

  • null값 확인
shop.isnull().sum()

상호명              1
지점명         432587
상권업종대분류명         0
상권업종중분류명         0
상권업종소분류명         0
시도명              0
시군구명             0
지번주소             0
도로명주소            0
도로명              0
경도               0
위도               0
dtype: int64
# 한글 사용할 때!
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
 
plt.rc('font', family = 'NanumBarunGothic')
shop.plot.scatter(x= '경도', y='위도', grid=True, figsize=(6,8))

  • 서울 데이터만 남기기. str.startswith()
# 도로명 주소 컬럼이 '서울'로 시작하는 사람
shop_seoul = shop.loc[shop['도로명주소'].str.startswith('서울')]

# ~ 붙이면 반대
shop_except_seoul = shop.loc[~shop['도로명주소'].str.startswith('서울')]
shop_seoul.plot.scatter(x='경도', y='위도', grid = True, figsize=(10,8))

# 시군구명 별로 다르게 표시
plt.figure(figsize=(14, 10))
sns.scatterplot(data = shop_seoul, x='경도', y='위도', hue='시군구명')

shop_seoul['상권업종대분류명'].value_counts()

음식          112894
소매          106490
생활서비스        57266
학문/교육        27717
의료           15299
부동산          13164
관광/여가/오락      9536
숙박            2790
스포츠            112
Name: 상권업종대분류명, dtype: int64
shop_seoul_edu= shop_seoul[shop_seoul['상권업종대분류명'] == '학문/교육']
shop_seoul_edu.shape
// (27717, 12)
plt.figure(figsize=(14, 10))
sns.scatterplot(data = shop_seoul_edu, x='경도', y='위도', hue='상권업종중분류명')

shop_seoul_edu_computer = shop_seoul_edu[shop_seoul_edu['상권업종중분류명'] =='학원-컴퓨터']
shop_seoul_edu_computer.shape
// (215, 12)

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

✔️ folium

Folium은 Python에서 지리적 데이터를 시각화하기 위한 라이브러리 중 하나입니다. 이 라이브러리는 Leaflet.js를 기반으로 하며, 인터랙티브하게 지도를 생성하고 표시하는 기능을 제공합니다. Folium을 사용하면 웹 기반 지도를 생성하고 이를 사용자에게 제공할 수 있습니다.

https://python-visualization.github.io/folium/latest/

 

Folium — Folium 0.1.dev1+g0f4d57f documentation

Folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the Leaflet.js library. Manipulate your data in Python, then visualize it in a Leaflet map via Folium. Concepts Folium makes it easy to visualize data that

python-visualization.github.io

설치 : !pip install folium

import folium

# folium.Map(location=[위도, 경도], zoom_start=배율, ...)
# Marker(): location 속성으로 지정한 위치에 마커를 생성
# popup(): 마커를 클릭했을 때, 표시 할 문자열 생성
# add_to(): 작성된 마커를 지도에 추가

map_folium = folium.Map(location = [37.500043085219545, 127.03557801473566], zoom_start = 17)
popup = folium.Popup('코리아IT아카데미', max_width=200)
folium.Marker(location=[37.500043085219545, 127.03557801473566], popup=popup).add_to(map_folium)
map_folium

# 지도: 37.56652479270633, 126.9779129116262
# 서울특별시청: 37.56652479270633, 126.9779129116262
# 덕수궁: 37.56585320879458, 126.97514572197248
# 서울지방경찰청: 37.57504045678939, 126.97195576938117
# 광화문: 37.57617987638928, 126.97694467807803
# 영풍문고-종로본점: 37.56999947440024, 126.98228391170936
from folium.features import CustomIcon

icon_image = '/content/2542067_ambulance_emergency_light_police_icon.png'
icon = CustomIcon(icon_image, icon_size=(45, 45))

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(color='red', icon='star')).add_to(map_folium)
popup = folium.Popup('덕수궁', max_width=200)
folium.Marker(location=[37.56585320879458, 126.97514572197248], popup=popup,
              icon=folium.Icon(color='pink', icon='ok')).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= 50, color='red', fill_color='#EC4074').add_to(map_folium)

data = shop_seoul_edu_computer
edu_map = folium.Map(location=[data['위도'].mean(), data['경도'].mean()], zoom_start=12)
for i in data.index:
    # 코리아IT아카데미 - 서울 강남구 역삼동 ...
    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(edu_map)

edu_map

data1 = shop_seoul.loc[shop_seoul['상권업종중분류명']=='커피점/카페',:]
data2 = data1.loc[data1['시군구명']=='강남구',:]

coffee_map = folium.Map(location=[data2['위도'].mean(), data2['경도'].mean()], zoom_start=14)
for i in data2.index:
    # 코리아IT아카데미 - 서울 강남구 역삼동 ...
    coffee_name = data2.loc[i, '상호명'] + ' - ' + data2.loc[i, '도로명주소']
    popup = folium.Popup(coffee_name, max_width=500)
    folium.Marker(location=[data2.loc[i, '위도'], data2.loc[i, '경도']], popup=popup).add_to(coffee_map)

coffee_map

'데이터 분석' 카테고리의 다른 글

boxplot / 따릉이 실시간 데이터 예제  (0) 2023.12.24
가상 쇼핑몰 데이터 예제  (0) 2023.12.16
Matplotlib  (0) 2023.12.10
판다스3  (0) 2023.12.08
판다스2  (0) 2023.12.08