Matplotlib으로 정규분포를 그려보자

목차

R에서 그래프 그릴 때 가끔 예제로 나오는게 정규분포다. 그 종같이 생긴 그거 말하는 거 맞습니다. 그래서 이걸 Matplotlib으로 그려봅시다.

 

Reference

https://bigdata-doctrine.tistory.com/14

 

[Python] 정규분포 그래프 시각화

오늘은 정규분포 그래프를 matplotlib을 사용하여 시각화해보겠습니다. 정규분포의 사전적 정의는 다음과 같습니다. 도수(度數) 분포 곡선이 평균값을 중앙으로 하여 좌우 대칭으로 종 모양을 이

bigdata-doctrine.tistory.com


그 전에 Matplotlib으로 그래프 그리는 걸 하셨으면 Matplotlib랑 Numpy, Pandas는 설치하셨을텐데 오늘은 Scipy도 같이 설치해야 한다. 네, 깔고 오십시오. pip install ~ 쓰면 깔릴거임.

 

import numpy as np
import matplotlib.pyplot as plot
from scipy.stats import norm

가져왔으면 이제 시작해보자. 세번째줄은 scipy의 모듈인데 아마 여기에 정규분포가 있는 듯 하다.

 

x = np.arange(0,20,0.001)
plot.figure(figsize=(10,7.5))
plot.title('Normal distribution')
plot.xlabel('x')
plot.ylabel('f(x)')
plot.plot(x, norm.pdf(x, loc=10, scale=2))
plot.show()

이렇게 하면 어떻게 나오냐면

 

etc-image-0

이렇게 나온다. 이게 흔히 말하는 정규분포. 어? 이상하다? 정규분포 해갖고 가운데에 0 있는건 뭐예요? 그건 표준정규분포다. 얘는 평균이 10, 표준편차가 2인 정규분포.

 

위 코드만 입력하면 이렇게 정규분포가 나오는데... plot.어쩌고 된 건 다 matplotlob 관련인 거 알겠는데 첫 줄은 뭔가요? 그건 numpy를 이용해서 0부터 20까지 0.001간격으로 배열 형식으로 저장하라는 코드다. 그 다음으로 중요한 건 norm.pdf(x, loc=10, scale=2) 이 부분인데 이게 바로 '평균이 10, 표준편차가 2인 정규분포를 그려라'라는 얘기다. loc가 평균, scale이 표준편차. 그럼 표준정규분포를 그리려면 어디를 수정해야 하는 지 감이 좀 오시쥬?

 

x = np.arange(-4,4,0.001)
plot.figure(figsize=(10,7.5))
plot.title('Normal distribution')
plot.xlabel('x')
plot.ylabel('f(x)')
plot.plot(x, norm.pdf(x, loc=0, scale=1))
plot.show()

etc-image-1

일단 위 코드랑 다른 점이 두 개 있다. 첫번째는 평균이랑 표준편차가 각각 0, 1이고 두번째는 x로 만드는 배열의 숫자 범위가 다르다. 처음에는 0부터 20까지였는데(평균이 10이라…) 표준정규분포는 -4부터 4까지 있다. 범위가 중요한가요? 예, 중요합니다. 범위를 그대로 0부터 20까지로 하면 어떻게 되냐면

 

etc-image-2

타노스가 왔다갔나 반만 나온다.

 

etc-image-3

착한 코더 여러분들은 얘는 '표준'정규분포니까 plot.title()에 Standard Normal distribution이라고 적어주는 센스를 잊지 말자.