통계 공부 | 통계학 기초 개념, 파이썬으로 구하는 방법

2025. 1. 7. 11:01·Python

기술통계(Descriptive statistics)란

  • 있는 사실(가지고 있는 데이터)을 요약하고 설명하는 통계 방법 
  • 데이터를 특정 대표값(평균, 중앙값 등)으로 요약해서 데이터의 특징을 간단하고 쉽게 알 수 있음
  • 단, 데이터 중 예외(이상치)라는게 항상 존재할 수 있어 데이터의 모든 부분을 확인할 수 있는 것은 아님

평균

  • 모든 데이터를 더한 후 데이터의 개수로 나누어 계산

중앙값

  • 데이터셋을 크기 순서대로 정렬했을 때 중앙에 위치한 값
  • 중앙값은 이상치에 영향을 덜 받기 때문에 데이터에 이상치가 있으면 중앙값 사용하는 것이 나음

분산

  • 데이터 값들이 평균으로부터 얼마나 떨어져 있는지를 나타내는 척도, 각 데이터 값에서 평균 뺀 값을 제곱
  • ex. 데이터가 70,80,90,100일 때 평균은 85, 분산은 각 데이터에서 평균 빼고 제곱한 값을 모두 더해서 데이터 개수로 나누면 분산 = (225 + 25 + 25 + 225) / 4 = 125
    • (70-85)^2 = 225
    • (80-85)^2 = 25
    • (90-85)^2 = 25
    • (100-85)^2 = 225

표준편차

  • 분산과 동일한 용도로 값이 클수록 데이터가 평균으로 더 넓게 퍼져 있음을 의미, 분산의 제곱근
  • 표준편차는 원래 데이터 값과 동일한 단위로 변환되어 분산보다 직관적임
  • ex. 데이터가 70,80,90,100일 때 평균은 85, 분산은 125. 근데 데이터는 70~120인데 분산이 125라서 평균에서 얼마나 떨어진 값이라는건지 감이 안 오니까 표준편차를 구함. 125의 제곱근 = 11.18

추론 통계(Inferential Statistics)란

  • 데이터 일부를 통해 전체를 추론하는 것
  • 가지고 있지 않은 데이터, 미래에 일어날 일을 추론해야 해서 기술 통계보다 쉽지 않음

신뢰 구간 (Confidence Interval)

  • 모집단의 평균이 특정 범위 내에 있을 확률
  • 일반적으로 95% 신뢰 구간 사용

가설 검정 (Hypothesis Testing)

  • 모집단에 대한 가설을 검증하기 위해 사용
  • 귀무가설과 대립가설이 있음

귀무가설 (H0)

  • 검증하고자 하는 가설이 틀렸음을 나타내는 기본 가설

대립가설 (H1)

  • 그 반대 가설로 주장하는 바
  • 둘 중 무엇이 맞는지 확인하는 방법 : `p-value`가 0.05 이하면 귀무가설 기각 가능

Python 실습

위치 추정

  • 데이터 중심 확인하는 방법 `평균` `중앙값`
# 데이터 분석에서 자주 사용되는 라이브러리
import pandas as pd
# 다양한 계산을 빠르게 수행하게 돕는 라이브러리
import numpy as np
# 시각화 라이브러리
import matplotlib.pyplot as plt
# 시각화 라이브러리2
import seaborn as sns
# 이 data는 아래에서도 계속 사용 됩니다
data = [85, 90, 78, 92, 88, 76, 95, 89, 84, 91]
mean = np.mean(data)
median = np.median(data)

print(f"평균: {mean}, 중앙값: {median}")

변이 추정

  • 데이터들이 서로 얼마나 다른지 확인하는 방법 `분산` `표준편차` `범위`
  • `범위(range)` : 데이터셋에서 가장 큰 값과 가장 작은 값의 차이를 나타내는 간단한 분포의 측도, 데이터가 어느 정도의 변동성을 가지는지 쉽게 파악 가능함. 범위(R) = 최대값 - 최소값
variance = np.var(data)
std_dev = np.std(data)
data_range = np.max(data) - np.min(data)

print(f"분산: {variance}, 표준편차: {std_dev}, 범위: {data_range}")

데이터 분포 탐색

  • 데이터가 어떻게 이루어져 있는지 확인 `히스토그램` `상자 그림`
plt.hist(data, bins=5)
plt.title('histogram')
plt.show()

plt.boxplot(data)
plt.title('boxplot')
plt.show()

이진 데이터와 범주 데이터 탐색

  • 데이터들이 서로 얼마나 다른지 확인하는 방법 `최빈값`
  • ex. 고객 만족도 설문에서 만족/불만족의 빈도 분석
satisfaction = ['satisfaction', 'satisfaction', 'dissatisfaction', 
'satisfaction', 'dissatisfaction', 'satisfaction', 'satisfaction', 
'dissatisfaction', 'satisfaction', 'dissatisfaction']
satisfaction_counts = pd.Series(satisfaction).value_counts()

satisfaction_counts.plot(kind='bar')
plt.title('satisfaction distribution')
plt.show()

상관관계

  • 데이터들끼리 서로 얼마나 관련있는지 확인하는 방법 `상관계수`
  • ex. 공부 시간과 시험 점수간의 상관관계 분석
study_hours = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
exam_scores = [95, 90, 85, 80, 75, 70, 65, 60, 55, 50]
correlation = np.corrcoef(study_hours, exam_scores)[0, 1]

print(f"공부 시간과 시험 점수 간의 상관계수: {correlation}")

plt.scatter(study_hours, exam_scores)
plt.show()

인과관계와 상관관계의 차이

  • 인과관계는 상관관계와 달리 원인와 결과가 분명해야 함
  • ex. 아이스크림 판매량과 익사 사고 수간의 상관관계는 높지만, 인과관계는 아님

두 개 이상의 변수 탐색

  • 여러 데이터끼리 서로 관련이 있는지 확인
  • ex. 여러 마케팅 채널의 광고비와 매출 간의 관계 분석
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()
# heatmap까지 그린다면
sns.heatmap(df.corr())

연습문제

어느 학교의 학생들 10명의 수학 점수와 영어 점수는 다음과 같습니다

  • 수학 점수: 78, 82, 85, 88, 90, 92, 94, 96, 98, 100
  • 영어 점수: 70, 75, 80, 85, 85, 90, 90, 95, 95, 100

1. 학생들의 수학 점수의 평균, 중앙값, 범위를 구하세요.

더보기

평균:90.3 중앙값:91.0 범위:22

math = [78, 82, 85, 88, 90, 92, 94, 96, 98, 100]
english = [70, 75, 80, 85, 85, 90, 90, 95, 95, 100]

math_mean = np.mean(math)
math_median = np.median(math)
math_range = np.max(math)-np.min(math)
print(f'평균:{math_mean} 중앙값:{math_median} 범위:{math_range}')

 

2. 학생들의 수학 점수와 영어 점수가 양의 상관관계인지, 음의 상관관계인지, 상관관계가 없는지 설명하고 그 이유를 얘기하세요.

더보기

수학 점수와 영어 점수의 상관계수가 0.99로 매우 높은 양의 상관관계가 있다.

수학 점수가 높을 때 영어 점수도 높은 경향이 있다.

# 리스트로 데이터프레임 만들기
score = {'math':math, 'english':english}
score_df = pd.DataFrame(score)
# 상관관계 구하기
score_df.corr()

 

'Python' 카테고리의 다른 글
  • 통계 공부 | 데이터의 분포, 파이썬으로 구하는 방법
  • Python 실습 | 약수의 합
  • Python 실습 | 자릿수 더하기
  • Python 실습 | 문자열 데이터 딕셔너리로 변환
초담
초담
4년차 마케터입니다
  • 초담
    그로스마케터의 기록
    초담
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (117)
      • Data Analytics Project (3)
      • SQL (55)
      • Python (43)
      • GA4 (0)
      • Tableau (8)
      • 아티클 스터디 (7)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
초담
통계 공부 | 통계학 기초 개념, 파이썬으로 구하는 방법
상단으로

티스토리툴바