Spaces:
Sleeping
Sleeping
| from lightGBT import get_test_df | |
| import lightgbm as lgb | |
| import numpy as np | |
| import pandas as pd | |
| dx_model = lgb.Booster(model_file='lightGBT_dx_model.txt') | |
| dy_model = lgb.Booster(model_file='lightGBT_dy_model.txt') | |
| BASE_COLS = ['game_id', 'play_id', 'player_to_predict', 'nfl_id', 'frame_id', | |
| 'play_direction', 'absolute_yardline_number', 'player_name', | |
| 'player_height', 'player_weight', 'player_birth_date', | |
| 'player_position', 'player_side', 'player_role', 'x', 'y', 's', 'a', | |
| 'dir', 'o', 'num_frames_output', 'ball_land_x', 'ball_land_y'] | |
| MANDATORY_COLS=['game_id', 'play_id', 'nfl_id'] | |
| def predict(df): | |
| given_input_cols = set(df.columns) | |
| for c in MANDATORY_COLS: | |
| if c not in given_input_cols: | |
| raise Exception(f'{c} is missing in input') | |
| elif df[c].isna().any(): | |
| raise Exception(f'{c} in input contains nan') | |
| for c in BASE_COLS: | |
| if c not in df: | |
| raise Exception(f'{c} is not there in input') | |
| if df[c].isna().all(): | |
| raise Exception(f'{c} in input contains all nan') | |
| X_df = get_test_df(df) | |
| dx_features = dx_model.feature_name() | |
| dy_features = dy_model.feature_name() | |
| pred_dx = dx_model.predict(X_df[dx_features]) | |
| pred_dy = dy_model.predict(X_df[dy_features]) | |
| game_id = X_df['game_id'].values | |
| play_id = X_df['play_id'].values | |
| nfl_id = X_df['nfl_id'].values | |
| frame_id = X_df['frame_id'].values | |
| player_position = X_df['player_position'].values | |
| player_role = X_df['player_role'].values | |
| x_last = X_df['x_last'].values | |
| y_last = X_df['y_last'].values | |
| play_direction = X_df['play_direction'].values | |
| pred_x = pred_dx + x_last | |
| pred_y = pred_dy + y_last | |
| mask = (play_direction == 'left') | |
| if np.any(mask): | |
| pred_x[mask] = 120 - pred_x[mask] | |
| pred_x = np.clip(pred_x, 0.0, 120.0) | |
| pred_y = np.clip(pred_y, 0.0, 53.3) | |
| preds = np.column_stack([game_id, play_id, nfl_id, frame_id, player_position, | |
| player_role, play_direction, x_last, y_last, pred_x, pred_y]) | |
| df = pd.DataFrame(preds, columns=['game_id', 'play_id', 'nfl_id','frame_id', 'player_position', | |
| 'player_role','play_direction', | |
| 'x_last', 'y_last', 'pred_x', 'pred_y']) | |
| return df.sort_values(by=['game_id', 'play_id', 'nfl_id', 'frame_id']) | |