kaggleの雑記

kaggleからpandasで縦のデータから統計データを取得する方法を学ぶ

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

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

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

features_relative_to_back(df, carriers)

def features_relative_to_back(df, carriers):
    player_distance = df[['GameId','PlayId','NflId','X','Y']]
    player_distance = pd.merge(player_distance, carriers, on=['GameId','PlayId'], how='inner')
    player_distance = player_distance[player_distance['NflId'] != player_distance['NflIdRusher']]
    player_distance['dist_to_back'] = player_distance[['X','Y','back_X','back_Y']].apply(lambda x: euclidean_distance(x[0],x[1],x[2],x), axis=1)

    player_distance = player_distance.groupby(['GameId','PlayId','back_from_scrimmage','back_oriented_down_field','back_moving_down_field'])\
                                        .agg({'dist_to_back':['min','max','mean','std']})\
                                        .reset_index()
    player_distance.columns = ['GameId','PlayId','back_from_scrimmage','back_oriented_down_field','back_moving_down_field',
                                'min_dist','max_dist','mean_dist','std_dist']

    return player_distance

1, 2行目

元データから’GameId’,’PlayId’,’NflId’,’X’,’Y’を持ってきて、back_featuresから取得したcarriersを’GameId’,’PlayId’をキーとしてない武家統合します。

kaggleのNFLコンペから、ランナーとその他の選手の切り分けた特徴量生成を学ぶ特徴量生成のコードを読み解く、その3 https://www.kaggle.com/enzoamp/nfl-lightgbm こ...

3行目

NflIdRusherがNflIdじゃないレコードに限定しています。(ボールを持っていないプレイヤーに限定している)

4行目

def euclidean_distance(x1,y1,x2,y2):
    x_diff = (x1-x2)**2
    y_diff = (y1-y2)**2

X, Yは3行目で絞ったボールを持っている人以外の位置、back_X, back_Yはボールを持っている人の位置、それに対してユークリッド距離を求めてdist_to_backという変数を生成しています。

5, 6行目

他のプレイヤーとの距離を全てデータとして持つのではなく、最大値、最小値、平均、標準偏差を取得して、データに入れ直しています。

player_distance = player_distance.groupby(['GameId','PlayId','back_from_scrimmage','back_oriented_down_field','back_moving_down_field'])\
                                        .agg({'dist_to_back':['min','max','mean','std']})\
                                        .reset_index()

このコードは1つの技として覚えておきたいと思います。

kaggleのコンペから方向と距離についての特徴量生成を学ぶ特徴量生成のコードを読み解く、その1 https://www.kaggle.com/enzoamp/nfl-lightgbm こ...
kaggleのNFLコンペから、選手の行動・方向に関する特徴量生成を学ぶ特徴量生成のコードを読み解く、その2 https://www.kaggle.com/enzoamp/nfl-lightgbm こ...
kaggleのNFLコンペから、ランナーとその他の選手の切り分けた特徴量生成を学ぶ特徴量生成のコードを読み解く、その3 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