통계 기초 -1

김주호·2024년 11월 11일

1. 기술통계

  • 주로 평균, 중앙값, 분산, 표준편차 등을 사용함.
  • 데이터 특정 대표값 요약
  • 단 예외(이상치)라는게 존재할 수 있고 데이터의 모든 부분을 확인할 수 있는 것은 아님.

평균

  • 평균은 데이터 중앙값

분산

  • 데이터 값들이 평균으로부터 얼마나 떨어져 있는지 나타내는 척도 데이터의 흩어짐 정도를 측정
    -각 데이터 값에서 평균을 뺀 값을 제곱. / 분산(1+1+1+1)/4= 125

표준편차

  • 평균에서 얼마나 떨어져 있는지 나타내는 통계적 척도 분산의 제곱근을 취하여 계산

  • 데이터의 변동성을 측정하며 값이 클수록 데이터가 평균으로부터 더 넓게 퍼져있다.

  • 분산은 (225 + 25 + 25 + 225) / 4 = 125입니다. 표준편차는 분산의 제곱근이므로 분산에 루트(root)를 씌워 약 11.18입니다.

표준편차와 분산의 관계

  • 데이터의 변동성을 측정하는 두가지 주요 척도

2. 추론통계

- 표본 데이터를 통해 모집단의 특성을 추정하고 가설을 검정하는 통계 방법.

1. 신뢰구간

  • 신뢰구간은 모집단의 평균이 특정 범위 내에 있을 것이라는 확률을 나타냅니다.

2. 가설검정

  • 가설검정은 모집단에 대한 가설을 검증하기 위해 사용됩니다. 일반적으로 두가지 가설이 있으며, 귀무가설은 검증하고자 하는 가설이 틀렸음을 나타내는거 / 대립가설은 그 반대
# 데이터 분석에서 자주 사용되는 라이브러리
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}")
## 범위  #### 범위(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()


## 이진 데이터와 범주 데이터 탐색
# 막대 그래프랑 히스토그램은 다르다 둘다 막대로 그려지는건 동일 막대는(범주형), 히스토그램은(수치형)
# 두 가지는 다른 시각화 방식이다.
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()

상관 관계
# 음의방향 -1 / 양의 방향 +1 (강력한 상관관계) / -0.5나 0.5를 가지면 중간정도 상관관계를 가짐 / 0에 가까울 수록 상관관계가 없다. 
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] # 상관계수 계산 / x와 y의 관계

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

plt.scatter(study_hours, exam_scores) # 산점도 그리기
plt.show()

인과관계는 상관관계와는 다르게 원인, 결과가 분명해야함! / 상관관계는 반대 / 인과관계는 한 변수가 다른 변수에 미치는 영향을 나타냄

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. 이 데이터의 평균을 구하세요.

data = [78, 82, 85, 88, 90, 92, 94, 96, 98, 100]
mean = np.mean(data)
print(mean)

4번 문제의 학생 수학 점수의 중앙값을 구하세요.

data = [78, 82, 85, 88, 90, 92, 94, 96, 98, 100]
median = np.median(data)
print(median)

4번 문제의 학생 수학 점수 데이터의 범위(Range)를 구하세요.

variance = np.var(data) # 분산
std_dev = np.std(data) # 표준편차
data_range = np.max(data) - np.min(data) # 범위

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

학생들의 수학 점수와 영어 점수가 각각 다음과 같을 때, 두 변수 간의 상관관계가 양의 상관관계인지, 음의 상관관계인지, 상관관계가 없는지 설명하고 그 이유를 얘기하세요.

ss = [78, 82, 85, 88, 90, 92, 94, 96, 98, 100] # 수학점수
ee = [70, 75, 80, 85, 85, 90, 90, 95, 95, 100] # 영어점수
correlation = np.corrcoef(ss, ee)[0, 1] # 상관계수 계산 / x와 y의 관계

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

plt.scatter(study_hours, exam_scores) # 산점도 그리기
plt.show()

0개의 댓글