{"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":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":0.032868,"end_time":"2023-01-08T11:25:54.207710","exception":false,"start_time":"2023-01-08T11:25:54.174842","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:24.242854Z","iopub.execute_input":"2023-01-08T13:06:24.243363Z","iopub.status.idle":"2023-01-08T13:06:24.251631Z","shell.execute_reply.started":"2023-01-08T13:06:24.243323Z","shell.execute_reply":"2023-01-08T13:06:24.250573Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install swifter #Speed apply functions to pd","metadata":{"papermill":{"duration":16.833849,"end_time":"2023-01-08T11:26:11.049488","exception":false,"start_time":"2023-01-08T11:25:54.215639","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:24.254081Z","iopub.execute_input":"2023-01-08T13:06:24.254431Z","iopub.status.idle":"2023-01-08T13:06:32.984992Z","shell.execute_reply.started":"2023-01-08T13:06:24.254389Z","shell.execute_reply":"2023-01-08T13:06:32.983869Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tqdm.notebook import tqdm\nfrom matplotlib import pyplot as plt\nimport seaborn as sns\nimport lightgbm as lgb\nimport swifter\n\nfrom sklearn.preprocessing import LabelEncoder, MinMaxScaler, StandardScaler\nfrom sklearn.model_selection import KFold, ShuffleSplit, StratifiedKFold\nfrom sklearn.metrics import roc_auc_score, log_loss","metadata":{"papermill":{"duration":3.748473,"end_time":"2023-01-08T11:26:14.808118","exception":false,"start_time":"2023-01-08T11:26:11.059645","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:32.987198Z","iopub.execute_input":"2023-01-08T13:06:32.987482Z","iopub.status.idle":"2023-01-08T13:06:32.994160Z","shell.execute_reply.started":"2023-01-08T13:06:32.987442Z","shell.execute_reply":"2023-01-08T13:06:32.993258Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Baseline\n## 1.data processing\n- data read\n- data preprocessing\n\n## 2.model call\n- scikit-learn The classic model uses\n- lightgbm/xgboost/catboost model use\n\n## 3.model validation\n- hold out verify\n- Cross-validation","metadata":{"papermill":{"duration":0.009584,"end_time":"2023-01-08T11:26:14.827952","exception":false,"start_time":"2023-01-08T11:26:14.818368","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"## 1.data processing","metadata":{"papermill":{"duration":0.00922,"end_time":"2023-01-08T11:26:14.846914","exception":false,"start_time":"2023-01-08T11:26:14.837694","status":"completed"},"tags":[]}},{"cell_type":"code","source":"train_df = pd.read_csv('/kaggle/input/emsi-5iir-ds/train.csv')\ntest_df = pd.read_csv('/kaggle/input/emsi-5iir-ds/test.csv')","metadata":{"papermill":{"duration":15.910331,"end_time":"2023-01-08T11:26:30.766883","exception":false,"start_time":"2023-01-08T11:26:14.856552","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:32.995465Z","iopub.execute_input":"2023-01-08T13:06:32.995717Z","iopub.status.idle":"2023-01-08T13:06:43.553137Z","shell.execute_reply.started":"2023-01-08T13:06:32.995688Z","shell.execute_reply":"2023-01-08T13:06:43.552202Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.concat([train_df, test_df],axis=0).reset_index(drop=True) #concatination","metadata":{"papermill":{"duration":1.391724,"end_time":"2023-01-08T11:26:32.168510","exception":false,"start_time":"2023-01-08T11:26:30.776786","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:43.555853Z","iopub.execute_input":"2023-01-08T13:06:43.556238Z","iopub.status.idle":"2023-01-08T13:06:44.729032Z","shell.execute_reply.started":"2023-01-08T13:06:43.556191Z","shell.execute_reply":"2023-01-08T13:06:44.727986Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.head()","metadata":{"papermill":{"duration":0.047504,"end_time":"2023-01-08T11:26:32.226367","exception":false,"start_time":"2023-01-08T11:26:32.178863","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:44.731009Z","iopub.execute_input":"2023-01-08T13:06:44.731371Z","iopub.status.idle":"2023-01-08T13:06:44.760808Z","shell.execute_reply.started":"2023-01-08T13:06:44.731321Z","shell.execute_reply":"2023-01-08T13:06:44.759841Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.tail()","metadata":{"papermill":{"duration":0.043561,"end_time":"2023-01-08T11:26:32.280425","exception":false,"start_time":"2023-01-08T11:26:32.236864","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:44.762334Z","iopub.execute_input":"2023-01-08T13:06:44.762600Z","iopub.status.idle":"2023-01-08T13:06:44.789889Z","shell.execute_reply.started":"2023-01-08T13:06:44.762566Z","shell.execute_reply":"2023-01-08T13:06:44.788779Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.info(verbose=True, null_counts=True) #summary","metadata":{"papermill":{"duration":0.222523,"end_time":"2023-01-08T11:26:32.513371","exception":false,"start_time":"2023-01-08T11:26:32.290848","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:44.791442Z","iopub.execute_input":"2023-01-08T13:06:44.791790Z","iopub.status.idle":"2023-01-08T13:06:44.994159Z","shell.execute_reply.started":"2023-01-08T13:06:44.791746Z","shell.execute_reply":"2023-01-08T13:06:44.993282Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(10):\n    df[f'ch_{i}'] = df['f_27'].str.get(i).apply(ord) - ord('A') #getindex getUnicode->nameCol","metadata":{"papermill":{"duration":12.70608,"end_time":"2023-01-08T11:26:45.230095","exception":false,"start_time":"2023-01-08T11:26:32.524015","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:44.995266Z","iopub.execute_input":"2023-01-08T13:06:44.995499Z","iopub.status.idle":"2023-01-08T13:06:58.396085Z","shell.execute_reply.started":"2023-01-08T13:06:44.995472Z","shell.execute_reply":"2023-01-08T13:06:58.395186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"num_cols  =  ['f_00',\n             'f_01',\n             'f_02',\n             'f_03',\n             'f_04',\n             'f_05',\n             'f_06',\n             'f_19',\n             'f_20',\n             'f_21',\n             'f_22',\n             'f_23',\n             'f_24',\n             'f_25',\n             'f_26',\n             'f_28',]\ncate_cols = ['f_07',\n             'f_08',\n             'f_09',\n             'f_10',\n             'f_11',\n             'f_12',\n             'f_13',\n             'f_14',\n             'f_15',\n             'f_16',\n             'f_17',\n             'f_18',\n#              'f_27',\n             'f_29',\n             'f_30'] + [f'ch_{i}' for i in range(10)]","metadata":{"papermill":{"duration":0.022967,"end_time":"2023-01-08T11:26:45.263520","exception":false,"start_time":"2023-01-08T11:26:45.240553","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:58.397775Z","iopub.execute_input":"2023-01-08T13:06:58.398132Z","iopub.status.idle":"2023-01-08T13:06:58.405437Z","shell.execute_reply.started":"2023-01-08T13:06:58.398087Z","shell.execute_reply":"2023-01-08T13:06:58.404512Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# continuous features  #tqdm bar #hist\nfor col in tqdm(num_cols):\n    plt.figure(dpi=150)\n    sns.distplot(df[col])","metadata":{"papermill":{"duration":111.361114,"end_time":"2023-01-08T11:28:36.635659","exception":false,"start_time":"2023-01-08T11:26:45.274545","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:06:58.409096Z","iopub.execute_input":"2023-01-08T13:06:58.409816Z","iopub.status.idle":"2023-01-08T13:09:09.593116Z","shell.execute_reply.started":"2023-01-08T13:06:58.409765Z","shell.execute_reply":"2023-01-08T13:09:09.592198Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# native data encoding\nfor col in tqdm(num_cols):\n    # min-max\n#     df[col] = (df[col] - df[col].min()) / (df[col].max() - df[col].min())\n    # z-score\n    df[col] = (df[col] - df[col].mean()) / df[col].std()","metadata":{"papermill":{"duration":0.617294,"end_time":"2023-01-08T11:28:37.276486","exception":false,"start_time":"2023-01-08T11:28:36.659192","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:09:09.594803Z","iopub.execute_input":"2023-01-08T13:09:09.595754Z","iopub.status.idle":"2023-01-08T13:09:10.031009Z","shell.execute_reply.started":"2023-01-08T13:09:09.595714Z","shell.execute_reply":"2023-01-08T13:09:10.030074Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # sklearn data encoding\n# scaler = StandardScaler()\n# # scaler = MinMaxScaler()\n# df[num_cols] = scaler.fit_transform(df[num_cols])","metadata":{"papermill":{"duration":0.03095,"end_time":"2023-01-08T11:28:37.329251","exception":false,"start_time":"2023-01-08T11:28:37.298301","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:09:10.032423Z","iopub.execute_input":"2023-01-08T13:09:10.032687Z","iopub.status.idle":"2023-01-08T13:09:10.037084Z","shell.execute_reply.started":"2023-01-08T13:09:10.032658Z","shell.execute_reply":"2023-01-08T13:09:10.035967Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.describe()","metadata":{"papermill":{"duration":3.442429,"end_time":"2023-01-08T11:28:40.794056","exception":false,"start_time":"2023-01-08T11:28:37.351627","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:09:10.038340Z","iopub.execute_input":"2023-01-08T13:09:10.038592Z","iopub.status.idle":"2023-01-08T13:09:12.698186Z","shell.execute_reply.started":"2023-01-08T13:09:10.038555Z","shell.execute_reply":"2023-01-08T13:09:12.697050Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# discrete features #countplot\nfor col in tqdm(cate_cols):\n    plt.figure(dpi=150)\n    sns.countplot(df[col])","metadata":{"papermill":{"duration":11.548171,"end_time":"2023-01-08T11:28:52.364860","exception":false,"start_time":"2023-01-08T11:28:40.816689","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:09:12.699684Z","iopub.execute_input":"2023-01-08T13:09:12.700159Z","iopub.status.idle":"2023-01-08T13:09:23.666970Z","shell.execute_reply.started":"2023-01-08T13:09:12.700111Z","shell.execute_reply":"2023-01-08T13:09:23.665819Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# native discrete feature encoding  \n#iterate\n#map with zip\n#mapping and fill with int\n#Crte new col with the count\nfor col in tqdm(cate_cols):\n    map_dict = dict(zip(df[col].unique(), range(df[col].nunique())))\n    df[col] = df[col].map(map_dict)\n    df[f'{col}_count'] = df[col].map(df[col].value_counts())","metadata":{"papermill":{"duration":1.841654,"end_time":"2023-01-08T11:28:54.242634","exception":false,"start_time":"2023-01-08T11:28:52.400980","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:09:23.668491Z","iopub.execute_input":"2023-01-08T13:09:23.668834Z","iopub.status.idle":"2023-01-08T13:09:25.499275Z","shell.execute_reply.started":"2023-01-08T13:09:23.668791Z","shell.execute_reply":"2023-01-08T13:09:25.498271Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # sklearn discrete feature encoding\n# for col in tqdm(cate_cols):\n#     scale = LabelEncoder()\n#     scale.fit(df[col])\n#     df[col] = scale.transform(df[col])","metadata":{"papermill":{"duration":0.043358,"end_time":"2023-01-08T11:28:54.321276","exception":false,"start_time":"2023-01-08T11:28:54.277918","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:09:25.500787Z","iopub.execute_input":"2023-01-08T13:09:25.501140Z","iopub.status.idle":"2023-01-08T13:09:25.505559Z","shell.execute_reply.started":"2023-01-08T13:09:25.501094Z","shell.execute_reply":"2023-01-08T13:09:25.504614Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = df[df['target'].notna()].reset_index(drop=True)\ntest_df = df[df['target'].isna()].reset_index(drop=True)","metadata":{"papermill":{"duration":2.126334,"end_time":"2023-01-08T11:28:56.481936","exception":false,"start_time":"2023-01-08T11:28:54.355602","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:09:25.506892Z","iopub.execute_input":"2023-01-08T13:09:25.507234Z","iopub.status.idle":"2023-01-08T13:09:27.129074Z","shell.execute_reply.started":"2023-01-08T13:09:25.507193Z","shell.execute_reply":"2023-01-08T13:09:27.128047Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#crte list features + print\ndrop_feature = ['id','target', 'f_27']\nfeature = [x for x in train_df.columns if x not in drop_feature]\nprint(len(feature),feature)","metadata":{"papermill":{"duration":0.04653,"end_time":"2023-01-08T11:28:56.563082","exception":false,"start_time":"2023-01-08T11:28:56.516552","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:09:27.130357Z","iopub.execute_input":"2023-01-08T13:09:27.130607Z","iopub.status.idle":"2023-01-08T13:09:27.136838Z","shell.execute_reply.started":"2023-01-08T13:09:27.130579Z","shell.execute_reply":"2023-01-08T13:09:27.135599Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2.model call","metadata":{"papermill":{"duration":0.033164,"end_time":"2023-01-08T11:28:56.629841","exception":false,"start_time":"2023-01-08T11:28:56.596677","status":"completed"},"tags":[]}},{"cell_type":"code","source":"### sklearn一 Training of new model\n'''\n# fit model\nmodel.fit(X_train, y_train)\n\n# model prediction\nmodel.predict(X_test)\n\n# Output Probabilities (Classification Tasks)\nmodel.predict_proba(X_test)\n\n# Get the parameters of this model\nmodel.get_params()\n'''","metadata":{"papermill":{"duration":0.045699,"end_time":"2023-01-08T11:28:56.709179","exception":false,"start_time":"2023-01-08T11:28:56.663480","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:09:27.138401Z","iopub.execute_input":"2023-01-08T13:09:27.138848Z","iopub.status.idle":"2023-01-08T13:09:27.150787Z","shell.execute_reply.started":"2023-01-08T13:09:27.138814Z","shell.execute_reply":"2023-01-08T13:09:27.150173Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split #splitting a dataset into training-2 and validation-2\nX_train, X_valid, y_train, y_valid = train_test_split(train_df[feature], train_df['target'], random_state=666)","metadata":{"papermill":{"duration":1.495663,"end_time":"2023-01-08T11:28:58.238733","exception":false,"start_time":"2023-01-08T11:28:56.743070","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:09:27.152178Z","iopub.execute_input":"2023-01-08T13:09:27.152426Z","iopub.status.idle":"2023-01-08T13:09:28.291084Z","shell.execute_reply.started":"2023-01-08T13:09:27.152397Z","shell.execute_reply":"2023-01-08T13:09:28.290012Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The purpose of splitting the dataset into a training set and a validation set is to be able to evaluate the performance of a machine learning model on a dataset that it has not seen during training. By using the validation set to evaluate the model, we can get a sense of how well the model is likely to perform on new, unseen data.","metadata":{}},{"cell_type":"code","source":"from sklearn.linear_model import LinearRegression\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.naive_bayes import BernoulliNB, MultinomialNB, GaussianNB\nfrom sklearn.svm import SVC\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.neural_network import MLPClassifier\nfrom sklearn.ensemble import AdaBoostClassifier, RandomForestClassifier\n\n\nmodel = RandomForestClassifier() #random forest\n\nmodel.fit(X_train, y_train) #predt new data\n\ny_valid_pre = model.predict_proba(X_valid)[:,1] #predt x_valid store y_valid\n\nprint(f'{str(model)} AUC :{roc_auc_score(y_valid, y_valid_pre)}')\n\nprint(f'{str(model)} LogLoss :{log_loss(y_valid, y_valid_pre)}')\n\ny_pre = model.predict(test_df[feature])","metadata":{"papermill":{"duration":911.423048,"end_time":"2023-01-08T11:44:09.698037","exception":false,"start_time":"2023-01-08T11:28:58.274989","status":"completed"},"tags":[],"_kg_hide-output":false,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 3.model validation","metadata":{"papermill":{"duration":0.033627,"end_time":"2023-01-08T11:44:09.766948","exception":false,"start_time":"2023-01-08T11:44:09.733321","status":"completed"},"tags":[]}},{"cell_type":"code","source":"#lightGBM\nparams = {'num_leaves': 60, #The result has a greater impact on the final effect, the larger the value, the better, if it is too large, there will be overfitting\n          'min_data_in_leaf': 30,\n          'objective': 'binary', #defined objective function\n          'max_depth': -1,\n          'learning_rate': 0.1,\n          \"min_sum_hessian_in_leaf\": 6,\n          \"boosting\": \"gbdt\",\n          \"feature_fraction\": 0.9,  #Extracted Feature Ratio\n          \"bagging_freq\": 1,\n          \"bagging_fraction\": 0.8,\n          \"bagging_seed\": 11,\n          \"lambda_l1\": 0.1,             #l1 regularization\n          # 'lambda_l2': 0.001,     #l2 regularization\n          \"verbosity\": -1,\n          \"nthread\": -1, #The number of threads, -1 means all threads, the more threads, the faster the running speed\n          'metric': {'binary_logloss', 'auc'},  ##Evaluation function selection\n          \"random_state\": 2019, #A random number seed to prevent inconsistent results from run to run\n          # 'device': 'gpu' speed up the calculation\n          }\n#define 5 fold cross-validation\nn_fold = 5\noof_pre = np.zeros(len(train_df))\ny_pre = np.zeros(len(test_df))\n#split train_data to train & eval\nkf = KFold(n_splits=n_fold)\nfor fold_, (trn_idx, val_idx) in enumerate(kf.split(train_df)):\n    trn_data = lgb.Dataset(train_df[feature].iloc[trn_idx], label=train_df['target'].iloc[trn_idx])\n    val_data = lgb.Dataset(train_df[feature].iloc[val_idx], label=train_df['target'].iloc[val_idx])\n#train model\n    clf = lgb.train(params,\n                    trn_data,\n                    100000,\n                    valid_sets=[trn_data, val_data],\n                    verbose_eval=50,\n                    early_stopping_rounds=50)\n    #pred validation set->oof_pre\n    oof_pre[val_idx] = clf.predict(train_df[feature].iloc[val_idx], num_iteration=clf.best_iteration)\n#pred test set ->y_pre & divide by fold\n    y_pre += clf.predict(test_df[feature], num_iteration=clf.best_iteration) / n_fold","metadata":{"papermill":{"duration":4080.02883,"end_time":"2023-01-08T12:52:09.830257","exception":false,"start_time":"2023-01-08T11:44:09.801427","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:15:25.855260Z","iopub.status.idle":"2023-01-08T13:15:25.856009Z","shell.execute_reply.started":"2023-01-08T13:15:25.855674Z","shell.execute_reply":"2023-01-08T13:15:25.855705Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"res_df = pd.DataFrame()\nres_df['id'] = test_df['id']\nres_df['target'] = y_pre\nres_df.to_csv('submission.csv',index=False)","metadata":{"papermill":{"duration":1.825495,"end_time":"2023-01-08T12:52:11.711408","exception":false,"start_time":"2023-01-08T12:52:09.885913","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-08T13:15:25.857491Z","iopub.status.idle":"2023-01-08T13:15:25.858203Z","shell.execute_reply.started":"2023-01-08T13:15:25.857900Z","shell.execute_reply":"2023-01-08T13:15:25.857950Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"papermill":{"duration":0.055542,"end_time":"2023-01-08T12:52:11.823484","exception":false,"start_time":"2023-01-08T12:52:11.767942","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]}]}