【記事内容更新】
本記事の分析は、レギュラーシーズン途中のスタッツを使って進めています。レギュラーシーズンの全期間を通したスタッツを使って、改めて分析を行ったアップデート版の記事を別途作成していますので、分析内容に興味がある方はこちらの記事をご確認ください。
シェイ・ギルジャス=アレクサンダー(以下SGAと表記)は、2024年11月1日のポートランド・トレイルブレイザーズ戦から2025年4月5日のヒューストン・ロケッツ戦まで、70試合連続で20得点以上を記録しました。 この記録は、マイケル・ジョーダンが1990-91シーズンに達成した69試合連続を上回り、NBA史上4番目に長いものです。そこで今回はSGAの得点能力に焦点をあてて、以下の3つを大きな分析の柱として、その特徴と傾向を確認していきたいと思います。
- ショットの距離
 - 試合時間の経過
 - クラッチタイム(試合終盤のプレッシャー)
 
なお、データはBigDataBallウェブサイトで購入したPbP. BDB(いわゆるPlay By Playデータ、過去記事を参照)を使用しており、分析は統計ソフトRにより実行しています。
※データ分析を実践する際に参考にしている書籍『Basketball Data Science: With Applications in R』の紹介記事も書いていますので、よろしければご確認ください。
シェイ・ギルジャス・アレクサンダーの基本スタッツ<2024-25シーズン>
まずは、得点力に関する主要スタッツを確認していきます。 以下は、2025/04/08時点で出場時間が1400分以上のプレーヤーを対象にした中での、SGAのスタッツとリーグ順位です。(※スタッツはNBA公式HPより引用)
Table 1: Shai Gilgeous-Alexander Key Stats (2024–25 Season)
| Stat | Value | League Rank | 
| PTS | 2442 | 1st | 
| FGM | 846 | 1st | 
| FG% | 51.9% | 25th | 
| 3PM | 158 | 46th | 
| 3P% | 37.1% | 77th | 
| FTM | 592 | 1st | 
| FT% | 87.2% | 9th | 
| +/- | 911 | 1st | 
SGAはリーグ最多得点・最多FG成功数・最多FT成功数を記録しており、高い得点能力と試投効率のバランスを兼ね備えたスコアラーといえます。
以降は、ショットチャートをはじめとした様々なデータとチャートを交えて、SGAのショットの特徴と傾向を確認していきたいと思います。
ショットチャートで見るシェイ・ギルジャス・アレクサンダーの得点傾向
ショットチャート
ここでは、SGAのショット試投や得点の傾向を把握するために、同選手のショットチャート(セクターマップとHexbinマップ)を確認していきます。
(※セクターマップの見方はこちら、Hexbinマップの見方はこちらを参照。)


※クリックで拡大可
上記のチャートから読み取れる傾向、浮かび上がるSGAのプレースタイルをまとめます。
🏀 SGAの得点傾向とプレースタイルの分析
✅ ペイントエリア〜ミドルエリア
- プレイの密度が高く、成功率も高い(特にリム周りでは69%、リム正面では56%など)→ ドライブ力とフィニッシュ力が非常に高いことを示唆
 - Hexbinマップで見てもこのエリアは圧倒的に密集 → 「得点源はこのエリア」と見て間違いなし
 - ペイントエリア~ミドルエリアではplaylengthが早め
 - ロングミドルではplaylengthが長め → おそらくオプションがなくなって打たされた形
 
✅ 3Pエリア
- 中央~両ウィングのplaylengthは比較的短め → プルアップスリーの可能性
 - 特に左ウィング〜トップが得意ゾーンの可能性あり(ドライブからのステップバックを多用するなど)
 - コーナースリーが極端に少ない上にplaylengthが長め → コーナーで待機しキャッチ&シュートという流れはほぼ無い、おそらくオプションがなくなって打たされた形
 
以上を考慮するとSGAについては、ドライブやプルアップなどで自ら得点機会を作り出すプレーヤーでありながら、3Pトップ~両ウィングにかけてはプルアップスリーを仕掛けてくる万能型スコアラーといったようなプレースタイルが浮かび上がってきます。
アシスト付き vs 自力得点の割合
次に、SGAが自ら得点機会を作り出すプレーヤーであるかどうかを確認するために、SGAが獲得した得点を分類していきます。下記の表は、SGAの得点が自力で獲得したもの(Unassisted Points)か、それともアシストによるもの(Assisted Points)かを分類し、それぞれの得点の総得点に対する割合を示したものになります。なお、比較対象として得点ランキング2位のアンソニー・エドワーズ、同3位のニコラ・ヨキッチも併記しています。
Table 2: Scoring Breakdown – Assisted vs Unassisted
| Player | Unassisted Points | Assisted Points | Unassisted (%) | Assisted (%) | Total Points | 
| Shai Gilgeous-Alexander | 1995 | 468 | 81% | 19% | 2463 | 
| Anthony Edwards | 1337 | 719 | 65% | 35% | 2056 | 
| Nikola Jokić | 842 | 1165 | 42% | 58% | 2007 | 
上記の表を確認するとSGAは8割以上の得点(1995点)をアシストを受けずに作り出していることがわかります。上記の表から読み取れる点を下記にまとめていきます。
✅ SGA:自己完結型スコアラー
- 得点の81%がアシストなしの自力得点(プルアップ・ドライブ・アイソレーションが主体)
 - アシスト付き得点は他のプレイヤーと比較しても最小レベル
 - アシスト付き得点が少ないことから → キャッチ&シュート型ではなく、自分で創るスコアラー
 
✅ アンソニーエドワーズ:SGA寄りだがややバランス型
- 65%が自力得点 → 比較的1on1で崩すタイプ
 - でもアシスト付き得点の割合もそこそこ → 状況に応じて周りとの連携に対応する柔軟性あり
 
✅ ニコラ・ヨキッチ:連携型
- 58%がアシスト付き得点 → 周りとの連携重視
 
上記の点を踏まえると、SGAについては自分で得点機会を創出し、自分で決めきる真のエースタイプのプレーヤーであると言えそうです。
シェイ・ギルジャス・アレクサンダーの成功率と傾向<ショット距離ベース>
ショット距離別の成功率と傾向
次にSGAのショットを距離帯で分類し、各距離帯での成功率や試投割合を見ていきます。下記の表は、SGAのショットにつき距離帯(Distance Range)ごとの試投数(Attempts)、成功数(Makes)、試投割合(Attempt Share)、成功率(FG%)を示したものになります。
Table 3: Shooting Performance by Shot Distance (SGA)
| Distance Range | Attempts | Makes | Attempt Share (%) | FG% | 
| 0–4 ft (2P) | 452 | 309 | 27.50% | 68.40% | 
| 5–9 ft (2P) | 238 | 108 | 14.50% | 45.40% | 
| 10–14 ft (2P) | 318 | 173 | 19.30% | 54.40% | 
| 15–19 ft (2P) | 184 | 91 | 11.20% | 49.50% | 
| 20+ ft (3P) | 453 | 171 | 27.50% | 37.70% | 
上記の表から読み取れるSGAのショット傾向と得点スタイルを下記にまとめていきます。
🏀このデータからわかるSGAのプレースタイル分析
✅ 1. リム周り(0–4ft)
- FG%が68.4%という超高効率ゾーン → ドライブでリングにアタックするプレーが主な得点源
 - 試投割合が27.5%であり3Pゾーン(20ft以上)と並んで最多のゾーン
 
✅ 2. ショートレンジ(5–9ft)
- 成功率45.40%は3Pゾーン(20ft以上)に次いで意外に低く、試投割合も14.5%と低め → 下記の理由が考えられる
 - (理由) NBA公式でSGAの実際の得点シーンを確認してみると、SGAがトップからドライブすると5–9 ftのエリアに相手ビッグマンやヘルプDFが集まるシーンが見受けられる
- → SGAは「5–9 ftでDFにぶつかる非効率のタフショット」より「10–14 ftで止まる」を選択
 - → 10–14 ftのスペースでストップしてプルアップを判断
 - SGAはディフェンスの挙動を読んで最適解(自身にとって効率のいいミドル)を選んでいる
 
 
✅ 3. ミドルレンジ(10–14ft)
- 高効率(成功率54.4%) & 使用頻度も高い(試投割合19.3%) → SGAのプルアップジャンパーが機能している
 
✅ 4. ロングミドル(15–19ft)
- 試投割合が11.20%と最も少ない → 前掲のHexbinマップと整合性あり、このゾーンは「使わない・使いたくない」ゾーンとして明確に見える
 
✅ 5. 3Pゾーン(20ft以上)
- 成功率はやや低め(37.7%)だが、試投数は最多級(453本)→ スペースを使ったプルアップ3Pも武器としている
 - 試投割合が27.5%でありリム周り(0–4ft)と並んで最多のゾーン
 
✅ 6. 得点期待値ベースでの試投数制御
- 得点期待値 = FG% × 得点(= 2 or 3)
 - 5–9 ftは0.91点、15–19 ftは0.99点 → どちらも1点未満で期待値低め
 - それらの試投割合も明確に低い(14.5%, 11.2%) → SGA自身(またはチーム全体)が把握していて、意図的に回避してる可能性あり
 - SGAは「打つなら効率のいいゾーンに絞る」という選択をしている
 
上記の点を踏まえると、SGAのショット選択は「圧倒的な自己完結力」×「効率的なレンジ選択」×「IQの高さ」で構成されており、現代型スコアラーの理想系であると言えそうです。
得点期待値チャート(距離ベース)
ここではSGAのショットについて、ショット距離による得点期待値の変化を確認していきます。下記のチャートはSGAの得点期待値(紫色)とリーグ平均の得点期待値(赤色)の推移をショット距離を横軸にとって示したものになります。
(※チャートの見方はこちら、グレーの破線は1ショットから期待できる平均得点(約1.1)、リーグ平均値はサンプル数5000で算出。)

上記のチャートの推移を前述したショット距離帯ごとのデータも考慮して表にまとめると、下記のようになります。
| 距離 | 期待値の変化 | 解釈 | 
| 5–9 ft | 急落 | DF密集エリア、非効率ゾーン | 
| 10–14 ft | わずかに上昇 | プルアップが機能してるゾーン | 
| 15–19 ft | 再度低下 | ロングミドルの「デッドゾーン」 | 
| 20+ ft | 上昇 | プルアップ3などで得点効率回復 | 
| 全体 | リーグ平均より上 | 20ft前後でリーグ平均を局所的に下回るが、SGAのスコアリング能力の高さを裏付ける曲線 | 
続いて、上記のチャートと表から読み取れるSGAの得点効率の特徴をまとめていきます。
✅ SGAの得点効率の“谷”が浅い
- リーグ平均(赤)は15ft前後で期待値が0.9前後にまで落ちるのに対して、SGA(紫)は そこまで落ち込まない(谷が浅くなってる)
 - 👉 苦手ゾーンが少なく、“安定して得点が取れる選手”であることが見える!
 
✅ SGAの期待値カーブが“滑らか”
- リーグ平均は「下がって→上がって→また下がる」みたいに上下の変動が大きい
 - SGAはリーグ平均と比べれば全体としてスムーズで、極端な弱点がない
 - 👉 これはプレーの選択が論理的で効率的であることを示している!
 
以上の点を踏まえると、SGAについては「強みとしているゾーンを中心に打ち、苦手ゾーンは最小限」に抑えているという印象を受けます。その結果、得点期待値の観点でもリーグ平均を安定して上回っており、「スキル×判断力×IQ」 が揃ったエリートスコアラーであると言えます。
シェイ・ギルジャス・アレクサンダーの得点期待値チャート<試合時間ベース>
得点期待値チャート(試合時間ベース)
ここではSGAのショットについて、試合時間による得点期待値の変化を確認していきます。下記のチャートはSGAの得点期待値(紫色)とリーグ平均の得点期待値(赤色)の推移を試合時間を横軸にとって示したものになります。
(※チャートの見方はこちら、グレーの破線は1ショットから期待できる平均得点(約1.1)、リーグ平均値はサンプル数5000で算出。)

上記のチャートと表から読み取れるSGAの得点効率の特徴をまとめていきます。
✅ 試合全体を通して安定したスコアリング力
- SGAはほぼ試合全体でリーグ平均を上回る
 
✅ 試合終盤でリーグ平均を下回るパフォーマンス
- 終盤(残り320秒くらい)でリーグ平均に逆転される → スコアリングの爆発力を試合終盤まで維持できていない、あるいはクラッチタイムで十分なパフォーマンスを発揮できていない?(低下の要因は後述を参照)
 
以上の点を踏まえると、SGAについては試合中盤まではリーグ平均値を大きく上回る得点効率を示しますが、終盤にかけてはその期待値は大きく落ち込みリーグ平均値を下回るパフォーマンスとなっていることが分かりました。次は試合終盤の時間帯におけるパフォーマンスに焦点をあてるという意味で、クラッチタイムにおけるSGAの得点期待値を確認していきます。
クラッチタイム分析
下記のチャートはSGAの得点期待値(茶色)とリーグ平均の得点期待値(赤色)の推移に関して、クラッチタイムの時間帯を横軸にとって示したものになります。なお、比較対象としてクラッチタイムで得点と3P成功数がトップ(2025/04/08時点)のアンソニー・エドワーズの得点期待値(オレンジ色)も併記しています。
(※チャートの見方はこちら、グレーの破線は1ショットから期待できる平均得点(約1.1)、リーグ平均値はサンプル数3000で算出、クラッチタイムのスタッツはNBA公式を参照。)

上記のチャートから読み取れる各プレイヤーの得点効率の特徴をまとめていきます。
✅ SGAはピークとボトムの差が大きい
- クラッチタイム序盤(2600〜2625秒)で大幅に上昇(最大1.8以上)
- ただしそのあとは、一気に落ち込んで1.0を下回るゾーンへ
 - さらにその後、約1.25あたりまで急上昇
 - これらの変動によるギャップが大きく、安定性に欠けて見える
 
 - なお、上記で指摘したギャップの大きさは下記の2つの理由が考えられる
- 今季のOKCは戦績で頭一つ抜けた好成績を残しており、そもそもクラッチタイムで戦う場面が少ない → 試行数(データの数)が少ないことで結果の感度が高くなりすぎている(下記参照)
 - 実際にSGAのクラッチタイムのパフォーマンスにムラがある
 
 
✅ アンソニー・エドワーズの得点期待値は右肩上がりからの高止まり
- 約2600〜2750秒まで緩やかな上昇傾向 → この時間帯はチームのオフェンスの中心を担いながら、着実に得点を重ねたと予想できる
 - 2750〜2850秒では1.2付近で横ばい → 高水準をキープできており、安定感のあるパフォーマンスの印象
 - SGAの変動の大きい波と比べて、冷静にゲームをコントロールできるタイプにも見える
 - 統計的に「期待値がフラットで高い」=成功パターンを再現し続けている可能性
 
以上を踏まえてSGA、アンソニー・エドワーズ、リーグ平均値の特徴を表にまとめると下記のようになります。
| 特徴 | Anthony Edwards | Shai Gilgeous-Alexander | League Average | 
| 得点期待値の最大値 | 約1.22 | 約1.85 | 約1.06 | 
| 得点期待値の最小値 | 約0.9 | 約0.85 | 約1.02 | 
| 傾向 | 徐々に上昇し、横ばいで高止まり | 序盤でピーク→一気に落ち込み | 安定してフラット | 
| 安定性 | 高い(波が少ない) | 低い(波が激しい) | 高い | 
| 解釈 | 安定して頼れるクラッチスコアラー | 潜在能力は高いが波がある | 通常のクラッチ得点水準 | 
※参考:SGAのギャップの大きさについて
今季のOKCのクラッチタイムプレイ時間は66MIN(2025/04/11時点)でリーグ最少となっている。それに合わせるようにSGAのクラッチタイムプレイ時間も61.9MIN(2025/04/08時点)と短く、アンソニー・エドワーズの156MINと比べてその差は大きい。SGAのクラッチでの出場時間の短さはスタッツが伸びにくい原因となり、そのぶんサンプル数も少なくなるため得点期待値のチャートもややブレやすくなる(単純にクラッチの試行回数が少ないためデータが揺れやすい)。また、前述した試合終盤にかけてSGAの得点期待値が低下していく現象については、今期のOKCが強くて十分な点差をつけて試合終盤を迎える展開が多いため、試合終盤でSGAは本来のパフォーマンスを抑えてプレイしているという解釈も出来る。
おわりに
今回はSGAの得点能力に焦点をあてて、ショットチャートをはじめとした様々なデータとチャートを交えて、その特徴と傾向を確認していきました。これまで確認した点を踏まえると、SGAのプレースタイルについては以下のようにまとめることが出来るかと思います。
- SGAは高確率かつ自力で得点できるエリートスコアラー。
 - 特定距離(5–9ftや15–19ft)を避け、効率重視のショットセレクション。
 - 試合時間の経過とともに期待値が低下する傾向もあり、クラッチタイムでのパフォーマンスは現段階では判断が難しい。
 - 一方で爆発的な得点力は健在で、最終的な得点効率ではリーグトップクラス。
 
クラッチタイムにおける分析をさらに深めたり、他のプレイヤーにも同様の分析を行い選手間の比較をしたりなど、追加の分析の余地はまだまだありますが、そちらはまたの機会に行いたいと思います。
ここまで読んでいただきありがとうございました。
それでは、今回のトラッシュトークは以上です。
※参考<統計ソフトRに入力するコマンド>
統計ソフトRのインストール手順をまとめた記事も作成していますので、よろしければご参考ください。
library(BasketballAnalyzeR)
library(dplyr)
dts.PbP.2425 <- read.csv(file="(10-22-2024)-(04-07-2025)-combined-stats.csv")
PbP2425 <- PbPmanipulation(dts.PbP.2425)
# Shai Gilgeous-Alexander Shot Chart
PbP2425sga <- subset(PbP2425, player=="Shai Gilgeous-Alexander")
PbP2425sga$xx <- PbP2425sga$original_x/-10
PbP2425sga$yy <- PbP2425sga$original_y/10-41.75
p1 <- shotchart(
  data = PbP2425sga,
  x = "xx", y = "yy",
  z = "playlength",
  num.sect = 5,
  type = "sectors",
  scatter = FALSE,
  result = "result"
)
p1 +
  ggtitle("Shai Gilgeous-Alexander Shot Chart") +
  labs(caption = "Data: NBA 2024-25 Season (2024/10/22-2025/04/07)") +
  scale_x_reverse() +
  scale_y_reverse()
# Shai Gilgeous-Alexander Hexbin Map
p2 <- shotchart(
  data = PbP2425sga,
  x = "xx", y = "yy",
  type="density-hexbin", nbins=30, palette="bwr"
)
 
p2 +
  ggtitle("Shai Gilgeous-Alexander Hexbin Map") +
  labs(caption = "Data: NBA 2024-25 Season (2024/10/22-2025/04/07)") +
  scale_x_reverse() +
  scale_y_reverse()
# Scoring Breakdown
df <- read.csv("PbP2425.csv")
sga_made <- df %>%
  filter(player == "Shai Gilgeous-Alexander", result == "made", !is.na(points))
assist_summary <- sga_made %>%
  mutate(assist_type = ifelse(is.na(assist) | assist == "", "Unassisted", "Assisted")) %>%
  group_by(assist_type) %>%
  summarise(
    shot_count = n(),
    total_points = sum(points, na.rm = TRUE)
  ) %>%
  mutate(
    shot_pct = round(100 * shot_count / sum(shot_count), 1),
    point_pct = round(100 * total_points / sum(total_points), 1)
  )
print(assist_summary)
# Shooting Performance by Shot Distance
df_sga <- df %>%
  filter(player == "Shai Gilgeous-Alexander", !is.na(shot_distance), !is.na(result)) %>%
  mutate(
    made = ifelse(result == "made", 1, 0),
    range = case_when(
      shot_distance < 5 ~ "0–4 ft (2P)",
      shot_distance < 10 ~ "5–9 ft (2P)",
      shot_distance < 15 ~ "10–14 ft (2P)",
      shot_distance < 20 ~ "15–19 ft (2P)",
      TRUE ~ "20+ ft (3P)"
    )
  )
distance_summary <- df_sga %>%
  group_by(range) %>%
  summarise(
    attempts = n(),
    makes = sum(made),
    FG_percent = round(100 * makes / attempts, 1)
  ) %>%
  mutate(
    attempt_pct = round(100 * attempts / sum(attempts), 1)
  ) %>%
  arrange(factor(range, levels = c(
    "0–4 ft (2P)", "5–9 ft (2P)", "10–14 ft (2P)", "15–19 ft (2P)", "20+ ft (3P)"
  )))
print(distance_summary)
# Expected Points by Shot Distance
set.seed(123)
PbP_league_sample <- df %>%
  filter(
    result != "",
    !is.na(converted_x),
    !is.na(converted_y),
    !is.na(shot_distance)
  ) %>%
  sample_n(5000) %>%
  mutate(player = "League Average")
PbP_sga <- df %>%
  filter(player == "Shai Gilgeous-Alexander", 
         result != "", !is.na(converted_x), 
        !is.na(converted_y))
PbP_combined <- bind_rows(PbP_sga, PbP_league_sample)
pl <- c("Shai Gilgeous-Alexander", "League Average")
ep1 <- expectedpts(
  data = PbP_combined,
  players = pl,
  team = FALSE,  
  palette = colorRampPalette(c("red", "blue")),
  col.hline = "gray"
)
ep1 +
  ggtitle("Expected Points by Shot Distance: Shai Gilgeous-Alexander vs League Average") +
  labs(caption = "Data: NBA 2024-25 Season (2024/10/22-2025/04/07)") 
# Expected Points by Total Time
PbP_sga <- df %>%
  filter(
    player == "Shai Gilgeous-Alexander",
    result != "",
    event_type %in% c("shot", "miss"),
    !is.na(points),
    !is.na(totalTime)
  )
set.seed(42) 
PbP_league_avg <- df %>%
  filter(
    result != "",
    event_type %in% c("shot", "miss"),
    !is.na(points),
    !is.na(totalTime)
  ) %>%
  sample_n(5000) %>%
  mutate(player = "League Average")
PbP_combined_time <- bind_rows(PbP_sga, PbP_league_avg)
players_time <- c("Shai Gilgeous-Alexander", "League Average")
ep2 <- expectedpts(
  data = PbP_combined_time,
  var = "totalTime",
  players = players_time,
  team = FALSE,
  bw = 1200,
  col.hline = "gray",
  palette = colorRampPalette(c("red", "blue")),
  title = "SGA vs League Average: Expected Points Over Game Time"
)
ep2 +
  ggtitle("Expected Points by Total Time: Shai Gilgeous-Alexander vs League Average") +
  labs(caption = "Data: NBA 2024-25 Season (2024/10/22-2025/04/07)") 
# Expected Points by Clutch Time
PbP_sga_ant_clutch <- df %>%
  filter(
    player %in% c("Shai Gilgeous-Alexander", "Anthony Edwards"),
    result != "",
    event_type %in% c("shot", "miss"),
    !is.na(points),
    !is.na(totalTime),
    abs(home_score - away_score) <= 5,
    totalTime >= 2580
  )
set.seed(456)
PbP_league_clutch <- df %>%
  filter(
    result != "",
    event_type %in% c("shot", "miss"),
    !is.na(points),
    !is.na(totalTime),
    abs(home_score - away_score) <= 5,
    totalTime >= 2580
  ) %>%
  sample_n(3000) %>%
  mutate(player = "League Average")
PbP_clutch_combined_3 <- bind_rows(PbP_sga_ant_clutch, PbP_league_clutch)
players_clutch_3 <- c("Shai Gilgeous-Alexander", "Anthony Edwards", "League Average")
ep4 <- expectedpts
  data = PbP_clutch_combined_3,
  var = "totalTime",
  players = players_clutch_3,
  team = FALSE,
  bw = 80,
  x.range = c(2580, 2880), 
  col.hline = "gray",
  palette = colorRampPalette(c("orange", "red", "black")),
  title = "Expected Points in Clutch Time: SGA vs Ant vs League"
)
ep4 +
  ggtitle("Expected Points by Clutch Time: Shai Gilgeous-Alexander vs Anthony Edwards vs League Average") +
  labs(caption = "Data: NBA 2024-25 Season (2024/10/22-2025/04/07)") 
      
  
  
  
  
  
