{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","scrolled":true,"execution":{"iopub.status.busy":"2023-02-24T21:09:34.524735Z","iopub.execute_input":"2023-02-24T21:09:34.525558Z","iopub.status.idle":"2023-02-24T21:09:34.552943Z","shell.execute_reply.started":"2023-02-24T21:09:34.525516Z","shell.execute_reply":"2023-02-24T21:09:34.550028Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Basic Libraries**","metadata":{}},{"cell_type":"code","source":"import gc\nimport warnings\nwarnings.simplefilter(action='ignore', category=FutureWarning)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:34.561605Z","iopub.execute_input":"2023-02-24T21:09:34.562077Z","iopub.status.idle":"2023-02-24T21:09:34.569419Z","shell.execute_reply.started":"2023-02-24T21:09:34.562027Z","shell.execute_reply":"2023-02-24T21:09:34.567924Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**READ THE DATA**","metadata":{}},{"cell_type":"code","source":"### ------------------------------------\n### Basic Functions\n### ------------------------------------\n\ndef expand_contact_id(df):\n    \"\"\"\n    Splits out contact_id into seperate columns.\n    \"\"\"\n    df[\"game_play\"] = df[\"contact_id\"].str[:12]\n    df[\"step\"] = df[\"contact_id\"].str.split(\"_\").str[-3].astype(\"int\")\n    df[\"nfl_player_id_1\"] = df[\"contact_id\"].str.split(\"_\").str[-2]\n    df[\"nfl_player_id_2\"] = df[\"contact_id\"].str.split(\"_\").str[-1]\n    return df\n\ndef add_contact_id(df):\n    # Create contact ids\n    df[\"contact_id\"] = (\n        df[\"game_play\"].astype(\"str\")\n        + \"_\"\n        + df[\"step\"].astype(\"str\")\n        + \"_\"\n        + df[\"nfl_player_id_1\"].astype(\"str\")\n        + \"_\"\n        + df[\"nfl_player_id_2\"].astype(\"str\")\n    )\n    return df","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:34.571107Z","iopub.execute_input":"2023-02-24T21:09:34.572160Z","iopub.status.idle":"2023-02-24T21:09:34.586211Z","shell.execute_reply.started":"2023-02-24T21:09:34.572102Z","shell.execute_reply":"2023-02-24T21:09:34.583744Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### ------------------------------------\n### Read Datasets into Memory\n### ------------------------------------\n\nTRtracking = pd.read_csv('/kaggle/input/nfl-player-contact-detection/train_player_tracking.csv')\nTEtracking = pd.read_csv('/kaggle/input/nfl-player-contact-detection/test_player_tracking.csv')\nTRhelmets = pd.read_csv('/kaggle/input/nfl-player-contact-detection/train_baseline_helmets.csv')\nTEhelmets = pd.read_csv('/kaggle/input/nfl-player-contact-detection/test_baseline_helmets.csv')\nTRvideoMeta = pd.read_csv('/kaggle/input/nfl-player-contact-detection/train_video_metadata.csv')\nTEvideoMeta = pd.read_csv('/kaggle/input/nfl-player-contact-detection/test_video_metadata.csv')\nsub = pd.read_csv('/kaggle/input/nfl-player-contact-detection/sample_submission.csv')\ntrainlabels = pd.read_csv('/kaggle/input/nfl-player-contact-detection/train_labels.csv')","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:34.590701Z","iopub.execute_input":"2023-02-24T21:09:34.591229Z","iopub.status.idle":"2023-02-24T21:09:48.814119Z","shell.execute_reply.started":"2023-02-24T21:09:34.591182Z","shell.execute_reply":"2023-02-24T21:09:48.812776Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### -------------------------------------------\n### Basic processing of the trainlabels dataset\n### -------------------------------------------\n\n\nA = trainlabels[trainlabels['game_play']=='58168_003392']\nB = trainlabels[trainlabels['game_play']=='58172_003247']\nC = pd.concat([A,B], axis=0)\n\nC['game_play'] = C['game_play'].astype(pd.StringDtype())\nC['nfl_player_id_2'] = C['nfl_player_id_2'].astype(pd.StringDtype())\nC['step'] = C['step'].astype('int32')\nC['nfl_player_id_1'] = C['nfl_player_id_1'].astype('int32')\nC['contact'] = C['contact'].astype('int32')\n\nC # 49588 rows × 7 columns","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:48.815735Z","iopub.execute_input":"2023-02-24T21:09:48.816334Z","iopub.status.idle":"2023-02-24T21:09:49.592555Z","shell.execute_reply.started":"2023-02-24T21:09:48.816277Z","shell.execute_reply":"2023-02-24T21:09:49.591244Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### -------------------------------------------\n### Basic processing of the TRtracking dataset\n### -------------------------------------------\n\na = TRtracking[TRtracking['game_play']=='58168_003392']\nb = TRtracking[TRtracking['game_play']=='58172_003247']\nZTRtracking = pd.concat([a,b], axis=0)\n#c # 14872 rows × 17 columns\nZTRtracking = ZTRtracking[['game_play','step','team', 'position',\n             'x_position', 'y_position', 'speed', 'distance','acceleration']]\n\nZTRtracking['game_play'] = ZTRtracking['game_play'].astype(pd.StringDtype())\nZTRtracking['team'] = ZTRtracking['team'].astype(pd.StringDtype())\nZTRtracking['position'] = ZTRtracking['position'].astype(pd.StringDtype())\nZTRtracking['step'] = ZTRtracking['step'].astype('int32')\nZTRtracking['x_position'] = ZTRtracking['x_position'].astype('float32')\nZTRtracking['y_position'] = ZTRtracking['y_position'].astype('float32')\nZTRtracking['speed'] = ZTRtracking['speed'].astype('float32')\nZTRtracking['distance'] = ZTRtracking['distance'].astype('float32')\nZTRtracking['acceleration'] = ZTRtracking['acceleration'].astype('float32')\n\ndisplay(ZTRtracking) # 14872 rows × 9 columns\n#","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:49.594140Z","iopub.execute_input":"2023-02-24T21:09:49.594610Z","iopub.status.idle":"2023-02-24T21:09:49.843948Z","shell.execute_reply.started":"2023-02-24T21:09:49.594569Z","shell.execute_reply":"2023-02-24T21:09:49.842694Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### -------------------------------------------\n### Basic processing of the TRhelmets dataset\n### -------------------------------------------\n\ng = TRhelmets[TRhelmets['game_play']=='58168_003392']\nh = TRhelmets[TRhelmets['game_play']=='58172_003247']\nZTRhelmets = pd.concat([g,h], axis=0)\n#i # 47330 rows × 12 columns\nZTRhelmets = ZTRhelmets[['game_play','view','left', 'width', 'top', 'height']]\nZTRhelmets['game_play'] = ZTRhelmets['game_play'].astype(pd.StringDtype())\nZTRhelmets['view'] = ZTRhelmets['view'].astype(pd.StringDtype())\nZTRhelmets['left'] = ZTRhelmets['left'].astype('int32')\nZTRhelmets['width'] = ZTRhelmets['width'].astype('int32')\nZTRhelmets['top'] = ZTRhelmets['top'].astype('float32')\nZTRhelmets['height'] = ZTRhelmets['height'].astype('float32')\n\ndisplay(ZTRhelmets)\n","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:49.845616Z","iopub.execute_input":"2023-02-24T21:09:49.846022Z","iopub.status.idle":"2023-02-24T21:09:50.456474Z","shell.execute_reply.started":"2023-02-24T21:09:49.845983Z","shell.execute_reply":"2023-02-24T21:09:50.455257Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### -------------------------------------------\n### Basic processing of the TRVideoMeta dataset\n### -------------------------------------------\n\nm = TRvideoMeta[TRvideoMeta['game_play']=='58168_003392']\nn = TRvideoMeta[TRvideoMeta['game_play']=='58172_003247']\nZTRvideoMeta = pd.concat([m,n], axis=0)\n#o # 4 rows × 7 columns\nZTRvideoMeta['end_start_seconds'] = (pd.to_datetime(ZTRvideoMeta['end_time']) - pd.to_datetime(ZTRvideoMeta['start_time'])).dt.total_seconds()\nZTRvideoMeta = ZTRvideoMeta[['game_play','view','end_start_seconds']]\nZTRvideoMeta['game_play'] = ZTRvideoMeta['game_play'].astype(pd.StringDtype())\nZTRvideoMeta['view'] = ZTRvideoMeta['view'].astype(pd.StringDtype())\nZTRvideoMeta['end_start_seconds'] = ZTRvideoMeta['end_start_seconds'].astype('float32')\n\ndisplay(ZTRvideoMeta)\nprint('')\ndisplay(ZTRvideoMeta.shape) # (4, 3)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:50.458114Z","iopub.execute_input":"2023-02-24T21:09:50.459097Z","iopub.status.idle":"2023-02-24T21:09:50.486011Z","shell.execute_reply.started":"2023-02-24T21:09:50.459009Z","shell.execute_reply":"2023-02-24T21:09:50.484888Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### ----------------------------\n### Basic merge all TR datasets\n### ----------------------------\n\nZTRhelmets = ZTRhelmets[['game_play','view','width','height']]\n#iSelect = i[['game_play','view','left', 'width', 'top', 'height']]\nm1 = ZTRhelmets.merge(ZTRvideoMeta, on='game_play',how='left')#.fillna('void')\n###m1 = pd.concat([ZTRhelmets,ZTRvideoMeta], axis=1)\n\nm2right = ZTRtracking.join(m1, how = 'right', lsuffix='left', rsuffix='right')\nm2rightD = m2right.dropna(axis=1)\n\nm2rightD.rename(columns={'game_playright':'game_play'},inplace=True)\n\nm2rightD # 94660 rows × 6 columns","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:50.487608Z","iopub.execute_input":"2023-02-24T21:09:50.488257Z","iopub.status.idle":"2023-02-24T21:09:50.618106Z","shell.execute_reply.started":"2023-02-24T21:09:50.488216Z","shell.execute_reply":"2023-02-24T21:09:50.616680Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### ----------------------------------------------\n### Basic alignment of TR and trainlabels datasets\n### ----------------------------------------------\n\nextracted_col = m2rightD[['view_x', 'width', 'height', 'view_y','end_start_seconds']]\nC = C.join(extracted_col)\nC.dropna()\n#print(\"Second dataframe after adding column from first dataframe:\")\ndisplay(C) # 49588 rows × 12 columns","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:50.619619Z","iopub.execute_input":"2023-02-24T21:09:50.619978Z","iopub.status.idle":"2023-02-24T21:09:50.703812Z","shell.execute_reply.started":"2023-02-24T21:09:50.619944Z","shell.execute_reply":"2023-02-24T21:09:50.702457Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### ----------------------------------------\n### Derived datasets for trainging the model\n### ----------------------------------------\n\nCOMPDATA1 = C[['step','view_x', 'width', 'height', 'end_start_seconds', 'contact']]\nCOMPDATACAT1 = COMPDATA1.copy()\n\n'''apply a user function to rank the 'yardsToGo' value'''\ndef placement_contact(x):\n    if x == 0:\n        return 'zero'\n    else:\n        return 'one'\nCOMPDATACAT1['contact_R']=COMPDATACAT1['contact'].apply(placement_contact)\n\ndef placement_width(x):\n    if x <= 15.000000:\n        return '< 50% Average Width'\n    else:\n        return '> 50% Average Width'\nCOMPDATACAT1['width_R']=COMPDATACAT1['width'].apply(placement_width)\n\ndef placement_height(x):\n    if x <= 18.000000:\n        return '< 50% Average Height'\n    else:\n        return '> 50% Average Height'\nCOMPDATACAT1['height_R']=COMPDATACAT1['height'].apply(placement_height)\n\ndef placement_end_start_seconds(x):\n    if x <= 11.837000:\n        return '< 50% Average end_start_seconds'\n    else:\n        return '> 50% Average end_start_seconds'\nCOMPDATACAT1['end_start_seconds_R']=COMPDATACAT1['end_start_seconds'].apply(placement_end_start_seconds)\n\ndisplay(COMPDATA1) # 49588 rows × 6 columns\nprint('')\ndisplay(COMPDATACAT1) # 49588 rows × 10 columns","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:50.705559Z","iopub.execute_input":"2023-02-24T21:09:50.706048Z","iopub.status.idle":"2023-02-24T21:09:50.801035Z","shell.execute_reply.started":"2023-02-24T21:09:50.705998Z","shell.execute_reply":"2023-02-24T21:09:50.799484Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**A LogisticRegression Model (using Numerical and Categorical data)**","metadata":{}},{"cell_type":"code","source":"'''preprocess and model the data.'''\nfrom sklearn.preprocessing import StandardScaler, OneHotEncoder, OrdinalEncoder\nfrom sklearn.compose import ColumnTransformer, make_column_selector as selector\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.model_selection import train_test_split, GridSearchCV, cross_validate\nfrom sklearn.pipeline import Pipeline, make_pipeline\n\n'''scoring the model.'''\nfrom sklearn.metrics import confusion_matrix, plot_confusion_matrix\nfrom sklearn.metrics import classification_report\nfrom sklearn.metrics import precision_score\n\n'''plotly for interactive plots'''\nimport plotly.express as px\nfrom plotly.subplots import make_subplots\nfrom plotly.figure_factory import create_table\nimport plotly.graph_objs as go\n\n'''Selection based on data types.'''\n# make use of make_column_selector helper to select the corresponding columns.\n\nnumerical_columns_selector = selector(dtype_exclude=object)\ncategorical_columns_selector = selector(dtype_include=object)\n\nnumerical_columns = numerical_columns_selector(COMPDATA1)\ncategorical_columns = categorical_columns_selector(COMPDATA1)\n\n#print(numerical_columns)\n#print(categorical_columns)\n\n# We create the preprocessing pipelines for both numeric and categorical data.\n# model score: 0.763\n\nnumeric_features = ['step', 'width', 'height', 'end_start_seconds', 'contact'] #['age', 'fare']\nnumeric_transformer = Pipeline(steps=[\n    ('imputer', SimpleImputer(strategy='median')),\n    ('scaler', StandardScaler())])\n\ncategorical_features = ['view_x'] #['embarked', 'sex', 'pclass']\ncategorical_transformer = Pipeline(steps=[\n    ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),\n    ('onehot', OneHotEncoder(handle_unknown='ignore'))])\n\npreprocessor = ColumnTransformer(\n    transformers=[\n        ('num', numeric_transformer, numeric_features),\n        ('cat', categorical_transformer, categorical_features)])\n\n# Append classifier to preprocessing pipeline.\n# Now we have a full prediction pipeline.\nclf = Pipeline(steps=[('preprocessor', preprocessor),\n                      ('regressor', LogisticRegression(solver='lbfgs'))])\n\nX = COMPDATA1 #[['step',\n       #'speed', 'distance', 'direction', 'orientation', 'acceleration', 'sa',\n        # 'team', 'position',\n        #'step_R', 'direction_R', 'orientation_R']] #.drop('contact_R',axis=1) #.drop('contact', axis=1) #[['team','step', 'speed', 'distance', 'direction', 'orientation', 'acceleration', 'sa','contact']] #.drop('Us', axis=1)\ny = COMPDATA1['contact']\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n\nclf.fit(X_train, y_train)\n\ncv_results = cross_validate(clf, X, y, cv=2)\nscores = cv_results[\"test_score\"]\n\ny_pred = clf.predict(X_test)\n\nprint(\"model score: %.3f\" % clf.score(X_test, y_test)) # model score: 0.792. greater than 70% is a great model performance.\nprint('')\nprint(y_pred)\nprint('')\nprint(\"The mean cross-validation accuracy is: \"f\"{scores.mean():.3f} ± {scores.std():.3f}\")","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:09:50.802535Z","iopub.execute_input":"2023-02-24T21:09:50.803259Z","iopub.status.idle":"2023-02-24T21:09:53.448187Z","shell.execute_reply.started":"2023-02-24T21:09:50.803219Z","shell.execute_reply":"2023-02-24T21:09:53.446294Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Putting the dataset for testing the model**","metadata":{}},{"cell_type":"code","source":"### -----------------------------------------------\n### Deriving the TEST dataset for testing the model\n### -----------------------------------------------\n\n'''TEtracking dataset'''\naT = TEtracking[TEtracking['game_play']=='58168_003392']\nbT = TEtracking[TEtracking['game_play']=='58172_003247']\nZTEtracking = pd.concat([aT,bT], axis=0)\n#c # 14872 rows × 17 columns\nZTEtracking = ZTEtracking[['game_play','step','team', 'position',\n             'x_position', 'y_position', 'speed', 'distance','acceleration']]\nZTEtracking['game_play'] = ZTEtracking['game_play'].astype(pd.StringDtype())\nZTEtracking['team'] = ZTEtracking['team'].astype(pd.StringDtype())\nZTEtracking['position'] = ZTEtracking['position'].astype(pd.StringDtype())\nZTEtracking['step'] = ZTEtracking['step'].astype('int32')\nZTEtracking['x_position'] = ZTEtracking['x_position'].astype('float32')\nZTEtracking['y_position'] = ZTEtracking['y_position'].astype('float32')\nZTEtracking['speed'] = ZTEtracking['speed'].astype('float32')\nZTEtracking['distance'] = ZTEtracking['distance'].astype('float32')\nZTEtracking['acceleration'] = ZTEtracking['acceleration'].astype('float32')\n\n'''TEhelmets dataset'''\ngT = TEhelmets[TEhelmets['game_play']=='58168_003392']\nhT = TEhelmets[TEhelmets['game_play']=='58172_003247']\nZTEhelmets = pd.concat([gT,hT], axis=0)\n#i # 47330 rows × 12 columns\nZTEhelmets = ZTEhelmets[['game_play','view','left', 'width', 'top', 'height']]\nZTEhelmets['game_play'] = ZTEhelmets['game_play'].astype(pd.StringDtype())\nZTEhelmets['view'] = ZTEhelmets['view'].astype(pd.StringDtype())\nZTEhelmets['left'] = ZTEhelmets['left'].astype('int32')\nZTEhelmets['width'] = ZTEhelmets['width'].astype('int32')\nZTEhelmets['top'] = ZTEhelmets['top'].astype('float32')\nZTEhelmets['height'] = ZTEhelmets['height'].astype('float32')\n\n'''TEvideoMeta dataset'''\nmT = TEvideoMeta[TEvideoMeta['game_play']=='58168_003392']\nnT = TEvideoMeta[TEvideoMeta['game_play']=='58172_003247']\nZTEvideoMeta = pd.concat([mT,nT], axis=0)\n#o # 4 rows × 7 columns\nZTEvideoMeta['end_start_seconds'] = (pd.to_datetime(ZTEvideoMeta['end_time']) - pd.to_datetime(ZTEvideoMeta['start_time'])).dt.total_seconds()\nZTEvideoMeta = ZTEvideoMeta[['game_play','view','end_start_seconds']]\nZTEvideoMeta['game_play'] = ZTEvideoMeta['game_play'].astype(pd.StringDtype())\nZTEvideoMeta['view'] = ZTEvideoMeta['view'].astype(pd.StringDtype())\nZTEvideoMeta['end_start_seconds'] = ZTEvideoMeta['end_start_seconds'].astype('float32')\n\n'''merging the TE datasets'''\nZTEhelmets = ZTEhelmets[['game_play','view','width','height']]\n#iSelect = i[['game_play','view','left', 'width', 'top', 'height']]\nm1T = ZTEhelmets.merge(ZTEvideoMeta, on='game_play',how='left')#.fillna('void')\n###m1 = pd.concat([ZTRhelmets,ZTRvideoMeta], axis=1)\nm2Tright = ZTEtracking.join(m1T, how = 'right', lsuffix='left', rsuffix='right')\nm2TrightD = m2Tright.dropna(axis=1)\nm2TrightD.rename(columns={'game_playright':'game_play'},inplace=True)\nm2TrightD\n\n'''realigning the TE datasets with the trainlabels dataset'''\nextracted_colT = m2TrightD[['view_x', 'width', 'height', 'end_start_seconds']] # 'view_y',\n#print(\"column to be added from first dataframe to second:\")\nCT = C #.join(extracted_colT)\n#CT.dropna()\n#print(\"Second dataframe after adding columns from first dataframe:\")\n#display(CT) 49588 rows × 12 columns\nCOMPTESTDATA1 = CT[['step','view_x', 'width', 'height', 'end_start_seconds', 'contact']]\nCOMPTESTDATA1 # 49588 rows × 6 columns# 49588 rows × 6 columns","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:13:23.748440Z","iopub.execute_input":"2023-02-24T21:13:23.749008Z","iopub.status.idle":"2023-02-24T21:13:23.987410Z","shell.execute_reply.started":"2023-02-24T21:13:23.748948Z","shell.execute_reply":"2023-02-24T21:13:23.985910Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Submission**","metadata":{}},{"cell_type":"code","source":"### -------------------------------\n### Generating Submission .csv file\n### -------------------------------\n\n''' testing the model'''\nX_test = COMPTESTDATA1\ny_predT = clf.predict(X_test)\ndf_y_predT = pd.DataFrame(y_predT)\ndf_y_predT.rename(columns={0:'contact'},inplace=True)\n\n''' putting together the Submission dataframe'''\nSubmission = pd.DataFrame()\nSubmission['contact_id'] = C['contact_id']\nSubmission['contact'] = df_y_predT['contact']\nSubmission[:3]\n\n''' save of the Submission to file'''\nSubmission.to_csv('submission.csv',index=False)\n","metadata":{"execution":{"iopub.status.busy":"2023-02-24T21:13:33.308549Z","iopub.execute_input":"2023-02-24T21:13:33.309052Z","iopub.status.idle":"2023-02-24T21:13:33.517938Z","shell.execute_reply.started":"2023-02-24T21:13:33.309009Z","shell.execute_reply":"2023-02-24T21:13:33.516566Z"},"trusted":true},"execution_count":null,"outputs":[]}]}