2026年4月23日木曜日

NBA選手のスタッツを偏差値で比べてみる(3)

NBA選手のスタッツから合計偏差値を求める


各スタッツの偏差値を求め平均することで、総合能力の高い選手をランキングしてみます。
平均得点, 平均リバウンド, 平均アシスト, 平均ブロック, 平均スティール, 平均フィールドゴール, 平均3ポイント数から導き出してます。


PTS PTS偏 REB REB偏 AST AST偏 BLK BLK偏 STL STL偏 FGM FGM偏 3PM 3PM偏 平均偏差値
Luka Doncic 33.48 84 7.73 64 8.28 77 0.53 50 1.64 72 10.83 79 3.97 79 72.1
Nikola Jokic 27.68 74 12.86 87 10.72 90 0.82 57 1.42 65 9.91 75 1.72 53 71.6
Victor Wembanyama 25.00 70 11.50 81 3.11 51 3.08 109 1.03 54 8.64 69 1.91 55 69.9
Tyrese Maxey 28.29 75 4.14 48 6.59 69 0.79 56 1.86 78 9.91 75 3.14 69 67.1
Cade Cunningham 23.92 68 5.55 54 9.91 86 0.84 57 1.44 66 8.56 69 1.95 56 65.1
Kawhi Leonard 27.89 75 6.35 58 3.60 54 0.42 48 1.88 79 9.77 74 2.65 64 64.6
Shai Gilgeous-Alexander 31.13 80 4.29 48 6.59 69 0.76 56 1.40 65 10.75 79 1.69 53 64.3
Donovan Mitchell 27.89 75 4.51 49 5.69 64 0.29 45 1.49 67 9.69 74 3.20 70 63.4
Jalen Johnson 22.51 66 10.28 75 7.86 75 0.43 48 1.24 60 8.33 67 1.67 53 63.4
Jaylen Brown 28.70 76 6.93 60 5.13 61 0.38 47 1.01 54 10.37 77 1.97 56 61.6
Scottie Barnes 18.10 59 7.50 63 5.92 65 1.45 72 1.42 65 7.11 62 0.85 44 61.4
James Harden 23.60 68 4.80 51 7.96 76 0.40 47 1.13 57 6.96 61 3.07 69 61.3
Jamal Murray 25.40 71 4.40 49 7.13 71 0.39 47 0.88 50 8.76 69 3.27 71 61.1
LaMelo Ball 20.07 62 4.82 51 7.14 72 0.24 44 1.21 59 7.03 62 3.78 77 61.0
Alperen Sengun 20.36 63 8.89 69 6.18 67 1.07 63 1.18 58 8.10 66 0.56 40 60.9
Kevin Durant 25.97 72 5.46 54 4.77 59 0.91 59 0.79 47 9.18 71 2.38 61 60.4
Trey Murphy III 21.52 64 5.71 55 3.79 54 0.36 46 1.50 68 7.48 64 3.24 70 60.1
Deni Avdija 24.21 69 6.88 60 6.70 69 0.62 52 0.77 47 7.45 63 1.89 55 59.3
Evan Mobley 18.15 59 9.02 70 3.60 54 1.74 78 0.74 46 7.22 62 0.95 45 59.1
Bam Adebayo 20.11 62 10.03 74 3.18 51 0.67 54 1.18 58 6.93 61 1.74 54 59.1
Derrick White 16.45 56 4.40 49 5.38 63 1.27 67 1.14 57 5.68 55 2.71 65 58.9
Cooper Flagg 21.04 64 6.66 59 4.51 58 0.91 59 1.20 59 7.99 66 1.03 46 58.7
Jalen Brunson 26.04 72 3.34 44 6.80 70 0.11 41 0.77 47 9.31 72 2.64 64 58.6
Ryan Rollins 17.31 58 4.57 50 5.59 64 0.42 48 1.49 67 6.57 59 2.49 62 58.3
Nickeil Alexander-Walker 20.82 63 3.44 45 3.67 54 0.54 51 1.31 62 7.03 62 3.22 70 58.1
Karl-Anthony Towns 20.05 62 11.85 82 3.01 51 0.53 50 0.87 50 6.89 61 1.51 51 58.1
Amen Thompson 18.27 59 7.77 64 5.32 62 0.61 52 1.51 68 7.05 62 0.32 38 57.9
Brandon Miller 20.17 62 4.91 51 3.34 52 0.68 54 1.02 54 6.98 61 3.14 69 57.6
Paolo Banchero 22.21 66 8.39 67 5.18 62 0.56 51 0.71 45 7.35 63 1.17 47 57.3
Chet Holmgren 17.12 57 8.91 69 1.67 44 1.90 82 0.62 42 6.29 58 1.28 48 57.1
Devin Booker 26.06 72 3.88 47 6.03 66 0.28 45 0.80 47 8.53 68 1.91 55 57.1
Onyeka Okongwu 15.18 54 7.59 63 3.12 51 1.07 63 1.11 56 5.58 55 1.95 56 56.9
VJ Edgecombe 15.99 56 5.64 54 4.20 57 0.52 50 1.43 66 6.01 57 1.99 56 56.6
OG Anunoby 16.69 57 5.24 53 2.16 46 0.72 55 1.55 69 5.81 56 2.34 60 56.6
Julius Randle 21.10 64 6.73 59 5.04 61 0.23 43 1.09 56 7.34 63 1.38 49 56.4
Dyson Daniels 11.86 49 6.84 60 5.91 65 0.41 48 1.96 81 5.29 54 0.29 37 56.3
De'Aaron Fox 18.56 60 3.75 46 6.18 67 0.26 44 1.24 60 7.07 62 1.82 54 56.1
Russell Westbrook 15.17 54 5.44 54 6.66 69 0.19 42 1.30 62 5.59 55 2.00 56 56.0
Brandon Ingram 21.49 64 5.58 54 3.69 54 0.71 54 0.75 46 7.97 66 1.75 54 56.0
Donovan Clingan 12.13 50 11.58 81 2.10 46 1.69 77 0.57 41 4.62 50 1.09 46 55.9
Matas Buzelis 16.26 56 5.82 55 2.05 46 1.51 73 0.71 45 5.79 56 2.25 59 55.7
Immanuel Quickley 16.43 56 4.03 47 5.93 65 0.07 40 1.31 62 5.73 56 2.54 63 55.6
Stephon Castle 16.63 57 5.31 53 7.38 73 0.28 45 1.15 58 5.65 55 1.19 47 55.4
Desmond Bane 20.09 62 4.12 48 4.12 56 0.45 48 1.05 55 7.11 62 2.04 57 55.4
Andrew Wiggins 15.37 55 4.84 51 2.68 49 1.01 61 1.12 57 5.74 56 2.03 57 55.1
Jalen Duren 19.50 61 10.53 76 1.97 45 0.84 57 0.81 48 7.46 63 0.00 34 54.9
Reed Sheppard 13.54 52 2.90 42 3.38 52 0.66 53 1.49 67 4.96 52 2.77 65 54.7
Kon Knueppel 18.49 60 5.33 53 3.38 52 0.23 43 0.70 45 6.36 58 3.37 72 54.7
Mikal Bridges 14.40 53 3.80 46 3.71 54 0.76 56 1.30 62 5.76 56 1.90 55 54.6
Naz Reid 13.58 52 6.19 57 2.21 46 1.01 61 0.99 53 5.16 53 2.10 58 54.3


結果を見るとルカ選手、ヨキッチ選手、ウェンバンヤマ選手とMVP候補に挙げられている選手が上位に位置しています。
SGA選手は、ブロック、平均3ポイントが平均を下げましたが、総合的に高い能力の選手に違いありません。

2026年4月21日火曜日

NBA選手のスタッツを偏差値で比べてみる(2)

次は平均ブロック数

player BLK 偏差値
Victor Wembanyama 3.08 109
Chet Holmgren 1.90 82
Jay Huff 1.87 81
Evan Mobley 1.74 78
Donovan Clingan 1.69 77
Rudy Gobert 1.63 76
Myles Turner 1.62 76
Yves Missi 1.53 73
Matas Buzelis 1.51 73
Ryan Kalkbrenner 1.46 72

ビクター・ウェンバンヤマ選手が驚異的な109という数値を叩き出しました
グラフを見ても一人だけ頭一つ分抜けています。


スティール平均数

player STL 偏差値
Ausar Thompson 2.00 82
Dyson Daniels 1.96 81
Cason Wallace 1.95 81
Kawhi Leonard 1.88 79
Tyrese Maxey 1.86 78
Luka Doncic 1.64 72
Kris Dunn 1.60 70
OG Anunoby 1.55 69
Jordan Goodwin 1.51 68
Amen Thompson 1.51 68




3ポイント成功数(総数)

player 3PM 偏差値
Kon Knueppel 273 80
LaMelo Ball 272 80
Luka Doncic 254 77
Nickeil Alexander-Walker 251 76
Jamal Murray 245 75
Donte DiVincenzo 244 75
AJ Green 232 73
Collin Gillespie 232 73
Reed Sheppard 227 72
Donovan Mitchell 224 72

3ポイント成功数シーズン通しての総数は、話題の新人コン・カニップル選手がトップでした。
球団記録を更新したり、新人王候補にも選出されて今後も期待の選手です。



3ポイント成功数(1試合当たり)


player 3PM 偏差値
Luka Doncic 3.97 80
LaMelo Ball 3.78 77
Kon Knueppel 3.37 73
Anthony Edwards 3.36 73
Jamal Murray 3.27 72
Trey Murphy III 3.24 71
Nickeil Alexander-Walker 3.22 71
Donovan Mitchell 3.20 71
Brandon Miller 3.14 70
Tyrese Maxey 3.14 70

1試合あたりの3ポイント成功数はルカ・ドンチッチ選手で偏差値80でした。
得点王の背景に高い3ポイント成功数もあるのが分かります。

2026年4月18日土曜日

NBA選手のスタッツを偏差値で比べてみる

スタッツの偏差値を求める

NBA2025-26のレギュラーシーズンが終了し、様々な分析がされています。 
こちらでは日本人に馴染み深い偏差値で比べてみたいと思います。

試合数が少ないと飛び値が出やすいので50試合以上に出場した選手から算出しています。

まずは1試合あたりの平均得点
 
player PPG 偏差値
Luka Doncic 33.48 85
Shai Gilgeous-Alexander 31.13 82
Anthony Edwards 28.80 78
Jaylen Brown 28.70 78
Tyrese Maxey 28.29 77
Donovan Mitchell 27.89 76
Kawhi Leonard 27.89 76
Nikola Jokic 27.68 76
Devin Booker 26.06 73
Jalen Brunson 26.04 73
Kevin Durant 25.97 73
Jamal Murray 25.40 72
Victor Wembanyama 25.00 72
Deni Avdija 24.21 71
Michael Porter Jr. 24.21 71
Pascal Siakam 23.95 70
Cade Cunningham 23.92 70
Keyonte George 23.61 70
James Harden 23.60 70
Austin Reaves 23.27 69

偏差値はおおよそ25〜75に収まるように出来ているのでルカ・ドンチッチ選手や
シェイ・ギルジャス・アレキサンダー選手の偏差値80超えはプロの中でも凄い値です。
さすが1試合あたり30点超えです。

50試合超えた選手全体の1試合平均得点は11.5点です。
ルカ選手は平均の約3倍点数を取っていることになります。


次に1試合あたりの平均アシスト

player APG 偏差値
Nikola Jokic 10.72 90.0
Cade Cunningham 9.91 86.0
Luka Doncic 8.28 77.0
James Harden 7.96 76.0
Jalen Johnson 7.86 75.0
Stephon Castle 7.38 73.0
LaMelo Ball 7.14 72.0
Jamal Murray 7.13 71.0
Jalen Brunson 6.80 70.0
Deni Avdija 6.70 69.0

ニコラ・ヨキッチ選手が1試合あたり10回以上を高く驚異の90を叩き出しました。
アシスト数はばらつきが多いためトップの選手は高偏差値が出ます。

一人あたりの1試合平均アシストは2.9回です。


一試合あたりの平均リバウンド数

player OREB DREB REB 偏差値
Nikola Jokic 2.95 9.91 12.86 87
Karl-Anthony Towns 3.11 8.75 11.85 83
Donovan Clingan 4.51 7.08 11.58 82
Victor Wembanyama 2.03 9.47 11.50 81
Rudy Gobert 3.93 7.54 11.47 81
Jalen Duren 3.79 6.74 10.53 77
Jalen Johnson 1.40 8.88 10.28 76
Bam Adebayo 2.04 7.99 10.03 75
Evan Mobley 2.40 6.62 9.02 70
Kel'el Ware 2.82 6.19 9.01 70

こちらもヨッキチ選手が1位を取っています。
偏差値も87と高く、いかに凄い選手かが分かります。
1人あたりの平均リバウンド数4.57回です。

2025年7月29日火曜日

nba_apiを使いNBAデータを取得する

NBAデータ取得

NBAデータを分析する場合には、まず最初にデータ取得が必要です。
Kaggleなどのデータサイトから検索してもいいし、データサイトからスクレイピングしてる方もいると思います。
そしてPythonのライブラリからもNBAデータを提供してるものがあるので、それを使ってみたいと思います。
nba_apiです。
使用するには
pip install nba_api
でライブラリをインストールします。

nba_apiライブラリ

nba_apiには、沢山のメソッドがあり、かなり詳しいデータが手に入りますが、反面、どこに何のデータが入ってるか使い方に迷います。
https://github.com/swar/nba_api/tree/masterのサイトにexampleなどもありますが少ししかありません。
https://github.com/swar/nba_api/tree/master/docs/nba_api/stats/endpointsから、メソッド名で当たりをつけ、どれが探してるデータか一つ一つ読んで見つけましょう。

今回は、レギュラーシーズンデータを取得してみたいと思います。
PlayerGameLogsが良さそうなので、それを使います。
#! /usr/bin/env python

import numpy as np
import pandas as pd
from nba_api.stats.endpoints import playergamelogs

season_df = playergamelogs.PlayerGameLogs(
    season_nullable = '2024-25',
).player_game_logs.get_data_frame()

print(season_df.head(50))
  
  

引数 season_nullable に取得したいシーズン '2024-25' を入れます。

player_game_logs.get_data_frame()でデータフレーム形式で取得出来ます。


2025年6月18日水曜日

NBA選手シーズンごとの平均リバウンド

NBA選手のシーズン当たりのリバウンド

シーズン毎の得点に続き、シーズン毎のリバウンドを可視化してみます。

外れ値を省くために、1シーズン40試合以上出場した選手で構成しています。

#! /usr/bin/env python

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

sns.set()

fn = "data/player_per_game.csv"
df = pd.read_csv(fn)

df2 = df[df["g"] >= 40] 

desc = df2.groupby("season")["TRB"].describe()
print(desc)

count mean std min 25% 50% 75% max
season
1951 108.0 4.960185 2.849986 1.3 2.900 4.35 6.525 16.4
1952 94.0 5.255319 3.140770 1.0 2.925 4.55 6.950 13.5
1953 102.0 5.138235 3.093143 0.9 3.000 4.25 6.875 14.4
1954 91.0 5.126374 3.164871 0.9 2.800 4.30 6.900 15.3
1955 81.0 5.669136 3.186952 1.2 3.400 4.60 7.600 15.1
1956 80.0 5.626250 3.401479 0.9 3.175 4.45 7.650 16.3
1957 83.0 5.906024 3.658580 1.8 3.400 4.60 8.050 19.6
1958 78.0 6.698718 4.116217 1.7 3.850 5.50 9.550 22.7
1959 85.0 6.207059 3.708510 1.8 3.600 5.30 7.900 23.0
1960 87.0 6.686207 4.410774 1.8 3.800 5.30 8.450 27.0
1961 83.0 6.719277 4.765052 1.2 3.750 5.70 8.200 27.2
1962 100.0 6.430000 4.680488 0.4 3.025 5.80 8.050 25.7
1963 94.0 6.020213 4.181155 0.9 3.000 5.15 7.175 24.3
1964 102.0 5.810784 4.364481 1.1 2.925 4.45 7.350 24.7
1965 94.0 6.128723 4.669637 1.0 2.725 4.75 8.050 24.1
1966 103.0 6.262136 4.472599 1.3 3.200 5.20 7.800 24.6
1967 108.0 6.163889 4.304040 1.1 3.300 5.15 7.650 24.2
1968 136.0 5.927206 4.252833 0.5 2.800 4.70 7.625 23.8
1969 146.0 6.357534 4.192914 0.9 3.500 4.85 8.800 21.1
1970 154.0 5.625974 3.667144 0.9 3.025 4.50 7.475 17.7
1971 181.0 5.475138 3.671193 0.5 3.000 4.50 7.000 18.2
1972 189.0 5.408466 3.859353 0.4 2.800 4.10 6.900 19.2
1973 194.0 5.215464 3.676542 0.8 2.600 4.15 6.450 18.6
1974 184.0 4.972283 3.410149 0.7 2.700 4.00 6.225 18.1
1975 210.0 4.678095 3.153868 0.6 2.200 3.90 6.175 14.8
1976 199.0 4.830151 3.142201 0.6 2.600 4.00 6.250 16.9
1977 260.0 4.676923 3.061885 0.6 2.475 3.80 6.400 14.4
1978 259.0 4.747490 3.039906 0.8 2.600 3.60 6.550 15.7
1979 247.0 4.559514 3.029057 0.8 2.300 3.60 6.050 17.6
1980 248.0 4.656048 2.829866 0.7 2.375 4.00 6.425 15.0
1981 262.0 4.246947 2.670696 0.7 2.100 3.60 5.875 14.8
1982 270.0 4.197778 2.653551 0.6 2.100 3.40 5.700 14.7
1983 277.0 4.253069 2.669222 0.9 2.300 3.60 5.700 15.3
1984 262.0 4.107252 2.664220 0.7 2.100 3.45 5.700 13.4
1985 263.0 4.207224 2.625547 0.6 2.300 3.40 5.650 13.1
1986 260.0 4.213846 2.669888 0.7 2.075 3.45 5.725 13.1
1987 267.0 4.242697 2.804114 0.5 2.000 3.50 5.750 14.6
1988 275.0 4.285455 2.693871 0.6 2.300 3.50 6.050 13.0
1989 292.0 4.261301 2.623311 0.5 2.300 3.55 5.900 13.5
1990 312.0 4.235577 2.640006 0.5 2.375 3.60 5.800 14.0
1991 304.0 4.334539 2.647963 0.6 2.300 3.50 5.825 13.8
1992 310.0 4.260968 2.847617 0.4 2.225 3.45 5.800 18.7
1993 308.0 4.208766 2.792828 0.3 2.275 3.50 5.500 18.3
1994 304.0 4.294737 2.786668 0.7 2.300 3.60 5.500 17.3
1995 314.0 4.174522 2.698690 0.5 2.225 3.30 5.600 16.8
1996 343.0 4.156560 2.615095 0.6 2.250 3.40 5.500 14.9
1997 337.0 4.225223 2.714871 0.4 2.200 3.50 5.500 16.1
1998 342.0 4.232164 2.577404 0.7 2.200 3.50 5.600 15.0
1999 217.0 4.602304 2.575066 1.0 2.700 3.80 6.000 13.0
2000 327.0 4.210398 2.465097 0.6 2.250 3.70 5.700 14.1
2001 335.0 4.276418 2.538543 0.5 2.500 3.70 5.500 14.1
2002 332.0 4.287048 2.386337 0.8 2.600 3.90 5.400 13.0
2003 324.0 4.251235 2.390933 0.4 2.500 3.75 5.525 15.4
2004 348.0 4.263506 2.419223 0.6 2.500 3.80 5.300 13.9
2005 361.0 4.198061 2.427029 0.5 2.400 3.50 5.500 13.5
2006 345.0 4.140290 2.346627 0.4 2.300 3.60 5.200 12.7
2007 348.0 4.118391 2.485521 0.7 2.300 3.40 5.400 12.8
2008 342.0 4.285380 2.571218 0.5 2.400 3.55 5.300 14.2
2009 350.0 4.182857 2.400595 0.8 2.325 3.60 5.300 13.8
2010 348.0 4.204310 2.562793 0.6 2.300 3.50 5.500 13.2
2011 380.0 4.027105 2.375063 0.6 2.400 3.40 5.100 15.2
2012 305.0 4.275410 2.394776 0.8 2.500 3.70 5.300 14.5
2013 365.0 3.986301 2.405506 0.4 2.200 3.30 5.200 12.4
2014 366.0 4.127596 2.449787 0.8 2.400 3.50 5.200 13.6
2015 385.0 4.177143 2.338558 0.7 2.400 3.60 5.300 15.0
2016 360.0 4.134167 2.400563 0.7 2.400 3.50 5.325 14.8
2017 369.0 4.204878 2.443109 0.6 2.600 3.50 5.500 14.1
2018 355.0 4.243944 2.435144 0.4 2.500 3.80 5.400 16.0
2019 391.0 4.353964 2.510497 0.7 2.600 3.80 5.300 15.6
2020 335.0 4.497015 2.457030 1.0 2.700 4.10 5.700 15.8
2021 335.0 4.457612 2.446517 0.9 2.700 3.90 5.600 14.3
2022 384.0 4.383073 2.424720 0.8 2.675 3.90 5.400 14.7
2023 385.0 4.244416 2.354335 0.8 2.600 3.70 5.300 12.5
2024 376.0 4.213298 2.353943 0.8 2.600 3.70 5.200 13.7

結果


1950年代から60年代がレギュラー選手当たり1試合平均5リバウンド以上と高いですね。maxは歴代シーズンリバウンド王です。
ウィルト・チェンバレン選手やビル・ラッセル選手が1試合当たり20リバウンド以上と今では考えられない数値を叩き出しています。
3ポイントが導入された1980年以降は平均4リバウンド台を安定して推移しています。

現代バスケは3ポイントが重視され、戦略や平均得点が変わっていく中、レギュラー選手たちの平均リバウンド回数は1980年から意外に安定していることが分かります。

2025年6月15日日曜日

NBA選手シーズンごとの平均得点

NBA選手のシーズン当たりの得点

 データを元にシーズン毎の平均得点の推移をグラフ化してみます。

外れ値を省くために、1シーズン40試合以上出場した選手で構成しています。

#! /usr/bin/env python  
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


fn = "data/player_per_game.csv"
df = pd.read_csv(fn, index_col=0)

df2 = df[df["g"] >= 40]

des = df2.groupby("season")["PPG"].describe()
print(des)

count mean std min 25% 50% 75% max
season
1950 183.0 8.178142 4.114657 1.7 5.000 7.40 10.800 27.4
1951 108.0 8.976852 4.619314 2.1 5.975 8.10 11.325 28.4
1952 94.0 9.263830 4.777610 1.3 6.100 8.75 12.000 25.4
1953 102.0 9.023529 4.408142 2.2 5.525 8.85 11.275 22.3
1954 91.0 8.651648 4.246943 1.6 5.900 8.20 10.450 24.4
1955 81.0 10.046914 5.192087 2.4 5.900 9.60 13.100 22.7
1956 80.0 10.177500 5.222056 2.4 6.525 8.85 13.225 25.7
1957 83.0 10.397590 5.245439 2.2 6.600 9.70 12.400 25.6
1958 78.0 11.506410 5.798216 3.4 7.400 9.40 16.400 27.8
1959 85.0 11.260000 5.994466 3.5 6.500 9.80 14.400 29.2
1960 87.0 11.886207 6.852264 3.0 7.350 9.90 14.350 37.6
1961 83.0 12.225301 7.547199 2.2 6.400 10.20 15.350 38.4
1962 100.0 12.348000 8.555221 1.5 6.050 10.35 15.950 50.4
1963 94.0 12.045745 7.262833 2.2 7.200 10.50 14.300 44.8
1964 102.0 11.489216 6.883585 1.7 5.775 9.90 15.775 36.9
1965 94.0 11.620213 6.724751 2.5 6.300 11.00 14.575 34.7
1966 103.0 11.838835 6.569899 2.6 7.300 10.70 15.350 33.5
1967 108.0 12.126852 6.489396 3.0 7.225 10.55 17.400 35.6
1968 136.0 11.949265 6.489273 2.0 6.550 11.65 16.625 29.2
1969 146.0 12.370548 6.392174 2.3 7.325 11.50 17.350 28.4
1970 154.0 12.246753 6.560719 2.1 7.200 11.50 15.550 31.2
1971 181.0 11.462431 6.616757 1.5 5.900 9.70 16.000 31.7
1972 189.0 11.605820 6.817438 1.5 5.900 11.10 15.700 34.8
1973 194.0 10.764433 6.656815 1.6 5.700 9.05 14.800 34.0
1974 184.0 10.810326 6.559276 1.8 5.575 9.30 14.975 30.6
1975 210.0 10.341429 6.244741 1.3 5.700 9.00 13.375 34.5
1976 199.0 10.492462 5.890430 1.7 5.900 9.20 13.850 31.1
1977 260.0 10.482308 5.847033 1.4 6.000 9.05 13.225 31.1
1978 259.0 10.945174 5.930006 2.0 6.250 9.60 14.750 27.2
1979 247.0 11.290283 6.263495 1.5 6.500 10.10 15.650 29.6
1980 248.0 11.283065 5.887415 2.5 6.600 10.25 14.900 33.1
1981 262.0 10.632824 5.939516 0.7 5.800 9.55 14.400 30.7
1982 270.0 10.534815 6.001231 1.3 5.700 9.80 14.350 32.3
1983 277.0 10.419134 6.093150 1.5 5.300 8.90 14.100 28.4
1984 262.0 10.524809 6.278965 1.3 5.425 9.00 14.500 30.6
1985 263.0 10.649810 6.560726 1.3 5.400 9.30 14.800 32.9
1986 260.0 10.577692 6.095973 0.6 5.375 9.25 14.300 30.3
1987 267.0 10.570412 6.424687 1.7 5.600 9.20 14.500 37.1
1988 275.0 10.619636 6.160800 1.1 6.000 9.50 14.200 35.0
1989 292.0 10.566438 6.399106 0.7 5.375 9.20 15.000 32.5
1990 312.0 10.410897 6.379762 1.1 5.175 8.95 14.700 33.6
1991 304.0 10.608224 6.295456 1.3 5.300 9.25 14.925 31.5
1992 310.0 10.226129 6.052927 1.1 5.100 9.20 14.175 30.1
1993 308.0 10.318831 6.016749 0.7 5.700 8.80 14.400 32.6
1994 304.0 10.280592 5.696689 1.7 5.675 9.25 14.125 29.8
1995 314.0 10.038854 5.879826 1.2 5.000 9.20 13.550 29.3
1996 343.0 9.868513 5.705394 0.3 5.100 9.10 13.300 30.4
1997 337.0 9.747478 5.926339 1.2 4.800 8.00 13.800 29.6
1998 342.0 9.711988 5.496349 1.1 5.300 9.00 13.275 28.7
1999 217.0 10.335945 5.207891 1.2 6.400 9.30 13.300 26.8
2000 327.0 9.568807 5.702088 0.8 5.400 8.10 12.500 29.7
2001 335.0 9.408955 5.914256 0.6 4.950 7.90 12.000 31.1
2002 332.0 9.771988 5.841670 1.1 5.100 8.40 12.950 31.4
2003 324.0 9.716667 6.016440 0.8 5.175 8.10 13.125 32.1
2004 348.0 9.454885 5.631074 0.9 4.900 7.95 13.225 28.0
2005 361.0 9.865097 5.911378 1.0 5.300 8.40 13.000 30.7
2006 345.0 9.857681 6.261762 1.1 5.000 8.60 13.000 35.4
2007 348.0 10.052299 6.163668 1.1 5.200 8.85 13.325 31.6
2008 342.0 10.047076 5.904616 0.9 5.725 8.65 13.100 30.0
2009 350.0 10.225143 5.957750 0.8 5.200 9.05 14.175 30.2
2010 348.0 10.136782 5.666940 0.7 6.000 8.90 13.800 30.1
2011 380.0 9.819211 5.582670 1.1 5.300 8.70 13.225 27.7
2012 305.0 9.887541 5.262952 1.0 5.500 9.30 12.700 28.0
2013 365.0 9.390959 5.262332 0.5 5.200 8.60 12.800 28.7
2014 366.0 9.807923 5.548187 1.6 5.525 9.05 13.200 32.0
2015 385.0 9.748052 5.014614 1.8 5.900 8.70 12.700 28.1
2016 360.0 9.875833 5.395877 1.3 5.900 8.70 12.700 30.1
2017 369.0 10.226016 5.935251 1.7 6.100 8.70 13.200 31.6
2018 355.0 10.488451 5.692110 1.4 6.050 9.20 13.500 30.4
2019 391.0 10.691560 5.802060 1.0 6.500 9.30 13.700 36.1
2020 335.0 11.280896 6.125054 1.5 6.600 9.80 15.050 34.3
2021 335.0 11.455224 6.338176 1.9 6.750 9.70 14.600 32.0
2022 384.0 10.966927 5.995893 2.2 6.400 9.25 14.450 30.6
2023 385.0 11.378701 6.651446 2.1 6.600 9.50 14.700 33.1
2024 376.0 11.025532 6.538390 1.7 5.975 9.35 14.700 33.9


plt.figure(figsize=(20, 6))
plt.xlim(1950, 2024)
plt.title("points per season")
sns.lineplot(data=des[["mean", "min", "max"]])
plt.show()

結果



最高得点(max)はシーズン得点王なのでよく知られている通りです。
1962年のウィルト・チェンバレン選手や1987年のマイケル・ジョーダン選手はグラフの山を作っています。
平均を見ると概ね10点超える辺りがレギュラー選手の得点と言えます。
1960〜70年代一時12点台と高く、2000年代に一時落ちてますが3Pが増えた現在は11点台となっています。

2024年10月18日金曜日

Pythonで地図空間データを扱う⑤

ベースの地図が出来た所で、他のデータを被せてみます。

国土地理院の 500mメッシュ別将来推計人口データ を使用します。

同じく神奈川県のデータ 500m_mesh_suikei_2018_shape_14.zip をダウンロードします。

ベースの地図データと同じ場所に展開します。

そして同じようにread_fileで読み込みます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#
import geopandas as gpd
import matplotlib.pyplot as plt
import japanize_matplotlib

fn = "../data/N03-20240101_14.shp"
gdf = gpd.read_file(fn)
fn2 = "../data/500m_mesh_2018_14.shp"
pdf = gpd.read_file(fn2)

print(gdf.head(10))
print("")
print(gdf.shape)
print("")
print(pdf.head())
print("")
print(pdf.shape)
(6193, 235)と巨大なデータフレームなので、必要なデータ以外は取り除いてもいいでしょう。
# 必要な列だけ取り出し軽量化します。
pdf2 = pdf[['SHICODE', 'PTN_2020', 'geometry']]

# ベースとなる地図
bg = gdf.boundary.plot(linewidth=0.5, edgecolor="gray", figsize=(14, 8))

# 人口データのプロット
pdf2.plot(ax=bg, column="PTN_2020", cmap="jet", legend=True)

# 地域名を表示
for name, row in citys:
    if row['N03_001'].count() > 1:
        x = row["geometry"].centroid.bounds.minx.mean()
        y = row["geometry"].centroid.bounds.miny.mean()
        bg.annotate(name, xy=(x, y), color="red")
    else:
        x = row["geometry"].centroid.bounds.minx
        y = row["geometry"].centroid.bounds.miny
        bg.annotate(name, xy=(x, y), color="red")  

plt.title("神奈川県人口マップ")
plt.show()

地図データに人口データを重ね合わせることが出来ました。

NBA選手のスタッツを偏差値で比べてみる(3)

NBA選手のスタッツから合計偏差値を求める 各スタッツの偏差値を求め平均することで、総合能力の高い選手をランキングしてみます。 平均得点, 平均リバウンド, 平均アシスト, 平均ブロック, 平均スティール, 平均フィールドゴール, 平均3ポイント数から導き出してます。 ...