데이터 분석 심화

Chapter.4 데이터 분석 심화(2)

devjjun 2026. 4. 14. 09:56

TIL(Today I Learned)


1️⃣통계학 기초 Chapter.2

스튜던트 t분포란?

  • t분포는 모집단의 표준편차를 알 수 없고 표본의 크기가 작은 경우(일반적으로 30미만)에 사용되는 분포
  • 정규분포와 유사하지만, 표본의 크기가 작을수록 꼬리가 두꺼워지는 특징

특징

  • 표본 크기가 커지면 정규분포에 가까워짐.

사용 예

  • 작은 표본의 평균 비교 👉 두 그룹의 평균이 유의미하게 다른지 검토
  • 약물 시험 👉 소규모 임상 시험에서 두 그룹간의 차이를 분석

실습 코드

더보기
# 스튜던트 t 분포 생성
t_dist = np.random.standard_t(df=10, size=1000)

# 히스토그램으로 시각화
plt.hist(t_dist, bins=30, density=True, alpha=0.6, color='r')

# 스튜던트 t 분포 곡선 추가
x = np.linspace(-4, 4, 100)
p = stats.t.pdf(x, df=10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('student t distribution histogram')
plt.show()

그림


카이제곱분포란?

  • 범주형 데이터의 독립성 검정이나 적합도 검정에 사용되는 분포

특징

  • 자유도에 따라 모양이 달라짐
  • 상관관계나 인과관계를 판별하고자 하는 원인의 독립변수가 완벽하게 서로 다른 질적 요소일 때 활용
  • 범주형 데이터 분석에 사용

사용 예

  • 독립성 검정 👉 성별과 직업 선택 간의 독립성을 검토
  • 적합도 검사 👉 주사위의 각 면이 동일한 확률로 나오는지 검토

실습 코드

더보기
# 카이제곱분포 생성
chi2_dist = np.random.chisquare(df=2, size=1000)

# 히스토그램으로 시각화
plt.hist(chi2_dist, bins=30, density=True, alpha=0.6, color='m')

# 카이제곱분포 곡선 추가
x = np.linspace(0, 10, 100)
p = stats.chi2.pdf(x, df=2)
plt.plot(x, p, 'k', linewidth=2)
plt.title('카이제곱 분포 히스토그램')
plt.show()

그림


이항분포

  • 성공/실패와 같은 두 가지 결과를 가지는 실험을 여러 번 반복했을 때 성공 횟수의 분포 
  • 독립적인 시행이 n번 반복되고, 각 시행에서 성공과 실패 중 하나의 결과만 가능한 경우를 모델링하는 분포라고도 할 수 있다.
  • 성공 확률을 p라 할 때, 성공의 횟수를 확률적으로 나타낸다.

특징

  • 실험 횟수(n)와 성공 확률(p)로 정의됨.

사용 예

  • 동전 던지기 👉 동전을 10번 던졌을 때, 앞면이 나오는 횟수
  • 품질 관리 👉 무작위로 선택된 100개의 제품 중 불량품의 수

실습 코드

더보기
# 이항분포 생성 (예: 동전 던지기 10번 중 앞면이 나오는 횟수)
binom_dist = np.random.binomial(n=10, p=0.5, size=1000)

# 히스토그램으로 시각화
plt.hist(binom_dist, bins=10, density=True, alpha=0.6, color='y')
plt.title('이항 분포 히스토그램')
plt.show()

그림


푸아송 분포란?

  • 단위 시간 또는 단위 면적당 발생하는 사건의 수를 모델링 할 때 사용하는 분포
  • 평균 발생률 λ를 가진 사건이 주어진 시간 또는 공간 내에서 몇 번 발생하는지를 나타낸다.

특징

  • 푸아송 분포는 단위 시간 또는 단위 면적당 희귀하게 발생하는 사건의 수를 모델링하는 데 적합합니다.

사용 예

  • 콜센터 👉 특정 시간 동안 콜센터에 도착하는 전화 통화의 수.
  • 교통사고 👉 특정 도로 구간에서 일정 기간 동안 발생하는 교통사고의 수.
  • 웹사이트 트래픽 👉 특정 시간 동안 웹사이트에 도착하는 방문자의 수. 

실습 코드

더보기
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson

# 푸아송 분포 파라미터 설정
lambda_value = 4  # 평균 발생률
x = np.arange(0, 15)  # 사건 발생 횟수 범위

# 푸아송 분포 확률 질량 함수 계산
poisson_pmf = poisson.pmf(x, lambda_value)

# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.bar(x, poisson_pmf, alpha=0.6, color='b', label=f'Poisson PMF (lambda={lambda_value})')
plt.xlabel('Number of Events')
plt.ylabel('Probability')
plt.title('Poisson Distribution')
plt.legend()
plt.grid(True)
plt.show()

그림


2️⃣Python 알고리즘 주요 문제

문제1

  • 문제 접근
    • 문자 하나씩 순회
    • 한 칸씩 이동
    • skip이면 건너뛰기
    • index만큼 조건에 맞는 이동 카운트
  • 코드
더보기
def solution(s, skip, index):
    answer = ''
    skip = [ord(c) for c in skip]
    for c in s:
        count = 0
        current = ord(c)
        while count < index:
            current += 1
            if current > 122:
                current -= 26
            if current not in skip:
                count += 1
        answer += chr(current)
    return answer
  • Tip
더보기
  • ord() 함수: 문자열👉숫자 변환

 

  • 알파벳 소문자 유니코드 변환

💡 느낀점

알고리즘 코드카타를 진행하며 그동안 실천해온 단계적 문제 분석과 설계를 한 뒤 풀이를 하는 과정을 적용하니 단계적으로 성장하는 느낌이 들었다. 적용된 추가적인 함수나 개념들을 Tip에 적어서 한 번 더 상기시키면 도움이 될 것 같다. 통계학 기초의 경우 처음 접하는 개념을 정리하여 사진과 함께 첨부하였다. 조급하게 이해하는 것이 아닌 이러한 개념이 있구나 확인하고 복습과 실습을 통해 n회독을 진행하면 숙달이 될 것 같다.