{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"}],"dockerImageVersionId":30775,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Introduction\nHi, I don't have a lot of experience in handling data with Python so this is my approach, following the most basic steps of data analysis and predictive modeling. I will try to comment everything that I do to make it as easy to understand as possible. So if you are new like me, feel free to take a look and discuss to grow together!","metadata":{}},{"cell_type":"markdown","source":"# Data Preprocessing","metadata":{}},{"cell_type":"code","source":"# import basic packages and libraries\nimport numpy as np, pandas as pd, os\nfrom sklearn.model_selection import cross_val_score\nimport xgboost as xgb\nimport plotly.express as px, seaborn as sns, matplotlib.pyplot as plt\nsns.set_style('darkgrid')\nfrom sklearn.metrics import make_scorer, cohen_kappa_score\nimport warnings\nwarnings.simplefilter('ignore')","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:55:57.420754Z","iopub.execute_input":"2024-10-04T21:55:57.421425Z","iopub.status.idle":"2024-10-04T21:55:57.430943Z","shell.execute_reply.started":"2024-10-04T21:55:57.421362Z","shell.execute_reply":"2024-10-04T21:55:57.429643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Import the dataframes and see the overall shape\npath = '../input/child-mind-institute-problematic-internet-use/'\n\ntrain = pd.read_csv(path + 'train.csv', index_col='id')\nprint(\"The train data has the shape: \",train.shape)\ntest = pd.read_csv(path + 'test.csv', index_col='id')\nsample_data = pd.read_csv(path + 'sample_submission.csv')\nprint(\"The test data has the shape: \",test.shape)\nprint(\"\")\nprint(\"Total number of missing training values: \", train.isna().sum().sum())","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:55:57.433374Z","iopub.execute_input":"2024-10-04T21:55:57.433775Z","iopub.status.idle":"2024-10-04T21:55:57.508137Z","shell.execute_reply.started":"2024-10-04T21:55:57.433735Z","shell.execute_reply":"2024-10-04T21:55:57.506955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:55:57.509904Z","iopub.execute_input":"2024-10-04T21:55:57.510329Z","iopub.status.idle":"2024-10-04T21:55:57.560970Z","shell.execute_reply.started":"2024-10-04T21:55:57.510287Z","shell.execute_reply":"2024-10-04T21:55:57.559894Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# get the number of missing data points per column\nmissing_values_count = train.isnull().mean().sort_values()\n\n# Plot\nmissing_values_count.plot(kind='bar', figsize=(25, 5), color='skyblue')\nplt.title('Percentage of Missing Values by Feature')\nplt.ylabel('Percentage')\nplt.xlabel('Features')\nplt.xticks(rotation=45)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:55:57.562739Z","iopub.execute_input":"2024-10-04T21:55:57.563152Z","iopub.status.idle":"2024-10-04T21:55:59.106015Z","shell.execute_reply.started":"2024-10-04T21:55:57.563097Z","shell.execute_reply":"2024-10-04T21:55:59.104776Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns\n# count frequency of each value in sii\nprint(train['sii'].value_counts())\nsns.countplot(x='sii', data=train)\nplt.xticks(rotation=60)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:55:59.109175Z","iopub.execute_input":"2024-10-04T21:55:59.109579Z","iopub.status.idle":"2024-10-04T21:55:59.408836Z","shell.execute_reply.started":"2024-10-04T21:55:59.109537Z","shell.execute_reply":"2024-10-04T21:55:59.407633Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# drop the rows with N/A value in sii column\ntrain = train.dropna(subset='sii')\ntrain","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:55:59.410373Z","iopub.execute_input":"2024-10-04T21:55:59.410751Z","iopub.status.idle":"2024-10-04T21:55:59.460917Z","shell.execute_reply.started":"2024-10-04T21:55:59.410710Z","shell.execute_reply":"2024-10-04T21:55:59.459641Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# use info() function to know the number of null value of each column and the type of those columns\ntrain.info()","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:55:59.462634Z","iopub.execute_input":"2024-10-04T21:55:59.462981Z","iopub.status.idle":"2024-10-04T21:55:59.485684Z","shell.execute_reply.started":"2024-10-04T21:55:59.462945Z","shell.execute_reply":"2024-10-04T21:55:59.484569Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# use describe() function to know the distribution of each column\ntrain.describe()","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:55:59.487046Z","iopub.execute_input":"2024-10-04T21:55:59.487455Z","iopub.status.idle":"2024-10-04T21:55:59.667988Z","shell.execute_reply.started":"2024-10-04T21:55:59.487406Z","shell.execute_reply":"2024-10-04T21:55:59.666730Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data Analysis","metadata":{}},{"cell_type":"markdown","source":"## Univariate","metadata":{}},{"cell_type":"code","source":"# function to plot univariate plot for both continuous and categorical columns\ndef plot_univariate_distribution(df,contained_substr):\n    # find the columns in df that have column name contain the contained_substr\n    columns = train.columns[train.columns.str.contains(contained_substr)]\n    # plot continuous columns\n    df[columns].hist(color = 'skyblue', edgecolor='black',figsize=(11, 6))\n    plt.show()\n    # plot categorical\n    categorical_df = df[columns].select_dtypes(exclude = 'number')\n    if categorical_df.empty != True:\n        categorical_df.value_counts().plot.pie(subplots=True, # create separate plot for each column\n                                               title=categorical_df.columns.tolist(), # list of names for plots\n                                               figsize=(11, 6), \n                                               autopct = '%1.1f%%', # show percent on the pie chart\n                                              )\n        plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:55:59.669507Z","iopub.execute_input":"2024-10-04T21:55:59.669897Z","iopub.status.idle":"2024-10-04T21:55:59.678601Z","shell.execute_reply.started":"2024-10-04T21:55:59.669857Z","shell.execute_reply":"2024-10-04T21:55:59.677328Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Distribution of the data for basic demographic\n# basic_demos_columns = train.columns[train.columns.str.contains('Basic_Demos')]\nplot_univariate_distribution(train,'Basic_Demos')","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:55:59.679943Z","iopub.execute_input":"2024-10-04T21:55:59.680328Z","iopub.status.idle":"2024-10-04T21:56:00.606195Z","shell.execute_reply.started":"2024-10-04T21:55:59.680283Z","shell.execute_reply":"2024-10-04T21:56:00.604364Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Distribution of Children's Global Assessment Scale(CGAS) columns\n# - Numeric scale used by mental health clinicians to rate the general functioning of youths under the age of 18.\nplot_univariate_distribution(train,'CGAS')","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:00.608447Z","iopub.execute_input":"2024-10-04T21:56:00.609367Z","iopub.status.idle":"2024-10-04T21:56:01.222921Z","shell.execute_reply.started":"2024-10-04T21:56:00.609287Z","shell.execute_reply":"2024-10-04T21:56:01.221460Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Distribution of Physical Measures \n# - Collection of blood pressure, heart rate, height, weight and waist, and hip measurements\nplot_univariate_distribution(train,'Physical')","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:01.225120Z","iopub.execute_input":"2024-10-04T21:56:01.226725Z","iopub.status.idle":"2024-10-04T21:56:03.222753Z","shell.execute_reply.started":"2024-10-04T21:56:01.226634Z","shell.execute_reply":"2024-10-04T21:56:03.221007Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Distribution of Sleep Disturbance Scale(SDS) \n# - Scale to categorize sleep disorders in children\nplot_univariate_distribution(train,'SDS')","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:03.225256Z","iopub.execute_input":"2024-10-04T21:56:03.225885Z","iopub.status.idle":"2024-10-04T21:56:04.020530Z","shell.execute_reply.started":"2024-10-04T21:56:03.225813Z","shell.execute_reply":"2024-10-04T21:56:04.018997Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Count of sii\nsns.countplot(train, x = 'sii').set_title('Count of sii')","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.029602Z","iopub.execute_input":"2024-10-04T21:56:04.030335Z","iopub.status.idle":"2024-10-04T21:56:04.345063Z","shell.execute_reply.started":"2024-10-04T21:56:04.030259Z","shell.execute_reply":"2024-10-04T21:56:04.343795Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Bivariate\nSince our target column 'sii' is directly derived from 'PCIAT-PCIAT_Total' column, I will focus mainly on the relationship of 'sii' and 'PCIAT-PCIAT_Total' column with other cols.","metadata":{}},{"cell_type":"code","source":"# Relationship between 'sii' and 'Internet Use'(PreInt_EduHx-computerinternet_hoursday)\nfreq_map = pd.crosstab(index=train['sii'],columns=train['PreInt_EduHx-computerinternet_hoursday'])\nprint(freq_map)\nsns.heatmap(freq_map, \n            annot=True,\n            fmt='g')","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.346551Z","iopub.execute_input":"2024-10-04T21:56:04.347009Z","iopub.status.idle":"2024-10-04T21:56:04.760853Z","shell.execute_reply.started":"2024-10-04T21:56:04.346957Z","shell.execute_reply":"2024-10-04T21:56:04.759652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Handling Categorical Data\nSince all of the categorical data columns in this dataset is relating to season, I only need to perform Label Encoding for Season columns","metadata":{}},{"cell_type":"code","source":"# select the columns which type is not number\ncategorical_columns = train.select_dtypes(exclude = 'number').columns\nfor season in categorical_columns:\n    train[season] = train[season].fillna(0)\n    train[season] = train[season].replace({'Spring':1, 'Summer':2, 'Fall':3, 'Winter':4})","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.762624Z","iopub.execute_input":"2024-10-04T21:56:04.763126Z","iopub.status.idle":"2024-10-04T21:56:04.819866Z","shell.execute_reply.started":"2024-10-04T21:56:04.763053Z","shell.execute_reply":"2024-10-04T21:56:04.818554Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_cat_columns = test.select_dtypes(exclude = 'number').columns\n\nfor season in test_cat_columns:\n    test[season] = test[season].fillna(0)\n    test[season] = test[season].replace({'Spring':1, 'Summer':2, 'Fall':3, 'Winter':4})","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.821647Z","iopub.execute_input":"2024-10-04T21:56:04.822012Z","iopub.status.idle":"2024-10-04T21:56:04.842156Z","shell.execute_reply.started":"2024-10-04T21:56:04.821974Z","shell.execute_reply":"2024-10-04T21:56:04.840982Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# use info() to check the dtype of all columns again\ntrain.info()","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.843573Z","iopub.execute_input":"2024-10-04T21:56:04.843928Z","iopub.status.idle":"2024-10-04T21:56:04.869802Z","shell.execute_reply.started":"2024-10-04T21:56:04.843889Z","shell.execute_reply":"2024-10-04T21:56:04.868465Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Feature selection","metadata":{}},{"cell_type":"code","source":"# Find and drop the 'Parent-Child Internet Addiction Test' columns first since \n# these cols are NOT INCLUDED IN TEST DATA \nPCIAT_cols = [val for val in train.columns[train.columns.str.contains('PCIAT')]]\nprint('Number of PCIAT features = ' , len(PCIAT_cols))\nPCIAT_cols.remove('PCIAT-PCIAT_Total')\ntrain = train.drop(columns = PCIAT_cols)","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.871245Z","iopub.execute_input":"2024-10-04T21:56:04.871621Z","iopub.status.idle":"2024-10-04T21:56:04.882225Z","shell.execute_reply.started":"2024-10-04T21:56:04.871580Z","shell.execute_reply":"2024-10-04T21:56:04.881021Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# get the correlation between 'PCIAT-PCIAT_Total' column and others, sort in descending order\ncorr = pd.DataFrame(train\n                    .corr()['PCIAT-PCIAT_Total']\n                    .sort_values(ascending = False))\ncorr","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.884332Z","iopub.execute_input":"2024-10-04T21:56:04.884845Z","iopub.status.idle":"2024-10-04T21:56:04.932478Z","shell.execute_reply.started":"2024-10-04T21:56:04.884785Z","shell.execute_reply":"2024-10-04T21:56:04.931339Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Pick the columns with correlation either greater than 0.1 or smaller than -0.1\nselection = corr[(corr['PCIAT-PCIAT_Total']>0.1) | (corr['PCIAT-PCIAT_Total']<-0.1)]\nselection = [val for val in selection.index]\n\n# Remove the column that the target is directly derived from\nselection.remove('PCIAT-PCIAT_Total')\nselection.remove('sii')\nselection.remove('Physical-BMI')\nselection.remove('SDS-SDS_Total_Raw')","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.933790Z","iopub.execute_input":"2024-10-04T21:56:04.934156Z","iopub.status.idle":"2024-10-04T21:56:04.943681Z","shell.execute_reply.started":"2024-10-04T21:56:04.934117Z","shell.execute_reply":"2024-10-04T21:56:04.942302Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"selection","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.945598Z","iopub.execute_input":"2024-10-04T21:56:04.946646Z","iopub.status.idle":"2024-10-04T21:56:04.958882Z","shell.execute_reply.started":"2024-10-04T21:56:04.946565Z","shell.execute_reply":"2024-10-04T21:56:04.957629Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Handling missing values","metadata":{}},{"cell_type":"code","source":"# Find total null value for each column\ntrain.isna().sum().sort_values(ascending = False).head(46)","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.960376Z","iopub.execute_input":"2024-10-04T21:56:04.960771Z","iopub.status.idle":"2024-10-04T21:56:04.976372Z","shell.execute_reply.started":"2024-10-04T21:56:04.960730Z","shell.execute_reply":"2024-10-04T21:56:04.975034Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Find columns have more than half of the row is null\nhalf_missing = [val for val in train.columns[train.isnull().sum()>len(train)/2]]\nhalf_missing","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.978164Z","iopub.execute_input":"2024-10-04T21:56:04.978573Z","iopub.status.idle":"2024-10-04T21:56:04.989290Z","shell.execute_reply.started":"2024-10-04T21:56:04.978533Z","shell.execute_reply":"2024-10-04T21:56:04.988136Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Remove the selected column if it has too much missing value\nselection = [i for i in selection if i not in half_missing]\nselection","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:04.991363Z","iopub.execute_input":"2024-10-04T21:56:04.991904Z","iopub.status.idle":"2024-10-04T21:56:05.005903Z","shell.execute_reply.started":"2024-10-04T21:56:04.991850Z","shell.execute_reply":"2024-10-04T21:56:05.004658Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Regression Model\nThe previous discussions have shown that regression models work better than Classification ones so I will focus on the Regression models only\n* We use PCIAT-PCIAT_Total as the target.\n* We tweak the quadratic kappa function to convert PCIAT total scores to sii categories, which gives a better cross-validation result.","metadata":{}},{"cell_type":"code","source":"# Get the selected features from train set and test set\nX = train[selection]\ntest = test[selection]\ny = train['PCIAT-PCIAT_Total']","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:05.007389Z","iopub.execute_input":"2024-10-04T21:56:05.007798Z","iopub.status.idle":"2024-10-04T21:56:05.019035Z","shell.execute_reply.started":"2024-10-04T21:56:05.007757Z","shell.execute_reply":"2024-10-04T21:56:05.017966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Function to convert PCIAT score to sii categories\ndef convert(scores):\n    scores = np.array(scores)*1.2\n    bins = np.zeros_like(scores)\n    bins[scores <= 30] = 0\n    bins[(scores > 30) & (scores < 50)] = 1\n    bins[(scores >= 50) & (scores < 80)] = 2\n    bins[scores >= 80] = 3\n    return bins","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:05.020484Z","iopub.execute_input":"2024-10-04T21:56:05.021050Z","iopub.status.idle":"2024-10-04T21:56:05.030186Z","shell.execute_reply.started":"2024-10-04T21:56:05.021011Z","shell.execute_reply":"2024-10-04T21:56:05.028954Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def quadratic_kappa(y_true, y_pred):\n    y_true_cat = convert(y_true.round(1))\n    y_pred_cat = convert(y_pred.round(1))\n    return cohen_kappa_score(y_true_cat, y_pred_cat, weights='quadratic')\n\nkappa_scorer = make_scorer(quadratic_kappa, greater_is_better=True)","metadata":{"execution":{"iopub.status.busy":"2024-10-04T21:56:05.031807Z","iopub.execute_input":"2024-10-04T21:56:05.032251Z","iopub.status.idle":"2024-10-04T21:56:05.044292Z","shell.execute_reply.started":"2024-10-04T21:56:05.032210Z","shell.execute_reply":"2024-10-04T21:56:05.042925Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"XGB_models =  pd.DataFrame(columns=['depth', 'n_estimator', 'scores'])\nfor depth in range(1,3):\n    for n_estimator in range(20,100,5):\n        model = xgb.XGBRegressor(max_depth = depth, n_estimators = n_estimator)\n        scores = cross_val_score(model, X, y, cv=10, scoring=kappa_scorer)\n        XGB_models.loc[len(XGB_models)] = [depth, n_estimator, np.mean(scores)]","metadata":{"execution":{"iopub.status.busy":"2024-10-04T22:10:12.974068Z","iopub.execute_input":"2024-10-04T22:10:12.974559Z","iopub.status.idle":"2024-10-04T22:13:20.009760Z","shell.execute_reply.started":"2024-10-04T22:10:12.974516Z","shell.execute_reply":"2024-10-04T22:13:20.007448Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"XGB_models.iloc[XGB_models['scores'].idxmax()]","metadata":{"execution":{"iopub.status.busy":"2024-10-04T22:14:46.600852Z","iopub.execute_input":"2024-10-04T22:14:46.601643Z","iopub.status.idle":"2024-10-04T22:14:46.616996Z","shell.execute_reply.started":"2024-10-04T22:14:46.601576Z","shell.execute_reply":"2024-10-04T22:14:46.614944Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = xgb.XGBRegressor(max_depth = 2, n_estimators = 95)","metadata":{"execution":{"iopub.status.busy":"2024-10-04T22:15:15.180202Z","iopub.execute_input":"2024-10-04T22:15:15.180764Z","iopub.status.idle":"2024-10-04T22:15:15.187716Z","shell.execute_reply.started":"2024-10-04T22:15:15.180716Z","shell.execute_reply":"2024-10-04T22:15:15.186057Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scores = cross_val_score(model, X, y, cv=10, scoring=kappa_scorer)\nprint(\"Quadratic Cohen's Kappa Scores:\", scores)\nprint(\"Mean Quadratic Cohen's Kappa:\", np.mean(scores))","metadata":{"execution":{"iopub.status.busy":"2024-10-04T22:15:18.903604Z","iopub.execute_input":"2024-10-04T22:15:18.904100Z","iopub.status.idle":"2024-10-04T22:15:19.695206Z","shell.execute_reply.started":"2024-10-04T22:15:18.904040Z","shell.execute_reply":"2024-10-04T22:15:19.694201Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Submission","metadata":{}},{"cell_type":"code","source":"model.fit(X,y)\npreds = model.predict(test)\npreds = convert(preds) # convert raw scores to sii categories if using regressor\npreds = pd.Series(preds)\npreds.index = test.index\npreds.to_csv('submission.csv')","metadata":{"execution":{"iopub.status.busy":"2024-10-04T22:15:24.684870Z","iopub.execute_input":"2024-10-04T22:15:24.685345Z","iopub.status.idle":"2024-10-04T22:15:24.780618Z","shell.execute_reply.started":"2024-10-04T22:15:24.685301Z","shell.execute_reply":"2024-10-04T22:15:24.779557Z"},"trusted":true},"execution_count":null,"outputs":[]}]}