✍🏻 2일 공부 이야기.
👀👀 오늘 공부한 자세한 코드는 아래 깃허브에 올라가있어요!
https://github.com/nabi4442/ZeroBaseDataSchool/blob/main/01.%20Analysis%20Seoul%20CCTV.ipynb
def drawGraph():
data_result["CCTV비율"].sort_values().plot(
kind = "barh", grid = True, figsize = (10,10),
title ="가장 CCTV가 많은 구")
#가로 바 형태의 그래프
#정렬한 데이터프레임을 시각화하여
#보다 한 눈에 들어오기 쉽게 함.
drawGraph()
단순 CCTV 수와 인구대비 CCTV 비율을 볼 때,
CCTV가 많은 구는 강남, 관악, 서초, 성북, 구로 이고
CCTV 비율이 높은 구는 성동, 강남, 종로, 용산, 서초이다.
비율로 데이터를 보아도,
전체 경향과 함께 보지 않으면 데이터를 제대로 이해하기 어려우므로 전체 경향까지 파악해보자.
def drawGraph():
plt.figure(figsize = (14,10))
plt.scatter(data_result["인구수"], data_result["총계"], s = 50)
plt.xlabel("인구수")
plt.ylabel("CCTV")
plt.grid(True)
plt.show()
drawGraph()
💡 선형회귀를 추가하여 트렌드 파악하기.
import numpy as np
fp1 = np.polyfit(data_result["인구수"], data_result["총계"], 1) # 선형회귀 계수 구함
f1 = np.poly1d(fp1) # 함수 생성
fx = np.linspace(100000, 700000, 100) #x 값 생성
def drawGraph():
plt.figure(figsize = (14,10))
plt.scatter(data_result["인구수"], data_result["총계"], s = 50)
plt.plot(fx, f1(fx), ls = "dashed", lw = 3, color = "g") #경향선 표시(ls : 표시선 종류, lw : 굵기)
plt.xlabel("인구수")
plt.ylabel("CCTV")
plt.grid(True)
plt.show()
drawGraph()
data_result["오차"] = data_result["총계"] - f1(data_result["인구수"]) #실제값 - 예측값
# 경향과 비교해서 데이터의 오차가 큰 데이터 계산
df_sort_f = data_result.sort_values(by = "오차", ascending = False) #내림차순(경향 대비 CCTV를 많이 가진 순)
df_sort_t = data_result.sort_values(by = "오차", ascending = True) #오름차순(경향 대비 CCTV를 적게 가진 순)
📌 사용자 정의로 colormap을 만들 수도 있음!
# 색깔 지정
from matplotlib.colors import ListedColormap
# colormap 을 사용자 정의(user define)로 세팅 HEX 색상코드 값.
color_step = ["#e74c3c", "#2ecc71", "#95a9a6", "#2ecc71", "#3498db", "#3498db"]
my_cmap = ListedColormap(color_step)
## 이후 그래프를 그리는 코드와 같이
## plt.colorbar()를 해주면
## 그래프와 함께 색상코드 값을 볼 수 있음
📌 정해진 좌표에 글을 표시할 수 있음!
plt.text(x좌표, y좌표, 들어갈 글, fontsize = 폰트크기값)
def drawGraph():
plt.figure(figsize = (14,10))
plt.scatter(data_result["인구수"], data_result["총계"],
s = 50 , c = data_result["오차"] , cmap = my_cmap)
plt.plot(fx, f1(fx), ls = "dashed", lw = 3, color = "g")
for n in range(5):
#상위 5개
plt.text(df_sort_f["인구수"][n] * 1.02, # x좌표
df_sort_f["총계"][n] * 0.98, # y좌표
df_sort_f.index[n], # title
fontsize = 15)
#하위 5개
plt.text(df_sort_t["인구수"][n] * 1.02, # x좌표
df_sort_t["총계"][n] * 0.98, # y좌표
df_sort_t.index[n], # title
fontsize = 15)
plt.colorbar()
plt.xlabel("인구수")
plt.ylabel("CCTV")
plt.grid(True)
plt.show()
drawGraph()