파이썬(Python)/numpy

[Python]정규분포(가우시안분포)란? 파이썬 랜덤으로 만들고 그래프 그리기(Normal/Gaussian Distribution)

끄적끄적아무거나 2022. 1. 18. 08:54
반응형

 

목차

     

     

     

     

     

    [Python]정규분포(가우시안분포)란?

     

    정규 분포란 영어로는 "Normal Distribution"라고 합니다. 그리고 가우시안 분포(Gaussian Distribution)이라는 이름으로도 사용됩니다. 

    정규 분포는 독립적(Independent)이고 랜덤(random)으로 생성된 변수(Variable)을 표현한 분포입니다. 벨 형태의 그래프는 통계에서 흔하게 볼 수 있는 형태 입니다. 가령 비행기가 하늘을 날아가면서 발생하는 진동의 분포를 그래프로 그리면 시간이 흐름에 따라 가우시안 분포에 수렴하게 됩니다.

     

    위 수식은 정규 분포 수식으로 확율 밀도를 표현한 식입니다.

     

    수식은 평균값(mean)을 중심으로 표준편차(standard deviation)에 의해 그래프의 퍼짐 정도가 결정 됩니다. 파이썬을 통해서 정규 분포의 값을 불러오는 방법과 그래프 그리는 방식에 대해 알아 보겠습니다.

     

     

     

    [Python]정규분포(가우시안분포) 랜덤으로 데이터 만들기

     

    정규 분포 확률밀도 함수를 만들기 위해 파이썬의 Numpy를 사용하면 됩니다. Numpy의 normal 함수는 Normal Distribution을 구현하는 함수 입니다. 인자는 아래와 같습니다.

     

    • loc : 평균값(mean)
    • scale : 표준 편차(Standard Deviation)
    • size : 생성할 데이터 수

    아래 예제 코드를 통해 쉽게 이해할 수 있습니다.

     

     

    예제 코드>>

    from numpy import random
    
    x_list = random.normal(loc = 10, scale = 5, size=(100))
    
    print(x_list)

    3번 라인 : 평균 값이 10이고 표준 편차가 5인 가우시안 분포 함수를 만듭니다.

     

    결과>>

    [ 3.87601925 11.02682036  6.90019717  4.17006616  8.6624734  17.80543824
     10.87204781  0.17953636  7.16799375  2.31544753  9.77453696 10.13505324
      6.5672562  11.17854797 10.03309995 10.25121045  6.5073349   7.85815835
     12.9018263  -1.70876253 10.72438338 11.49052058 10.27463441 13.17515641
     21.41063171  7.50424186  8.68474698 10.97846951 14.20511537 12.28250706
     11.03093828 12.3036308   9.57132636 10.63594704 13.34913506  8.80323044
     17.20904764  1.62714751 13.54143163  7.3756402  10.48074762  7.55526703
     16.36040811 16.82828305 20.48325933  8.5556563   9.02762216  3.84280483
      8.74432174  4.5595008  10.17003993 12.83061281 13.57787001  8.22265917
     11.63060074  8.6442803  13.63588351  7.38177832 15.12884382  4.82373687
     14.21493774 13.09907432  9.90987235  5.19986399  4.42975385 13.1520034
      3.12803331 12.11762284 10.42715355 14.91894251 12.88147164  5.91532581
     12.00296296 15.63544436  3.71199716  9.20045372  8.81401983  6.66166048
      8.16365625  8.4226855  12.64539593  8.02586504 11.65097345  7.30123945
     18.62080519 11.54705993 12.60009661  1.20017714 12.20508111 13.85478794
      6.70210347  6.51050352  6.38787127 12.57064684 10.13474172  7.66773624
     11.01834388 10.0282926  19.04964778 14.64624765]

     

     

     

    [Python]정규분포(가우시안분포) 랜덤으로 그래프 그리기(Graph)

     

    이번에는 위에서 만든 데이터 셋을 사용해서 그래프를 그리겠습니다.

     

    그래프는 matplotlib을 사용해서 확률 밀도 함수에 최적화된 seaborn이라는 라이브러리를 사용하겠습니다. 

     

    예제 코드>>

    from numpy import random
    
    x_list = random.normal(loc = 10, scale = 5, size=(100000))
    
    # print(x_list)
    
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    sns.displot(x_list, kind="kde")
    
    plt.show()

    3번 라인: size 값을 더 많이 가져갈 수 록 Bell shape에 가까운 그래프가 나옵니다.

    10번 라인: kde를 사용해서 밀도에 대한 그래프를 그립니다.

     

     

    결과>>

     

     

     

    반응형