통계 실습 | 파이썬으로 중심극한정리(CLT) - 데이터 생성하기

2025. 1. 17. 18:11·Python

문제 5.  파이썬으로 중심극한정리(CLT) 1.데이터 생성하기

  1. 출제의도
    • 이론을 시뮬레이션하여 간접 증명을 할 수 있다.
    • 중심극한 정리를 위한 데이터 생성을 scipy 모듈의 rvs 함수를 이용해 할 수 있다.
    • matplot을 이용하여 데이터를 시각화 할 수 있다.
  2. 문제
    • scipy.stats 모듈에서 다음 분포를 생성하고 히스토그램으로 표현하기(subplots권장)
    • 변수
      • 이항 분포 샘플 변수명 binomial_data: 확률 0.5의 시행을 10번 시행했을때 성공할 갯수의 1000개의 표본 생성
        • ex 동전 10번 던졌을때 앞면이 나올 수 있는 수는 0부터 10개
      • 균등 분포 샘플 변수명 uniform_data : 시작 0, 끝 10의 표본 1000개 생성
      • 표준 정규 분포 샘플 변수명 normal_data : 표본 1000개 생성
    • 위 분포 3개를 히스토그램으로 표현하되 plt.subplots(1,3)을 이용하여 동시에 표현하고, bins 는 20개로 설정
  3. Skeleton code
np.random.seed(42)

# scipy를 통한 샘플 생성
'''
여기에 코드를 작성해주세요.
'''


#시각화
plt.figure(figsize=(15, 5))
'''
여기에 코드를 작성해주세요.
'''

출력 결과 예시


💡 문제 풀이 

`모범답안`

np.random.seed(42)
import matplotlib.pyplot as plt
from scipy.stats import * #binom, norm, uniform

sample_size = 1000
uniform_data = uniform.rvs(loc= 0, scale = 10, size = sample_size)
binomial_data = binom.rvs(n = 10, p = 0.5, size = sample_size)
normal_data = norm.rvs(loc = 0, scale = 1, size = sample_size)
# normal_data[:10]
# plt.hist(normal_data)


#시각화
plt.figure(figsize=(15, 5))

plt.subplot(1, 3, 1)
plt.hist(binomial_data, bins=20, color="blue", alpha=0.7)
plt.title("Binomial Distribution")
plt.xlabel("Value")
plt.xticks(range(0,11))
plt.ylabel("Frequency")

plt.subplot(1, 3, 2)
plt.hist(uniform_data, bins=20, color="green", alpha=0.7)
plt.title("Uniform Distribution")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.xticks(range(0,11))

plt.subplot(1, 3, 3)
plt.hist(normal_data, bins=20, color="red", alpha=0.7)
plt.title("Normal Distribution")
plt.xlabel("Value")
plt.ylabel("Frequency")

plt.tight_layout()
plt.show()

`출력결과`

`오답노트★★`

  • seaborn이 아니어도 그래프 예쁘게 만들 수 있다..! 
  • from scipy.stats import * 을 통해 하나씩 나열 안 하고 binom, uniform, norm 다 불러올 수 있음  
  • 참고) plt.hist(alpha=0.7)는 그래프의 투명도

`내 풀이`

1. matplotlib.pyplot으로 풀기

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)

# scipy를 통한 샘플 생성
from scipy.stats import binom, uniform, norm
binomial_data = binom.rvs(n=10,p=0.5, size=1000)
uniform_data = uniform.rvs(loc=0, scale=10, size=1000)
normal_data = norm.rvs(size=1000)

#시각화
plt.figure(figsize=(15, 5)) # figure는 그래프가 그려지는 화면 
fig, ax = plt.subplots(1,3) # subplot은 그래프, (1,3)은 화면을 1행 3열로 분류

ax[0].hist(binomial_data, bins=20, color='blue')
ax[0].set(xlabel='Value', ylabel='Frequency')
ax[0].set_title('Binomial Distribution')

ax[1].hist(uniform_data, bins=20, color='green')
ax[1].set(xlabel='Value', ylabel='Frequency')
ax[1].set_title('Uniform Distribution')

ax[2].hist(normal_data, bins=20, color='red')
ax[2].set(xlabel='Value', ylabel='Frequency')
ax[2].set_title('Normal Distribution')

`출력결과`

`오답노트`

  • 그래프가 겹치고 못생기게 나오는 이유는??? 
    1. 맨 아래 plt.tight_layout() 작성하면 그래프끼리 글자가 겹치지 않음
    2. figure의 size를 좀 더 넓게 바꾸면 좀 더 보기 좋아짐 plt.figure(figsize=(20, 5))

변경한 그래프

2. seaborn으로 풀기

import pandas as pd
import numpy as np
from scipy.stats import binom, uniform, norm
import matplotlib.pyplot as plt
import seaborn as sns

np.random.seed(42)

# scipy를 통한 샘플 생성
binomial_data = binom.rvs(n=10,p=0.5, size=1000)
uniform_data = uniform.rvs(loc=0, scale=10, size=1000)
normal_data = norm.rvs(size=1000)

#시각화
plt.figure(figsize=(15, 5)) # figure는 그래프가 그려지는 화면 

# Binomial 
plt.subplot(1,3,1) # subplot은 그래프, (1,3)은 화면을 1행 3열로 분류
sns.histplot(data = binomial_data, bins=20, color='blue', edgecolor=None)
plt.xlabel('value')
plt.ylabel('frequency')
plt.title('Binomial Distribution')

# Uniform
plt.subplot(1,3,2) # subplot은 그래프, (1,3)은 화면을 1행 3열로 분류
sns.histplot(data = uniform_data, bins=20, color='green', edgecolor=None)
plt.xlabel('value')
plt.ylabel('frequency')
plt.title('Uniform Distribution')

# Normal
plt.subplot(1,3,3) # subplot은 그래프, (1,3)은 화면을 1행 3열로 분류
sns.histplot(data = normal_data, bins=20, color='red', edgecolor=None)
plt.xlabel('value')
plt.ylabel('frequency')
plt.title('Normal Distribution')

`출력결과`

 

 

'Python' 카테고리의 다른 글
  • Python 실습 | 공공데이터포털 오픈API를 파이썬에 연결하는 방법
  • 통계 실습 | 파이썬으로 중심극한정리(CLT) - 각 분포의 표본의 평균 시각화
  • 통계 실습 | 파이썬으로 카이제곱검정
  • 통계 실습 | 파이썬으로 이표본 t 검정
초담
초담
4년차 마케터입니다
  • 초담
    그로스마케터의 기록
    초담
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (117)
      • Data Analytics Project (3)
      • SQL (55)
      • Python (43)
      • GA4 (0)
      • Tableau (8)
      • 아티클 스터디 (7)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
초담
통계 실습 | 파이썬으로 중심극한정리(CLT) - 데이터 생성하기
상단으로

티스토리툴바