서울시 CCTV 현황 데이터 분석 3

eunbi kim·2024년 3월 6일
0
post-custom-banner
    1. 서울시 CCTV 현황 분석 데이터 읽기
  • [번외1] Pandas 기초 - series, dataframe
    1. CCTV 데이터와 인구현황 데이터 훑어보기
    1. 데이터 합치기 - merge
  • [번외2] matplotlib 기초 <- here
    1. CCTV 데이터 그래프로 표현하기
    1. 데이터 경향을 그려보자
    1. 경향에서 벗어난 데이터 강조하기

[번외2] matplotlib 기초

시각화를 위해 그래프 그리는 연습을 하였다.
한글 폰트를 쓸 것이므로 맑은고딕으로 설정해주고,
%matplotlib inline <- 주피터 노트북 안에서 그래프를 그리면 바로 나타나도록 하는 설정이다.

import matplotlib.pyplot as plt 
from matplotlib import rc

rc("font", family="Malgu Gothinc") 

%matplotlib inline 

matplotlib 에서 pyplot이라는 시각화 기능을 가져와 plt로 사용한다.
figure, plot, show 이 세가지가 그래프를 그리는 데에 가장 기본적인 형태이다.

figure의 figsize <- 도화지 크기를 설정하는 느낌으로 가로/세로 지정 가능
plot <- x축 / y축에 어떤 데이터가 들어갈지 예시로 넣어주었다.

plt.figure(figsize=(10, 6)) 
plt.plot([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 1, 2, 3, 4, 2, 3, 5, -1, 3])
plt.show() 

예제 1. 그래프 기초

삼각함수 그리기:

numpy를 사용하였다.
np.arange(a, b, s) <- a부터 b까지 s의 간격

그래프 안에 정보들을 추가해서 보는 사람들이 더 쉽게 하자!

  1. 격자무늬 추가 <- grid
  2. 그래프 제목 추가 <- title
  3. x축, y축 제목 추가 <- xlabel, ylabel
  4. 주황색, 파란색 선 데이터의 의미 구분 <- legend로 범례 추가 (앞서 label로 지정해주었으니 lagend에 따로 추가하지 않았다)
plt.figure(figsize=(10,6))
plt.plot(t, np.sin(t), label="sin")
plt.plot(t, np.cos(t), label="cos")
plt.grid()
plt.title("Example of sinewave")
plt.xlabel("time")
plt.ylabel("Amplitude") 
plt.legend() 
plt.show()

예제 2. 그래프 커스텀

t = np.arange(0, 5, 0.5)
t

-> array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])

이 데이터를 가지고 그래프의 모양을 지정해보자:
plot에서 옵션으로 추가하면 된다.
r-- <- red dotted line
bs <- blue square
g^ <- green arrow^

plt.figure(figsize=(10, 6))
plt.plot(t, t, "r--") 
plt.plot(t, t ** 2, "bs") 
plt.plot(t, t ** 3, "g^")

다른 데이터인디
여러가지 설정 추가해주기 연습:

linestile<- 점선으로 변경
marker <- 이응 모양 (???이거 뭐라고함)
markerfacecolor <- 그거 색깔
markersize <- 그거 사이즈

xlim , ylim <- 범위 지정

plt.figure(figsize=(6, 4))
plt.plot(
    t, y,
    color="green",  
    linestyle="dashed",
    marker="o",
    markerfacecolor="blue",
    markersize=15
)

plt.xlim([-0.5, 6.3])
plt.ylim([0.5, 9.5])
plt.show()

예제 3. scatter plot

t = np.array(range(0, 10))
y = np.array([9, 8, 7, 9, 8, 3, 2, 4, 3, 4])

plot대신 scatter만 사용하면 된다.

def drawGraph():
    plt.figure(figsize=(20, 6))
    plt.scatter(t, y)
    plt.show()
    
drawGraph()

커스텀을 해보자:

colormap을 이용하여 다양한 표현이 가능하다~

colormap = t

def drawGraph():
    plt.figure(figsize=(20, 6))
    plt.scatter(t, y, s=100, c=colormap, marker=">")  # s는 marker의 size
    plt.colorbar()
    plt.show()
    
drawGraph()

https://matplotlib.org/stable/gallery/index
^^^ matplotlib의 examples -> gallery에서, 다양한 그래프 자료들과 코드들이 제공된다.
그리고 싶은 그래프를 찾아 사용법을 익히고,
원하는 그래프에 맞게 커스텀하면 된다.


4. CCTV 데이터 그래프로 표현하기

다시 프로젝트로 돌아가서,

새롭게 모듈을 임포트해줬는데

나는 폰트가 계속 깨지는 것이다 위에서는 잘 됐는데.
구글링하여 폰트매니저 를 추가하였다.
앞으로 복사하여 쓸 것이다.

from matplotlib import font_manager, rc

font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)

소계 컬럼 시각화

코드 뒤에 붙는 세미콜론은 그래프 그릴 시에 나오는 구구절절 코드들을 삭제해준다.
+ pandas에서 plot을 바로 쓸 수 있다.
+ kind="barh" <- horizontal bar chart

data_result["소계"].plot(kind="barh", grid=True, figsize=(10, 10));

★ 정렬 중요하다. <<<정보를 한 눈에 보기 위해

data_result["소계"].sort_values().plot(
    kind="barh", grid=True, title="가장 CCTV가 많은 구", figsize=(10, 10));

따라서 가장 CCTV가 많은 구/ 적은 구를 한 눈에 알 수 있다.


.
.
.

시각화가 젤 재밌엉

post-custom-banner

0개의 댓글