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

'Python > 데이터분석' 카테고리의 다른 글
2024-06-03 7. 서울시 따릉이 API 활용 (0) | 2024.06.03 |
---|---|
2024-05-28 6. 전국 도시공원 데이터 (0) | 2024.05.30 |
2024-05-27 가상 온라인 쇼핑몰 데이터 (0) | 2024.05.27 |
2024-05-27 Matplotlib (0) | 2024.05.27 |
2024-05-24 판다스 (0) | 2024.05.24 |