일단은 데이터 전처리(어제 자료와 같음)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rc('font', family='NanumBarunGothic')
#한글 깨짐 방지! 실행하고서 런타인 세션 재시작
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
#1. 불러오기 및 기본 가공 : 2~5 피봇테이블 및 히트맵 만드는 데 필수!
#1)불러오기
ycn = pd.read_csv('/content/illegal_parking.csv')
#2)단속일시 시간 칼럼 및 요일, 시간 칼럼 만들기
format = '%Y-%m-%dT%H-%M-%S.%f'
ycn['단속일시자료'] = pd.to_datetime(ycn['단속일시'], format=format, infer_datetime_format=True)
ycn['단속요일'] = ycn['단속일시자료'].dt.day_name()
ycn['단속시간'] = ycn['단속일시자료'].dt.hour
#3)요일 자료 정렬해줄 weeks 미리 형성
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
pcolor와 heatmap 실행과정
*heatmap으로 히트맵을 생성할 때, 기존 테이블의 수치가 %가 아닐 경우 fmt='g'를 입력해줘야함(자세한 건 본문에)
#2. 양천구 전체
#1)요일 시간 피봇테이블 만들기
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
all_pivot = pd.pivot_table(ycn, values = '연번',
index = ['단속요일'],
columns= ['단속시간'],
aggfunc="count").agg(weeks)
#2)양천구 전체 히트맵 만들기 : seaborn.heatmap 사용
plt.figure(figsize = (14, 5))
plt.pcolor(all_pivot)
plt.xticks(np.arange(0, len(all_pivot.columns), 1), all_pivot.columns)
plt.yticks(np.arange(0, len(all_pivot.index), 1), all_pivot.index)
plt.title('양천구 요일별 단속 시간 히트맵')
plt.xlabel('시간')
plt.ylabel('요일')
plt.colorbar()
plt.show()
#3)양천구 전체 히트맵 만들기 : seaborn.heatmap 사용
plt.figure(figsize=(18, 5))
sns.heatmap(data = all_pivot,
annot=True,
vmin=0,
vmax=2500,
fmt='g', #<------수치가 %가 아닐 경우 'g' 입력 안 하면 출력 오류 발생
cmap='Blues')
plt.title('양천구 전체 시간요일별 건수')
plt.xlabel('단속시간')
plt.ylabel('단속요일')
plt.yticks(rotation = 60)
plt.show()
#3.교육기관
#1)교육기관 여부 칼럼 만들기
ycn['교육기관'] = np.where(ycn['단속장소'].str.contains(r'(여고|학교|어린이집|유치원|초교|학원)'), '1', "0")
#<------------'단속장소'에서 '여고, 학교, 어린이집, 유치원, 초교, 학원' 중 하나라도 언급되는 케이스는 1로 표시, 그렇지 않으면 0으로 표시되는 "교육기관"칼럼 생성
#2)교육기관에 해당하는 행들만 뽑아서 새 테이블 만들고 인덱스 리셋
ycn_schools = ycn.query('교육기관 == "1"') #<-------'교육기관' 칼럼이 1인 케이스(행)들만으로 테이블 생성
ycn_schools.reset_index()
#3)교육기관 피봇테이블 만들기
schools_pivot = pd.pivot_table(ycn_schools, values = '연번',
index = ['단속요일'],
columns= ['단속시간'],
aggfunc="count").agg(weeks)
#4)교육기관 히트맵 만들기 matplotlib.pyplot.pcolor 사용
plt.figure(figsize = (14, 5))
plt.pcolor(schools_pivot)
plt.xticks(np.arange(0, len(schools_pivot.columns), 1), schools_pivot.columns)
plt.yticks(np.arange(0, len(schools_pivot.index), 1), schools_pivot.index)
plt.title('교육기관 요일시간 교차 히트맵')
plt.xlabel('시간')
plt.ylabel('요일')
plt.colorbar()
plt.show()
#5)교육기관 히트맵 만들기 : seaborn.heatmap 사용
plt.figure(figsize=(12, 5))
sns.heatmap(data = schools_pivot,
annot=True,
vmin=0,
vmax=250,
fmt='g', #<------수치가 %가 아닐 경우 'g'를 입력 안 하면 출력 오류 발생
cmap='BuGn')
plt.title('교육기관 요일시간별 건수')
plt.xlabel('단속시간')
plt.ylabel('단속요일')
plt.yticks(rotation = 60)
plt.show()
'TIL 통합' 카테고리의 다른 글
12/26 TIL 파이썬 사칙연산 (0) | 2023.12.26 |
---|---|
12/22 with 및 union all 활용, length, 셀프조인 (0) | 2023.12.22 |
12/20 일지 - 팀플 파이썬(피봇테이블, 히트맵, replace, query, np.where) (0) | 2023.12.20 |
12/19 - RECURSIVE(재귀함수), SELECT 구문 서브쿼리 (0) | 2023.12.19 |
12/18 일지 - SQL 변수선언 (0) | 2023.12.18 |