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

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

 

이렇게 나온다. 이게 흔히 말하는 정규분포. 어? 이상하다? 정규분포 해갖고 가운데에 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()

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

 

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

 

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

Profile

Lv. 34 라이츄

요즘 날씨 솔직히 에바참치김치꽁치갈치넙치삼치날치기름치준치학꽁치임..