-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathKDEPredictionModel
More file actions
1 lines (1 loc) · 41 KB
/
KDEPredictionModel
File metadata and controls
1 lines (1 loc) · 41 KB
1
{"cells":[{"cell_type":"markdown","metadata":{"id":"OraMQ6PQrZdI"},"source":["Final Dataset Link: https://drive.google.com/file/d/14KpYro56AbayWBQZ6CJfootZ-lC_SseK/view?usp=sharing"]},{"cell_type":"markdown","metadata":{"id":"HAqzqLUCrxDJ"},"source":["# Import Packages"]},{"cell_type":"code","execution_count":1,"metadata":{"id":"lsdP-2xtrO20","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1733118042684,"user_tz":300,"elapsed":26281,"user":{"displayName":"Karuna Adhikari","userId":"14765861351042505468"}},"outputId":"0c6ff2f6-aba6-4f50-945d-328003e2d1bd"},"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: gdown in /usr/local/lib/python3.10/dist-packages (5.2.0)\n","Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from gdown) (4.12.3)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from gdown) (3.16.1)\n","Requirement already satisfied: requests[socks] in /usr/local/lib/python3.10/dist-packages (from gdown) (2.32.3)\n","Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from gdown) (4.66.6)\n","Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->gdown) (2.6)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests[socks]->gdown) (3.4.0)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests[socks]->gdown) (3.10)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests[socks]->gdown) (2.2.3)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests[socks]->gdown) (2024.8.30)\n","Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /usr/local/lib/python3.10/dist-packages (from requests[socks]->gdown) (1.7.1)\n"]}],"source":["# install the gdown package in Colab\n","!pip install gdown\n","import pandas as pd\n","import numpy as np\n","import gdown\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","import folium\n","import geopandas as gpd\n","from sklearn.neighbors import KernelDensity"]},{"cell_type":"markdown","metadata":{"id":"WAErLXGardwU"},"source":["# Import Dataset\n"]},{"cell_type":"code","execution_count":2,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":104},"executionInfo":{"elapsed":3849,"status":"ok","timestamp":1733118046522,"user":{"displayName":"Karuna Adhikari","userId":"14765861351042505468"},"user_tz":300},"id":"jHeHMMjHrdAU","outputId":"2a7ab266-20db-4010-94a7-8f54668b9cd6"},"outputs":[{"output_type":"stream","name":"stderr","text":["Downloading...\n","From: https://drive.google.com/uc?id=14KpYro56AbayWBQZ6CJfootZ-lC_SseK\n","To: /content/Toronto_Collisions.csv\n","100%|██████████| 21.2M/21.2M [00:00<00:00, 132MB/s] \n"]},{"output_type":"execute_result","data":{"text/plain":["'Toronto_Collisions.csv'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":2}],"source":["#Set viewing permission to 'Anyone with the link' if not already done\n","#File ID from the Google Drive link -> https://drive.google.com/file/d/FILE_ID/view?usp=sharing\n","file_id = '14KpYro56AbayWBQZ6CJfootZ-lC_SseK'\n","url = f'https://drive.google.com/uc?id={file_id}'\n","\n","#Download the file and save the name of the file\n","Toronto_Collisions = 'Toronto_Collisions.csv'\n","gdown.download(url, Toronto_Collisions, quiet=False)"]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":348},"executionInfo":{"elapsed":787,"status":"ok","timestamp":1733118047282,"user":{"displayName":"Karuna Adhikari","userId":"14765861351042505468"},"user_tz":300},"id":"W4tARmVIrrDO","outputId":"6295989e-32d4-4964-ccfc-fd72d7b4ef2e"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" OCC_DATE OCC_MONTH OCC_DOW OCC_YEAR OCC_HOUR COLLISION_LONGITUDE \\\n","0 2020-01-01 January Wednesday 2020 6.0 -79.197483 \n","1 2020-01-01 January Wednesday 2020 1.0 -79.550892 \n","2 2020-01-01 January Wednesday 2020 5.0 -79.336669 \n","3 2020-01-01 January Wednesday 2020 2.0 -79.393760 \n","4 2020-01-01 January Wednesday 2020 4.0 -79.312104 \n","\n"," COLLISION_LATITUDE INTERSECTION_ID INTERSECTION_CLASSIFICATION \\\n","0 43.758945 13448608 MNRSL \n","1 43.677196 13462655 MJRSL \n","2 43.797327 13443799 MNRSL \n","3 43.642772 13467856 MNRSL \n","4 43.748833 13450356 MNRSL \n","\n"," RED_LIGHT_CAMERA Temp (°C) Rel Hum (%) Precip. Amount (mm) \\\n","0 0 -0.6 73.0 0.0 \n","1 0 -0.1 70.0 0.0 \n","2 0 -0.5 72.0 0.2 \n","3 0 -0.1 67.0 0.0 \n","4 0 -0.7 75.0 0.0 \n","\n"," Visibility (km) Stn Press (kPa) SPD_KM NUM_TRAFFIC_SIGNALS \n","0 16.1 98.99 40 1.0 \n","1 16.1 98.84 60 1.0 \n","2 16.1 98.96 40 0.0 \n","3 16.1 98.87 60 1.0 \n","4 16.1 98.96 60 0.0 "],"text/html":["\n"," <div id=\"df-d861709d-d3f1-44b7-b0c5-8765532181f4\" class=\"colab-df-container\">\n"," <div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>OCC_DATE</th>\n"," <th>OCC_MONTH</th>\n"," <th>OCC_DOW</th>\n"," <th>OCC_YEAR</th>\n"," <th>OCC_HOUR</th>\n"," <th>COLLISION_LONGITUDE</th>\n"," <th>COLLISION_LATITUDE</th>\n"," <th>INTERSECTION_ID</th>\n"," <th>INTERSECTION_CLASSIFICATION</th>\n"," <th>RED_LIGHT_CAMERA</th>\n"," <th>Temp (°C)</th>\n"," <th>Rel Hum (%)</th>\n"," <th>Precip. Amount (mm)</th>\n"," <th>Visibility (km)</th>\n"," <th>Stn Press (kPa)</th>\n"," <th>SPD_KM</th>\n"," <th>NUM_TRAFFIC_SIGNALS</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0</th>\n"," <td>2020-01-01</td>\n"," <td>January</td>\n"," <td>Wednesday</td>\n"," <td>2020</td>\n"," <td>6.0</td>\n"," <td>-79.197483</td>\n"," <td>43.758945</td>\n"," <td>13448608</td>\n"," <td>MNRSL</td>\n"," <td>0</td>\n"," <td>-0.6</td>\n"," <td>73.0</td>\n"," <td>0.0</td>\n"," <td>16.1</td>\n"," <td>98.99</td>\n"," <td>40</td>\n"," <td>1.0</td>\n"," </tr>\n"," <tr>\n"," <th>1</th>\n"," <td>2020-01-01</td>\n"," <td>January</td>\n"," <td>Wednesday</td>\n"," <td>2020</td>\n"," <td>1.0</td>\n"," <td>-79.550892</td>\n"," <td>43.677196</td>\n"," <td>13462655</td>\n"," <td>MJRSL</td>\n"," <td>0</td>\n"," <td>-0.1</td>\n"," <td>70.0</td>\n"," <td>0.0</td>\n"," <td>16.1</td>\n"," <td>98.84</td>\n"," <td>60</td>\n"," <td>1.0</td>\n"," </tr>\n"," <tr>\n"," <th>2</th>\n"," <td>2020-01-01</td>\n"," <td>January</td>\n"," <td>Wednesday</td>\n"," <td>2020</td>\n"," <td>5.0</td>\n"," <td>-79.336669</td>\n"," <td>43.797327</td>\n"," <td>13443799</td>\n"," <td>MNRSL</td>\n"," <td>0</td>\n"," <td>-0.5</td>\n"," <td>72.0</td>\n"," <td>0.2</td>\n"," <td>16.1</td>\n"," <td>98.96</td>\n"," <td>40</td>\n"," <td>0.0</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>2020-01-01</td>\n"," <td>January</td>\n"," <td>Wednesday</td>\n"," <td>2020</td>\n"," <td>2.0</td>\n"," <td>-79.393760</td>\n"," <td>43.642772</td>\n"," <td>13467856</td>\n"," <td>MNRSL</td>\n"," <td>0</td>\n"," <td>-0.1</td>\n"," <td>67.0</td>\n"," <td>0.0</td>\n"," <td>16.1</td>\n"," <td>98.87</td>\n"," <td>60</td>\n"," <td>1.0</td>\n"," </tr>\n"," <tr>\n"," <th>4</th>\n"," <td>2020-01-01</td>\n"," <td>January</td>\n"," <td>Wednesday</td>\n"," <td>2020</td>\n"," <td>4.0</td>\n"," <td>-79.312104</td>\n"," <td>43.748833</td>\n"," <td>13450356</td>\n"," <td>MNRSL</td>\n"," <td>0</td>\n"," <td>-0.7</td>\n"," <td>75.0</td>\n"," <td>0.0</td>\n"," <td>16.1</td>\n"," <td>98.96</td>\n"," <td>60</td>\n"," <td>0.0</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>\n"," <div class=\"colab-df-buttons\">\n","\n"," <div class=\"colab-df-container\">\n"," <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-d861709d-d3f1-44b7-b0c5-8765532181f4')\"\n"," title=\"Convert this dataframe to an interactive table.\"\n"," style=\"display:none;\">\n","\n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n"," <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n"," </svg>\n"," </button>\n","\n"," <style>\n"," .colab-df-container {\n"," display:flex;\n"," gap: 12px;\n"," }\n","\n"," .colab-df-convert {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-convert:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," .colab-df-buttons div {\n"," margin-bottom: 4px;\n"," }\n","\n"," [theme=dark] .colab-df-convert {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-convert:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n","\n"," <script>\n"," const buttonEl =\n"," document.querySelector('#df-d861709d-d3f1-44b7-b0c5-8765532181f4 button.colab-df-convert');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," async function convertToInteractive(key) {\n"," const element = document.querySelector('#df-d861709d-d3f1-44b7-b0c5-8765532181f4');\n"," const dataTable =\n"," await google.colab.kernel.invokeFunction('convertToInteractive',\n"," [key], {});\n"," if (!dataTable) return;\n","\n"," const docLinkHtml = 'Like what you see? Visit the ' +\n"," '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n"," + ' to learn more about interactive tables.';\n"," element.innerHTML = '';\n"," dataTable['output_type'] = 'display_data';\n"," await google.colab.output.renderOutput(dataTable, element);\n"," const docLink = document.createElement('div');\n"," docLink.innerHTML = docLinkHtml;\n"," element.appendChild(docLink);\n"," }\n"," </script>\n"," </div>\n","\n","\n","<div id=\"df-f7ba86ce-0608-4433-ae2e-b2f99607d423\">\n"," <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-f7ba86ce-0608-4433-ae2e-b2f99607d423')\"\n"," title=\"Suggest charts\"\n"," style=\"display:none;\">\n","\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <g>\n"," <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n"," </g>\n","</svg>\n"," </button>\n","\n","<style>\n"," .colab-df-quickchart {\n"," --bg-color: #E8F0FE;\n"," --fill-color: #1967D2;\n"," --hover-bg-color: #E2EBFA;\n"," --hover-fill-color: #174EA6;\n"," --disabled-fill-color: #AAA;\n"," --disabled-bg-color: #DDD;\n"," }\n","\n"," [theme=dark] .colab-df-quickchart {\n"," --bg-color: #3B4455;\n"," --fill-color: #D2E3FC;\n"," --hover-bg-color: #434B5C;\n"," --hover-fill-color: #FFFFFF;\n"," --disabled-bg-color: #3B4455;\n"," --disabled-fill-color: #666;\n"," }\n","\n"," .colab-df-quickchart {\n"," background-color: var(--bg-color);\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: var(--fill-color);\n"," height: 32px;\n"," padding: 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-quickchart:hover {\n"," background-color: var(--hover-bg-color);\n"," box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: var(--button-hover-fill-color);\n"," }\n","\n"," .colab-df-quickchart-complete:disabled,\n"," .colab-df-quickchart-complete:disabled:hover {\n"," background-color: var(--disabled-bg-color);\n"," fill: var(--disabled-fill-color);\n"," box-shadow: none;\n"," }\n","\n"," .colab-df-spinner {\n"," border: 2px solid var(--fill-color);\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," animation:\n"," spin 1s steps(1) infinite;\n"," }\n","\n"," @keyframes spin {\n"," 0% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," border-left-color: var(--fill-color);\n"," }\n"," 20% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 30% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," border-right-color: var(--fill-color);\n"," }\n"," 40% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 60% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," }\n"," 80% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-bottom-color: var(--fill-color);\n"," }\n"," 90% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," }\n"," }\n","</style>\n","\n"," <script>\n"," async function quickchart(key) {\n"," const quickchartButtonEl =\n"," document.querySelector('#' + key + ' button');\n"," quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n"," quickchartButtonEl.classList.add('colab-df-spinner');\n"," try {\n"," const charts = await google.colab.kernel.invokeFunction(\n"," 'suggestCharts', [key], {});\n"," } catch (error) {\n"," console.error('Error during call to suggestCharts:', error);\n"," }\n"," quickchartButtonEl.classList.remove('colab-df-spinner');\n"," quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n"," }\n"," (() => {\n"," let quickchartButtonEl =\n"," document.querySelector('#df-f7ba86ce-0608-4433-ae2e-b2f99607d423 button');\n"," quickchartButtonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n"," })();\n"," </script>\n","</div>\n","\n"," </div>\n"," </div>\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"Toronto_Collisions_df"}},"metadata":{},"execution_count":3}],"source":["#Read CSV file\n","Toronto_Collisions_df = pd.read_csv(Toronto_Collisions)\n","Toronto_Collisions_df.head()"]},{"cell_type":"markdown","metadata":{"id":"eqX1krDUVBUv"},"source":["# FINAL KDE"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"RfmVzQ3BSe8i"},"outputs":[],"source":["import numpy as np\n","import pandas as pd\n","import matplotlib.pyplot as plt\n","from sklearn.neighbors import KernelDensity\n","from matplotlib.colors import LinearSegmentedColormap\n","\n","# Define the grid over the area\n","longitude_min, longitude_max = Toronto_Collisions_df['COLLISION_LONGITUDE'].min(), Toronto_Collisions_df['COLLISION_LONGITUDE'].max()\n","latitude_min, latitude_max = Toronto_Collisions_df['COLLISION_LATITUDE'].min(), Toronto_Collisions_df['COLLISION_LATITUDE'].max()\n","\n","# Generate a grid of points for the heatmap\n","grid_size = 200 # Adjust grid size for resolution\n","x_grid = np.linspace(longitude_min, longitude_max, grid_size)\n","y_grid = np.linspace(latitude_min, latitude_max, grid_size)\n","X, Y = np.meshgrid(x_grid, y_grid)\n","grid_coords = np.vstack([X.ravel(), Y.ravel()]).T # Flatten the grid for input to KDE\n","\n","# Fit KDE model to the collision data\n","kde = KernelDensity(kernel='gaussian', bandwidth=0.01) # Adjust bandwidth for smoothness\n","kde.fit(Toronto_Collisions_df[['COLLISION_LONGITUDE', 'COLLISION_LATITUDE']])\n","\n","# Evaluate KDE on the grid\n","log_density = kde.score_samples(grid_coords)\n","density = np.exp(log_density).reshape(X.shape) # Reshape to grid\n","# Now, `density` is a 2D array representing the KDE values at each grid point.\n","\n","# Define a custom colormap: blue (low), green, yellow, orange, red (high)\n","colors = [\"white\", \"green\", \"yellow\", \"orange\", \"red\"]\n","cmap = LinearSegmentedColormap.from_list(\"custom_cmap\", colors)\n","\n","# Plot the KDE density map with the custom colormap\n","plt.imshow(density, extent=[longitude_min, longitude_max, latitude_min, latitude_max],\n"," origin='lower', cmap=cmap, alpha=0.7)\n","plt.colorbar(label='Collision Density')\n","plt.xlabel('Longitude')\n","plt.ylabel('Latitude')\n","plt.title('Toronto Collision Density Map (KDE)')\n","plt.show()\n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":381,"status":"ok","timestamp":1732159775390,"user":{"displayName":"May Akenzua","userId":"02226476697109792099"},"user_tz":300},"id":"ThC2f_2isV7N","outputId":"0b2054a8-15a3-40c9-dd15-8225faec3cd8"},"outputs":[{"name":"stdout","output_type":"stream","text":["[1.30528348e-12 4.69957536e-12 1.72414954e-11 ... 1.39772435e-05\n"," 8.77788376e-06 5.52934252e-06]\n"]}],"source":["# Get the KDE risk values as an array\n","kde_risk_values = density.ravel()\n","\n","# Print the KDE risk values\n","print(kde_risk_values)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":143,"status":"ok","timestamp":1732159812476,"user":{"displayName":"May Akenzua","userId":"02226476697109792099"},"user_tz":300},"id":"E8hm4ET8xMmA","outputId":"8ab3e101-d082-4cf6-ae04-dfb90b99d120"},"outputs":[{"name":"stdout","output_type":"stream","text":[" longitude latitude risk\n","6296 -79.389742 43.627069 18.109920\n","6297 -79.387143 43.627069 18.590582\n","6298 -79.384544 43.627069 18.775930\n","6299 -79.381945 43.627069 18.564798\n","6300 -79.379346 43.627069 17.884807\n","... ... ... ...\n","30955 -79.236400 43.788090 18.333246\n","31151 -79.246797 43.789399 17.884849\n","31152 -79.244198 43.789399 18.044456\n","31153 -79.241599 43.789399 18.178917\n","31154 -79.238999 43.789399 18.159458\n","\n","[4000 rows x 3 columns]\n"]}],"source":["\n","# Create a DataFrame to store the results\n","df_risk = pd.DataFrame({'longitude': X.ravel(), 'latitude': Y.ravel(), 'risk': kde_risk_values})\n","\n","# Define a threshold to identify high-risk areas (adjust as needed)\n","risk_threshold = np.percentile(kde_risk_values, 90) # Top 10%\n","\n","# Filter for high-risk areas\n","high_risk_areas = df_risk[df_risk['risk'] >= risk_threshold]\n","\n","# Print or visualize high-risk areas\n","print(high_risk_areas)"]},{"cell_type":"markdown","source":["FINAL KDE PREDICTION MODEL"],"metadata":{"id":"ghypTGFO_iaU"}},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":80},"executionInfo":{"elapsed":144,"status":"ok","timestamp":1732566845291,"user":{"displayName":"May Akenzua","userId":"02226476697109792099"},"user_tz":300},"id":"Xgq_NM897YXv","outputId":"7652c4e2-28d3-407b-9d09-a31d0f570959"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["KernelDensity(bandwidth=0.02)"],"text/html":["<style>#sk-container-id-1 {\n"," /* Definition of color scheme common for light and dark mode */\n"," --sklearn-color-text: black;\n"," --sklearn-color-line: gray;\n"," /* Definition of color scheme for unfitted estimators */\n"," --sklearn-color-unfitted-level-0: #fff5e6;\n"," --sklearn-color-unfitted-level-1: #f6e4d2;\n"," --sklearn-color-unfitted-level-2: #ffe0b3;\n"," --sklearn-color-unfitted-level-3: chocolate;\n"," /* Definition of color scheme for fitted estimators */\n"," --sklearn-color-fitted-level-0: #f0f8ff;\n"," --sklearn-color-fitted-level-1: #d4ebff;\n"," --sklearn-color-fitted-level-2: #b3dbfd;\n"," --sklearn-color-fitted-level-3: cornflowerblue;\n","\n"," /* Specific color for light theme */\n"," --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n"," --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n"," --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n"," --sklearn-color-icon: #696969;\n","\n"," @media (prefers-color-scheme: dark) {\n"," /* Redefinition of color scheme for dark theme */\n"," --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n"," --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n"," --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n"," --sklearn-color-icon: #878787;\n"," }\n","}\n","\n","#sk-container-id-1 {\n"," color: var(--sklearn-color-text);\n","}\n","\n","#sk-container-id-1 pre {\n"," padding: 0;\n","}\n","\n","#sk-container-id-1 input.sk-hidden--visually {\n"," border: 0;\n"," clip: rect(1px 1px 1px 1px);\n"," clip: rect(1px, 1px, 1px, 1px);\n"," height: 1px;\n"," margin: -1px;\n"," overflow: hidden;\n"," padding: 0;\n"," position: absolute;\n"," width: 1px;\n","}\n","\n","#sk-container-id-1 div.sk-dashed-wrapped {\n"," border: 1px dashed var(--sklearn-color-line);\n"," margin: 0 0.4em 0.5em 0.4em;\n"," box-sizing: border-box;\n"," padding-bottom: 0.4em;\n"," background-color: var(--sklearn-color-background);\n","}\n","\n","#sk-container-id-1 div.sk-container {\n"," /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n"," but bootstrap.min.css set `[hidden] { display: none !important; }`\n"," so we also need the `!important` here to be able to override the\n"," default hidden behavior on the sphinx rendered scikit-learn.org.\n"," See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n"," display: inline-block !important;\n"," position: relative;\n","}\n","\n","#sk-container-id-1 div.sk-text-repr-fallback {\n"," display: none;\n","}\n","\n","div.sk-parallel-item,\n","div.sk-serial,\n","div.sk-item {\n"," /* draw centered vertical line to link estimators */\n"," background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n"," background-size: 2px 100%;\n"," background-repeat: no-repeat;\n"," background-position: center center;\n","}\n","\n","/* Parallel-specific style estimator block */\n","\n","#sk-container-id-1 div.sk-parallel-item::after {\n"," content: \"\";\n"," width: 100%;\n"," border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n"," flex-grow: 1;\n","}\n","\n","#sk-container-id-1 div.sk-parallel {\n"," display: flex;\n"," align-items: stretch;\n"," justify-content: center;\n"," background-color: var(--sklearn-color-background);\n"," position: relative;\n","}\n","\n","#sk-container-id-1 div.sk-parallel-item {\n"," display: flex;\n"," flex-direction: column;\n","}\n","\n","#sk-container-id-1 div.sk-parallel-item:first-child::after {\n"," align-self: flex-end;\n"," width: 50%;\n","}\n","\n","#sk-container-id-1 div.sk-parallel-item:last-child::after {\n"," align-self: flex-start;\n"," width: 50%;\n","}\n","\n","#sk-container-id-1 div.sk-parallel-item:only-child::after {\n"," width: 0;\n","}\n","\n","/* Serial-specific style estimator block */\n","\n","#sk-container-id-1 div.sk-serial {\n"," display: flex;\n"," flex-direction: column;\n"," align-items: center;\n"," background-color: var(--sklearn-color-background);\n"," padding-right: 1em;\n"," padding-left: 1em;\n","}\n","\n","\n","/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n","clickable and can be expanded/collapsed.\n","- Pipeline and ColumnTransformer use this feature and define the default style\n","- Estimators will overwrite some part of the style using the `sk-estimator` class\n","*/\n","\n","/* Pipeline and ColumnTransformer style (default) */\n","\n","#sk-container-id-1 div.sk-toggleable {\n"," /* Default theme specific background. It is overwritten whether we have a\n"," specific estimator or a Pipeline/ColumnTransformer */\n"," background-color: var(--sklearn-color-background);\n","}\n","\n","/* Toggleable label */\n","#sk-container-id-1 label.sk-toggleable__label {\n"," cursor: pointer;\n"," display: block;\n"," width: 100%;\n"," margin-bottom: 0;\n"," padding: 0.5em;\n"," box-sizing: border-box;\n"," text-align: center;\n","}\n","\n","#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n"," /* Arrow on the left of the label */\n"," content: \"▸\";\n"," float: left;\n"," margin-right: 0.25em;\n"," color: var(--sklearn-color-icon);\n","}\n","\n","#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n"," color: var(--sklearn-color-text);\n","}\n","\n","/* Toggleable content - dropdown */\n","\n","#sk-container-id-1 div.sk-toggleable__content {\n"," max-height: 0;\n"," max-width: 0;\n"," overflow: hidden;\n"," text-align: left;\n"," /* unfitted */\n"," background-color: var(--sklearn-color-unfitted-level-0);\n","}\n","\n","#sk-container-id-1 div.sk-toggleable__content.fitted {\n"," /* fitted */\n"," background-color: var(--sklearn-color-fitted-level-0);\n","}\n","\n","#sk-container-id-1 div.sk-toggleable__content pre {\n"," margin: 0.2em;\n"," border-radius: 0.25em;\n"," color: var(--sklearn-color-text);\n"," /* unfitted */\n"," background-color: var(--sklearn-color-unfitted-level-0);\n","}\n","\n","#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n"," /* unfitted */\n"," background-color: var(--sklearn-color-fitted-level-0);\n","}\n","\n","#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n"," /* Expand drop-down */\n"," max-height: 200px;\n"," max-width: 100%;\n"," overflow: auto;\n","}\n","\n","#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n"," content: \"▾\";\n","}\n","\n","/* Pipeline/ColumnTransformer-specific style */\n","\n","#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n"," color: var(--sklearn-color-text);\n"," background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n"," background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","/* Estimator-specific style */\n","\n","/* Colorize estimator box */\n","#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n"," /* unfitted */\n"," background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n"," /* fitted */\n"," background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n","#sk-container-id-1 div.sk-label label {\n"," /* The background is the default theme color */\n"," color: var(--sklearn-color-text-on-default-background);\n","}\n","\n","/* On hover, darken the color of the background */\n","#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n"," color: var(--sklearn-color-text);\n"," background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","/* Label box, darken color on hover, fitted */\n","#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n"," color: var(--sklearn-color-text);\n"," background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","/* Estimator label */\n","\n","#sk-container-id-1 div.sk-label label {\n"," font-family: monospace;\n"," font-weight: bold;\n"," display: inline-block;\n"," line-height: 1.2em;\n","}\n","\n","#sk-container-id-1 div.sk-label-container {\n"," text-align: center;\n","}\n","\n","/* Estimator-specific */\n","#sk-container-id-1 div.sk-estimator {\n"," font-family: monospace;\n"," border: 1px dotted var(--sklearn-color-border-box);\n"," border-radius: 0.25em;\n"," box-sizing: border-box;\n"," margin-bottom: 0.5em;\n"," /* unfitted */\n"," background-color: var(--sklearn-color-unfitted-level-0);\n","}\n","\n","#sk-container-id-1 div.sk-estimator.fitted {\n"," /* fitted */\n"," background-color: var(--sklearn-color-fitted-level-0);\n","}\n","\n","/* on hover */\n","#sk-container-id-1 div.sk-estimator:hover {\n"," /* unfitted */\n"," background-color: var(--sklearn-color-unfitted-level-2);\n","}\n","\n","#sk-container-id-1 div.sk-estimator.fitted:hover {\n"," /* fitted */\n"," background-color: var(--sklearn-color-fitted-level-2);\n","}\n","\n","/* Specification for estimator info (e.g. \"i\" and \"?\") */\n","\n","/* Common style for \"i\" and \"?\" */\n","\n",".sk-estimator-doc-link,\n","a:link.sk-estimator-doc-link,\n","a:visited.sk-estimator-doc-link {\n"," float: right;\n"," font-size: smaller;\n"," line-height: 1em;\n"," font-family: monospace;\n"," background-color: var(--sklearn-color-background);\n"," border-radius: 1em;\n"," height: 1em;\n"," width: 1em;\n"," text-decoration: none !important;\n"," margin-left: 1ex;\n"," /* unfitted */\n"," border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n"," color: var(--sklearn-color-unfitted-level-1);\n","}\n","\n",".sk-estimator-doc-link.fitted,\n","a:link.sk-estimator-doc-link.fitted,\n","a:visited.sk-estimator-doc-link.fitted {\n"," /* fitted */\n"," border: var(--sklearn-color-fitted-level-1) 1pt solid;\n"," color: var(--sklearn-color-fitted-level-1);\n","}\n","\n","/* On hover */\n","div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",".sk-estimator-doc-link:hover,\n","div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",".sk-estimator-doc-link:hover {\n"," /* unfitted */\n"," background-color: var(--sklearn-color-unfitted-level-3);\n"," color: var(--sklearn-color-background);\n"," text-decoration: none;\n","}\n","\n","div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",".sk-estimator-doc-link.fitted:hover,\n","div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",".sk-estimator-doc-link.fitted:hover {\n"," /* fitted */\n"," background-color: var(--sklearn-color-fitted-level-3);\n"," color: var(--sklearn-color-background);\n"," text-decoration: none;\n","}\n","\n","/* Span, style for the box shown on hovering the info icon */\n",".sk-estimator-doc-link span {\n"," display: none;\n"," z-index: 9999;\n"," position: relative;\n"," font-weight: normal;\n"," right: .2ex;\n"," padding: .5ex;\n"," margin: .5ex;\n"," width: min-content;\n"," min-width: 20ex;\n"," max-width: 50ex;\n"," color: var(--sklearn-color-text);\n"," box-shadow: 2pt 2pt 4pt #999;\n"," /* unfitted */\n"," background: var(--sklearn-color-unfitted-level-0);\n"," border: .5pt solid var(--sklearn-color-unfitted-level-3);\n","}\n","\n",".sk-estimator-doc-link.fitted span {\n"," /* fitted */\n"," background: var(--sklearn-color-fitted-level-0);\n"," border: var(--sklearn-color-fitted-level-3);\n","}\n","\n",".sk-estimator-doc-link:hover span {\n"," display: block;\n","}\n","\n","/* \"?\"-specific style due to the `<a>` HTML tag */\n","\n","#sk-container-id-1 a.estimator_doc_link {\n"," float: right;\n"," font-size: 1rem;\n"," line-height: 1em;\n"," font-family: monospace;\n"," background-color: var(--sklearn-color-background);\n"," border-radius: 1rem;\n"," height: 1rem;\n"," width: 1rem;\n"," text-decoration: none;\n"," /* unfitted */\n"," color: var(--sklearn-color-unfitted-level-1);\n"," border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n","}\n","\n","#sk-container-id-1 a.estimator_doc_link.fitted {\n"," /* fitted */\n"," border: var(--sklearn-color-fitted-level-1) 1pt solid;\n"," color: var(--sklearn-color-fitted-level-1);\n","}\n","\n","/* On hover */\n","#sk-container-id-1 a.estimator_doc_link:hover {\n"," /* unfitted */\n"," background-color: var(--sklearn-color-unfitted-level-3);\n"," color: var(--sklearn-color-background);\n"," text-decoration: none;\n","}\n","\n","#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n"," /* fitted */\n"," background-color: var(--sklearn-color-fitted-level-3);\n","}\n","</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KernelDensity(bandwidth=0.02)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> KernelDensity<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.neighbors.KernelDensity.html\">?<span>Documentation for KernelDensity</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KernelDensity(bandwidth=0.02)</pre></div> </div></div></div></div>"]},"metadata":{},"execution_count":4}],"source":["import pandas as pd\n","import numpy as np\n","from sklearn.model_selection import train_test_split\n","from sklearn.neighbors import KernelDensity\n","\n","# Extract longitude and latitude\n","X = Toronto_Collisions_df[['COLLISION_LONGITUDE', 'COLLISION_LATITUDE']].values\n","\n","# Split the data into training and testing sets\n","X_train, X_test = train_test_split(X, test_size=0.2, random_state=42)\n","\n","# Train the KDE model on the training data\n","kde = KernelDensity(kernel='gaussian', bandwidth=0.02) # Adjust bandwidth as needed\n","kde.fit(X_train)"]},{"cell_type":"code","source":["import pickle\n","import pandas as pd\n","import numpy as np\n","from sklearn.model_selection import train_test_split\n","from sklearn.neighbors import KernelDensity\n","\n","# Extract longitude and latitude\n","X = Toronto_Collisions_df[['COLLISION_LONGITUDE', 'COLLISION_LATITUDE']].values\n","\n","# Split the data into training and testing sets\n","X_train, X_test = train_test_split(X, test_size=0.2, random_state=42)\n","\n","'''\n","# Fit the model on training set\n","kde_model = KernelDensity(kernel='gaussian', bandwidth=0.02) # Adjust bandwidth as needed\n","kde_model.fit(X_train)\n","# save the model to disk\n","filename = 'kde.sav'\n","pickle.dump(kde_model, open(filename, 'wb'))\n","'''"],"metadata":{"id":"86apL3Fc8RgM","colab":{"base_uri":"https://localhost:8080/","height":52},"executionInfo":{"status":"ok","timestamp":1733118047283,"user_tz":300,"elapsed":30,"user":{"displayName":"Karuna Adhikari","userId":"14765861351042505468"}},"outputId":"cdeb5676-4e3b-440a-d15e-486806512ce4"},"execution_count":4,"outputs":[{"output_type":"execute_result","data":{"text/plain":["\"\\n# Fit the model on training set\\nkde_model = KernelDensity(kernel='gaussian', bandwidth=0.02) # Adjust bandwidth as needed\\nkde_model.fit(X_train)\\n# save the model to disk\\nfilename = 'kde.sav'\\npickle.dump(kde_model, open(filename, 'wb'))\\n\""],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":4}]},{"cell_type":"code","execution_count":null,"metadata":{"id":"O98KQZPA7-JX"},"outputs":[],"source":["'''# Function to create coordinate arrays from data points\n","def get_coordinate_array(data):\n","\n"," coordinates = []\n"," for point in data:\n"," coordinates.append(list(point))\n"," return np.array(coordinates)\n","\n","# Create coordinate arrays for training and testing sets (if needed)\n","train_coords_array = get_coordinate_array(X_train)\n","test_coords_array = get_coordinate_array(X_test)\n","\n","# Calculate KDE risks for training and testing sets\n","train_risks = kde.score_samples(train_coords_array)\n","test_risks = kde.score_samples(test_coords_array)\n","\n","\n","print(\"KDE risks for the training set:\", np.exp(train_risks)) # Print actual density values\n","print(\"KDE risks for the testing set:\", np.exp(test_risks))\n","'''"]},{"cell_type":"code","source":["kde.fit(X_train)\n","\n","density = kde.score_samples(X_test)\n","\n","'''\n","# Define a custom colormap: blue (low), green, yellow, orange, red (high)\n","colors = [\"white\", \"green\", \"yellow\", \"orange\", \"red\"]\n","cmap = LinearSegmentedColormap.from_list(\"custom_cmap\", colors)\n","\n","# Plot the KDE density map with the custom colormap\n","plt.imshow(density, extent=[longitude_min, longitude_max, latitude_min, latitude_max],\n"," origin='lower', cmap=cmap, alpha=0.7)\n","plt.colorbar(label='Collision Density')\n","plt.xlabel('Longitude')\n","plt.ylabel('Latitude')\n","plt.title('Toronto Collision Density Map (KDE)')\n","plt.show()\n","'''\n"],"metadata":{"id":"IeI8JUTWv0Sm"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["# CV For Bandwidth"],"metadata":{"id":"uimTe_Ji3qix"}},{"cell_type":"code","source":["import numpy as np\n","import pandas as pd\n","import matplotlib.pyplot as plt\n","from sklearn.model_selection import GridSearchCV\n","from sklearn.neighbors import KernelDensity\n","\n","bandwidths = 10 ** np.linspace(-1, 1, 100)\n","\n","grid = GridSearchCV(KernelDensity(kernel='gaussian'),\n"," {'bandwidth': bandwidths},\n"," cv=100)\n","\n","grid.fit(X_train);\n","\n","grid.best_params_"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":211},"id":"eRZEvOcx3uw1","executionInfo":{"status":"error","timestamp":1733121902161,"user_tz":300,"elapsed":2327,"user":{"displayName":"Karuna Adhikari","userId":"14765861351042505468"}},"outputId":"dccbb923-9d16-4b1b-83b7-7cf3092e36a4"},"execution_count":1,"outputs":[{"output_type":"error","ename":"NameError","evalue":"name 'X_train' is not defined","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)","\u001b[0;32m<ipython-input-1-874075f207d0>\u001b[0m in \u001b[0;36m<cell line: 13>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 11\u001b[0m cv=100)\n\u001b[1;32m 12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbest_params_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'X_train' is not defined"]}]},{"cell_type":"code","source":[],"metadata":{"id":"I1Ct3VZI4nni"},"execution_count":null,"outputs":[]}],"metadata":{"colab":{"provenance":[]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0}