kaggleの雑記

kaggleのNFLコンペから、選手の行動・方向に関する特徴量生成を学ぶ

特徴量生成のコードを読み解く、その2

https://www.kaggle.com/enzoamp/nfl-lightgbm

このNotebookのコードを解読していきます。コードの作成者はLorenzo Ampilさんです。

update_orientation(df, yardline)

def update_orientation(df, yardline):
    df['X'] = df[['X','PlayDirection']].apply(lambda x: new_X(x[0],x[1]), axis=1)
    df['Orientation'] = df[['Orientation','PlayDirection']].apply(lambda x: new_orientation(x[0],x), axis=1)
    df['Dir'] = df[['Dir','PlayDirection']].apply(lambda x: new_orientation(x[0],x[1]), axis=1)

    df = df.drop('YardLine', axis=1)
    df = pd.merge(df, yardline, on=['GameId','PlayId'], how='inner')

    return df

1行目

df[[‘X’,’PlayDirection’]]で

  • X – player position along the long axis of the field. See figure below. – コートの長い方向におけるポジション
  • PlayDirection – direction the play is headed – プレイの方向(なので、ボールを持っている人の進行方向?)
def new_X(x_coordinate, play_direction):
    if play_direction == 'left':
        return 120.0 - x_coordinate
    else:
        return x_coordinate

これで方向を統一する処理を入れています。(これをやると、PlayDirectionがいらなくなるはず。きっとあとで消してくる?)

2, 3行目

  • Orientation – orientation of player (deg) – プレイヤーの角度
  • Dir – angle of player motion (deg) – プレイヤーの動きの角度

(繊細な違い・・・)

それに対して下記の関数を当てます

def new_orientation(angle, play_direction):
    if play_direction == 'left':
        new_angle = 360.0 - angle
        if new_angle == 360.0:
            new_angle = 0.0
        return new_angle
    else:
        return angle

プレイヤーの方向が右か左かによって、角度が逆になっているので、それを直しているだけのようですね。

4, 5, 6行目

最後はもともとあったYaedlineを消して

すでに特徴量として編集したyardlineのDataFrameと内部結合して、返して終了です。

kaggleのコンペから方向と距離についての特徴量生成を学ぶ特徴量生成のコードを読み解く、その1 https://www.kaggle.com/enzoamp/nfl-lightgbm こ...
kaggleのコンペから方向と距離についての特徴量生成を学ぶ特徴量生成のコードを読み解く、その1 https://www.kaggle.com/enzoamp/nfl-lightgbm こ...
kaggleのNFLコンペから、ランナーとその他の選手の切り分けた特徴量生成を学ぶ特徴量生成のコードを読み解く、その3 https://www.kaggle.com/enzoamp/nfl-lightgbm こ...
kaggleからpandasで縦のデータから統計データを取得する方法を学ぶ特徴量生成のコードを読み解く、その4 https://www.kaggle.com/enzoamp/nfl-lightgbm こ...
【kaggle】NFL Big Data Bowl のlightgbmを利用したコードの特徴量生成を読み解く、その5特徴量生成のコードを読み解く、その5 https://www.kaggle.com/enzoamp/nfl-lightgbm こ...
kaggleのNFLコンペから学ぶ、ポジションの欠損値の埋め方【事例】特徴量生成のコードを読み解く、その6 https://www.kaggle.com/enzoamp/nfl-lightgbm こ...
ABOUT ME
hirayuki
今年で社会人3年目になります。 日々体当たりで仕事を覚えています。 テーマはIT・教育です。 少しでも技術に親しんでもらえるよう、noteで4コマ漫画も書いています。 https://note.mu/hirayuki