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 |