오늘 슬랙에 우수 TIL 선정이 발표가 나왔는데,
그걸 보면서 아.. 남는 건 TIL뿐이지 않을까 라는 생각이 들었다.
사실 나는 TIL (Today I Learned)을 벨로그에 업로드하고,
외부 시간엔 개인 노트에 TIL과 TIT(Today I tried)를 적어서
주말마다 적은 개념을 누군가에게 설명할 수 있도록 공부했다.
개념과 문법을 익히는 데에는 큰 도움이 된 게 확실했다.
근데 외부로 노출시키는 게 아니라서
내가 잘 하고 있다는 걸 타인에게도, 나에게도
증명할 방법이 없다고 느꼈다.
그래서 앞으로 우수 TIL로 선정될 수 있도록
내가 겪은 우여곡절도 TIL에 빡빡하게 담아 제출하려고 한다.
import numpy as np
import matplotlib.pyplot as plt
# 모집단 생성 (예: 국가의 모든 성인의 키 데이터)
population = np.random.normal(170, 10, 1000)
# 표본 추출
sample = np.random.choice(population, 100)
plt.hist(population, bins=50, alpha=0.5, label='population', color='blue')
plt.hist(sample, bins=50, alpha=0.5, label='sample', color='red')
plt.legend()
plt.title('population and sample distribution')
plt.show()

코드 설명:
numpy.random.normal(loc=0.0, scale=1.0, size=None)
loc(float): 정규 분포의 평균 (기본값: 0.0)scale (float): 정규분포의 표준편차 (기본값: 1.0)size (int 또는 tuple of ints): 출력 배열의 크기 (기본값: None. 즉, 스칼라 값 반환)코드 설명:
numpy.random.choice(a, size=None, replace=True, p=None)
a(1-D array-like or int): 샘플링할 원본 배열. 정수인 경우 np.arange(a)와 동일하게 간주.size(int 또는 tuple of ints): 출력 배열의 크기replace(boolean): 복원 추출 여부를 나타냄.p(1-D array-like, optional): 각 요소가 선택될 확률.- bins
- alpha
- label
- color
표본의 크기: 표본의 크기가 클수록 표본 오차는 줄어듦.
더 많은 데이터를 수집할수록 모집단을 더 잘 대표하게 됨.
표본 추출 방법: 무작위 추출 방법 사용 -> 표본오차 줄일 수 O .
모든 모집단 요소가 선택될 동등한 기회를 가지게 해야 함.
신뢰구간 계산 방법
신뢰구간=표본평균±z×표준오차
여기서 z는 선택된 신뢰수준에 해당하는 z-값.
예를 들어, 95% 신뢰수
준의 z-값은 1.96임
일반적으로 95% 신뢰수준을 많이 사용.

- 모집단 표본 분포 (왼쪽)
- 신뢰구간 시각화 (오른쪽)
import scipy.stats as stats
# 표본 평균과 표본 표준편차 계산
sample_mean = np.mean(sample)
sample_std = np.std(sample)
# 95% 신뢰구간 계산
conf_interval = stats.t.interval(0.95, len(sample)-1, loc=sample_mean, sca
print(f"표본 평균: {sample_mean}")
print(f"95% 신뢰구간: {conf_interval}")
stats.t.interval란 뭘까?
scipy.stats 는 SciPy 라이브러리의 일부. scipy.stats.t.interval 함수는 주어진 신뢰 수준에서scipy.stats.t.interval(alpha, df, loc=0, scale=1)
- alpha
신뢰 수준을 의미. 예를 들어, 95% 신뢰 구간 을 원하면
alpha를 0.95로 설정.
- df
자유도를 나타냄. 일반적으로 표본 크기에서
1을 뺀 값으로 설정. df = n - 1
- loc
위치. 일반적으로 표본 평균을 설정.
- scale
스케일. 일반적으로 표본 표준 오차 설정. 표본 표준 오차는 표본 표준편차를 표본 크기의 제곱근으로 나눈 값.
scale = sample_std / sqrt(n)

대부분의 데이터가 평균 주변에 몰려 있음.
평균에서 멀어질수록 빈도는 줄어듦.
# 정규분포 생성
normal_dist = np.random.normal(170, 10, 1000)
# 히스토그램으로 시각화
plt.hist(normal_dist, bins=30, density=True, alpha=0.6, color='g')
# 정규분포 곡선 추가
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = stats.norm.pdf(x, 170, 10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('normal distribution histogram')
plt.show()


long_tail = np.random.exponential(1, 1000)
plt.hist(long_tail, bins=30, density=True, alpha=0.6, color='b')
plt.title('long tail distribution histogram')
plt.show()

모집단 기준: 성인 남녀 각각의 평균과 표준편차 설정
남성: 평균 175cm, 표준편차 7cm
여성: 평균 162cm, 표준편차 6cm
시각화 기준
성인 남녀의 키 데이터를 각각 정규 분포로 만들고,
한 눈에 볼 수 있도록 겹쳐서 시각화
도전 1

구체적 문제: 170cm 이하인 남성의 키를 알 수 없음.
생각: alpha 값을 이용해 투명도를 조절.
plt.hist(male_height, bins=30, alpha=0.5, color='blue', label='Male')
plt.hist(female_height, bins=30, alpha=0.5, color='red', label='Female')
구체적인 문제: 성별 구분이 명확하게 나타나지 않음.
생각: label 각 데이터가 무엇을 나타내는지 구분하도록.
plt.legend() 범례 표시 명령어. 추가 입력
구체적 문제: 랜덤 데이터를 여러 번 실행하면
결과가 매번 달라서 시각화 비교가 어려움
생각: np.random.seed(42) 추가
구체적인 문제:히스토그램만 보면
축과 제목이 없어서 해석 어려움
생각: 제목, x축, y축 라벨 추가
plt.title('Adult Height Distribution by Gender')
plt.xlabel('Height (cm)')
plt.ylabel('Frequency')

이렇게 보니, 수월하게 푼 것 같지만..
스스로 만든 히스토그램 시각화 완성하기까지
2시간 정도 걸린 것 같다.
비로소 원하는 게 나타났을 때 진심으로 울 뻔 했다,,
뿌듯해서 하룰라라~!@#~#!
오늘 이렇게 꽉 채운 TIL을 작성해봤다.
TIL을 20시~21시 작성하는 게 시간이 많이 촉박할 것 같아서
틈틈히 메모장 켜두고 작성했는데, 딱 알맞게 끝났다.
나름 그동안 해온 TIL보다 훨씬 탄탄하니까
내가 얻는 게 훨씬 많아졌다고 느꼈다.