티스토리 뷰
통계학 기초) 챕터 1: 데이터 분석과 통계
통계를 알면 데이터 기반의 의사결정을 내릴 수 있다! 통계를 모르는 데이터 분석가는 없다!
1-2. 기술통계와 추론통계
통계의 양대산맥! 기술통계 vs 추론통계
1) 기술통계 : 데이터를 요약하고 설명하는 통계 방법
- 평균, 중앙값, 분산, 표준편차 등
- 데이터를 특정 대표 값으로 요약
- 통계라고 했을 때 바로 생각나는 수치들
- 이상치가 존재할 수 있다는 것을 명심하기!


분산은 데이터 값과 평균의 차이를 제곱하여 평균을 낸 값이기 때문에 제곱 단위로 표현되지만,
표준편차는 다시 제곱근을 취하여 원래 데이터 값과 동일한 단위로 변환한다
→ 표준편차가 분산에 비해 훨씬 직관적이다!
2) 추론통계 : 표본 데이터를 통해 모집단의 특성을 추정하고 가설을 검정하는 통계 방법
- 신뢰구간, 가설검정 등을 사용
- 데이터의 일부로 전체를 추정!
- 추론이 어렵지만 결과는 강력할 수 있다!
- 신뢰구간: 모집단의 평균이 특정 범위 내에 있을 것이라는 확률(주로 95%, 99% 사용)

- 가설검정: 모집단에 대한 가설을 검증하기 위해 사용
- 귀무가설(H0): 검증하고자 하는 가설이 틀렸음을 나타내는 기본 가설(변화가 없다, 효과가 없다 등)
- 대립가설(H1): 귀무가설의 반대 가설로 주장하는 바를 나타냄(변화가 있다, 효과가 있다 등)
- p-value를 사용해 귀무가설을 기각할지 여부 결정! (p-value는 보통 0.05 사용)
가설이 맞다는 것을 검정하려면 귀무가설은 틀리고, 대립가설이 맞기를 바라야 한다!
1-3. 다양한 분석 방법
1) 위치 추정: 데이터의 중심을 확인하는 방법 (평균, 중앙값)

2) 변이 추정: 데이터들이 서로 얼마나 다른지 확인하는 방법 (분산, 표준편차, 범위)
범위(R) = 최대값 - 최소값

3) 데이터 분포 탐색: 데이터 값들이 어떻게 이루어져 있는지 확인하는 방법 (히스토그램, Box Plot)



4) 이진 데이터와 범주 데이터 탐색: 데이터들이 서로 얼마나 다른지 확인하는 방법 (파이 그림, 막대 그래프)
- 최빈값을 주로 사용
- 범주형 데이터: 막대 그래프, 수치형 데이터: 히스토그램 ← 차이 기억하기!


5) 상관관계: 데이터들끼리 서로 관련이 있는지 확인하는 방법
- 상관계수: 두 변수 간의 관계를 측정하는 방법
- -1 ≤ 상관계수 ≤ 1, -1이나 1에 가까워지면 강력한 상관관계를 가진다!


correlation = np.corrcoef(study_hours, exam_scores)[0, 1]
이 한 줄에 넘파이의 핵심 개념이 숨어 있다.
여기에서 [0, 1]이 왜 필요한지 차근차근 정리해보자.
1️⃣ np.corrcoef()는 무엇을 돌려줄까?
이 함수는 상관계수 하나만 주는 게 아니라, 상관계수 행렬(2×2 매트릭스)를 반환한다!
예를 들어,
np.corrcoef(study_hours, exam_scores)
결과는 이런 형태야 👇
이게 의미하는 건
| 위치 | 의미 |
| [0,0] | study_hours 와 study_hours 의 상관계수 (= 1) |
| [1,1] | exam_scores 와 exam_scores 의 상관계수 (= 1) |
| [0,1] | study_hours 와 exam_scores 의 상관계수 |
| [1,0] | exam_scores 와 study_hours 의 상관계수 |
2️⃣ 왜 [0, 1]을 쓰는 걸까?
우리는 두 변수 사이의 상관계수만 필요하니까!
np.corrcoef()는 상관계수 하나가 아니라 행렬을 주기 때문에,
두 변수 사이 값만 꺼내려고 [0,1]을 쓰는 것!
6) 인과관계와 상관관계의 차이: 인과관계는 상관관계와는 다르게 원인, 결과가 분명해야 함!
ex) 아이스크림 판매량과 익사 사고 수 간의 상관관계는 높지만, 인과관계는 아님
(여름이라는 원인이 있고 각각의 결과가 나오는 것이기 때문에 상관관계는 있을 수 있으나 인과관계는 X)
7) 다변량 분석: 여러 데이터들끼리 서로 관련이 있는 확인하는 방법
data = {'TV': [230.1, 44.5, 17.2, 151.5, 180.8],
'Radio': [37.8, 39.3, 45.9, 41.3, 10.8],
'Newspaper': [69.2, 45.1, 69.3, 58.5, 58.4],
'Sales': [22.1, 10.4, 9.3, 18.5, 12.9]}
df = pd.DataFrame(data)
sns.pairplot(df) # 각각의 변수 간의 관계를 모두 산점도로 그려줌
plt.show()
df.corr()


Q1. 데이터 분석에서 통계가 중요한 이유는 무엇인가요? 다음 보기 중에서 옳지 않은 것을 고르세요.
1) 통계는 데이터를 이해하고 해석하는 데 도움을 준다.
2) 통계는 데이터에서 패턴을 발견하고 미래를 예측하는 도구를 제공한다.
3) 통계는 모든 데이터 분석 결과가 항상 정확하고 확실하다는 것을 보장한다.
4) 통계는 복잡한 데이터를 간단한 요약 정보로 변환할 수 있다.
Q2. 다음 중 기술통계(Descriptive Statistics)에 해당하는 것은 무엇인가요?
1) 모집단의 평균을 추정하는 것
2) 데이터의 중앙값을 계산하는 것
3) 표본을 통해 모집단의 특성을 추론하는 것
4) 가설을 검증하는 것
모집단이라는 말이 나오면 추론통계!
Q3. 다음 중 추론통계(Inferential Statistics)에 해당하는 것은 무엇인가요?
1) 데이터의 범위를 계산하는 것
2) 데이터의 분산을 계산하는 것
3) 표본을 기반으로 모집단의 평균을 추정하는 것
4) 데이터의 최빈값을 계산하는 것
Q4. 학생들의 수학 점수와 영어 점수가 각각 다음과 같을 때, 두 변수 간의 상관관계가 양의 상관관계인지, 음의 상관관계인지, 상관관계가 없는지 설명하고 그 이유를 얘기하세요.
수학 점수: 78, 82, 85, 88, 90, 92, 94, 96, 98, 100.
영어 점수: 70, 75, 80, 85, 85, 90, 90, 95, 95, 100.

→ 상관계수 = 0.99 로 수학 점수와 영어 점수 간 매우 강력한 양의 상관관계를 가진다!
Q5. 다음 중 인과관계(Causation)와 상관관계(Correlation)의 차이에 대한 설명으로 옳은 것은 무엇인가요?
1) 상관관계는 두 변수 간의 원인과 결과를 나타내고, 인과관계는 단순한 관계를 나타낸다.
2) 인과관계는 두 변수 간의 원인과 결과를 나타내고, 상관관계는 두 변수 간의 관계가 있지만 원인과 결과를 나타내지 않는다.
3) 상관관계와 인과관계는 동일한 개념이다.
4) 인과관계는 두 변수 간의 단순한 관계를 나타내고, 상관관계는 두 변수 간의 원인과 결과를 나타낸다.
통계학 기초) 챕터 2: 데이터의 분포
2-1. 모집단과 표본
1) 모집단(Population): 관심의 대상이 되는 전체 집단 (ex. 한 국가의 모든 성인)
2) 표본(Sample): 모집단에서 추출한 일부 (ex. 그 국가의 성인 중 일부를 조사)

np.random.normal 함수
: 정규분포(가우시안 분포)를 따르는 난수를 생성
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, 즉 스칼라 값 반환)
population = np.random.normal(170, 10, 1000)
평균이 170이고, 표준편차가 10인 랜덤 데이터를 1000개 만들어라!
np.random.choice 함수
: 주어진 배열에서 임의로 샘플링하여 요소를 선택
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): 출력 배열의 크기 (기본값: None, 즉 단일 값 반환)
- replace (boolean): 복원 추출 여부를 나타냄. True면 동일한 요소가 여러 번 선택될 수 있다 (기본값: True)
- p (1-D array-like, optional): 각 요소가 선택될 확률. 배열의 합은 1이어야 함
sample = np.random.choice(population, 100)
population 배열 중에서 100개만 랜덤으로 추출해라 (복원 추출 = 중복 가능)
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()

2-2. 표본오차와 신뢰구간
1) 표본오차: 표본에서 계산된 통계량과 모집단의 진짜 값 간의 차이
- 표본 크기가 클수록 표본오차는 작아짐
- 무작위 추출 방법을 사용하면 표본오차를 줄일 수 있음
2) 신뢰구간: 모집단의 특정 파라미터(ex. 평균, 비율)에 대해 추정된 값이 포함될 것으로 기대되는 범위
신뢰구간=표본평균±z×표준오차
z는 선택된 신뢰수준에 해당하는 z-값
예를 들어, 95% 신뢰수준의 z-값은 1.96

scipy.stats.t.interval 함수
: 주어진 신뢰 수준에서 t-분포(밑에서 얘기하는 student t 분포)를 사용하여 신뢰 구간(confidence interval)을 계산
scipy.stats.t.interval(alpha, df, loc=0, scale=1)
- alpha: 신뢰 수준(confidence level)을 의미. 예를 들어, 95% 신뢰 구간을 원하면 alpha를 0.95로 설정
- df: 자유도(degrees of freedom)를 의미. 일반적으로 표본 크기에서 1을 뺀 값으로 설정 (df = n - 1)
- loc: 위치(parameter of location)로, 일반적으로 표본 평균을 설정
- scale: 스케일(parameter of scale)로, 일반적으로 표본 표준 오차(standard error)를 설정
표본 표준 오차는 표본 표준편차를 표본 크기의 제곱근으로 나눈 값 (scale = sample_std / sqrt(n))
95% 표본 신뢰구간을 구해라! 신뢰구간 안에 표본 평균이 들어와야 함!conf_interval = stats.t.interval(0.95, len(sample)-1, loc=sample_mean,
scale=sample_std/np.sqrt(len(sample)))
2-3. 정규분포 (Normal)
: 종 모양의 대칭 분포로, 대부분의 데이터가 평균 주위에 몰려 있는 분포
- 데이터 수가 많아질수록 정규분포에 가까워질 수 있다!

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
# 정규분포 생성
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()

2-4. 긴 꼬리 분포 (Long Tail Distribution) → 유일하게 정규분포랑 관련 없음
: 긴 꼬리 분포는 대부분의 데이터가 분포의 한쪽 끝에 몰려 있고, 반대쪽으로 긴 꼬리가 이어지는 형태의 분포
- 특정한 하나의 분포를 의미하지 않으며 여러 종류의 분포(예: 파레토 분포, 지프의 법칙, 멱함수)를 포함
- 소득 분포, 웹사이트 방문자 수, 도서 판매량(소수의 베스트셀러가 전체 판매량의 대부분을 차지) 등

# 긴 꼬리 분포 생성 (예: 소득 데이터)
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()

2-5. 스튜던트 t 분포 (Student-T) → 표본이 작을 때 정규분포 대신 사용!
: 모집단의 표준편차를 알 수 없고 표본의 크기가 작은 경우(일반적으로 30미만)에 사용되는 분포
- 정규분포와 유사하지만, 표본의 크기가 작을수록 꼬리가 두꺼워짐
- 시험 점수 비교, 임상 시험 비교 등
자유도가 커질수록(= 표본이 커질수록) 정규분포에 가까워진다!
(일반적으로, 자유도 = 표본 크기 - 1 이니까)

# 스튜던트 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()

2-6. 카이제곱분포 (Chi-Square) → 독립성 검정이나 적합도 검정에 사용되는 분포!
: 범주형 데이터의 독립성 검정이나 적합도 검정에 사용되는 분포
- 상관관계나 인과관계를 판별하고자 하는 원인의 독립변수가 ‘완벽하게 서로 다른 질적 자료’일 때 활용
- 성별이나 나이에 따른 선거 후보 지지율 등
- 범주형 데이터 분석에 사용
1) 독립성 검정
: 두 범주형 변수 간의 관계가 있는지 확인할 때 사용
→ 숫자형 데이터는 상관관계를 분석하면 되는데, 범주형 데이터는 상관관계 분석을 못하므로
2) 적합도 검정
: 관측한 값들이 특정 분포에 해당하는지? 검정할 때 사용
→ 주사위의 각 면이 동일한 확률로 나오는지 검토
t 분포와 마찬가지로, 자유도가 커질수록(= 표본이 커질수록) 정규분포에 가까워진다!
(일반적으로, 자유도 = 표본 크기 - 1 이니까)

# 카이제곱분포 생성
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()

2-7. 이항분포 (=이산형분포, Binomial) → 결과가 2개가 나오는 상황일 때 사용하는 분포!
: 성공/실패와 같은 두 가지 결과를 가지는 실험을 여러 번 반복했을 때 성공 횟수의 분포
- 동전 던지기(앞면/뒷면), 품질 관리(합격/불합격) 등

# 이항분포 생성 (예: 동전 던지기 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()

2-8. 푸아송분포 (Poisson) → 희귀한 사건이 발생할 때 사용하는 분포!
: 평균 발생률 λ를 가진 사건이 주어진 시간 또는 공간 내에서 몇 번 발생하는지
- 콜센터(특정 시간 동안 전화 통화 수), 교통사고(특정 도로 구간에서 일정 기간 동안 발생하는 교통사고의 수), 문자 메시지, 웹사이트 트래픽 등
λ(평균 발생률)가 무한으로 가면 정규분포를 따른다!

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-9. 분포 정리하기
☑️ 데이터 수가 충분하다 → (무조건) 정규분포에 근사
☑️ 데이터 수가 작다 → 스튜던트 t 분포
☑️ 일부 데이터가 전체적으로 큰 영향을 미친다 → 롱 테일 분포 (파레토 분포)
☑️ 범주형 데이터의 독립성 검정이나 적합도 검정 → 카이 제곱 분포
☑️ 결과가 두 개(성공 or 실패)만 나오는 상황 → 이항 분포
☑️ 특정 시간, 공간에서 발생하는 사건 → 푸아송 분포
라이브 세션) 통계 이론 1일차: 기본 개념 이해
데이터의 유형
1) 수치형/양적 데이터
- 이산형: 셀 수 있는 정수 값 (고객 수, 불량품 개수, 클릭 횟수)
- 연속형: 측정 가능한 실수 값 (키, 몸무게, 온도, 풍속)
2) 범주형/질적 데이터
- 명목형: 순서 없는 범주 (성별, 혈액형, 지역)
- 순서형: 순서 있는 범주 (수능 등급, 만족도 등급, 선호도 순위)
- 이진형: 두 개의 값 (0/1 혹은 참/거짓)만을 갖는 범주형 데이터의 특수한 경우
오늘부터 데이터 분석 입문 주차에 들어섰다.
처음으로 통계를 배우게 되었는데, VOD 강의를 먼저 듣고 라이브 세션을 들으니 훨씬 이해가 잘 되었다.
이전에 통계를 배우려고 책까지 사두었지만 이런저런 이유로 계속 미루기만 했었다.
이번 주부터는 더 이상 미루지 말고, 꼭 제대로 읽어야겠다고 다시 한 번 다짐하게 됐다.
내일부터는 실습도 함께 진행될 예정인데, 통계는 중간 과정을 한 번 놓치면 뒤까지 따라가기 어려운 만큼 더 집중해서 임해야겠다.
'내일배움캠프 데이터 분석' 카테고리의 다른 글
| 33일차) 내일배움캠프 데이터 분석 TIL - 통계(3) (0) | 2026.02.06 |
|---|---|
| 32일차) 내일배움캠프 데이터 분석 TIL - 통계(2) (1) | 2026.02.05 |
| 30일차) 내일배움캠프 데이터 분석 TIL - 성취도 평가 (0) | 2026.02.03 |
| 27일차) 내일배움캠프 데이터 분석 TIL - 기초 프로젝트(5) (0) | 2026.01.29 |
| 26일차) 내일배움캠프 데이터 분석 TIL - 기초 프로젝트(4) (0) | 2026.01.28 |
- Total
- Today
- Yesterday
- Python
- 코딩기초
- github
- 프로그래밍입문
- 통계
- 중학생코딩
- SQL
- 데이터분석
- 코딩처음
- 텍스트분석
- 코드카타
- GoogleColab
- Til
- 태블로
- 데이터시각화
- 내일배움캠프
- 판다스
- 데이터분석입문
- 비전공자코딩
- 파이썬입문
- 파이썬
- git
- Tableau
- 구글코랩
- 머신러닝
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
