Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

FanGraphs 데이터 수집 가이드: baseballr

Q's Laboratory

R 환경에서 FanGraphs(팬그래프)의 세이버메트릭스 데이터와 리더보드를 손쉽게 불러오기 위해 가장 널리 사용되는 패키지는 **baseballr**입니다.

이 패키지를 이용하면 팬그래프에서 제공하는 데이터를 데이터프레임(tibble) 형태로 데이터를 가져올 수 있습니다.


1. baseballr 패키지 설치 및 실행

baseballr은 CRAN에 등록되어 있으므로 install.packages()로 즉시 설치할 수 있습니다. 콘솔창에 아래 명령어를 입력하고 실행하세요.

# CRAN 버전 설치
install.packages("baseballr")

# 데이터 편집 및 시각화용 패키지 설치
install.packages("dplyr")
install.packages("ggplot2")

2. 주요 데이터 수집 함수

baseballr 패키지에서 팬그래프 데이터와 관련된 주요 함수는 접두사 fg_로 시작합니다.

함수명설명
fg_batter_leaders()시즌별/기간별 타자 리더보드 데이터 수집
fg_pitcher_leaders()시즌별/기간별 투수 리더보드 데이터 수집
fg_team_batter()팀 단위 타격 통계 지표 수집
fg_team_pitcher()팀 단위 투구 통계 지표 수집
fg_park()구장별 파크팩터(Park Factor) 데이터 수집

3. 타자 및 투수 리더보드 수집 예제

다음은 특정 시즌의 규정타석/규정이닝을 충족한 선수들의 세이버메트릭스 지표(wOBA, wRC+, WAR, FIP 등)를 가져오는 기본 예제입니다.

새로운 R 코드 파일을 생성합니다. File -> New File -> R Script를 선택하세요.

스크립트 창에 아래 코드를 입력하고 실행하세요.

library(baseballr)
library(dplyr)

# 1. 2026 시즌 타자 리더보드 가져오기
batters_2026 <- fg_batter_leaders(
  startseason = "2026", # 검색을 시작하는 시즌
  endseason = "2026", # 검색을 종료하는 시즌
  qual = "y" # 규정 타석을 충족하는 선수만 검색
)

# 주요 지표 확인
batters_2026 %>%
  select(PlayerName, team_name, G, PA, HR, wOBA, wRC_plus, WAR) %>% # 선수이름, 소속팀, 출장경기 수, 타수, 홈련, wOBA, WRC+, WAR을 출력
  arrange(desc(WAR)) %>% # WAR 내림차순으로 정렬
  head(10) # 상위 10명만 표시
# 2. 2026 시즌 선발 투수 리더보드 가져오기
pitchers_2026 <- fg_pitcher_leaders(
  startseason = "2026",
  endseason = "2026",
  qual = "y" # 규정 이닝을 충족하는 선수만 검색
)

# 투수 핵심 세이버메트릭스 지표 확인
pitchers_2026 %>%
  select(PlayerName, team_name, IP, ERA, FIP, xFIP, `K_9`, `BB_9`, WAR) %>% # 선수이름, 소속팀, 출장 이닝, 방어율, FIP, xFIP, 9이닝당 삼진, 볼넷, WAR을 출력
  arrange(desc(WAR)) %>%
  head(10)

4. 데이터 활용 및 시각화 예시

위에서 가져온 데이터를 이용하여 산점도를 그리는 예시 코드입니다.

코드를 실행하면 오른쪽 하단의 파일창이 플롯창으로 자동으로 바뀌고 시각화 결과가 표시됩니다.

library(ggplot2)

# 타자의 삼진율(K%) 대비 볼넷율(BB%) 및 wRC+ 시각화
batters_2026 %>%
  ggplot(aes(x = BB_pct, y = K_pct, size = WAR, color = wRC_plus)) + # x축은 볼넷율, y축은 삼진율, 점의 크기는 WAR, 점 색깔은 WRC+
  geom_point(alpha = 0.7) + # 점의 크기를 지정
  scale_color_viridis_c() + # 색상은 지표의 크기에 따라 자동으로 배정
  theme_minimal() + # 시각화 스타일
  labs(
    title = "2026 MLB Batter Plate Discipline vs WAR",
    x = "Walk Rate (BB%)",
    y = "Strikeout Rate (K%)",
    color = "wRC+",
    size = "WAR" # 도표에 기재할 텍스트 작성
  )

5. 특정 선수 조회: Pete Crow-Armstrong

특정 선수의 지표를 조회하는 방법은 크게 두 가지가 있습니다.

방법 A: 선수 이름과 일치하는 데이터를 추출

데이터베이스에서 이름에 해당하는 PlayerName 컬럼을 이용하여 선수의 이름을 필터링할 수 있습니다.

# 이름을 이용하여 필터링
pca_stats <- batters_2026 %>%
  filter(PlayerName == "Pete Crow-Armstrong") %>%
  select(
    PlayerName, team_name, Season, G, PA,
    H, HR, SB, AVG, OBP, SLG
  )

pca_stats

방법 B: 선수 고유 ID를 이용하여 데이터를 추출

playerid_lookup() 함수를 사용해 선수의 MLBAM/FanGraphs 고유 ID를 조회한 뒤 수집에 활용할 수도 있습니다.

# 1. 선수 ID 검색
pca_id <- playerid_lookup(last_name = "Crow-Armstrong", first_name = "Pete")

# 2. ID 확인 (fangraphs_id 컬럼 확인)
pca_id %>% 
  select(first_name, last_name, birth_year, mlbam_id, fangraphs_id)

# 3. ID를 이용하여 선수 데이터 필터링
pca_stats_by_id <- batters_2026 %>%
  filter(playerid == pca_id$fangraphs_id) %>%
  select(
    PlayerName, team_name, Season, G, PA,
    H, HR, SB, AVG, OBP, SLG
  )

pca_stats_by_id