9-2. Python으로 상관분석하기 (ANOVA검정)

2025. 2. 4. 10:30·스포츠 AI·빅데이터(2024~)/빅데이터기반 스포츠경기분석

*검정 주제: 프로야구에서 장타율에 따른 승률 분석

경기데이터.xlsx
0.11MB

 

1. 데이터 불러오기(경기데이터.xlsx)

import pandas as pd

#데이터불러오기
data = pd.read_excel("경기데이터.xlsx", sheet_name = "프로야구")
data.head()

 

2. 장타율 범주화

* 장타율 데이터를 범주화 시키는 이유는,  ANOVA 검정 자체가 연속형 변수와 범주형 변수 사이의 관계를 분석하기 위한 방법인데
장타율(연속형)  승률(연속형) 
두 변수 모두 연속형이기 때문에 장타율을 범주형 변수로 바꿔주기 위함!

** ANOVA 분석예시) 1,2,3반의 수학 점수 비교  / 귀무가설: 세 반의 평균점수가 같다.

import numpy as np
#장타율을 범주화 시키기
data['장타율_zscore'] = (data['장타율'] - data['장타율'].mean()) / data['장타율'].std()

# 조건 설정
conditions = [
    data['장타율_zscore'] > 0.5,
    (data['장타율_zscore'] >= -0.5) & (data['장타율_zscore'] <= 0.5),
    data['장타율_zscore'] < -0.5
]

# 각 조건에 해당하는 값
choices = [1, 2, 3]

# numpy.select 함수를 사용하여 새로운 변수 생성
data['장타율_zscore_category'] = np.select(conditions, choices)
data.head()

*위의 코드를 qcut함수를 통해 한 줄로 ⤵️

#ver 2 장타율 범주화 (3개의 범주로 나눔)
data['장타율_category'] = pd.qcut(data['장타율'], q=3, labels=[1, 2, 3])

장타율 범주화가 된 모습

3. 등분산성 검증

from scipy import stats

result = stats.levene(data.승률[data.장타율_zscore_category == 1],
                      data.승률[data.장타율_zscore_category == 2],
                      data.승률[data.장타율_zscore_category == 3])
print('LeveneResult(F) : %.3f \np-value : %.3f' % (result))
#p-value가 0.05 이상이므로 등분산성 만족

 

4. ANOVA 검정

from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

model = ols('승률 ~ C(장타율_zscore_category)', data).fit()
anova_lm(model)
#PR값이 0.05 보다 작으면 차이가 있다 -> 사후검증 진행

*ANOVA 검정 결과, 세 집단 간 유의한 차이가 있다고 나타나면 사후검증 진행

** 사후검증이란? 세 집단 중 어떤 집단 간에 차이가 있는지 추가적으로 살펴보는 분석법

 

5. 사후검정(*보편적으로 많이 사용하는 Tukey방식 사용)

from statsmodels.stats.multicomp import pairwise_tukeyhsd
hsd = pairwise_tukeyhsd(data['승률'], data['장타율_zscore_category'], alpha=0.05)
print(hsd)
#reject가 True 일 때만 차이가 있다는 뜻

*Tukey HSD 사후검증 결과 1그룹(M=0.530)이 3그룹(M=0.475)보다 승률이 더 높은 것으로 나타남

6. 기술통계량 구하기

#기술통계량 구하기
round(data.groupby('장타율_zscore_category').describe()['승률'],3)

반응형
'스포츠 AI·빅데이터(2024~)/빅데이터기반 스포츠경기분석' 카테고리의 다른 글
  • 9-1. Python으로 상관분석하기 (t검정)
  • 8. MLP 알고리즘
  • 7. Pagerank 알고리즘
  • 6. 스포츠 데이터를 활용한 의사결정 매커니즘
수영하는 두루미
수영하는 두루미
한국체육대학교에서 스포츠 AI빅데이터를 공부하고 있습니다. B.S. Computer Science
  • 수영하는 두루미
    두루미의 스포츠 데이터분석실
    수영하는 두루미
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • 스포츠 AI·빅데이터(2024~) (21)
        • 2024-2 (0)
        • 빅데이터기반 스포츠경기분석 (10)
        • 스포츠와 소셜텍스트분석 (4)
        • 영상기반 데이터 수집기법 (3)
        • 2025-1 (0)
        • 스포츠와 AI 모델링 기초 (0)
        • 스포츠와 프로그램 코딩(Python) (0)
        • 운동역학 (0)
        • 2025-2 (0)
        • 스포츠 AI빅데이터 연구 세미나 (1)
        • 스포츠 딥러닝 (0)
        • 운동생리학 (0)
        • etc. (0)
      • Data (13)
        • ADsP (1)
        • SQLD (1)
        • 빅데이터분석기사 (4)
        • ADP(데이터분석 전문가) (5)
        • 키다리아저씨(2021.12.05~) (2)
        • 파이썬 자격과정(2021.07.22-23) (0)
      • 정보처리기사 (1)
      • CSTS (10)
      • 블록체인과 암호화폐 (0)
        • 블록체인 (0)
      • Algorithm (44)
        • 백준 (42)
        • 자료구조 (2)
      • CSOS (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    heapsort
    스포츠빅데이터
    명세기반테스트
    구조기반테스트
    C언어
    경험기반테스트
    스포츠데이터
    한체대
    스포츠ai빅데이터
    한체대대학원
    데이터분석
    빅데이터분석기사
    자료구조
    스포츠데이터분석
    정적테스트
    Python
    백준
    csts
    알고리즘
    동적테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
수영하는 두루미
9-2. Python으로 상관분석하기 (ANOVA검정)
상단으로

티스토리툴바