Chapter 51 Advanced ~45 min read

International Player Evaluation

Evaluating prospects and players from international leagues.

The International Pipeline

International leagues produce significant NBA talent, from European stars to emerging talent from Australia, China, and beyond. Evaluating international players requires understanding league differences, competition quality, and how international play translates to the NBA.

League Quality Adjustments

International leagues vary substantially in quality. EuroLeague competition approaches NBA level for top teams; domestic leagues vary from near-EuroLeague (Liga ACB) to significantly below. Statistics require league-specific adjustments to enable cross-league comparison and NBA projection.

Style of Play Factors

International basketball often emphasizes different skills than the NBA. Team play, spacing, and fundamentals are often stronger; individual scoring creation may be less developed. Projecting international players must account for these stylistic differences and the adjustments they'll face in NBA contexts.

Data Availability Challenges

International league statistics are often less available and less granular than NCAA or NBA data. Scouts must rely more on video evaluation and combine with limited statistical analysis. Improving international data access remains an analytics frontier.

Implementation in R

# Injury impact analysis
library(tidyverse)

analyze_injury_impact <- function(injury_data, game_data) {
  injury_data %>%
    left_join(game_data, by = c("team_id", "season")) %>%
    group_by(player_id, player_name, injury_type) %>%
    summarise(
      games_missed = sum(games_missed),
      team_record_without = paste0(sum(wins_without), "-",
                                    sum(losses_without)),
      team_win_pct_without = mean(win_pct_without),
      team_net_rtg_without = mean(net_rtg_without),
      team_win_pct_with = mean(win_pct_with),
      team_net_rtg_with = mean(net_rtg_with),
      .groups = "drop"
    ) %>%
    mutate(
      win_pct_diff = team_win_pct_with - team_win_pct_without,
      net_rtg_diff = team_net_rtg_with - team_net_rtg_without,
      impact_per_game = round(net_rtg_diff, 1)
    )
}

injuries <- read_csv("injury_history.csv")
games <- read_csv("team_game_splits.csv")
injury_impact <- analyze_injury_impact(injuries, games)

print(injury_impact)

Implementation in Python

# Injury impact analysis
import pandas as pd

def analyze_injury_impact(injury_data, game_data):
    merged = injury_data.merge(game_data, on=["team_id", "season"])

    impact = merged.groupby(["player_id", "player_name", "injury_type"]).agg({
        "games_missed": "sum",
        "wins_without": "sum",
        "losses_without": "sum",
        "win_pct_without": "mean",
        "net_rtg_without": "mean",
        "win_pct_with": "mean",
        "net_rtg_with": "mean"
    }).reset_index()

    impact["win_pct_diff"] = impact["win_pct_with"] - impact["win_pct_without"]
    impact["net_rtg_diff"] = impact["net_rtg_with"] - impact["net_rtg_without"]
    impact["impact_per_game"] = impact["net_rtg_diff"].round(1)

    return impact

injuries = pd.read_csv("injury_history.csv")
games = pd.read_csv("team_game_splits.csv")
injury_impact = analyze_injury_impact(injuries, games)
print(injury_impact)

Implementation in R

# Injury impact analysis
library(tidyverse)

analyze_injury_impact <- function(injury_data, game_data) {
  injury_data %>%
    left_join(game_data, by = c("team_id", "season")) %>%
    group_by(player_id, player_name, injury_type) %>%
    summarise(
      games_missed = sum(games_missed),
      team_record_without = paste0(sum(wins_without), "-",
                                    sum(losses_without)),
      team_win_pct_without = mean(win_pct_without),
      team_net_rtg_without = mean(net_rtg_without),
      team_win_pct_with = mean(win_pct_with),
      team_net_rtg_with = mean(net_rtg_with),
      .groups = "drop"
    ) %>%
    mutate(
      win_pct_diff = team_win_pct_with - team_win_pct_without,
      net_rtg_diff = team_net_rtg_with - team_net_rtg_without,
      impact_per_game = round(net_rtg_diff, 1)
    )
}

injuries <- read_csv("injury_history.csv")
games <- read_csv("team_game_splits.csv")
injury_impact <- analyze_injury_impact(injuries, games)

print(injury_impact)

Implementation in Python

# Injury impact analysis
import pandas as pd

def analyze_injury_impact(injury_data, game_data):
    merged = injury_data.merge(game_data, on=["team_id", "season"])

    impact = merged.groupby(["player_id", "player_name", "injury_type"]).agg({
        "games_missed": "sum",
        "wins_without": "sum",
        "losses_without": "sum",
        "win_pct_without": "mean",
        "net_rtg_without": "mean",
        "win_pct_with": "mean",
        "net_rtg_with": "mean"
    }).reset_index()

    impact["win_pct_diff"] = impact["win_pct_with"] - impact["win_pct_without"]
    impact["net_rtg_diff"] = impact["net_rtg_with"] - impact["net_rtg_without"]
    impact["impact_per_game"] = impact["net_rtg_diff"].round(1)

    return impact

injuries = pd.read_csv("injury_history.csv")
games = pd.read_csv("team_game_splits.csv")
injury_impact = analyze_injury_impact(injuries, games)
print(injury_impact)
Chapter Summary

You've completed Chapter 51: International Player Evaluation.