
*이 글을 읽기전에 작성자 개인의견이 있으니, 다른 블로그와 교차로 읽는것을 권장합니다.*
1. 산점도 그리기
사용하려는 모듈설치
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
한글 font 설치
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
plt.rc('font', family='NanumBarunGothic')
데이터 불러오기
shop = pd.read_csv('/content/drive/MyDrive/KDT/5. 데이터 분석/데이터/shop_201806_01.csv')
shop

pd.set_option() : 출력 형식 조절
# column 수 최대 40열 조절
pd.set_option('display.max_columns', 40)
shop.head(40)

total 39 columns로 열 40개 조절
shop.info()

shop.columns # 메모리절약을 위해, 이중에서 필요없는 column은 제거

코드 선택하는 형식으로 소거
view_columns = ['상호명', '지점명', '상권업종대분류명', '상권업종중분류명', '상권업종소분류명', '시도명', '시군구명', '도로명', '도로명주소', '경도', '위도']
shop = shop[view_columns] # 칼럼 소거
shop.head()

shop.isnull().sum()

plot.scatter() : DataFrame 데이터로 산점도 찍기
# 데이터를 점으로 찍기, x축=경도, y축은 위도
# scatter(): 점찍기
shop.plot.scatter(x='경도', y='위도', grid=True, figsize=(6,8))

str.startswith() : string type에서 ()안에 있는 string으로 시작하는 단어 가져오기
# '서울'로 시작하는 키워드로 뽑기
# str.startswith(): 문자열이 특정 접두사(prefix)로 시작하는지 여부를 확인하는 메서드
shop_seoul = shop.loc[shop['도로명주소'].str.startswith('서울')]
shop_seoul

데이터프레임 반대조건 : '~' 사용
# 위의 조건에서 반대조건 뽑기
shop_except_seoul = shop.loc[~shop['도로명주소'].str.startswith('서울')]
shop_except_seoul

# 서울 자영업 scatter 찍기
# grid: 플롯에 그리드 라인을 추가
shop_seoul.plot.scatter(x='경도', y='위도', grid=True, figsize=(10,8))

# 반대(부산) scatter 찍기
shop_except_seoul.plot.scatter(x='경도', y='위도', grid=True, figsize=(10,8))

2. Seaborn
- 데이터를 시각화하는데 사용하는 라이브러리
- matplotlib을 기반으로 더 쉽고, 통계적으로 유의미한 그래프를 그릴 수 있도록 다양한 기능(시각적)을 제공합니다.
- 히스토그램, 밀도 플롯, 산점도, 선 그래프, 히트맵, 박스 플롯 등을 지원합니다.
- 데이터 분석 및 데이터 사이언스 프로젝트에서 자주 사용
import seaborn as sns
plot.scatter()는 Pandas DataFrame인 반면, scatterplot()은 Seaborn 라이브러리 함수.
sns.scatterplot() : seaborn라이브러리 산점도 그리기
- hue = seaborn 라이브러리 범례 생성
plt.figure(figsize=(14,10))
sns.scatterplot(data=shop_seoul, x='경도', y='위도', hue='시군구명')

shop_seoul.head()

shop_seoul['상권업종대분류명'].value_counts() #value값 빈도수

# 특정칼럼에서 특정 value값만 뽑기
shop_seoul_edu = shop_seoul[shop_seoul['상권업종대분류명'] == '학문/교육']
shop_seoul_edu

# shape
shop_seoul_edu.shape

# scatterplot():
# hue 는
plt.figure(figsize=(7,5))
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=(7,5))
sns.scatterplot(data=shop_seoul_edu_computer, x='경도', y='위도', hue='상권업종소분류명')

3. Folium
- leaflet.js 기반으로 만들어진 지리적 데이터를 표현해주는 대표적인 파이썬 시각화 라이브러리
- ! pip install follium
- 대화식 지도 생성 : 확대, 축소, 이동
- 마커 및 팝업 표시
- 마우스 이벤트 처리
import folium
folium.Map() : 대화식 지도 생성
- location=[x,y] : WGS 좌표 새성
- zoom_start = 초기 줌 크기 화면 조절
# folium.Map(location=[위도,경도], zoom_start=배율, ...)
# location=[x,y] 속성에서 x,y 순서로 넣는것 중요함.
# 지도 중심좌표를 잡음
map_folium = folium.Map(location=[37.500043085219545, 127.03557801473566], zoom_start=20)
map_folium

folium.Popup() : 마커 클릭 시 생성되는 팝업 생성
- folium.Popup(팝업 이름, 팝업창 크기)
folium.Marker() : location 속성으로 지정한 위치에 마커 생성
- folium.Marker(location=[좌표], popup=추가하려는 팝업) : popup = 팝업 설정
add_to() : folium 라이브러리에서 지도 객체에 다른 객체 추가, ex) 마커, 원, 폴리라인, 팝업
# Marker(): location 속성으로 지정한 위치에 마커를 생성
# popup(): 마커를 클릭했을 때 표시할 문자열을 설정
# add_to(): 작성된 마커를 지도에 추가
map_folium = folium.Map(location=[37.500043085219545, 127.03557801473566], zoom_start=17)
# max_width는 팝업창 사이즈
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
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

커스텀 아이콘을 사용한 대화식 지도 생성
# 모듈 설치
from folium.features import CustomIcon
CustomIcon() : 커스텀 아이콘 생성
folium.Icon() : folium라이브러리에서 아이콘 설정
- icon = 아이콘 모양
- color = 아이콘 색깔
folium.CircleMarker() : 원 범위를 마커로 생성
- radius = 범위 설정
- color = 원 테두리 색깔
- fill_color = 원 안쪽 색깔
icon_image = '/content/drive/MyDrive/KDT/5. 데이터 분석/데이터/police.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(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(): 원의 범위를 마커로 설정, radius=30, color='red', fill_color=#4074
popup = folium.Popup('내땅', max_width=200)
folium.CircleMarker(location=[37.56999947440024, 126.98228391170936], popup=popup,
radius=30, color='red', fill_color='#EC4074').add_to(map_folium)
map_folium

문제
shop_seoul_edu_computer 데이터프레임에 있는 모든 데이터를 지도에 표기
단, 일반 마커로 표기하며 클릭하면 "상호명-주소" 형태의 팝업을 보여줍니다.
shop_seoul_edu_computer


data = shop_seoul_edu_computer
# 대화식 지도 생성
edu_map = folium.Map(location=[data['위도'].mean(), data['경도'].mean()], zoom_start=13)
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
data.loc[]으로 column 중 상호명, 도로명주소 인덱스 추출,

문제
상권업종중분류명이 '커피점/카페'인 데이터 중 '구군'이 '강남구'인 데이터만 지도에 표기
-> 칼럼에서 키워드로 인덱싱 or 슬라이싱 이므로 .loc()메서드 사용, 또한 키워드로 뽑아내기 때문에 .str.starswith()메서드 사용
.str.starswith()말고 == ''로도 가능
단, 일반 마커로 표기하며 클릭하면 '상호명-주소'형태의 팝업을 보여줌
shop_seoul_cafe = shop_seoul.loc[shop_seoul['상권업종중분류명'] == '커피점/카페']
# shop_seoul_cafe = shop_seoul.loc[shop_seoul['상권업종중분류명'].str.startswith('커피점/카페')]
data = shop_seoul_cafe[shop_seoul_cafe['시군구명'] == '강남구']
# data = shop_seoul_cafe[shop_seoul_cafe['시군구명'].str.startswith('강남구')]
cafe_map = folium.Map(location=[data['위도'].mean(), data['경도'].mean()], zoom_start=13)
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(cafe_map)
cafe_map

'Python > 데이터 분석(전처리, 시각화)' 카테고리의 다른 글
파이썬(11)- 따릉이 API활용 (0) | 2024.06.03 |
---|---|
파이썬(10)-Boxplot, barplot으로 데이터분석 (0) | 2024.05.29 |
파이썬(8)-Numpy와 Pandas를 이용한 데이터 전처리, 분석 (0) | 2024.05.27 |
파이썬(7)-matplotlib (0) | 2024.05.27 |
파이썬(6)-Pandas(2) (0) | 2024.05.27 |