EDA_CCTV_2

이새롬·2023년 2월 24일
0

EDA

목록 보기
3/7
post-thumbnail

CCTV 2편 요약

  1. 그래프를 그릴 수 있는 능력 [Matplotlib]
  2. 전체적인 경향을 파악할 수 있는 능력 [Regression using Numpy]
  3. 그 경향에서 벗어난 데이터를 강조하는 능력 [Insight and Visualization]

matplotlib 기초

파이썬의 대표 시각화 도구
matplotlib

실행
import matplotlib.pyplot as plt
from matplotlib import rc

한글설정
rc("font", family="Malgun Gothic")

%matplotlib inline
또는
get_ipython().run_line_magic("matplotlib","inline")
plt.rcParmas["axes.unicode_minus"] = False
★★ 그래프에서 마이너스로 깨짐현상 잡기


그래프 그리기

matplotlib 그래프 기본형태

plt.figure(figsize=(10,6))
plt.plot(x,y)
plt.show()

figure는 그래프를 그리기 위한 도화지
figsize 도화지 사이즈

plt.plot(X축,Y축)
그릴 표 데이터 X축, Y축

예제1 : 그래프 기초

삼각함수 그리기

  • np.arange(a,b,s) : a부터 b까지 s의 간격으로 만듦
  • np.sin(value)
**import numpy as np**
t = np.arange(0, 12, 0.01)
y = np.sin(t)

plt.figure(figsize=(10,6))
plt.plot(t, np.sin(t))
plt.plot(t, np.cos(t))
plt.show()

  • 추가
  1. 격자무늬 추가

plt.grid(True)
격자무늬 생성

plt.grid(False)
격자무늬 없앰

  1. 그래프 제목 추가

plt.title("Example of sinwave")

  1. x축,y축 제목 추가

plt.xlabel("time")
plt.ylabel("Amlitude")

  1. 주황색, 파랑색 선 데이터 의미구분

plt.legend(labels=["sin","cos"])

또는

plt.plot(t, np.sin(t), label="sin")
plt.plot(t, np.cos(t), label="cos")
plt.legend()

덤)
라벨 위치 바꾸기
plt.legend(loc="upper left")

위치 : upper left/ upper right/ lower left / lower right

위 4가지 추가하여 완성한 그래프


예제2: 그래프커스텀

t = [0,1,2,3,4,5,6]
t = list(range(0,7))
y = [1,4,5,8,9,5,3]

plt.figure(figsize=(10,6))
plt.plot(
    t,
    y,
    color="green",
    linestyle="--", # - 실선 -- 점선
    marker= "o",  # ^, s,d ...
    markerfacecolor="blue",
    markersize=15,
)
plt.xlim([ -0.5, 6.5])
plt.ylim([ 0.5, 9.5])
plt.show()

plt.Xlim 과 plt.Ylim은 데이터 크기에 맞춰 도화지 사이즈 좀 조정한 코드.


예제3: scatter plot

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

colormap = t

def drawGraph():

    plt.figure(figsize=(15,6))
    plt.scatter(t,y, s=100, c=colormap, marker=">")
    plt.colorbar()
    plt.show()
 
drawGraph()

예제4: Pandas에서 plot 그리기

  • matplotlib 기능을 가져와서 사용합니다

data_result.head()

data_result["인구수"].plot(kind="bar",figsize=(10,10))
세로 막대기

data_result["인구수"].plot(kind="barh",figsize=(10,10))
가로 막대기


6. 데이터의 경향표시

소계 컬럼 시각화

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

데이터 정렬
data_result["소계"].sort_values().plot(kind="barh", grid=True, figsize=(10,10))

plot 안에 표 데이터 정보를 추가
title="제목"


인구수와 소계 컬럼으로 scatter plot 그리기

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()

Numpy를 이용한 1차 직선만들기

- np.polyfit(): 직선을 구성하기 위한 계수를 계산
- np.poly1d() : polyfit으로 찾은 계수로 파이썬에서 사용할 수 있는 함수로 만들어주는 기능

import numpy as np

fp1 = np.polyfit(data_result["인구수"], data_result["소계"], 1)
fp1

f1 = np.poly1d(fp1)
f1

f1(400000)
  • 인구가 40만인 구에서 서울시의 전체 경향에 맞는 적당한 CCTV 수
    (계산해준거임.. 위에 식을 토대로)

fx = np.linspace(100000,700000,100)
fx

  • 경향선을 그리기 위한 x 데이터 생성
    - np.linspace(a,b,n) : a부터 b까지 n개의 등간격 데이터 생성

오차값

그 경향에서 벗어난 데이터를 강조하는 능력
Insight and vIsualization

경향선과 실제값 같으면 오차율 0
그 외에는 오차값,

오차가 벗어난 데이터 = 경향에서 벗어난 데이터
그걸 찾자

오차 = 실제값 - 예측값

내림차, 오름차로 정리
내림차 - 오차가 가장 많은 것부터 순으로


💬 코멘트

재밌지만 강사님 말씀처럼 배울 양은 방대하고 시간은 없고,
그렇기에 효율있게 가벼운 이론과 실습위주로 가서 어버버 하고있다.
시간 부족하단 얘길 달고 살 줄이야.. 현재로썬 계속 친숙해지는 수 밖에!

0개의 댓글