10:その他のPython基礎(関数・forループ・if文・loc/iloc)


その他のPython基礎

今までPythonを動かしながら学んできて、段々とスムーズにプログラムが理解できるようになってきたと思います。これまで扱わなかった基礎について、本章で解説していきます。基本的な集計は基礎編で学習したことを使用すれば問題なく対応できます。今回で基礎をしっかりと固め、実践編へ挑戦しましょう。


データ準備

データの準備として2024-25シーズンの全チームのアドバンストスタッツ(高度な指標)を取得します。

import pandas as pd
from nba_api.stats.endpoints import leaguedashteamstats

team_stats = leaguedashteamstats.LeagueDashTeamStats(
    season='2024-25',
    measure_type_detailed_defense='Advanced'
)

df_team = team_stats.get_data_frames()[0]
df_team.head()

このdf_teamには、

  • チーム名(TEAM_NAME)
  • 勝率(W_PCT)
  • ネットレーティング(NET_RATING)
  • トゥルーシューティング%(TS_PCT)
    など、様々な指標が入っています。

locとiloc:データフレームからデータを取り出す方法

✅ loc:「ラベル(列名やインデックス名)」で指定

team_name = df_team.loc[0, 'TEAM_NAME']  # 0行目のチーム名
win_pct = df_team.loc[0, 'W_PCT']        # 0行目の勝率
print(f"locで抽出:{team_name}の勝率は{win_pct}")

✅ iloc:「インデックス番号(0番目、1番目)」で指定

team_name_iloc = df_team.iloc[0, 1]  # 0行目、1列目のデータ(TEAM_NAME)
win_pct_iloc = df_team.iloc[0, 4]    # 0行目、4列目のデータ(W_PCT)
print(f"ilocで抽出:{team_name_iloc}の勝率は{win_pct_iloc}")
指定方法lociloc
指定基準列名・インデックス名番号(0,1,2…)
loc[0, 'TEAM_NAME']iloc[0, 1]

✅ 注意

  • 列名がわかっている場合はlocの方がわかりやすい
  • 単純に順番で指定したい場合はilocが便利

if文:条件によって処理を変える

if文は、「もし〜なら」「そうでなければ」という条件分岐をするための仕組みです。

✅ 例:ネットレーティングがプラスかマイナスか判定

team_name = df_team.loc[0, 'TEAM_NAME']
net_rating = df_team.loc[0, 'NET_RATING']

if net_rating > 0:
    print(f"{team_name}はNET_RATINGがプラスのチーム")
else:
    print(f"{team_name}はNET_RATINGがマイナスのチーム")

これで、得失点差がプラスなのかマイナスなのかがわかります。

関数:処理をまとめて再利用する仕組み

関数は、よく使う処理を一つの名前にまとめる仕組みです。
これにより、同じ処理を何度でも使いまわせます

✅ 例:勝率が60%以上のチームを「強い」と判定する関数

def is_strong_team(win_pct):
    if win_pct >= 0.6:
        return '強いチーム'
    else:
        return '普通のチーム'

example_win_pct = df_team.loc[0, 'W_PCT']
print(f"{df_team.loc[0, 'TEAM_NAME']}は:{is_strong_team(example_win_pct)}")

この関数は、勝率が60%以上なら「強いチーム」、それ未満は「普通のチーム」と判定してくれます。


forループ:全データに対して繰り返し処理する

forループは、データの一つ一つに順番に処理を行う時に使います。

✅ 例:全チームの勝率を判定して表示

for index, row in df_team.iterrows():
    team_name = row['TEAM_NAME']
    win_pct = row['W_PCT']
    result = is_strong_team(win_pct)
    print(f"{team_name}は{result}")
  • df_team.iterrows()は、データフレームを1行ずつ取り出すための関数。
  • row['TEAM_NAME']などで、その行のデータを取得します。

結果は以下になります。

このようにforループを用いて全チームに対して、関数を使用して勝率の判定をさせることができました。


まとめ

本章でのまとめは以下になります。

機能役割
loc / ilocデータの抽出チーム名・勝率などの取得
if文条件に応じた分岐NET_RATINGのプラス・マイナス判定
関数処理のまとめ・再利用勝率判定
forループ繰り返し処理全チームを分類

最初は慣れるまで時間がかかるかもしれませんが、非常に便利ですし大容量のデータを処理するうえで必要不可欠な処理です。基礎を固めて、実践編に挑戦していきましょう。