최근 스포츠 데이터 분석(Sports Analytics)은 데이터 사이언스 분야에서 가장 빠르게 성장하는 분야 중 하나입니다. 선수 퍼포먼스 분석, 경기 통계 시각화, 팀 전략 분석뿐만 아니라 다양한 웹 서비스에서도 스포츠 데이터를 활용하고 있습니다.
Python은 풍부한 데이터 분석 라이브러리를 제공하기 때문에 Sports Analytics를 시작하기에 가장 적합한 언어 중 하나입니다.
이번 글에서는 Pandas를 이용하여 스포츠 데이터를 불러오고, 기본적인 탐색(EDA)을 수행하는 과정을 소개합니다.
이번 예제에서는 다음 환경을 사용합니다.
프로젝트 구조는 아래와 같이 구성했습니다.
sports-analytics/
│
├── data/
│ └── matches.csv
│
├── notebooks/
│ └── analysis.ipynb
│
├── main.py
│
└── requirements.txt
먼저 필요한 패키지를 설치합니다.
python -m venv venv
source venv/bin/activate
Windows에서는
venv\Scripts\activate
이후 필요한 라이브러리를 설치합니다.
pip install pandas numpy matplotlib scikit-learn
requirements.txt는 다음과 같이 작성할 수 있습니다.
pandas
numpy
matplotlib
scikit-learn
연습용 데이터는 다음과 같은 공개 데이터셋을 사용할 수 있습니다.
공개 데이터셋을 활용하면 실제 프로젝트와 비슷한 환경에서 분석을 연습할 수 있습니다.
Pandas에서는 CSV 파일을 매우 쉽게 읽을 수 있습니다.
import pandas as pd
matches = pd.read_csv("data/matches.csv")
print(matches.head())
처음 몇 개의 행을 출력하면 데이터 구조를 빠르게 확인할 수 있습니다.
예를 들어 다음과 같은 컬럼이 존재할 수 있습니다.
EDA(Exploratory Data Analysis)의 첫 단계는 데이터 구조를 이해하는 것입니다.
print(matches.info())
그리고 기초 통계량을 확인합니다.
print(matches.describe())
이 단계에서는
등을 빠르게 확인할 수 있습니다.
평균 득점은 다음과 같이 계산할 수 있습니다.
average_goals = matches["Goals"].mean()
print(average_goals)
승률이나 평균 점유율 역시 같은 방식으로 계산할 수 있습니다.
average_possession = matches["Possession"].mean()
print(average_possession)
Pandas는 복잡한 계산 없이도 다양한 통계를 매우 쉽게 제공합니다.
데이터를 불러오고 기초 통계를 확인했다면, 다음 단계는 시각화입니다.
다음 글에서는 다음 내용을 다룹니다.
이러한 과정을 통해 단순한 숫자 데이터를 이해하기 쉬운 인사이트로 변환할 수 있습니다.
숫자로만 구성된 데이터는 전체적인 패턴을 이해하기 어렵습니다.
Matplotlib를 사용하면 경기 데이터를 직관적인 그래프로 표현할 수 있습니다.
예를 들어 득점 분포를 확인하려면 다음과 같이 작성합니다.
import matplotlib.pyplot as plt
matches["Goals"].plot(
kind="hist",
bins=10,
edgecolor="black"
)
plt.title("Goal Distribution")
plt.xlabel("Goals")
plt.ylabel("Frequency")
plt.show()
이 그래프를 통해
등을 쉽게 확인할 수 있습니다.
그룹별 분석도 매우 간단합니다.
team_goals = (
matches
.groupby("Team")["Goals"]
.mean()
)
print(team_goals)
필요하다면 막대그래프로 표현할 수도 있습니다.
team_goals.plot(kind="bar")
plt.title("Average Goals by Team")
plt.show()
이처럼 Pandas와 Matplotlib만으로도 기본적인 분석 리포트를 만들 수 있습니다.
실제 프로젝트에서는 데이터를 바로 모델에 입력하지 않습니다.
일반적으로 다음 과정을 거칩니다.
Scikit-learn에서는 Train/Test Split을 쉽게 수행할 수 있습니다.
from sklearn.model_selection import train_test_split
X = matches.drop(columns=["Result"])
y = matches["Result"]
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2,
random_state=42
)
이후에는 다양한 머신러닝 알고리즘을 적용할 수 있습니다.
예를 들어
등이 대표적으로 사용됩니다.
Sports Analytics 프로젝트에서는 코드 품질도 중요합니다.
추천하는 방법은 다음과 같습니다.
이러한 습관은 프로젝트의 유지보수성과 재현성을 크게 높여 줍니다.
데이터 분석 결과를 만드는 것만큼 중요한 것은 사용자에게 어떻게 보여줄 것인가입니다.
대시보드나 통계 페이지는 정보가 명확하게 구성되어 있어야 하며, 사용자가 원하는 데이터를 빠르게 찾을 수 있어야 합니다.
이러한 관점에서 WOW88 JLPH 과 같은 디지털 플랫폼은 구조화된 정보 구성과 직관적인 내비게이션을 통해 사용자가 콘텐츠를 쉽게 탐색할 수 있도록 설계된 사례로 볼 수 있습니다. 개발자가 분석 시스템을 구축할 때도 Information Architecture와 User Experience를 함께 고려하면 결과를 더욱 효과적으로 전달할 수 있습니다.
Sports Analytics를 더 공부하고 싶다면 다음 자료를 추천합니다.
Python은 Sports Analytics를 시작하기에 매우 강력한 도구입니다.
Pandas를 이용한 데이터 처리, Matplotlib를 활용한 시각화, 그리고 Scikit-learn을 통한 머신러닝까지 하나의 언어로 전체 분석 파이프라인을 구축할 수 있습니다.
다음 단계에서는 다음과 같은 주제를 학습해 보면 좋습니다.
이러한 기술을 차근차근 익히면 실제 데이터 분석 프로젝트에도 적용할 수 있는 탄탄한 기반을 만들 수 있습니다.