Python/데이터분석

2024-05-28 상권별 업종 밀집 통계 데이터

nomad06 2024. 5. 30. 11:24
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
shop = pd.read_csv("/content/drive/MyDrive/KDT/5. 데이터 분석/데이터/shop_201806_01.csv")
shop 

 

pd.set_option("display.max_columns", 40)
shop.head() 

 

shop.info() 
shop.columns
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")
shop.plot.scatter(x="경도", y="위도", grid=True, figsize=(6, 8))
shop.head()
shop_seoul = shop.loc[shop["도로명주소"].str.startswith("서울")]
shop_seoul
shop_except_seoul = shop.loc[~shop["도로명주소"].str.startswith("서울")]
shop_except_seoul
shop_seoul.plot.scatter(x="경도", y="위도", grid=True, figsize=(10, 8))
shop_except_seoul.plot.scatter(x="경도", y="위도", grid=True, figsize=(10, 8))

 

 

seaborn

  • 데이터를 시각화하는 데 사용하는 라이브러리
  • Matplotlib을 기반으로 더 쉽고, 통계적으로 유의미한 그래프를 그릴 수 있도록 다양한 기능을 제공
  • 데이터 분석 및 데이터 사이언스 프로젝트에서 자주 사용
  • seaborn 공식홈페이지
 

리디렉션 알림

 

www.google.com

 

 
import seaborn as sns
plt.figure(figsize=(14, 10))
sns.scatterplot(data=shop_seoul, x="경도", y="위도", hue="시군구명")
shop_seoul.head()
shop_seoul["상권업종대분류명"].value_counts()
shop_seoul_edu = shop_seoul[shop_seoul["상권업종대분류명"] == "학문/교육"]
shop_seoul_edu
shop_seoul_edu.shape
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
shop_seoul_edu_computer.shape
plt.figure(figsize=(14, 15))
sns.scatterplot(data=shop_seoul_edu_computer, x="경도", y="위도", hue="상권업종소분류명")

 

folium

  • leaflet.js 기반으로 만들어진 지도위 데이터를 표현해주는 대표적인 파이썬 시각화 라이브러리
  • folium 공식홈페이지
 

리디렉션 알림

 

www.google.com

!pip install folium
 
import folium
# folium.Map(location=[위도, 경도], zoom_start=배율, ...)
map_folium = folium.Map(location=[37.500043085219545, 127.03557801473566], zoom_start=17)
map_folium
# 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, zoom_start=15
# 서울특별시청: 37.56652479270633, 126.9779129116262
# 덕수궁: 37.56585320879458, 126.97514572197248
# 서울지방경찰청: 37.57504045678939, 126.97195576938117
# 광화문: 37.57617987638928, 126.97694467807803
# 영풍문고-종로본점: 37.56999947440024, 126.98228391170936

map = folium.Map(location=[37.56652479270633, 126.9779129116262], zoom_start=14)
popup = folium.Popup("서울특별시청", max_width=200)
marker = folium.Marker(location=[37.56652479270633, 126.9779129116262], popup=popup).add_to(map)

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

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

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

popup = folium.Popup("영풍문고-종로본점", max_width=200)
marker = folium.Marker(location=[37.56999947440024, 126.98228391170936], popup=popup).add_to(map)
map
from folium.features import CustomIcon

icon_image = "/content/drive/MyDrive/KDT/5. 데이터 분석/데이터/car_police_security_icon.png"
icon = CustomIcon(icon_image, icon_size=(45, 45))

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

popup = folium.Popup("덕수궁", max_width=200)
marker = folium.Marker(location=[37.56585320879458, 126.97514572197248], popup=popup,
                       icon=folium.Icon(icon="ok", color="blue")).add_to(map)

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

popup = folium.Popup("광화문", max_width=200)
marker = folium.Marker(location=[37.57617987638928, 126.97694467807803], popup=popup,
                       icon=folium.Icon(icon="?", color="white")).add_to(map)

# CircleMarker(): 원의 범위를 마커로 설정
popup = folium.Popup("영풍문고-종로본점_범위", max_width=200)
marker = folium.CircleMarker(location=[37.56999947440024, 126.98228391170936], popup=popup,
                       radius=30, color="red", fill_color="#ec4074").add_to(map)
map

 

문제

  • shop_seoul_edu_computer 데이터프레임에 있는 모든 데이터를 지도에 표기
  • 단 일반 마커로 표기하며 클릭하면 "상호명-주소" 형태의 팝업을 보여줌
def map_show(data):
  map = folium.Map(location=[37.56652479270633, 126.9779129116262], zoom_start=12)

  for i in range(data.shape[0]):
    y = data["경도"].values[i]
    x = data["위도"].values[i]
    title = data["상호명"].values[i]
    popup = folium.Popup(title, width=150)
    marker = folium.Marker(location=[x, y], popup=popup).add_to(map)
  return map

map_show(shop_seoul_edu_computer)
data = shop_seoul_edu_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, "도로명주소"]
  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

 

문제

  • 상권업종중분류명이 "커피점/카페"인 데이터 중 "구군"이 "강남구"인 데이터만 지도에 표기
  • 단, 일반 마커로 표기하며 클릭하면 "상호명-주소"형태의 팝업을 보여줌
shop_seoul_cafe = shop[shop["상권업종중분류명"] == "커피점/카페"]
shop_seoul_cafe_gangnam = shop_seoul_cafe[shop_seoul_cafe["시군구명"] == "강남구"]
shop_seoul_cafe_gangnam
data = shop_seoul_cafe_gangnam
map = folium.Map(location=[data["위도"].mean(), data["경도"].mean()], zoom_start=14)

for i in data.index:
  cafe_name = data.loc[i, "상호명"] + ' - ' + data.loc[i, "도로명주소"]
  popup = folium.Popup(cafe_name, max_width=500)
  folium.Marker(location=[data.loc[i, "위도"], data.loc[i, "경도"]],
                popup=popup).add_to(map)
map
 
shop_seoul_coffee = shop_seoul[shop_seoul["상권업종중분류명"] == "커피점/카페"]
data = shop_seoul_coffee[shop_seoul_coffee["시군구명"] == "강남구"]
coffee_map = folium.Map(location=[data["위도"].mean(), data["경도"].mean()], zoom_start=14)

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

coffee_map