{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":64733,"databundleVersionId":8171035,"sourceType":"competition"}],"dockerImageVersionId":30673,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:21.888024Z","iopub.execute_input":"2024-05-01T10:01:21.888424Z","iopub.status.idle":"2024-05-01T10:01:21.893203Z","shell.execute_reply.started":"2024-05-01T10:01:21.888393Z","shell.execute_reply":"2024-05-01T10:01:21.892091Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# IMPORTING DATA","metadata":{}},{"cell_type":"code","source":"data_test = pd.read_csv(\"/kaggle/input/geolifeclef-2024/GLC24_PA_metadata_test.csv\")","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:21.895146Z","iopub.execute_input":"2024-05-01T10:01:21.895514Z","iopub.status.idle":"2024-05-01T10:01:21.922199Z","shell.execute_reply.started":"2024-05-01T10:01:21.895478Z","shell.execute_reply":"2024-05-01T10:01:21.921412Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_test","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:21.924062Z","iopub.execute_input":"2024-05-01T10:01:21.924851Z","iopub.status.idle":"2024-05-01T10:01:21.942541Z","shell.execute_reply.started":"2024-05-01T10:01:21.924817Z","shell.execute_reply":"2024-05-01T10:01:21.941457Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_test.isna().any","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:21.943927Z","iopub.execute_input":"2024-05-01T10:01:21.944336Z","iopub.status.idle":"2024-05-01T10:01:21.961107Z","shell.execute_reply.started":"2024-05-01T10:01:21.944300Z","shell.execute_reply":"2024-05-01T10:01:21.959977Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_test.dropna(inplace=True)","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:21.963701Z","iopub.execute_input":"2024-05-01T10:01:21.964090Z","iopub.status.idle":"2024-05-01T10:01:21.972197Z","shell.execute_reply.started":"2024-05-01T10:01:21.964057Z","shell.execute_reply":"2024-05-01T10:01:21.971377Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"After importing the test data we can see that we have a few NA(not assigned) values. For the purpose of working with that data we can drop those values.","metadata":{}},{"cell_type":"code","source":"data_train = pd.read_csv(\"/kaggle/input/geolifeclef-2024/GLC24_PA_metadata_train.csv\")","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:21.973466Z","iopub.execute_input":"2024-05-01T10:01:21.973783Z","iopub.status.idle":"2024-05-01T10:01:23.734143Z","shell.execute_reply.started":"2024-05-01T10:01:21.973756Z","shell.execute_reply":"2024-05-01T10:01:23.733123Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_train","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:23.735685Z","iopub.execute_input":"2024-05-01T10:01:23.736047Z","iopub.status.idle":"2024-05-01T10:01:23.756280Z","shell.execute_reply.started":"2024-05-01T10:01:23.736019Z","shell.execute_reply":"2024-05-01T10:01:23.755230Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_train.dtypes","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:23.758005Z","iopub.execute_input":"2024-05-01T10:01:23.758422Z","iopub.status.idle":"2024-05-01T10:01:23.768801Z","shell.execute_reply.started":"2024-05-01T10:01:23.758387Z","shell.execute_reply":"2024-05-01T10:01:23.767816Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_train.isna().any","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:23.772149Z","iopub.execute_input":"2024-05-01T10:01:23.772467Z","iopub.status.idle":"2024-05-01T10:01:24.091332Z","shell.execute_reply.started":"2024-05-01T10:01:23.772440Z","shell.execute_reply":"2024-05-01T10:01:24.090213Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"After importing the train data we can see that we have a few NA(not assigned) values. For the purpose of working with that data we can drop those values.","metadata":{}},{"cell_type":"code","source":"data_train.dropna(inplace=True)","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:24.092510Z","iopub.execute_input":"2024-05-01T10:01:24.092783Z","iopub.status.idle":"2024-05-01T10:01:24.460120Z","shell.execute_reply.started":"2024-05-01T10:01:24.092759Z","shell.execute_reply":"2024-05-01T10:01:24.459270Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"We can also drop not important values \"region\" and \"country\" we can get from \"longtitude\" and \"latitude\". \"geoUncertaintyInM\" and \"areaInM2\" are not important for use so we can drop them also.","metadata":{}},{"cell_type":"code","source":"data_train = data_train.drop([\"region\",\"country\",\"geoUncertaintyInM\",\"areaInM2\"],axis=1)\ndata_test = data_test.drop([\"region\",\"country\",\"geoUncertaintyInM\",\"areaInM2\"],axis=1)","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:24.461293Z","iopub.execute_input":"2024-05-01T10:01:24.461608Z","iopub.status.idle":"2024-05-01T10:01:24.477003Z","shell.execute_reply.started":"2024-05-01T10:01:24.461582Z","shell.execute_reply":"2024-05-01T10:01:24.475967Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# VIEWING THE DATA","metadata":{}},{"cell_type":"code","source":"data_coord = data_train.loc[:, [\"surveyId\",\"lon\", \"lat\"]].copy()","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:24.478451Z","iopub.execute_input":"2024-05-01T10:01:24.479319Z","iopub.status.idle":"2024-05-01T10:01:24.496998Z","shell.execute_reply.started":"2024-05-01T10:01:24.479281Z","shell.execute_reply":"2024-05-01T10:01:24.496054Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"For the better understanding of the data we can save location coordinates into a new table.","metadata":{}},{"cell_type":"code","source":"data_coord","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:24.498113Z","iopub.execute_input":"2024-05-01T10:01:24.498448Z","iopub.status.idle":"2024-05-01T10:01:24.510235Z","shell.execute_reply.started":"2024-05-01T10:01:24.498417Z","shell.execute_reply":"2024-05-01T10:01:24.509290Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_coord.dropna(inplace=True)","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:24.511478Z","iopub.execute_input":"2024-05-01T10:01:24.511788Z","iopub.status.idle":"2024-05-01T10:01:24.528538Z","shell.execute_reply.started":"2024-05-01T10:01:24.511763Z","shell.execute_reply":"2024-05-01T10:01:24.527581Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_coord.plot.scatter('lon','lat')","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:24.529742Z","iopub.execute_input":"2024-05-01T10:01:24.530096Z","iopub.status.idle":"2024-05-01T10:01:28.434820Z","shell.execute_reply.started":"2024-05-01T10:01:24.530063Z","shell.execute_reply":"2024-05-01T10:01:28.433917Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"As we can see the graph above lloks like Europe. So we can also represent the data on the background of Europe.","metadata":{}},{"cell_type":"code","source":"mean_lon = data_coord[\"lon\"].mean()","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:28.436007Z","iopub.execute_input":"2024-05-01T10:01:28.436309Z","iopub.status.idle":"2024-05-01T10:01:28.443643Z","shell.execute_reply.started":"2024-05-01T10:01:28.436282Z","shell.execute_reply":"2024-05-01T10:01:28.442736Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mean_lat = data_coord[\"lat\"].mean()","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:28.444823Z","iopub.execute_input":"2024-05-01T10:01:28.445187Z","iopub.status.idle":"2024-05-01T10:01:28.454568Z","shell.execute_reply.started":"2024-05-01T10:01:28.445152Z","shell.execute_reply":"2024-05-01T10:01:28.453545Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import folium\nfrom folium.plugins import FastMarkerCluster\n\n# Create a map object centered at the mean location\nmap_obj = folium.Map(location=[mean_lat, mean_lon], tiles='cartodbpositron', zoom_start=5)\n\n# Add FastMarkerCluster to the map\nfor idx in range(0,len(data_coord),100000):\n    if (idx+100000 < len(data_coord)):\n        markers_data = data_coord.iloc[idx:idx+100000]\n    else:\n        markers_data = data_coord.iloc[idx:len(data_coord)]\n    map_obj.add_child(FastMarkerCluster(markers_data[['lat', 'lon']].values.tolist()))\n\n# Display the map\nmap_obj","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:28.455869Z","iopub.execute_input":"2024-05-01T10:01:28.456278Z","iopub.status.idle":"2024-05-01T10:01:46.284028Z","shell.execute_reply.started":"2024-05-01T10:01:28.456249Z","shell.execute_reply":"2024-05-01T10:01:46.282020Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"On the graph above we can see in which countries the data was conducted, and we can also see in which country the most survey were done.","metadata":{}},{"cell_type":"markdown","source":"We can also check the elevation of each points to find out at which elevation the surrvey was done.","metadata":{}},{"cell_type":"code","source":"elevation_data = pd.read_csv('/kaggle/input/geolifeclef-2024/EnvironmentalRasters/EnvironmentalRasters/Elevation/GLC24-PA-train-elevation.csv')\nelevation_data.dropna(inplace=True)\n\nelevation_data","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:46.286742Z","iopub.execute_input":"2024-05-01T10:01:46.287431Z","iopub.status.idle":"2024-05-01T10:01:46.340663Z","shell.execute_reply.started":"2024-05-01T10:01:46.287375Z","shell.execute_reply":"2024-05-01T10:01:46.339623Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nplt.hist(elevation_data['Elevation'], bins=20, color='skyblue', edgecolor='black')\nplt.xlabel('Elevation')\nplt.ylabel('Frequency')\nplt.title('Elevation Distribution')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:46.346380Z","iopub.execute_input":"2024-05-01T10:01:46.346731Z","iopub.status.idle":"2024-05-01T10:01:46.681935Z","shell.execute_reply.started":"2024-05-01T10:01:46.346702Z","shell.execute_reply":"2024-05-01T10:01:46.681110Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"If we look at the histogram above we can see that most survey were made at the elevation lower than 500 meters.","metadata":{}},{"cell_type":"code","source":"elevationgrid_data = elevation_data.merge(data_coord, on='surveyId', how='left')\n\nlatitude = elevationgrid_data['lat']\nlongitude = elevationgrid_data['lon']\nelevation = elevationgrid_data['Elevation']","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:46.683074Z","iopub.execute_input":"2024-05-01T10:01:46.683342Z","iopub.status.idle":"2024-05-01T10:01:46.803299Z","shell.execute_reply.started":"2024-05-01T10:01:46.683318Z","shell.execute_reply":"2024-05-01T10:01:46.802073Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cartopy.crs as ccrs\nimport cartopy.feature as cfeature\n\nfig = plt.figure(figsize=(25, 10))\nax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())\n\n# Add a background map of Europe\nax.coastlines()\n\n# Create a 2D hexagonal binning plot (heatmap)\nhb = ax.hexbin(longitude, latitude, C=elevation, gridsize=50, cmap='terrain', edgecolors='none')\n\n# Add a colorbar\ncb = fig.colorbar(hb, ax=ax, orientation='vertical', label='Elevation (m)')\n\n\nax.set_xlabel('Longitude')\nax.set_ylabel('Latitude')\nax.set_title('Elevation Heatmap of Europe')\n\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:46.804954Z","iopub.execute_input":"2024-05-01T10:01:46.805303Z","iopub.status.idle":"2024-05-01T10:01:48.332661Z","shell.execute_reply.started":"2024-05-01T10:01:46.805273Z","shell.execute_reply":"2024-05-01T10:01:48.331797Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The heatmap also proves that the histogram shown earlier is correct. We can see that a lot of the survey were done in scandinavia and those surveys were not made at high altitude.","metadata":{}},{"cell_type":"code","source":"landcover_data = pd.read_csv('/kaggle/input/geolifeclef-2024/EnvironmentalRasters/EnvironmentalRasters/LandCover/GLC24-PA-train-landcover.csv')\nlandcover_data.dropna(inplace=True)\n\nlandcover_data","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:48.333804Z","iopub.execute_input":"2024-05-01T10:01:48.334113Z","iopub.status.idle":"2024-05-01T10:01:48.371428Z","shell.execute_reply.started":"2024-05-01T10:01:48.334089Z","shell.execute_reply":"2024-05-01T10:01:48.370540Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"landcovergrid_data = landcover_data.merge(data_coord, on='surveyId', how='left')\n\n\nlatitude = landcovergrid_data['lat']\nlongitude = landcovergrid_data['lon']\nlandcover = landcovergrid_data['LandCover']","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:48.372607Z","iopub.execute_input":"2024-05-01T10:01:48.372928Z","iopub.status.idle":"2024-05-01T10:01:48.448685Z","shell.execute_reply.started":"2024-05-01T10:01:48.372884Z","shell.execute_reply":"2024-05-01T10:01:48.447809Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cartopy.crs as ccrs\nimport cartopy.feature as cfeature\n\nfig = plt.figure(figsize=(25, 10))\nax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())\n\n# Add a background map of Europe\nax.coastlines()\n\n# Create a 2D hexagonal binning plot (heatmap)\nhb = ax.hexbin(longitude, latitude, C=landcover, gridsize=50, cmap='terrain', edgecolors='none')\n\n# Add a colorbar\ncb = fig.colorbar(hb, ax=ax, orientation='vertical', label='Land Cover')\n\n\nax.set_xlabel('Longitude')\nax.set_ylabel('Latitude')\nax.set_title('Land Cover of Europe')\n\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:48.450009Z","iopub.execute_input":"2024-05-01T10:01:48.450357Z","iopub.status.idle":"2024-05-01T10:01:49.992043Z","shell.execute_reply.started":"2024-05-01T10:01:48.450328Z","shell.execute_reply":"2024-05-01T10:01:49.991050Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"footprint_data = pd.read_csv('/kaggle/input/geolifeclef-2024/EnvironmentalRasters/EnvironmentalRasters/Human Footprint/GLC24-PA-train-human_footprint.csv')\nfootprint_data.dropna(inplace=True)\n\nfootprint_data","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:49.993436Z","iopub.execute_input":"2024-05-01T10:01:49.994092Z","iopub.status.idle":"2024-05-01T10:01:50.199935Z","shell.execute_reply.started":"2024-05-01T10:01:49.994057Z","shell.execute_reply":"2024-05-01T10:01:50.198865Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cartopy.crs as ccrs\nimport cartopy.feature as cfeature\nimport matplotlib.pyplot as plt\n\nfootprintgrid_data = footprint_data.merge(data_coord, on='surveyId', how='left')\n\ncolumns_to_plot = [col for col in footprintgrid_data.columns if col not in ['surveyId','lat', 'lon']]\nfor x in columns_to_plot:\n    fig = plt.figure(figsize=(25, 10))\n    \n    # Extract latitude, longitude, and elevation columns\n    latitude = footprintgrid_data['lat']\n    longitude = footprintgrid_data['lon']\n    footprint = footprintgrid_data[x]\n    \n    # Create a figure and axes with a PlateCarree projection\n    ax = fig.add_subplot(1,1,1,projection=ccrs.PlateCarree())\n\n    # Add a background map of Europe\n    ax.coastlines()\n\n    # Create a 2D hexagonal binning plot (heatmap)\n    hb = ax.hexbin(longitude, latitude, C=footprint, gridsize=50, cmap='terrain', edgecolors='none')\n\n    # Add a colorbar\n    cb = fig.colorbar(hb, ax=ax, orientation='vertical', label=x)\n\n    # Add labels and title\n    ax.set_xlabel('Longitude')\n    ax.set_ylabel('Latitude')\n    ax.set_title(f'{x} data of Europe')\n\n    # Show the plot\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:01:50.201276Z","iopub.execute_input":"2024-05-01T10:01:50.201619Z","iopub.status.idle":"2024-05-01T10:02:13.927229Z","shell.execute_reply.started":"2024-05-01T10:01:50.201589Z","shell.execute_reply":"2024-05-01T10:02:13.926385Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"soil_data = pd.read_csv('/kaggle/input/geolifeclef-2024/EnvironmentalRasters/EnvironmentalRasters/SoilGrids/GLC24-PA-train-soilgrids.csv')\nsoil_data.dropna(inplace=True)\n\nsoil_data","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:02:13.928505Z","iopub.execute_input":"2024-05-01T10:02:13.929139Z","iopub.status.idle":"2024-05-01T10:02:14.057715Z","shell.execute_reply.started":"2024-05-01T10:02:13.929103Z","shell.execute_reply":"2024-05-01T10:02:14.056735Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cartopy.crs as ccrs\nimport cartopy.feature as cfeature\nimport matplotlib.pyplot as plt\n\nsoilgrid_data = soil_data.merge(data_coord, on='surveyId', how='left')\n\ncolumns_to_plot = [col for col in soilgrid_data.columns if col not in ['surveyId','lat', 'lon']]\nfor x in columns_to_plot:\n    fig = plt.figure(figsize=(25, 10))\n    \n    # Extract latitude, longitude, and elevation columns\n    latitude = soilgrid_data['lat']\n    longitude = soilgrid_data['lon']\n    soildgrid = soilgrid_data[x]\n    \n    # Create a figure and axes with a PlateCarree projection\n    ax = fig.add_subplot(1,1,1,projection=ccrs.PlateCarree())\n\n    # Add a background map of Europe\n    ax.coastlines()\n\n    # Create a 2D hexagonal binning plot (heatmap)\n    hb = ax.hexbin(longitude, latitude, C=soildgrid, gridsize=50, cmap='terrain', edgecolors='none')\n\n    # Add a colorbar\n    cb = fig.colorbar(hb, ax=ax, orientation='vertical', label=x)\n\n    # Add labels and title\n    ax.set_xlabel('Longitude')\n    ax.set_ylabel('Latitude')\n    ax.set_title(f'{x} data of Europe')\n\n    # Show the plot\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:02:14.058774Z","iopub.execute_input":"2024-05-01T10:02:14.059070Z","iopub.status.idle":"2024-05-01T10:02:26.683361Z","shell.execute_reply.started":"2024-05-01T10:02:14.059028Z","shell.execute_reply":"2024-05-01T10:02:26.682405Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# MAKING THE PREDICTIONS","metadata":{}},{"cell_type":"code","source":"X = data_train.drop([\"speciesId\"],axis=1)\ny = data_train[\"speciesId\"].values.reshape(len(X),1)","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:02:26.684681Z","iopub.execute_input":"2024-05-01T10:02:26.685033Z","iopub.status.idle":"2024-05-01T10:02:26.704626Z","shell.execute_reply.started":"2024-05-01T10:02:26.685003Z","shell.execute_reply":"2024-05-01T10:02:26.703800Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.datasets import make_multilabel_classification\nfrom sklearn.multioutput import MultiOutputClassifier\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score\nX_train, X_test, y_train, y_test = train_test_split(X[:10000], y[:10000], test_size=0.2, random_state=42)\n\nclassifier = RandomForestClassifier(n_estimators=100, random_state=42)\n\nmulti_target_classifier = MultiOutputClassifier(classifier, n_jobs=-1)\n\nmulti_target_classifier.fit(X_train, y_train)\n\npredictions = multi_target_classifier.predict(X_test)\n\n# Evaluate accuracy\naccuracy = accuracy_score(y_test, predictions)\nprint(\"Accuracy:\", accuracy)","metadata":{"execution":{"iopub.status.busy":"2024-05-01T10:02:26.705769Z","iopub.execute_input":"2024-05-01T10:02:26.706086Z","iopub.status.idle":"2024-05-01T10:02:44.582762Z","shell.execute_reply.started":"2024-05-01T10:02:26.706060Z","shell.execute_reply":"2024-05-01T10:02:44.581693Z"},"trusted":true},"execution_count":null,"outputs":[]}]}