diff --git a/G1-06-03-PT_TrafficQuality.ipynb b/G1-06-03-PT_TrafficQuality.ipynb new file mode 100644 index 0000000..b9c64cb --- /dev/null +++ b/G1-06-03-PT_TrafficQuality.ipynb @@ -0,0 +1,4546 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#importing envirocar\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "# load dependencies'\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "\n", + "from envirocar import TrackAPI, DownloadClient, BboxSelector, ECConfig\n", + "\n", + "# create an initial but optional config and an api client\n", + "config = ECConfig()\n", + "track_api = TrackAPI(api_client=DownloadClient(config=config))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + " | id | \n", + "time | \n", + "geometry | \n", + "Engine Load.value | \n", + "Engine Load.unit | \n", + "GPS Accuracy.value | \n", + "GPS Accuracy.unit | \n", + "Speed.value | \n", + "Speed.unit | \n", + "Throttle Position.value | \n", + "... | \n", + "track.appVersion | \n", + "track.touVersion | \n", + "O2 Lambda Current ER.value | \n", + "O2 Lambda Current ER.unit | \n", + "O2 Lambda Current.value | \n", + "O2 Lambda Current.unit | \n", + "Short-Term Fuel Trim 1.value | \n", + "Short-Term Fuel Trim 1.unit | \n", + "Long-Term Fuel Trim 1.value | \n", + "Long-Term Fuel Trim 1.unit | \n", + "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", + "5e4a353b3965f368945da833 | \n", + "2020-01-08T09:16:45 | \n", + "POINT (7.60204 51.96763) | \n", + "0.000000 | \n", + "% | \n", + "7.237880 | \n", + "% | \n", + "53.898775 | \n", + "km/h | \n", + "84.000001 | \n", + "... | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
1 | \n", + "5e4a353b3965f368945da835 | \n", + "2020-01-08T09:16:50 | \n", + "POINT (7.60187 51.96697) | \n", + "72.440358 | \n", + "% | \n", + "6.725071 | \n", + "% | \n", + "50.000001 | \n", + "km/h | \n", + "84.000000 | \n", + "... | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
2 | \n", + "5e4a353b3965f368945da836 | \n", + "2020-01-08T09:16:55 | \n", + "POINT (7.60175 51.96639) | \n", + "0.000000 | \n", + "% | \n", + "7.720525 | \n", + "% | \n", + "44.773214 | \n", + "km/h | \n", + "84.000000 | \n", + "... | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
3 | \n", + "5e4a353b3965f368945da837 | \n", + "2020-01-08T09:17:00 | \n", + "POINT (7.60167 51.96591) | \n", + "0.000000 | \n", + "% | \n", + "9.209605 | \n", + "% | \n", + "31.280506 | \n", + "km/h | \n", + "83.999999 | \n", + "... | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
4 | \n", + "5e4a353b3965f368945da838 | \n", + "2020-01-08T09:17:05 | \n", + "POINT (7.60165 51.96563) | \n", + "17.868660 | \n", + "% | \n", + "8.453717 | \n", + "% | \n", + "12.483003 | \n", + "km/h | \n", + "84.000000 | \n", + "... | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
280 | \n", + "54b5759ae4b08a7098d0b2fc | \n", + "2014-11-18T08:04:39 | \n", + "POINT (7.59646 51.96743) | \n", + "21.568628 | \n", + "% | \n", + "5.000000 | \n", + "% | \n", + "3.000000 | \n", + "km/h | \n", + "94.000000 | \n", + "... | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
281 | \n", + "54b5759ae4b08a7098d0b2fe | \n", + "2014-11-18T08:04:44 | \n", + "POINT (7.59644 51.96733) | \n", + "43.137257 | \n", + "% | \n", + "6.000000 | \n", + "% | \n", + "7.000000 | \n", + "km/h | \n", + "94.000000 | \n", + "... | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
282 | \n", + "54b5759ae4b08a7098d0b300 | \n", + "2014-11-18T08:04:50 | \n", + "POINT (7.59674 51.96688) | \n", + "67.058823 | \n", + "% | \n", + "6.000000 | \n", + "% | \n", + "36.000000 | \n", + "km/h | \n", + "94.000000 | \n", + "... | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
283 | \n", + "54b5759ae4b08a7098d0b302 | \n", + "2014-11-18T08:04:56 | \n", + "POINT (7.59746 51.96649) | \n", + "22.745098 | \n", + "% | \n", + "6.000000 | \n", + "% | \n", + "40.000000 | \n", + "km/h | \n", + "94.000000 | \n", + "... | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
284 | \n", + "54b5759ae4b08a7098d0b304 | \n", + "2014-11-18T08:05:02 | \n", + "POINT (7.59787 51.96639) | \n", + "23.137255 | \n", + "% | \n", + "6.000000 | \n", + "% | \n", + "10.000000 | \n", + "km/h | \n", + "94.000000 | \n", + "... | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "NaN | \n", + "
13695 rows × 62 columns
\n", + "\n", + " | track_id | \n", + "track.length | \n", + "mean.speed | \n", + "
---|---|---|---|
0 | \n", + "[5e4a353b3965f368945da831] | \n", + "[9.129419925668266] | \n", + "39.977587 | \n", + "
1 | \n", + "[5dda4b8144ea856b70e667f0] | \n", + "[9.541802522441039] | \n", + "34.317386 | \n", + "
2 | \n", + "[5dd68aef44ea856b70e140fc] | \n", + "[4.514544235432185] | \n", + "28.701580 | \n", + "
3 | \n", + "[5dd68ae944ea856b70e1382b] | \n", + "[8.59072063889238] | \n", + "18.446047 | \n", + "
4 | \n", + "[5dc985eb44ea856b702dd8c0] | \n", + "[9.010348969771867] | \n", + "32.756960 | \n", + "
5 | \n", + "[5dc986e844ea856b702e3cb5] | \n", + "[9.17068374358849] | \n", + "22.769765 | \n", + "
6 | \n", + "[5dcbbb1444ea856b7037b264] | \n", + "[9.098887651227916] | \n", + "32.709936 | \n", + "
7 | \n", + "[5dcead4044ea856b704d8037] | \n", + "[9.098887651227916] | \n", + "32.709936 | \n", + "
8 | \n", + "[5dcbbb0244ea856b7037ab04] | \n", + "[7.65762587804561] | \n", + "31.927179 | \n", + "
9 | \n", + "[5dca7dce44ea856b70362ef8] | \n", + "[2.3035349047515083] | \n", + "38.937756 | \n", + "
10 | \n", + "[5dca7e7c44ea856b70363072] | \n", + "[4.093644790697391] | \n", + "30.437707 | \n", + "
11 | \n", + "[580c4f13e4b01fb1c08caaa0] | \n", + "[7.113629390510417] | \n", + "38.457744 | \n", + "
12 | \n", + "[57c7ce19e4b0f05fc1c87ae6] | \n", + "[9.442456708534534] | \n", + "34.622969 | \n", + "
13 | \n", + "[57c7ce07e4b0f05fc1c86e45] | \n", + "[9.625767326736378] | \n", + "31.029952 | \n", + "
14 | \n", + "[57a49fc5e4b086b281d08f35] | \n", + "[9.481453921453829] | \n", + "34.596775 | \n", + "
15 | \n", + "[57a49fbbe4b086b281d085c2] | \n", + "[9.757158439314372] | \n", + "31.609253 | \n", + "
16 | \n", + "[579f2bfbe4b086b281caea05] | \n", + "[9.465381108873386] | \n", + "28.911982 | \n", + "
17 | \n", + "[579f2bf4e4b086b281cae357] | \n", + "[9.636376743331567] | \n", + "30.642749 | \n", + "
18 | \n", + "[579f2beae4b086b281cada51] | \n", + "[9.811318594764575] | \n", + "30.473906 | \n", + "
19 | \n", + "[579f2bd8e4b086b281cad2e7] | \n", + "[9.628940297599458] | \n", + "31.286882 | \n", + "
20 | \n", + "[57974ecce4b086b281c1c189] | \n", + "[9.314478865806853] | \n", + "30.905068 | \n", + "
21 | \n", + "[5796666fe4b086b281bfc0c0] | \n", + "[9.221065937792776] | \n", + "32.934441 | \n", + "
22 | \n", + "[5730c704e4b09078f95e7a68] | \n", + "[9.629413129383579] | \n", + "36.523163 | \n", + "
23 | \n", + "[575d027de4b0a69192a78fe3] | \n", + "[8.864202733660164] | \n", + "38.204542 | \n", + "
24 | \n", + "[56f120ede4b0b5e237d5756f] | \n", + "[9.058767454660982] | \n", + "38.598669 | \n", + "
25 | \n", + "[56d4084be4b0df8fa06981e0] | \n", + "[8.511655439271335] | \n", + "28.908254 | \n", + "
26 | \n", + "[56cc45cde4b0df8fa05e6c7b] | \n", + "[10.152214743523158] | \n", + "19.732674 | \n", + "
27 | \n", + "[56b318e8e4b0df8fa0057d11] | \n", + "[8.968665667090175] | \n", + "28.824494 | \n", + "
28 | \n", + "[56bac783e4b0df8fa00ce62a] | \n", + "[10.16913504987736] | \n", + "30.810965 | \n", + "
29 | \n", + "[56b21ceae4b0df8fa004b85c] | \n", + "[8.639720920371786] | \n", + "28.429980 | \n", + "
30 | \n", + "[56aba03ae4b058e549400f58] | \n", + "[7.789332585842087] | \n", + "27.306862 | \n", + "
31 | \n", + "[56aba010e4b058e549400c7b] | \n", + "[9.648800715371603] | \n", + "36.259987 | \n", + "
32 | \n", + "[56a781bbe4b000f94dbb91d0] | \n", + "[7.929514562297117] | \n", + "29.110119 | \n", + "
33 | \n", + "[560eb5f4e4b0a6b8ecb254c5] | \n", + "[9.17934823050165] | \n", + "37.378049 | \n", + "
34 | \n", + "[55080c7ee4b0bf5f3d061868] | \n", + "[0.0] | \n", + "36.239521 | \n", + "
35 | \n", + "[54b5759fe4b08a7098d0b541] | \n", + "[0.0] | \n", + "29.179191 | \n", + "
36 | \n", + "[54b57599e4b08a7098d0b0ca] | \n", + "[0.0] | \n", + "22.512281 | \n", + "
37 | \n", + "[5de9d7a03bdb691868e765cd] | \n", + "[9.223906243734975] | \n", + "25.078726 | \n", + "
38 | \n", + "[5ddcdd4a44ea85025cfdf878] | \n", + "[8.518259726458794] | \n", + "25.205155 | \n", + "
39 | \n", + "[5ddbc67f44ea85025cfc4c10] | \n", + "[8.793905142293294] | \n", + "33.004135 | \n", + "
40 | \n", + "[5dd68af544ea856b70e1471a] | \n", + "[6.642299178637266] | \n", + "20.850911 | \n", + "
41 | \n", + "[5dd68af244ea856b70e14259] | \n", + "[8.792075880355442] | \n", + "32.268413 | \n", + "
42 | \n", + "[5dd68ae544ea856b70e1356b] | \n", + "[6.850031976402584] | \n", + "35.683204 | \n", + "
' syntax is deprecated. ':' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6\n",
+ " return _prepare_from_string(\" \".join(pjargs))\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\pyproj\\crs\\crs.py:53: FutureWarning: '+init=:' syntax is deprecated. ':' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6\n",
+ " return _prepare_from_string(\" \".join(pjargs))\n"
+ ]
+ }
+ ],
+ "source": [
+ "#importing leuvan mapmatching for map-matching\n",
+ "\n",
+ "from leuvenmapmatching.matcher.distance import DistanceMatcher\n",
+ "from leuvenmapmatching.map.inmem import InMemMap\n",
+ "from leuvenmapmatching.matcher.newsonkrumm import NewsonKrummMatcher\n",
+ "\n",
+ "# Leuven Map Matching is using a different internal graph structure for the street data. \n",
+ "# Therefore, the OSMnx graph needs to be transformed to the InMemMap\n",
+ "streetmap = InMemMap(\"enviroCar\", use_latlon=True, use_rtree=True, index_edges=True)\n",
+ "\n",
+ "# add nodes\n",
+ "nodes = list(graph.nodes)\n",
+ "for node in nodes:\n",
+ " #if graph.nodes[node]['highway'] == 'traffic_signals':\n",
+ " lng = graph.nodes[node]['x']\n",
+ " lat = graph.nodes[node]['y']\n",
+ " streetmap.add_node(node, (lat, lng))\n",
+ " #print(graph.nodes[node]['highway'])\n",
+ "\n",
+ "# add edges\n",
+ "edges = list(graph.edges)\n",
+ "for edge in edges:\n",
+ " node_a, node_b = edge[0], edge[1]\n",
+ " streetmap.add_edge(node_a, node_b)\n",
+ " #print(graph.edges[edge]['name'])\n",
+ " # exclude bi-directional edges when street is oneway\n",
+ " if not graph.edges[edge]['oneway']:\n",
+ " streetmap.add_edge(node_b, node_a)\n",
+ " \n",
+ "streetmap.purge()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Configure the mapmatcher. For increasing the performance it is important \n",
+ "# that max_dist (in meters) is not set too high\n",
+ "matcher = NewsonKrummMatcher(streetmap,\n",
+ " max_dist=100, \n",
+ " max_dist_init=200,\n",
+ " #non_emitting_length_factor=0.75,\n",
+ " obs_noise=100,\n",
+ " #obs_noise_ne=75,\n",
+ " dist_noise=5,\n",
+ " non_emitting_states=False,\n",
+ " non_emitting_edgeid=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#function for map-matching\n",
+ "\n",
+ "def mm_coords(track, matcher):\n",
+ " \n",
+ " \"\"\"\n",
+ " DOC STRING\n",
+ " \n",
+ " Parameters:\n",
+ " track - Dataframe of a track for which you want to perform map-matching\n",
+ " matcher- Matcher created using the Newson Krumm Matcher for the osm graph\n",
+ " \n",
+ " Usage:\n",
+ " performs map-matching and adds map-matched coordinates and edge information to the track data\n",
+ " \n",
+ " Output:\n",
+ " Track data with two columns added \"MM_coords\" and \"Edge\" for map-matched coordinates and osm edge id respectively\n",
+ " \n",
+ " \"\"\"\n",
+ " \n",
+ " # Get the latitude and longitude coordinates from the track and join them in an array\n",
+ " lats = list(track['geometry'].apply(lambda coord: coord.y))\n",
+ " lngs = list(track['geometry'].apply(lambda coord: coord.x))\n",
+ "\n",
+ " track_coords = [c for c in zip(lats, lngs)]\n",
+ " \n",
+ " edge_ids, last_idx = matcher.match(track_coords)\n",
+ " coords = [m.edge_m.pi[:] for m in matcher.lattice_best]\n",
+ " \n",
+ " i = 0\n",
+ " edg = []\n",
+ " for edge in edge_ids:\n",
+ " index = edge_ids[i]\n",
+ " tup = list(index)\n",
+ " tup.append(0)\n",
+ " ed = tuple(tup)\n",
+ " edg.append(ed)\n",
+ " i = i+1\n",
+ " \n",
+ " track['MM_coords'] = coords\n",
+ " track['Edge'] = edg"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ "C:\\Users\\visweshwar\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n"
+ ]
+ }
+ ],
+ "source": [
+ "#applying mm_coords function to all available tracks of the data\n",
+ "\n",
+ "for i in new_tracks:\n",
+ " mm_coords(i, matcher)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#comparing the map-matched sample track with raw sample track\n",
+ "\n",
+ "m = folium.Map(location=[lat, lng], zoom_start=13)\n",
+ "folium.PolyLine(sample_track_coords, color='red').add_to(m)\n",
+ "folium.PolyLine(track_3['MM_coords'], color='blue').add_to(m)\n",
+ "m"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#concatenating all the map-matched tracks into a single data frame\n",
+ "\n",
+ "full_tracks = pd.concat([track_1, track_3,track_4,track_5,track_6,track_7,track_9,track_10,\n",
+ " track_11,track_12,track_13,track_14,track_15,track_16,track_17,track_18,track_19,track_20, \n",
+ " track_22,track_23,track_24,track_25,track_27,track_28,track_29,track_30,\n",
+ " track_31,track_32,track_33,track_34,track_35,track_36,track_37,track_45,track_47,track_49,track_50,o_track_31,\n",
+ " o_track_32,o_track_33,o_track_38,o_track_39,o_track_46], ignore_index=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " time \n",
+ " geometry \n",
+ " Engine Load.value \n",
+ " Engine Load.unit \n",
+ " GPS Accuracy.value \n",
+ " GPS Accuracy.unit \n",
+ " Speed.value \n",
+ " Speed.unit \n",
+ " Throttle Position.value \n",
+ " ... \n",
+ " O2 Lambda Current.value \n",
+ " O2 Lambda Current.unit \n",
+ " Short-Term Fuel Trim 1.value \n",
+ " Short-Term Fuel Trim 1.unit \n",
+ " Long-Term Fuel Trim 1.value \n",
+ " Long-Term Fuel Trim 1.unit \n",
+ " MM_coords \n",
+ " Edge \n",
+ " Latitude \n",
+ " Longitude \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 5e4a353b3965f368945da833 \n",
+ " 2020-01-08T09:16:45 \n",
+ " POINT (7.60204 51.96763) \n",
+ " 0.000000 \n",
+ " % \n",
+ " 7.237880 \n",
+ " % \n",
+ " 53.898775 \n",
+ " km/h \n",
+ " 84.000001 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.96762099289721, 7.60208002964649) \n",
+ " (930077428, 1002637787, 0) \n",
+ " 51.967621 \n",
+ " 7.602080 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 5e4a353b3965f368945da835 \n",
+ " 2020-01-08T09:16:50 \n",
+ " POINT (7.60187 51.96697) \n",
+ " 72.440358 \n",
+ " % \n",
+ " 6.725071 \n",
+ " % \n",
+ " 50.000001 \n",
+ " km/h \n",
+ " 84.000000 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.96697485174543, 7.601856801638709) \n",
+ " (1002637787, 1002637791, 0) \n",
+ " 51.966975 \n",
+ " 7.601857 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 5e4a353b3965f368945da836 \n",
+ " 2020-01-08T09:16:55 \n",
+ " POINT (7.60175 51.96639) \n",
+ " 0.000000 \n",
+ " % \n",
+ " 7.720525 \n",
+ " % \n",
+ " 44.773214 \n",
+ " km/h \n",
+ " 84.000000 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.96638766524666, 7.601728174920632) \n",
+ " (1002637791, 249810646, 0) \n",
+ " 51.966388 \n",
+ " 7.601728 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 5e4a353b3965f368945da837 \n",
+ " 2020-01-08T09:17:00 \n",
+ " POINT (7.60167 51.96591) \n",
+ " 0.000000 \n",
+ " % \n",
+ " 9.209605 \n",
+ " % \n",
+ " 31.280506 \n",
+ " km/h \n",
+ " 83.999999 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.965907581290566, 7.60164928744554) \n",
+ " (1002637791, 249810646, 0) \n",
+ " 51.965908 \n",
+ " 7.601649 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 5e4a353b3965f368945da838 \n",
+ " 2020-01-08T09:17:05 \n",
+ " POINT (7.60165 51.96563) \n",
+ " 17.868660 \n",
+ " % \n",
+ " 8.453717 \n",
+ " % \n",
+ " 12.483003 \n",
+ " km/h \n",
+ " 84.000000 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.965628979555404, 7.601603508341239) \n",
+ " (1002637791, 249810646, 0) \n",
+ " 51.965629 \n",
+ " 7.601604 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 8806 \n",
+ " 5dd68ae544ea856b70e135f5 \n",
+ " 2019-11-18T08:28:53 \n",
+ " POINT (7.65511 51.93745) \n",
+ " 29.822925 \n",
+ " % \n",
+ " 2.000000 \n",
+ " % \n",
+ " 52.999998 \n",
+ " km/h \n",
+ " 16.114791 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.93744505064686, 7.655110098982098) \n",
+ " (56146299, 56146307, 0) \n",
+ " 51.937445 \n",
+ " 7.655110 \n",
+ " \n",
+ " \n",
+ " 8807 \n",
+ " 5dd68ae544ea856b70e135f6 \n",
+ " 2019-11-18T08:28:58 \n",
+ " POINT (7.65579 51.93697) \n",
+ " 30.719280 \n",
+ " % \n",
+ " 3.000000 \n",
+ " % \n",
+ " 47.883782 \n",
+ " km/h \n",
+ " 13.000000 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.9369784987003, 7.655813095369233) \n",
+ " (56146299, 56146307, 0) \n",
+ " 51.936978 \n",
+ " 7.655813 \n",
+ " \n",
+ " \n",
+ " 8808 \n",
+ " 5dd68ae544ea856b70e135f7 \n",
+ " 2019-11-18T08:29:03 \n",
+ " POINT (7.65634 51.93661) \n",
+ " 31.372550 \n",
+ " % \n",
+ " 4.000000 \n",
+ " % \n",
+ " 29.844875 \n",
+ " km/h \n",
+ " 13.000000 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.93661737448661, 7.656357219802496) \n",
+ " (56146299, 56146307, 0) \n",
+ " 51.936617 \n",
+ " 7.656357 \n",
+ " \n",
+ " \n",
+ " 8809 \n",
+ " 5dd68ae544ea856b70e135f8 \n",
+ " 2019-11-18T08:29:08 \n",
+ " POINT (7.65630 51.93626) \n",
+ " 77.423247 \n",
+ " % \n",
+ " 3.000000 \n",
+ " % \n",
+ " 34.432693 \n",
+ " km/h \n",
+ " 21.234414 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.93625383540167, 7.656309248922576) \n",
+ " (56146307, 262704083, 0) \n",
+ " 51.936254 \n",
+ " 7.656309 \n",
+ " \n",
+ " \n",
+ " 8810 \n",
+ " 5dd68ae544ea856b70e135f9 \n",
+ " 2019-11-18T08:29:13 \n",
+ " POINT (7.65569 51.93589) \n",
+ " 30.414068 \n",
+ " % \n",
+ " 5.138244 \n",
+ " % \n",
+ " 46.647222 \n",
+ " km/h \n",
+ " 16.115681 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.93589771998468, 7.655682518468324) \n",
+ " (56146307, 262704083, 0) \n",
+ " 51.935898 \n",
+ " 7.655683 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "8811 rows × 66 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " id time geometry \\\n",
+ "0 5e4a353b3965f368945da833 2020-01-08T09:16:45 POINT (7.60204 51.96763) \n",
+ "1 5e4a353b3965f368945da835 2020-01-08T09:16:50 POINT (7.60187 51.96697) \n",
+ "2 5e4a353b3965f368945da836 2020-01-08T09:16:55 POINT (7.60175 51.96639) \n",
+ "3 5e4a353b3965f368945da837 2020-01-08T09:17:00 POINT (7.60167 51.96591) \n",
+ "4 5e4a353b3965f368945da838 2020-01-08T09:17:05 POINT (7.60165 51.96563) \n",
+ "... ... ... ... \n",
+ "8806 5dd68ae544ea856b70e135f5 2019-11-18T08:28:53 POINT (7.65511 51.93745) \n",
+ "8807 5dd68ae544ea856b70e135f6 2019-11-18T08:28:58 POINT (7.65579 51.93697) \n",
+ "8808 5dd68ae544ea856b70e135f7 2019-11-18T08:29:03 POINT (7.65634 51.93661) \n",
+ "8809 5dd68ae544ea856b70e135f8 2019-11-18T08:29:08 POINT (7.65630 51.93626) \n",
+ "8810 5dd68ae544ea856b70e135f9 2019-11-18T08:29:13 POINT (7.65569 51.93589) \n",
+ "\n",
+ " Engine Load.value Engine Load.unit GPS Accuracy.value \\\n",
+ "0 0.000000 % 7.237880 \n",
+ "1 72.440358 % 6.725071 \n",
+ "2 0.000000 % 7.720525 \n",
+ "3 0.000000 % 9.209605 \n",
+ "4 17.868660 % 8.453717 \n",
+ "... ... ... ... \n",
+ "8806 29.822925 % 2.000000 \n",
+ "8807 30.719280 % 3.000000 \n",
+ "8808 31.372550 % 4.000000 \n",
+ "8809 77.423247 % 3.000000 \n",
+ "8810 30.414068 % 5.138244 \n",
+ "\n",
+ " GPS Accuracy.unit Speed.value Speed.unit Throttle Position.value ... \\\n",
+ "0 % 53.898775 km/h 84.000001 ... \n",
+ "1 % 50.000001 km/h 84.000000 ... \n",
+ "2 % 44.773214 km/h 84.000000 ... \n",
+ "3 % 31.280506 km/h 83.999999 ... \n",
+ "4 % 12.483003 km/h 84.000000 ... \n",
+ "... ... ... ... ... ... \n",
+ "8806 % 52.999998 km/h 16.114791 ... \n",
+ "8807 % 47.883782 km/h 13.000000 ... \n",
+ "8808 % 29.844875 km/h 13.000000 ... \n",
+ "8809 % 34.432693 km/h 21.234414 ... \n",
+ "8810 % 46.647222 km/h 16.115681 ... \n",
+ "\n",
+ " O2 Lambda Current.value O2 Lambda Current.unit \\\n",
+ "0 NaN NaN \n",
+ "1 NaN NaN \n",
+ "2 NaN NaN \n",
+ "3 NaN NaN \n",
+ "4 NaN NaN \n",
+ "... ... ... \n",
+ "8806 NaN NaN \n",
+ "8807 NaN NaN \n",
+ "8808 NaN NaN \n",
+ "8809 NaN NaN \n",
+ "8810 NaN NaN \n",
+ "\n",
+ " Short-Term Fuel Trim 1.value Short-Term Fuel Trim 1.unit \\\n",
+ "0 NaN NaN \n",
+ "1 NaN NaN \n",
+ "2 NaN NaN \n",
+ "3 NaN NaN \n",
+ "4 NaN NaN \n",
+ "... ... ... \n",
+ "8806 NaN NaN \n",
+ "8807 NaN NaN \n",
+ "8808 NaN NaN \n",
+ "8809 NaN NaN \n",
+ "8810 NaN NaN \n",
+ "\n",
+ " Long-Term Fuel Trim 1.value Long-Term Fuel Trim 1.unit \\\n",
+ "0 NaN NaN \n",
+ "1 NaN NaN \n",
+ "2 NaN NaN \n",
+ "3 NaN NaN \n",
+ "4 NaN NaN \n",
+ "... ... ... \n",
+ "8806 NaN NaN \n",
+ "8807 NaN NaN \n",
+ "8808 NaN NaN \n",
+ "8809 NaN NaN \n",
+ "8810 NaN NaN \n",
+ "\n",
+ " MM_coords Edge \\\n",
+ "0 (51.96762099289721, 7.60208002964649) (930077428, 1002637787, 0) \n",
+ "1 (51.96697485174543, 7.601856801638709) (1002637787, 1002637791, 0) \n",
+ "2 (51.96638766524666, 7.601728174920632) (1002637791, 249810646, 0) \n",
+ "3 (51.965907581290566, 7.60164928744554) (1002637791, 249810646, 0) \n",
+ "4 (51.965628979555404, 7.601603508341239) (1002637791, 249810646, 0) \n",
+ "... ... ... \n",
+ "8806 (51.93744505064686, 7.655110098982098) (56146299, 56146307, 0) \n",
+ "8807 (51.9369784987003, 7.655813095369233) (56146299, 56146307, 0) \n",
+ "8808 (51.93661737448661, 7.656357219802496) (56146299, 56146307, 0) \n",
+ "8809 (51.93625383540167, 7.656309248922576) (56146307, 262704083, 0) \n",
+ "8810 (51.93589771998468, 7.655682518468324) (56146307, 262704083, 0) \n",
+ "\n",
+ " Latitude Longitude \n",
+ "0 51.967621 7.602080 \n",
+ "1 51.966975 7.601857 \n",
+ "2 51.966388 7.601728 \n",
+ "3 51.965908 7.601649 \n",
+ "4 51.965629 7.601604 \n",
+ "... ... ... \n",
+ "8806 51.937445 7.655110 \n",
+ "8807 51.936978 7.655813 \n",
+ "8808 51.936617 7.656357 \n",
+ "8809 51.936254 7.656309 \n",
+ "8810 51.935898 7.655683 \n",
+ "\n",
+ "[8811 rows x 66 columns]"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#unpacking the MM_coords into latitude and longitude for remapping purposes\n",
+ "\n",
+ "lat = []\n",
+ "long = []\n",
+ "for i in full_tracks['MM_coords']:\n",
+ " li = list(i)\n",
+ " lat.append(li[0])\n",
+ " long.append(li[1])\n",
+ "full_tracks['Latitude'] = lat\n",
+ "full_tracks['Longitude'] = long\n",
+ "full_tracks"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Index(['u', 'v', 'key', 'osmid', 'name', 'highway', 'maxspeed', 'oneway',\n",
+ " 'length', 'geometry', 'lanes', 'ref', 'bridge', 'tunnel', 'service',\n",
+ " 'access', 'width', 'junction', 'area'],\n",
+ " dtype='object')"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#checking the column values in osm df\n",
+ "tracksdf_osm = ox.graph_to_gdfs(graph, nodes=False, edges=True)\n",
+ "tracksdf_osm.columns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " u \n",
+ " v \n",
+ " maxspeed \n",
+ " geometry_x \n",
+ " id \n",
+ " time \n",
+ " geometry_y \n",
+ " Engine Load.value \n",
+ " Engine Load.unit \n",
+ " GPS Accuracy.value \n",
+ " ... \n",
+ " O2 Lambda Current.value \n",
+ " O2 Lambda Current.unit \n",
+ " Short-Term Fuel Trim 1.value \n",
+ " Short-Term Fuel Trim 1.unit \n",
+ " Long-Term Fuel Trim 1.value \n",
+ " Long-Term Fuel Trim 1.unit \n",
+ " MM_coords \n",
+ " Edge \n",
+ " Latitude \n",
+ " Longitude \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 256786473 \n",
+ " 354520341 \n",
+ " 50 \n",
+ " LINESTRING (7.61014 51.94915, 7.61078 51.94926... \n",
+ " 5e4a353b3965f368945da86f \n",
+ " 2020-01-08T09:21:42 \n",
+ " POINT (7.61039 51.94918) \n",
+ " 65.953050 \n",
+ " % \n",
+ " 5.997796 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.94919142268261, 7.610389676216284) \n",
+ " (256786473, 354520341, 0) \n",
+ " 51.949191 \n",
+ " 7.610390 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 256786473 \n",
+ " 354520341 \n",
+ " 50 \n",
+ " LINESTRING (7.61014 51.94915, 7.61078 51.94926... \n",
+ " 5e4a353b3965f368945da870 \n",
+ " 2020-01-08T09:21:47 \n",
+ " POINT (7.61123 51.94930) \n",
+ " 6.444955 \n",
+ " % \n",
+ " 6.656403 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.949328425609245, 7.611215110806332) \n",
+ " (256786473, 354520341, 0) \n",
+ " 51.949328 \n",
+ " 7.611215 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 256786473 \n",
+ " 354520341 \n",
+ " 50 \n",
+ " LINESTRING (7.61014 51.94915, 7.61078 51.94926... \n",
+ " 580c4f13e4b01fb1c08caaac \n",
+ " 2016-10-19T08:29:13 \n",
+ " POINT (7.61070 51.94922) \n",
+ " 61.830062 \n",
+ " % \n",
+ " 4.000000 \n",
+ " ... \n",
+ " 80.176042 \n",
+ " A \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.949240945044465, 7.610688040944025) \n",
+ " (256786473, 354520341, 0) \n",
+ " 51.949241 \n",
+ " 7.610688 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 256786473 \n",
+ " 354520341 \n",
+ " 50 \n",
+ " LINESTRING (7.61014 51.94915, 7.61078 51.94926... \n",
+ " 57c7ce19e4b0f05fc1c87b3b \n",
+ " 2016-08-19T05:36:43 \n",
+ " POINT (7.61098 51.94931) \n",
+ " 48.577291 \n",
+ " % \n",
+ " 5.000000 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.94929112692097, 7.610990384454575) \n",
+ " (256786473, 354520341, 0) \n",
+ " 51.949291 \n",
+ " 7.610990 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 256786473 \n",
+ " 354520341 \n",
+ " 50 \n",
+ " LINESTRING (7.61014 51.94915, 7.61078 51.94926... \n",
+ " 57c7ce07e4b0f05fc1c86eb4 \n",
+ " 2016-08-12T05:39:34 \n",
+ " POINT (7.61022 51.94916) \n",
+ " 33.039031 \n",
+ " % \n",
+ " 10.000000 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.94916315911404, 7.610219394829271) \n",
+ " (256786473, 354520341, 0) \n",
+ " 51.949163 \n",
+ " 7.610219 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 8806 \n",
+ " 2705735628 \n",
+ " 278156525 \n",
+ " 50 \n",
+ " LINESTRING (7.64778 51.94307, 7.64762 51.94323... \n",
+ " 5dd68af544ea856b70e1473b \n",
+ " 2019-11-20T15:37:59 \n",
+ " POINT (7.64769 51.94314) \n",
+ " 32.497917 \n",
+ " % \n",
+ " 4.000000 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.943147653944, 7.647706916684285) \n",
+ " (2705735628, 278156525, 0) \n",
+ " 51.943148 \n",
+ " 7.647707 \n",
+ " \n",
+ " \n",
+ " 8807 \n",
+ " 2705735628 \n",
+ " 278156525 \n",
+ " 50 \n",
+ " LINESTRING (7.64778 51.94307, 7.64762 51.94323... \n",
+ " 5dd68af544ea856b70e1473c \n",
+ " 2019-11-20T15:38:04 \n",
+ " POINT (7.64769 51.94314) \n",
+ " 31.764705 \n",
+ " % \n",
+ " 4.560711 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.94314874045318, 7.64770587809455) \n",
+ " (2705735628, 278156525, 0) \n",
+ " 51.943149 \n",
+ " 7.647706 \n",
+ " \n",
+ " \n",
+ " 8808 \n",
+ " 2705735628 \n",
+ " 278156525 \n",
+ " 50 \n",
+ " LINESTRING (7.64778 51.94307, 7.64762 51.94323... \n",
+ " 5dd68af544ea856b70e1473d \n",
+ " 2019-11-20T15:38:09 \n",
+ " POINT (7.64769 51.94314) \n",
+ " 31.924665 \n",
+ " % \n",
+ " 3.208802 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.94314874045318, 7.64770587809455) \n",
+ " (2705735628, 278156525, 0) \n",
+ " 51.943149 \n",
+ " 7.647706 \n",
+ " \n",
+ " \n",
+ " 8809 \n",
+ " 2705735628 \n",
+ " 278156525 \n",
+ " 50 \n",
+ " LINESTRING (7.64778 51.94307, 7.64762 51.94323... \n",
+ " 5dd68af544ea856b70e1473e \n",
+ " 2019-11-20T15:38:14 \n",
+ " POINT (7.64769 51.94314) \n",
+ " 32.156863 \n",
+ " % \n",
+ " 4.000000 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.94314874045318, 7.64770587809455) \n",
+ " (2705735628, 278156525, 0) \n",
+ " 51.943149 \n",
+ " 7.647706 \n",
+ " \n",
+ " \n",
+ " 8810 \n",
+ " 2705735628 \n",
+ " 278156525 \n",
+ " 50 \n",
+ " LINESTRING (7.64778 51.94307, 7.64762 51.94323... \n",
+ " 5dd68af544ea856b70e1473f \n",
+ " 2019-11-20T15:38:19 \n",
+ " POINT (7.64771 51.94315) \n",
+ " 73.284310 \n",
+ " % \n",
+ " 4.000000 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " (51.94314918856225, 7.6477054497488925) \n",
+ " (2705735628, 278156525, 0) \n",
+ " 51.943149 \n",
+ " 7.647705 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "8811 rows × 70 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " u v maxspeed \\\n",
+ "0 256786473 354520341 50 \n",
+ "1 256786473 354520341 50 \n",
+ "2 256786473 354520341 50 \n",
+ "3 256786473 354520341 50 \n",
+ "4 256786473 354520341 50 \n",
+ "... ... ... ... \n",
+ "8806 2705735628 278156525 50 \n",
+ "8807 2705735628 278156525 50 \n",
+ "8808 2705735628 278156525 50 \n",
+ "8809 2705735628 278156525 50 \n",
+ "8810 2705735628 278156525 50 \n",
+ "\n",
+ " geometry_x \\\n",
+ "0 LINESTRING (7.61014 51.94915, 7.61078 51.94926... \n",
+ "1 LINESTRING (7.61014 51.94915, 7.61078 51.94926... \n",
+ "2 LINESTRING (7.61014 51.94915, 7.61078 51.94926... \n",
+ "3 LINESTRING (7.61014 51.94915, 7.61078 51.94926... \n",
+ "4 LINESTRING (7.61014 51.94915, 7.61078 51.94926... \n",
+ "... ... \n",
+ "8806 LINESTRING (7.64778 51.94307, 7.64762 51.94323... \n",
+ "8807 LINESTRING (7.64778 51.94307, 7.64762 51.94323... \n",
+ "8808 LINESTRING (7.64778 51.94307, 7.64762 51.94323... \n",
+ "8809 LINESTRING (7.64778 51.94307, 7.64762 51.94323... \n",
+ "8810 LINESTRING (7.64778 51.94307, 7.64762 51.94323... \n",
+ "\n",
+ " id time geometry_y \\\n",
+ "0 5e4a353b3965f368945da86f 2020-01-08T09:21:42 POINT (7.61039 51.94918) \n",
+ "1 5e4a353b3965f368945da870 2020-01-08T09:21:47 POINT (7.61123 51.94930) \n",
+ "2 580c4f13e4b01fb1c08caaac 2016-10-19T08:29:13 POINT (7.61070 51.94922) \n",
+ "3 57c7ce19e4b0f05fc1c87b3b 2016-08-19T05:36:43 POINT (7.61098 51.94931) \n",
+ "4 57c7ce07e4b0f05fc1c86eb4 2016-08-12T05:39:34 POINT (7.61022 51.94916) \n",
+ "... ... ... ... \n",
+ "8806 5dd68af544ea856b70e1473b 2019-11-20T15:37:59 POINT (7.64769 51.94314) \n",
+ "8807 5dd68af544ea856b70e1473c 2019-11-20T15:38:04 POINT (7.64769 51.94314) \n",
+ "8808 5dd68af544ea856b70e1473d 2019-11-20T15:38:09 POINT (7.64769 51.94314) \n",
+ "8809 5dd68af544ea856b70e1473e 2019-11-20T15:38:14 POINT (7.64769 51.94314) \n",
+ "8810 5dd68af544ea856b70e1473f 2019-11-20T15:38:19 POINT (7.64771 51.94315) \n",
+ "\n",
+ " Engine Load.value Engine Load.unit GPS Accuracy.value ... \\\n",
+ "0 65.953050 % 5.997796 ... \n",
+ "1 6.444955 % 6.656403 ... \n",
+ "2 61.830062 % 4.000000 ... \n",
+ "3 48.577291 % 5.000000 ... \n",
+ "4 33.039031 % 10.000000 ... \n",
+ "... ... ... ... ... \n",
+ "8806 32.497917 % 4.000000 ... \n",
+ "8807 31.764705 % 4.560711 ... \n",
+ "8808 31.924665 % 3.208802 ... \n",
+ "8809 32.156863 % 4.000000 ... \n",
+ "8810 73.284310 % 4.000000 ... \n",
+ "\n",
+ " O2 Lambda Current.value O2 Lambda Current.unit \\\n",
+ "0 NaN NaN \n",
+ "1 NaN NaN \n",
+ "2 80.176042 A \n",
+ "3 NaN NaN \n",
+ "4 NaN NaN \n",
+ "... ... ... \n",
+ "8806 NaN NaN \n",
+ "8807 NaN NaN \n",
+ "8808 NaN NaN \n",
+ "8809 NaN NaN \n",
+ "8810 NaN NaN \n",
+ "\n",
+ " Short-Term Fuel Trim 1.value Short-Term Fuel Trim 1.unit \\\n",
+ "0 NaN NaN \n",
+ "1 NaN NaN \n",
+ "2 NaN NaN \n",
+ "3 NaN NaN \n",
+ "4 NaN NaN \n",
+ "... ... ... \n",
+ "8806 NaN NaN \n",
+ "8807 NaN NaN \n",
+ "8808 NaN NaN \n",
+ "8809 NaN NaN \n",
+ "8810 NaN NaN \n",
+ "\n",
+ " Long-Term Fuel Trim 1.value Long-Term Fuel Trim 1.unit \\\n",
+ "0 NaN NaN \n",
+ "1 NaN NaN \n",
+ "2 NaN NaN \n",
+ "3 NaN NaN \n",
+ "4 NaN NaN \n",
+ "... ... ... \n",
+ "8806 NaN NaN \n",
+ "8807 NaN NaN \n",
+ "8808 NaN NaN \n",
+ "8809 NaN NaN \n",
+ "8810 NaN NaN \n",
+ "\n",
+ " MM_coords Edge \\\n",
+ "0 (51.94919142268261, 7.610389676216284) (256786473, 354520341, 0) \n",
+ "1 (51.949328425609245, 7.611215110806332) (256786473, 354520341, 0) \n",
+ "2 (51.949240945044465, 7.610688040944025) (256786473, 354520341, 0) \n",
+ "3 (51.94929112692097, 7.610990384454575) (256786473, 354520341, 0) \n",
+ "4 (51.94916315911404, 7.610219394829271) (256786473, 354520341, 0) \n",
+ "... ... ... \n",
+ "8806 (51.943147653944, 7.647706916684285) (2705735628, 278156525, 0) \n",
+ "8807 (51.94314874045318, 7.64770587809455) (2705735628, 278156525, 0) \n",
+ "8808 (51.94314874045318, 7.64770587809455) (2705735628, 278156525, 0) \n",
+ "8809 (51.94314874045318, 7.64770587809455) (2705735628, 278156525, 0) \n",
+ "8810 (51.94314918856225, 7.6477054497488925) (2705735628, 278156525, 0) \n",
+ "\n",
+ " Latitude Longitude \n",
+ "0 51.949191 7.610390 \n",
+ "1 51.949328 7.611215 \n",
+ "2 51.949241 7.610688 \n",
+ "3 51.949291 7.610990 \n",
+ "4 51.949163 7.610219 \n",
+ "... ... ... \n",
+ "8806 51.943148 7.647707 \n",
+ "8807 51.943149 7.647706 \n",
+ "8808 51.943149 7.647706 \n",
+ "8809 51.943149 7.647706 \n",
+ "8810 51.943149 7.647705 \n",
+ "\n",
+ "[8811 rows x 70 columns]"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "edg = full_tracks['Edge']\n",
+ "\n",
+ "#empty list to append edge[0] and edge[1] as u and v as in the osm df\n",
+ "v =[]\n",
+ "u=[]\n",
+ "\n",
+ "for edge in edg:\n",
+ " uu = edge[0]\n",
+ " vv = edge[1]\n",
+ " u.append(uu)\n",
+ " v.append(vv)\n",
+ " \n",
+ "full_tracks['u']=u\n",
+ "full_tracks['v']=v\n",
+ "\n",
+ "df_with_maxspeed=tracksdf_osm.loc[0:,[\"u\",\"v\",\"maxspeed\",\"geometry\"]]\n",
+ "\n",
+ "#adding maximum speed limit for each edges from osm network to the data\n",
+ "\n",
+ "final_df=pd.merge(df_with_maxspeed,full_tracks, on=['u','v'], how='inner')\n",
+ "final_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#exporting data for remapping\n",
+ "final_df.to_csv(\"F:/full_tracks.csv\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#function for parsing the remapped shapefile and making it into a dataframe\n",
+ "\n",
+ "def read_shapefile(shp_path):\n",
+ " \n",
+ " \"\"\"\n",
+ " DOC STRING\n",
+ " \n",
+ " Parameters:\n",
+ " shp_path- path location to the shapefile which needs to be parsed\n",
+ " \n",
+ " Usage:\n",
+ " parses the shapefile and makes it into a dataframe\n",
+ " \n",
+ " Output:\n",
+ " Pandas Dataframe which was created using the shapefile\n",
+ " \n",
+ " \"\"\"\n",
+ "\n",
+ " import shapefile\n",
+ "\n",
+ " #read file, parse out the records and shapes\n",
+ " sf = shapefile.Reader(shp_path)\n",
+ " fields = [x[0] for x in sf.fields][1:]\n",
+ " records = sf.records()\n",
+ " shps = [s.points for s in sf.shapes()]\n",
+ " #write into a dataframe\n",
+ " df = pd.DataFrame(columns=fields, data=records)\n",
+ " df = df.assign(coords=shps)\n",
+ " return df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#applying read_shapefile() to the remapped track data\n",
+ "\n",
+ "tracks= read_shapefile(\"F:/max_50/remap_max_50.shp\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#FUNCTIONS FOR ANALYSIS\n",
+ "\n",
+ "\n",
+ "#cars waiting(stopped car) in the segment\n",
+ "def no_of_waiting_cars(edge):\n",
+ " \n",
+ " \"\"\"\n",
+ " DOC STRING\n",
+ " \n",
+ " Parameters:\n",
+ " edge- ID of the road segment\n",
+ " \n",
+ " Usage:\n",
+ " returns the no of cars that stopped (speed < 5km) while passing through this segment\n",
+ " \n",
+ " Output:\n",
+ " Total no of cars which has stopped atleast once while travelling through a segment (Integer)\n",
+ " \n",
+ " \"\"\"\n",
+ " \n",
+ " uniq = tracks[(tracks['id_2'] == edge)] #id_2 is the edge id of our defined network \n",
+ " uniq1= uniq[(uniq['Speed.valu'] < 5)]['track.id'].unique()\n",
+ " num1 = len(uniq1)\n",
+ " return num1 \n",
+ " \n",
+ "#average speed of tracks\n",
+ "def avg_speed(edge):\n",
+ " \n",
+ " \"\"\"\n",
+ " DOC STRING\n",
+ " \n",
+ " Parameters:\n",
+ " edge- ID of the road segment\n",
+ " \n",
+ " Usage:\n",
+ " returns the average speed of the cars which has passed through this segment\n",
+ " \n",
+ " Output:\n",
+ " Average speed of the cars which has passed through this segment (Float)\n",
+ " \n",
+ " \"\"\"\n",
+ " speed = tracks[(tracks['id_2'] == edge)]['Speed.valu'].mean() #id_2 is the edge id of our defined network\n",
+ " return speed\n",
+ "\n",
+ "#no.of.stops\n",
+ "def no_of_stops(edge, trackid):\n",
+ " \n",
+ " \"\"\"\n",
+ " DOC STRING\n",
+ " \n",
+ " Parameters:\n",
+ " edge- ID of the road segment\n",
+ " track_id- ID of the track (not ID of a particular point in the track) \n",
+ " \n",
+ " Usage:\n",
+ " returns the number of stops made by a single track while travelling through this segment\n",
+ " \n",
+ " Output:\n",
+ " Number of stops made by a single track while travelling through this segment (Integer)\n",
+ " \n",
+ " Note:\n",
+ " In this function, it is assumed that a stop a constitutes when the speed of a car is less than 5km/hr\n",
+ " If the speed is less than 5 km/hr consecutively for a single track, then all the consecutive speed \n",
+ " which is less than 5 km/hr is considered as a single stop instead of a number of stops\n",
+ " \n",
+ " \"\"\"\n",
+ " \n",
+ " \n",
+ " count = 0\n",
+ " track_id= tracks[tracks['track.id']==trackid]\n",
+ " track_seg= track_id[(track_id['id_2'] == edge)] #id_2 is the edge id of our defined network\n",
+ " list_of_speedS = list(track_seg['Speed.valu'])\n",
+ " for i in range(len(list_of_speedS)):\n",
+ " if i!=0 and list_of_speedS[i]<5:\n",
+ " if list_of_speedS[i-1]<5:\n",
+ " continue\n",
+ " else:\n",
+ " count=count+1 \n",
+ " elif i==0 and list_of_speedS[i]<5:\n",
+ " count=count+1\n",
+ " return count\n",
+ "\n",
+ "#no.of.cars.passing.the.segment\n",
+ "def no_of_cars_passing(edge):\n",
+ " \n",
+ " \n",
+ " \"\"\"\n",
+ " DOC STRING\n",
+ " \n",
+ " Parameters:\n",
+ " edge- ID of the road segment\n",
+ " \n",
+ " Usage:\n",
+ " returns the number of cars that has traversed through this segment\n",
+ " \n",
+ " Output:\n",
+ " Total number of cars that has traversed through this segment (Integer)\n",
+ " \n",
+ " \"\"\"\n",
+ " \n",
+ " no_of_cars = tracks[(tracks['id_2'] == edge)]['track.id'].unique() #id_2 is the edge id of our defined network\n",
+ " no = len(no_of_cars)\n",
+ " return no\n",
+ "\n",
+ "#maxspeed exceedance\n",
+ "def speed_limit(edge):\n",
+ " \n",
+ " \"\"\"\n",
+ " DOC STRING\n",
+ " \n",
+ " Parameters:\n",
+ " edge- ID of the road segment\n",
+ " \n",
+ " Usage:\n",
+ " returns the speed limit for the given segment\n",
+ " \n",
+ " Output:\n",
+ " Speed limit for the given segment (Integer)\n",
+ " \n",
+ " \"\"\"\n",
+ " \n",
+ " max_speed = tracks[(tracks['id_2'] == edge)]['maxspeed'].unique() #id_2 is the edge id of our defined network\n",
+ " max_speed= float(max_speed[0]) #maxspeed is the speed limit of the road segment\n",
+ " return max_speed\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#lists of each track id and segment id in the data\n",
+ "\n",
+ "track_numbers=list(tracks['track.id'].unique())\n",
+ "segment_numbers= list(tracks['id_2'].unique())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#performing no_of_stops() to determine the number of stops made by all tracks in all segments\n",
+ "\n",
+ "segment_stops=[]\n",
+ "for i in segment_numbers:\n",
+ " stop =0\n",
+ " for j in track_numbers:\n",
+ " a=no_of_stops(i,j)\n",
+ " stop=stop + a\n",
+ " segment_stops.append(stop)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#creating new dataframe based for information regarding segments\n",
+ "\n",
+ "Segment_df = pd.DataFrame(\n",
+ " {'segment_id': segment_numbers,\n",
+ " 'No_of_stops': segment_stops,\n",
+ " })"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#performing no_of_cars_passing(), avg_speed(), no_of_waiting_cars(), speed_limit() \n",
+ "#to determine segment related information and appending it to the segment dataframe\n",
+ "\n",
+ "segm_traversing=[]\n",
+ "mean_speed=[]\n",
+ "waiting_cars=[]\n",
+ "geometry = []\n",
+ "max_speed_limit=[]\n",
+ "\n",
+ "for i in segment_numbers:\n",
+ " segm_traversing.append(no_of_cars_passing(i))\n",
+ " mean_speed.append(avg_speed(i))\n",
+ " waiting_cars.append(no_of_waiting_cars(i))\n",
+ " geom=tracks['geometry_x'].unique()\n",
+ " geometry.append(geom)\n",
+ " max_speed_limit.append(speed_limit(i))\n",
+ " \n",
+ "Segment_df['Cars_traversing']=segm_traversing\n",
+ "Segment_df['Mean_speed']=mean_speed\n",
+ "Segment_df['waiting_cars']=waiting_cars\n",
+ "Segment_df['Geometry']=geometry\n",
+ "Segment_df['Max_spd_limit']=max_speed_limit"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " segment_id \n",
+ " No_of_stops \n",
+ " Cars_traversing \n",
+ " Mean_speed \n",
+ " waiting_cars \n",
+ " Geometry \n",
+ " Max_spd_limit \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 58 \n",
+ " 3 \n",
+ " 34 \n",
+ " 36.970931 \n",
+ " 3 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 57 \n",
+ " 0 \n",
+ " 34 \n",
+ " 42.215972 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 16 \n",
+ " 0 \n",
+ " 5 \n",
+ " 35.180043 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 34 \n",
+ " 0 \n",
+ " 16 \n",
+ " 43.091033 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 67 \n",
+ " 5 \n",
+ " 12 \n",
+ " 33.084823 \n",
+ " 4 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 69 \n",
+ " 11 \n",
+ " 0 \n",
+ " 5 \n",
+ " 51.757365 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ " 70 \n",
+ " 9 \n",
+ " 0 \n",
+ " 5 \n",
+ " 53.403321 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ " 71 \n",
+ " 2 \n",
+ " 4 \n",
+ " 16 \n",
+ " 31.404686 \n",
+ " 4 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ " 72 \n",
+ " 40 \n",
+ " 0 \n",
+ " 3 \n",
+ " 72.666667 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 70.0 \n",
+ " \n",
+ " \n",
+ " 73 \n",
+ " 70 \n",
+ " 0 \n",
+ " 3 \n",
+ " 52.600000 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "74 rows × 7 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " segment_id No_of_stops Cars_traversing Mean_speed waiting_cars \\\n",
+ "0 58 3 34 36.970931 3 \n",
+ "1 57 0 34 42.215972 0 \n",
+ "2 16 0 5 35.180043 0 \n",
+ "3 34 0 16 43.091033 0 \n",
+ "4 67 5 12 33.084823 4 \n",
+ ".. ... ... ... ... ... \n",
+ "69 11 0 5 51.757365 0 \n",
+ "70 9 0 5 53.403321 0 \n",
+ "71 2 4 16 31.404686 4 \n",
+ "72 40 0 3 72.666667 0 \n",
+ "73 70 0 3 52.600000 0 \n",
+ "\n",
+ " Geometry Max_spd_limit \n",
+ "0 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "1 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "2 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "3 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "4 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ ".. ... ... \n",
+ "69 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "70 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "71 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "72 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 70.0 \n",
+ "73 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "\n",
+ "[74 rows x 7 columns]"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Segment dataframe containing various information about all segments\n",
+ "Segment_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#importing matplot for creating charts for visualisation\n",
+ "\n",
+ "import matplotlib.pyplot as plt; plt.rcdefaults()\n",
+ "import matplotlib.pyplot as plt"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAABL0AAANfCAYAAAA8aq+mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdebiXdZ3/8deX7XDYF2UVAUEEVFwggZwRRMgFHdHMrBkVU1vUMcko1JDFBR3Xalxm1NTULEx0XBoNIQhHKZKc7Mo9IBs1DQgJZP/+/vDi/DyyH5BDd4/HdZ3r6nt/7+99v+/jubq8nn7u+1sql8vlAAAAAECB1KntAQAAAABgRxO9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AICPzQ9+8IPceOONtT3GLmPkyJHp0qVLbY+RLl26ZOTIkVWv33zzzYwfPz7PP//8BvuOHz8+pVJpJ04HALBj1KvtAQCA4vrBD36Q3/72t7ngggtqexQ+5KGHHkqzZs2qXr/55puZMGFCunTpkgMPPLDavmeddVaOOuqonT0iAMB2E70AAP7OHHTQQVu97x577JE99tjjY5ym9qxevTqlUin16vlXYgAoIrc3AgA18u677+aLX/xiOnXqlIqKiuy+++459NBD89RTTyVJBg8enMcffzwLFixIqVSq+llv0aJFOeecc9KxY8c0aNAge+21Vy655JKsXLmy2nlKpVLOO++8/Md//Ed69OiRioqK9O7dOz/84Q+r7bd8+fJ8/etfT9euXdOwYcO0atUq/fr1y/3337/F6zjnnHPSu3fvNGnSJG3atMmQIUMya9asavvNnz8/pVIp1157ba6//vp07do1TZo0ycCBAzN79uwNjnvXXXdln332SUVFRXr16pXvf//7W/V7HT16dJo3b561a9dWbfvXf/3XlEqlXHPNNVXbFi5cmDp16uS73/1ukmTFihW58MILc+CBB6Z58+Zp1apVBg4cmP/6r//a4Bwfvr1xxowZ+cQnPpEkOeOMM6r+OY0fPz7Jxm9v7NKlS4499tg88cQTOfjgg1NZWZmePXvme9/73gbnevrppzNw4MA0bNgwHTt2zNixY3P77benVCpl/vz5W/x9/OIXv8hxxx2X1q1bp2HDhunWrVu1lYOvvfZazjjjjOy9995p1KhROnbsmOOOOy4vvPBCtePMmDEjpVIp99xzTy688MJ07NgxFRUVee2112r8twMA7Nr8Zy0AoEZOPfXUzJ07N1dccUV69OiRv/zlL5k7d24WLlyYJLn55pvzxS9+Ma+//noeeuihap9dsWJFDj/88Lz++uuZMGFC+vTpk1mzZmXSpEl5/vnn8/jjj1fb/5FHHsnPfvazTJw4MY0bN87NN9+cz33uc6lXr15OOumkJMnXvva13HPPPbn88stz0EEHZdmyZfntb39bNc+mLFq0KEkybty4tGvXLn/961/z0EMPZfDgwZk2bVoGDx5cbf+bbropPXv2rHpW2dixY3PMMcdk3rx5ad68eZIPgtcZZ5yR448/Ptddd12WLFmS8ePHZ+XKlalTZ/P/zXHo0KG59tpr88tf/jIDBw5Mkjz11FOprKzM1KlTM3r06CTJtGnTUi6XM3To0CTJypUrs2jRonz9619Px44ds2rVqjz11FM58cQTc+edd+a0007b6PkOPvjg3HnnnTnjjDPyrW99K8OHD0+SLa7u+t///d9ceOGFGTNmTNq2bZvbb789Z555Zrp3757DDjssSfKb3/wmw4YNS48ePXL33XenUaNGufXWW3Pvvfdu9tjrPfnkkznuuOPSq1evXH/99dlzzz0zf/78/PSnP63a580330zr1q1z1VVXZffdd8+iRYty9913p3///vn1r3+dffbZp9oxL7roogwcODC33npr6tSpkzZt2tT4bwcA2MWVAQBqoEmTJuULLrhgs/sMHz683Llz5w2233rrreUk5cmTJ1fbfvXVV5eTlH/6059WbUtSrqysLL/99ttV29asWVPu2bNnuXv37lXb9ttvv/KIESNqeDX/35o1a8qrV68uH3HEEeUTTjihavu8efPKScr7779/ec2aNVXbf/nLX5aTlO+///5yuVwur127ttyhQ4fywQcfXF63bl3VfvPnzy/Xr19/o7+PD1u2bFm5QYMG5YkTJ5bL5XL5j3/8YzlJ+Zvf/Ga5srKyvGLFinK5XC6fffbZ5Q4dOmzxOs4888zyQQcdVO29zp07l08//fSq13PmzCknKd95550bHGfcuHHlj/4rY+fOncsNGzYsL1iwoGrb+++/X27VqlX5S1/6UtW2z3zmM+XGjRuX33333apta9euLffu3bucpDxv3rzN/i66detW7tatW/n999/f7H4ftmbNmvKqVavKe++9d3nUqFFV23/2s5+Vk5QPO+ywDT6zo/52AIBdi9sbAYAaOeSQQ3LXXXfl8ssvz+zZs7N69eqt/uz06dPTuHHjqlVa662/5W7atGnVth9xxBFp27Zt1eu6devms5/9bF577bX88Y9/rJrnv//7vzNmzJjMmDEj77///lbPc+utt+bggw9Ow4YNU69evdSvXz/Tpk3Liy++uMG+w4cPT926date9+nTJ0myYMGCJMnLL7+cN998M5///Oer3RbYuXPnfPKTn9ziLI0aNcrAgQOrbhOdOnVqWrRokdGjR2fVqlV5+umnk3yw+mv9Kq/1HnjggRx66KFp0qRJ1XXccccdG72O7XXggQdmzz33rHrdsGHD9OjRo+r3kCQzZ87MkCFDsttuu1Vtq1OnTk4++eQtHv+VV17J66+/njPPPDMNGzbc5H5r1qzJlVdemd69e6dBgwapV69eGjRokFdffXWj1/3pT396g23b87cDAOy6RC8AoEZ+9KMf5fTTT8/tt9+egQMHplWrVjnttNPy9ttvb/GzCxcuTLt27TZ4VlSbNm1Sr169DW4ra9eu3QbHWL9t/b7f+c538s1vfjMPP/xwDj/88LRq1SojRozIq6++utlZrr/++nzlK19J//798+CDD2b27NmZM2dOjjrqqI3Gj9atW1d7XVFRkSRV+66fZ3Mzb8nQoUMze/bsLFu2LE899VSGDBmS1q1bp2/fvnnqqacyb968zJs3r1r0mjJlSk4++eR07Ngx9957b5599tnMmTMnX/jCF7JixYqtOu+2+OjvIfngd/Hh39nChQurxcr1Nrbto959990kW77N8mtf+1rGjh2bESNG5NFHH80vfvGLzJkzJwcccMBG//m1b99+g201/dsBAHZtohcAUCO77bZbbrzxxsyfPz8LFizIpEmTMmXKlKrVWpvTunXr/OlPf0q5XK62/Z133smaNWuqrQxKstGQtn7b+vjSuHHjTJgwIS+99FLefvvt3HLLLZk9e3aOO+64zc5y7733ZvDgwbnlllsyfPjw9O/fP/369cvSpUu3eB2burYtzbwlRxxxRFatWpWf//znmTZtWoYNG1a1ferUqZk6dWrV6w9fR9euXfOjH/0oI0aMyIABA9KvX78NvhhgZ1r/z/mjtub3sPvuuydJ1Uq+Tbn33ntz2mmn5corr8yRRx6ZQw45JP369cuf//znje7/0dCa1PxvBwDYtYleAMB223PPPXPeeedl2LBhmTt3btX2j678We+II47IX//61zz88MPVtq//hsMPx5zkg9sdPxxP1q5dmx/96Efp1q3bRlcCtW3bNiNHjsznPve5vPzyy1m+fPkmZy+VSlWrtdb7zW9+k2effXYzV7xp++yzT9q3b5/777+/WtRbsGBBnnnmma06xiGHHJJmzZrlxhtvzNtvv10VvYYOHZpf//rXmTx5cnr37p0OHTpUu44GDRpUizpvv/32Rr+98aM+ulptRxk0aFCmT59eLUCtW7cuDzzwwBY/26NHj3Tr1i3f+973NhvuNvbP7/HHH8///d//1WjmbfnbAQB2bb69EQDYZkuWLMnhhx+ez3/+8+nZs2eaNm2aOXPm5IknnsiJJ55Ytd/++++fKVOm5JZbbknfvn1Tp06d9OvXL6eddlpuuummnH766Zk/f37233//PP3007nyyitzzDHHbPCsqt122y1DhgzJ2LFjq7698aWXXsoPf/jDqn369++fY489Nn369EnLli3z4osv5p577snAgQPTqFGjTV7Lsccem8suuyzjxo3LoEGD8vLLL2fixInp2rVr1qxZs82/mzp16uSyyy7LWWedlRNOOCFnn312/vKXv2T8+PFbfXtj3bp1M2jQoDz66KPp2rVrunXrliQ59NBDU1FRkWnTpuX888/f4DqmTJmSc845JyeddFLeeOONXHbZZWnfvv0Wb9Pr1q1bKisrc99996VXr15p0qRJOnToUC2q1cQll1ySRx99NEcccUQuueSSVFZW5tZbb82yZcuSZIvfZHnTTTfluOOOy4ABAzJq1Kjsueee+cMf/pAnn3wy9913X9V133XXXenZs2f69OmT5557Ltdcc80Wb4v8sJr+7QAAu7jafpI+APC3Z8WKFeUvf/nL5T59+pSbNWtWrqysLO+zzz7lcePGlZctW1a136JFi8onnXRSuUWLFuVSqVTtWwAXLlxY/vKXv1xu3759uV69euXOnTuXL7rooqpvJ1wvSfncc88t33zzzeVu3bqV69evX+7Zs2f5vvvuq7bfmDFjyv369Su3bNmyXFFRUd5rr73Ko0aNKv/5z3/e7LWsXLmy/PWvf73csWPHcsOGDcsHH3xw+eGHHy6ffvrp1b5pcf23N15zzTUbHCNJedy4cdW23X777eW999673KBBg3KPHj3K3/ve9zY45uZ8+9vfLicpn3322dW2Dxs2rJyk/Mgjj2zwmauuuqrcpUuXckVFRblXr17l2267bZPfvvjhb28sl8vl+++/v9yzZ89y/fr1q13Ppj4/fPjwDc4/aNCg8qBBg6ptmzVrVrl///7lioqKcrt27cqjR4+u+pbOv/zlL1v8PTz77LPlo48+uty8efNyRUVFuVu3btW+lXHx4sXlM888s9ymTZtyo0aNyv/wD/9QnjVr1gazrP/2xgceeGCDc9T0bwcA2LWVyuWPPEwDAGAXUiqVcu655+bf//3fa3sUdpBPfepTmT9/fl555ZXaHgUAKDC3NwIA8LH52te+loMOOiidOnXKokWLct9992Xq1Km54447ans0AKDgRC8AAD42a9euzaWXXpq33347pVIpvXv3zj333JN/+Zd/qe3RAICCc3sjAAAAAIWz+a/MAQAAAIC/QaIXAAAAAIUjegEAAABQOLv8g+zXrVuXN998M02bNk2pVKrtcQAAAACoJeVyOUuXLk2HDh1Sp87m13Lt8tHrzTffTKdOnWp7DAAAAAB2EW+88Ub22GOPze6zy0evpk2bJvngYpo1a1bL0wAAAABQW95777106tSpqhdtzi4fvdbf0tisWTPRCwAAAICtegSWB9kDAAAAUDiiFwAAAACFI3oBAAAAUDi7/DO9AAAAgGJat25dVq1aVdtjsIupX79+6tatu93HEb0AAACAnW7VqlWZN29e1q1bV9ujsAtq0aJF2rVrt1UPrN8U0QsAAADYqcrlct56663UrVs3nTp1Sp06nr7EB8rlcpYvX5533nknSdK+ffsaH0v0AgAAAHaqNWvWZPny5enQoUMaNWpU2+Owi6msrEySvPPOO2nTpk2Nb3WUUgEAAICdau3atUmSBg0a1PIk7KrWx9DVq1fX+BiiFwAAAFArtud5TRTbjvjbEL0AAAAAKBzRCwAAAOBvyMMPP5zu3bunbt26ueCCC2p7nF2WB9kDAAAAu4QuYx7fqeebf9Xwbdp/5MiRufvuuzNp0qSMGTOmavvDDz+cE044IeVyeUePuFFf+tKXcsYZZ+T8889P06ZNa3ycGTNm5PDDD8/ixYvTokWLHTjhrsFKLwAAAICt1LBhw1x99dVZvHhxrZz/r3/9a955550ceeSR6dChw3ZFr6ITvQAAAAC20tChQ9OuXbtMmjRpk/s8+OCD2XfffVNRUZEuXbrkuuuu2+rjL168OKeddlpatmyZRo0a5eijj86rr76a5IOVWesj15AhQ1IqlTJjxozNHm/BggU57rjj0rJlyzRu3Dj77rtvfvKTn2T+/Pk5/PDDkyQtW7ZMqVTKyJEjkyQrV67M+eefnzZt2qRhw4b5h3/4h8yZM6fqmDNmzEipVMrjjz+eAw44IA0bNkz//v3zwgsvbPG8O5PoBQAAALCV6tatmyuvvDLf/e5388c//nGD95977rmcfPLJOeWUU/LCCy9k/PjxGTt2bO66666tOv7IkSPzq1/9Ko888kieffbZlMvlHHPMMVm9enU++clP5uWXX07yQVh766238slPfnKzxzv33HOzcuXK/PznP88LL7yQq6++Ok2aNEmnTp3y4IMPJklefvnlvPXWW/n2t7+dJPnGN76RBx98MHfffXfmzp2b7t2758gjj8yiRYuqHXv06NG59tprM2fOnLRp0yb/9E//lNWrV2/2vDuTZ3oBAAAAbIMTTjghBx54YMaNG5c77rij2nvXX399jjjiiIwdOzZJ0qNHj/zud7/LNddcU7WSalNeffXVPPLII/mf//mfqph13333pVOnTnn44Yfzmc98Jm3atEmStGrVKu3atdvirH/4wx/y6U9/Ovvvv3+SZK+99qp6r1WrVkmSNm3aVD3Ta9myZbnlllty11135eijj06S3HbbbZk6dWruuOOOjB49uurz48aNy7Bhw5Ikd999d/bYY4889NBDOfnkkzd73p3FSi8AAACAbXT11Vfn7rvvzu9+97tq21988cUceuih1bYdeuihefXVV7N27drNHvPFF19MvXr10r9//6ptrVu3zj777JMXX3yxRnOef/75ufzyy3PooYdm3Lhx+c1vfrPZ/V9//fWsXr262jXUr18/hxxyyAYzDBw4sOp/t2rVqtqc23rej4PoBQAAALCNDjvssBx55JG5+OKLq20vl8splUobbNsam9pvY8fcWmeddVZ+//vf59RTT80LL7yQfv365bvf/e4WZ9jYNWzNDOv32dbzfhxELwAAAIAamDRpUh599NE888wzVdt69+6dp59+utp+zzzzTHr06JG6detu9ni9e/fOmjVr8otf/KJq28KFC/PKK6+kV69eNZ6zU6dO+fKXv5wpU6bkwgsvzG233ZYkadCgQZJUW4HWvXv3NGjQoNo1rF69Or/61a82mGH27NlV/3vx4sV55ZVX0rNnzy2ed2fxTC8AAACAGujTp0/++Z//udoKpgsvvDCf+MQnctlll+Wzn/1snn322fz7v/97br755i0eb++9987xxx+fs88+O//xH/+Rpk2bZsyYMenYsWOOP/74Gs14wQUX5Oijj06PHj2yePHiTJ8+vSpede7cOaVSKY899liOOeaYVFZWpkmTJvnKV76S0aNHp1WrVtlzzz3zb//2b1m+fHnOPPPMaseeOHFiWrdunbZt2+aSSy7JbrvtlhEjRmzxvDuLlV4AAAAANXTZZZdVuy3x4IMPzuTJk/PDH/4w++23Xy699NJMnDhxiw+xX+/OO+9M3759c+yxx2bgwIEpl8v5yU9+kvr169dovrVr1+bcc89Nr169ctRRR2WfffapCnAdO3bMhAkTMmbMmLRt2zbnnXdekuSqq67Kpz/96Zx66qk5+OCD89prr+XJJ59My5Ytqx37qquuyle/+tX07ds3b731Vh555JFqq8c2dd6dpVTe2htLa8l7772X5s2bZ8mSJWnWrFltjwMAAABspxUrVmTevHnp2rVrGjZsWNvjsI1mzJiRww8/PIsXL6761scdbVN/I9vSiaz0AgAAAKBwRC8AAACAnWDWrFlp0qTJJn9q4uijj97k8a688sodfAV/WzzIHgAAAGAn6NevX55//vkdeszbb78977///kbfa9Wq1Q4913qDBw/OLv60rCSiFwAAAMBOUVlZme7du+/QY3bs2HGHHq9I3N4IAAAAQOGIXgAAAAAUzjZFr+nTp+cLX/hCevbsmcaNG6djx445/vjj89xzz1Xbb+TIkSmVShv89OzZc4cODwAAAAAbs03P9LrllluycOHCfPWrX03v3r3z7rvv5rrrrsuAAQPy5JNPZsiQIVX7VlZWZvr06dU+X1lZuWOmBgAAAIDN2KboddNNN6VNmzbVth111FHp3r17rrzyymrRq06dOhkwYMCOmRIAAAAAtsE23d740eCVJE2aNEnv3r3zxhtv7LChAAAAAIpu8ODBueCCCza7z1133ZUWLVrspImKZZtWem3MkiVLMnfu3GqrvJLk/fffT7t27fLuu++mffv2GTFiRCZOnJhWrVpt7ykBAACAIhrffCefb8nOPd9HTJkyJfXr16963aVLl1xwwQXVQthnP/vZHHPMMbUx3t+87Y5e5557bpYtW5ZLLrmkatsBBxyQAw44IPvtt1+SZObMmbnhhhsybdq0zJkzJ02aNNnk8VauXJmVK1dWvX7vvfe2d0QAAACAXc7WLAyqrKz8m39G+qpVq9KgQYOdft5tur3xo8aOHZv77rsvN9xwQ/r27Vu1fdSoURk1alSGDRuWYcOG5fLLL8/3v//9vPTSS7nttts2e8xJkyalefPmVT+dOnXanhGB7dRlzOPVfgAAAP5ePfroo2nRokXWrVuXJHn++edTKpUyevToqn2+9KUv5XOf+1wWLlyYz33uc9ljjz3SqFGj7L///rn//vurHe/DtzcOHjw4CxYsyKhRo1IqlVIqlZJseHvj+PHjc+CBB+aee+5Jly5d0rx585xyyilZunRp1T5Lly7NP//zP6dx48Zp3759brjhhq26lXK9lStX5hvf+EY6deqUioqK7L333rnjjjuSJGvXrs2ZZ56Zrl27prKyMvvss0++/e1vV/v8yJEjM2LEiEyaNCkdOnRIjx49kiQ333xz9t577zRs2DBt27bNSSedtFXz1FSNo9eECRNy+eWX54orrsh55523xf1POOGENG7cOLNnz97sfhdddFGWLFlS9eNZYQAAAMCu4LDDDsvSpUvz61//OskHd7bttttumTlzZtU+M2bMyKBBg7JixYr07ds3jz32WH7729/mi1/8Yk499dT84he/2Oixp0yZkj322CMTJ07MW2+9lbfeemuTc7z++ut5+OGH89hjj+Wxxx7LzJkzc9VVV1W9/7WvfS3/8z//k0ceeSRTp07NrFmzMnfu3K2+ztNOOy0//OEP853vfCcvvvhibr311qq79tatW5c99tgjkydPzu9+97tceumlufjiizN58uRqx5g2bVpefPHFTJ06NY899lh+9atf5fzzz8/EiRPz8ssv54knnshhhx221TPVRI1ub5wwYULGjx+f8ePH5+KLL97qz5XL5dSps/nOVlFRkYqKipqMBQAAAPCxad68eQ488MDMmDEjffv2zYwZMzJq1KhMmDAhS5cuzbJly/LKK69k8ODB6dixY77+9a9XffZf//Vf88QTT+SBBx5I//79Nzh2q1atUrdu3TRt2jTt2rXb7Bzr1q3LXXfdlaZNmyZJTj311EybNi1XXHFFli5dmrvvvjs/+MEPcsQRRyRJ7rzzznTo0GGrrvGVV17J5MmTM3Xq1AwdOjRJstdee1W9X79+/UyYMKHqddeuXfPMM89k8uTJOfnkk6u2N27cOLfffnvVbY1TpkxJ48aNc+yxx6Zp06bp3LlzDjrooK2aqaa2eaXXZZddlvHjx+db3/pWxo0bt9Wf+/GPf5zly5dnwIAB23pKAAAAgF3C4MGDM2PGjJTL5cyaNSvHH3989ttvvzz99NP52c9+lrZt26Znz55Zu3ZtrrjiivTp0yetW7dOkyZN8tOf/jR/+MMftnuGLl26VAWvJGnfvn3eeeedJMnvf//7rF69OoccckjV+82bN88+++yzVcd+/vnnU7du3QwaNGiT+9x6663p169fdt999zRp0iS33XbbBte1//77V3uO17Bhw9K5c+fstddeOfXUU3Pfffdl+fLlWzVTTW3TSq/rrrsul156aY466qgMHz58g1sVBwwYkAULFuTzn/98TjnllHTv3j2lUikzZ87MjTfemH333TdnnXXWDr0AAAAAgJ1l8ODBueOOO/K///u/qVOnTnr37p1BgwZl5syZWbx4cVUsuu6663LDDTfkxhtvzP7775/GjRvnggsuyKpVq7Z7hg9/42OSlEqlqueMlcvlqm0ftn77lmzpofmTJ0/OqFGjct1112XgwIFp2rRprrnmmg1u22zcuHG1102bNs3cuXMzY8aM/PSnP82ll16a8ePHZ86cOdWeWbYjbVP0evTRR5MkTzzxRJ544okN3i+Xy2nWrFnatm2b66+/Pn/605+ydu3adO7cOeeff34uvvjiDS4aAAAA4G/F+ud63XjjjRk0aFBKpVIGDRqUSZMmZfHixfnqV7+aJFWrwP7lX/4lyQe3JL766qvp1avXJo/doEGDrF27drvm69atW+rXr59f/vKXVV8O+N577+XVV1/d7Oqt9fbff/+sW7cuM2fOrLq98cNmzZqVT37ykznnnHOqtr3++utbNVu9evUydOjQDB06NOPGjUuLFi0yffr0nHjiiVt5ddtmm6LXjBkztrhPy5YtM2XKlJrOAwAAALDLWv9cr3vvvbfqWwsPO+ywfOYzn8nq1aszePDgJEn37t3z4IMP5plnnknLli1z/fXX5+23395s9OrSpUt+/vOf55RTTklFRUV22223bZ6vadOmOf300zN69Oi0atUqbdq0ybhx41KnTp0NVn9taobTTz89X/jCF/Kd73wnBxxwQBYsWJB33nknJ598crp3757vf//7efLJJ9O1a9fcc889mTNnTrp27brZ4z722GP5/e9/n8MOOywtW7bMT37yk6xbt26rb7usiRp/eyMAAADA36PDDz88a9eurQpcLVu2TO/evbP77rtXRa2xY8fm4IMPzpFHHpnBgwenXbt2GTFixGaPO3HixMyfPz/dunXL7rvvXuP5rr/++gwcODDHHntshmd1o88AACAASURBVA4dmkMPPTS9evVKw4YNt+rzt9xyS0466aScc8456dmzZ84+++wsW7YsSfLlL385J554Yj772c+mf//+WbhwYbVVX5vSokWLTJkyJUOGDEmvXr1y66235v7778++++5b4+vcklJ5a2/qrCXvvfdemjdvniVLlqRZs2a1PQ783eky5vFqr+dfNbyWJgEAAIpixYoVmTdvXrp27brVIYaaW7ZsWTp27JjrrrsuZ555Zm2Ps1U29TeyLZ1om25vBAAAAGDX9utf/zovvfRSDjnkkCxZsiQTJ05Mkhx//PG1PNnOJXoBAAAAFMy1116bl19+OQ0aNEjfvn0za9as7Lbbbpk1a1aOPvroTX7ur3/9606c8uMlegEAAAAUyEEHHZTnnntuo+/169cvzz///E6eqHaIXgAAAAB/JyorK9O9e/faHmOn8O2NAAAAABSO6AUAAADUinK5XNsjsIvaEX8bohcAAACwU9WtWzdJsmrVqlqehF3V8uXLkyT169ev8TE80wsAAADYqerVq5dGjRrl3XffTf369VOnjjU5fKBcLmf58uV555130qJFi6pAWhOiFwAAALBTlUqltG/fPvPmzcuCBQtqexx2QS1atEi7du226xiiFwAAALDTNWjQIHvvvbdbHNlA/fr1t2uF13qiFwAAAFAr6tSpk4YNG9b2GBSUm2YBAAAAKBzRCwAAAIDCEb0AAAAAKBzRCwAAAIDCEb0AAAAAKBzRCwAAAIDCEb0AAAAAKBzRCwAAAIDCEb0AAAAAKJx6tT0A8DdmfPOPvF5SO3MAAADAZljpBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhiF4AAAAAFI7oBQAAAEDhbFP0mj59er7whS+kZ8+eady4cTp27Jjjjz8+zz333Ab7zp07N0OHDk2TJk3SokWLnHjiifn973+/wwYHAAAAgE3Zpuh1yy23ZP78+fnqV7+an/zkJ/n2t7+dd955JwMGDMj06dOr9nvppZcyePDgrFq1KpMnT873vve9vPLKK/nHf/zHvPvuuzv8IgAAAADgw+pty8433XRT2rRpU23bUUcdle7du+fKK6/MkCFDkiSXXnppKioq8thjj6VZs2ZJkr59+2bvvffOtddem6uvvnoHjQ8AAAAAG9qmlV4fDV5J0qRJk/Tu3TtvvPFGkmTNmjV57LHH8ulPf7oqeCVJ586dc/jhh+ehhx7azpEBAAAAYPO2+0H2S5Ysydy5c7PvvvsmSV5//fW8//776dOnzwb79unTJ6+99lpWrFixvacFAAAAgE3aptsbN+bcc8/NsmXLcskllyRJFi5cmCRp1arVBvu2atUq5XI5ixcvTvv27Td6vJUrV2blypVVr997773tHREAAACAvzPbtdJr7Nixue+++3LDDTekb9++1d4rlUqb/Nzm3ps0aVKaN29e9dOpU6ftGREAAACAv0M1jl4TJkzI5ZdfniuuuCLnnXde1fbWrVsn+f8rvj5s0aJFKZVKadGixSaPe9FFF2XJkiVVP+ufFQYAAAAAW6tGtzdOmDAh48ePz/jx43PxxRdXe69bt26prKzMCy+8sMHnXnjhhXTv3j0NGzbc5LErKipSUVFRk7EAAAAAIEkNVnpddtllGT9+fL71rW9l3LhxG7xfr169HHfccZkyZUqWLl1atf0Pf/hDfvazn+XEE0/cvokBAAAAYAu2aaXXddddl0svvTRHHXVUhg8fntmzZ1d7f8CAAUk+WAn2iU98Iscee2zGjBmTFStW5NJLL81uu+2WCy+8cMdNDwAAAAAbsU3R69FHH02SPPHEE3niiSc2eL9cLidJevbsmRkzZuSb3/xmTjrppNSrVy9DhgzJtddem913330HjA0AAAAAm7ZN0WvGjBlbvW/fvn3z1FNPbes8AAAAALDdavztjQAAAACwqxK9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACgc0QsAAACAwhG9AAAAACicerU9AADwt6/LmMervZ5/1fBamgQAAD5gpRcAAAAAhSN6AQAAAFA4ohcAAAAAhSN6AQAAAFA4ohcA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/tjrmD9/fjzyyCNx5513xt133x2//e1vo6GhYaP6sDD/kMX5llucm3MfKueca03zLcKcW6s1z7mI5p93ixYtigsuuCD69esXtbW10bNnz9huu+2itrY2+vXrF9/85jc3eW0TEfHrX/86DjvssKKXNTQ0xB133BFXXHFF3H///UWPee211+JLX/pS0cv+/Oc/x6RJk+LSSy+NefPmRUTEn/70pxg9enTsueeeccwxx8Tvf//7jer37bffjtGjR8cLL7ywUXXvvPNOXHvttfH5z38+TjzxxLj++usL1ktrzZkzJx599NFG+6ZNmxY77bRTdO/ePbp16xZ9+/aNe++9t2j9HnvsERdeeGG89tprG9XjWj/72c9i9OjR8fnPfz7mzJkTEREPP/xw7LLLLtGhQ4fo2rVrTJkypcn6Dz74IKZNmxZHHnlk9OrVK9q2bRvt2rWLvn37ximnnBLPPvvsBvfiee5Dnues57Y0c86cK5vUQkyfPj316tUrVVRUpFwu1+inoqIi9erVK02fPr3kce65555UUVFRsH/WrFlp+PDhqV+/fum4445Lv//97wuOmTNnTtHalFK69NJL00477ZR22WWXdPPNN6eUUrrqqqtSmzZtUkVFRaqqqkoTJ04sqOvQocN6f3K5XKqtrU0dOnRIdXV1BfVPPvlkevvttxvte+ihh9LAgQNTRUVFqqioSPvuu2967LHHivZ9ySWXpG9/+9v57eXLl6dDDz200eNQUVGRRo0ald57772C+lwul3bcccd08cUXp9dff73oGE1555130jHHHJO/f84666yUUkpf/vKXG4291157pcWLFxe9jjlz5qRDDjkkf1s/+tOhQ4f09a9/veD++aiFCxemiRMnpk984hOpsrIyX1tZWZk+8YlPpG984xtp4cKFG3W71vWrX/0qDR06tOhlq1atSrfffnu6/PLL03333Vf0mL/85S/pi1/8YsH+V155JV188cXpkksuSW+99VZKKaUXX3wxHXPMMWmPPfZIo0aNSs8888xG97t06dJUUVGRfv3rX29U3dtvv52uueaa9LnPfS6NHTs2XXfddemdd94peuwTTzyRHnnkkUb7brnllrTjjjvmH4Pddtst/fSnPy2o3X333dM3v/nN9Je//GWj+vuoe++9Nx1zzDHpc5/7XHriiSdSSh/+3uy8886poqIidenSJV122WVN1q9evTrdcsst6Ygjjkjbb799qqmpSbW1tWm33XZL48aNS3/4wx+arG3uOddc8y2lrWvOban5llLpc66c8y2l8j7PmXP/siXnXEqlzbtS5txrr72Wtt9++9SmTZs0cuTIdN5556UpU6akKVOmpPPOOy8dfvjhqbq6Ou2www7ptdde26Tb1tRabunSpal///6N1hAHHHBAwfqkqfXcCy+8kNq3b5+v32677dJLL72UevTokbp3754GDx6c6uvrU/v27dOf/vSnRrVf/epXm/w57bTTUi6XS2PGjElf/epX05lnnlkw9u67757++Mc/5rcXL16c9thjj5TL5VL79u1Tu3btUi6XSwMGDEjLly8vqD/44IMbred+/OMfp1wul/bdd9/0jW98I11wwQVp4MCBqbKyMv3iF78oqF97mysrK9OwYcPS9OnTU0NDQ5F7v9DMmTNTLpdLnTp1Sj169Ei1tbXp0UcfTe3atUtDhgxJ5557bjr44INTRUVF0bX8kiVL0v7779/occvlcqmqqirtt99+qa6uLlVVVaUrr7yyyR48zxVq7vVca36eS8mcK8acy+6cS2nrfN26VosIvX7yk5+kXC6XRowYkaZPn55eeOGF9Pe//z39/e9/Ty+88EKaPn16Ovzww1NFRUW66667Shqr2ELp6aefTttss03q0aNHOuyww1KnTp1SmzZt0g9+8INGxzW1SLrttttSLpdLBx54YDr66KNTmzZt0o033pgqKyvThAkT0o9+9KN00kknpYqKinTHHXc0qs3lcqlXr17p5JNPLvgZO3ZsyuVy6fDDD8/vW1dFRUV68skn89uPP/54qqqqSjvssEOaMGFCGj9+fOrVq1dq06ZNevrppwvqd9tttzRt2rT89vjx41NtbW269tpr0yuvvJJefvnldPXVV6e2bdumCy+8sKA+l8ulbt265RdKI0eOTHfddVfRgGxd3/rWt1JVVVU67bTT0vnnn586deqUzjrrrNSxY8f0ox/9KD3//PPppptuSh06dEjnn39+Qf3/+3//L9XU1KRu3bqlY489No0dOzbtsssuqaqqKl1wwQXp1FNPTZ06dUoHHHBA0SfOLbEwT6l5FuelLMxTatmL81IW5imVd3HeWl8MplTanPNicNNfDJbzec6cK8+cS6m0eVfqnBszZkzq379/euONN5rs74033kh77bVXOvbYYwv2b8jPDTfcUHTOTJw4MdXX16d77rknzZ07N/3oRz9KPXr0SNttt116/vnn88c1Nec+97nPpU984hPpT3/6U1qwYEEaNWpU6tevX9p///3TihUrUkopLViwIO2+++7pP/7jPxrVfvS+Kvaz7h8T15XL5Rqt584444zUrl27NGPGjLRmzZq0Zs2adOedd6a2bdumCy64oKC+U6dOjebSnnvumY4//viC40aPHp0OOuigouNfe+216eSTT07t27dPFRUVqb6+Pp155pnp2WefLTj+owYPHpxGjBiRVq1alVJK6eyzz05du3ZNY8eObXTcscceW3TsCRMmpI4dO6bp06enFStWpFWrVqVHH3009e3bN11wwQXpvffeS9dee22qrKws+kLL81x51nOt+XnOnDPnWtOcS6m8r1s3RIsIvQYOHJhOPfXUjz3ulFNOSQMHDix62eTJkzfo54QTTih4IEaNGpUGDRqUVq5cmVJKadmyZenEE09MFRUV6fLLL88f19STx6BBgxr9x/79738/1dTUpNNPP73RcSeccEJBcnrzzTenTp06pVGjRqV58+Y1umzJkiUpl8ulX/3qV03eJ+sukkaOHJn23HPPtHTp0vy+xYsX59/Btq62bdum2bNn57e33XbbNHXq1ILjpkyZknr37t3k+LNnz04nnXRSqq2tTRUVFalbt27pnHPOSS+88EKTvffr1y9Nnjw5v33fffelioqKgvEvvfTS1K9fv4L6oUOHpoMOOii/EE3pwwT9y1/+cjr44INTSh8uoLt165YuvvjigvpSFuZrLyvX4ryUhXlKLXtxXsrCPKXyLs5b64vBlEqbc14MbvqLwXI+z5lz5ZlzKZU270qdc506dUr33nvvx/b405/+NHXq1Kngdhd753ZTP+vafffd03e/+91G+9566600YMCA1K1bt/x919Sc23HHHdN//dd/5bf/9Kc/pVwuV/AHyxtuuCHtuOOOjfYdeuihqWfPnulnP/tZwfVuynquV69e6T//8z8Ljlv7V/51tW3bttH1V1VVpYcffrjguF/84heptrZ2veOvWLEi3XTTTemAAw7IPyaf/OQn0w9/+MOiIW+XLl3S/fffn9/+29/+lnK5XHrwwQcbHXffffelrl27FtRvt9126Xvf+17B/rV/3Fz7+z5u3Lg0ePDgguM8z5VnPdean+fMOXMupdYz51Iq7+vWDdEiQq+amppGwUtTZs2alWpqaope9nG/gOv+Mn7U9ttvn2bMmFFwnRdeeGGqqKjIJ8pNPXnU19enmTNn5rcXLFiQcrlceuCBBxodN2PGjFRfX19QP2/evHT00Uenjh07phtvvDG/f+nSpRu9SKqrq2u0YFvrpptuSt27dy/Y37lz50YLlaqqqqLjPfLII6lNmzYfO/6yZcvSDTfckPbbb7/8fT1o0KA0bdq0fKi4Vm1tbZo1a1Z+e8WKFSmXy6Xf/OY3jY577LHHUrt27QrGbt++fdHF5dy5c1NFRUV68803U0opTZ06NfXt27fguFIW5imVd3FeysI8pZa9OC9lYZ5SeRfnrfXFYEqlzTkvBjf9xWA5n+fMufLMuZRKm3elzrn27dsXjFPMAw88kNq3b99oX3V1dTrssMPS1KlT1/vzf/7P/yk6Z2pra4s+posXL0777LNP6tKlS3rmmWeanHPV1dWNPpbT0NBQMBdS+nBdUmxNdN1116UOHTqk4447Lv3jH//I79+U9VxlZWXBx3hSSunBBx8suhbea6+9Gv2htnv37kXXtj/5yU9Sx44dP3b8tV544YV09tln59/V365du4KPrtTV1TXqde3v17qn1njooYeKjl1dXV30tq6935577rmU0ofPU8VO9eF5rjzrudb8PGfOmXMptZ45l1J5X7duiKpyn1NsQ9TX18ef//znGDx48HqPe/XVV6O+vr7oZV27do3Ro0fHZZddtt7r+PnPfx7jxo1rtG/p0qXRrVu3gmO//e1vR1VVVVx00UWxevXqOOKII4pe57vvvhvt2rXLb3fu3DkiIrbddtuCHleuXFlQ37Nnz7jvvvvitttui7PPPjtuu+22uOWWW6JHjx7rvS3FvPPOO7HrrrsW7O/bt2/Rk/sNGjQopk+fHkcddVRERPTv3z/mzJkTn/rUpxodN2fOnNhuu+0+dvy6uroYP358jB8/Pp577rm45ZZb4vbbb49x48bF2WefHcuWLcsf26lTp0Ynsl2wYEFEfHgiwo9auHBhdOzYsWCsXC4XFRWF39VQWVkZKaVYvnx5REQMHDiw6JcXrF69Otq2bfuxt6lt27ZFT6bfpk2bOPjgg+PII49cb/0f//jHuO222wr2v/HGG7HPPvs02rf99tvH7Nmz49Of/nQcdthh8fDDDxe9zvnz58fOO++c317771122aXRcZ/4xCfiH//4R0H9r3/967j++uvjpJNOipEjR8b1118f3bt3j4gP79eN9fe//73o7++QIUPimmuuKdi/6667xhNPPJGfZ126dMk/Xh+1fPny2GabbZoct3379nHKKafEKaecEi+++GLccsstcdttt8X48ePjnHPOieOPPz5uvfXWRjXvv/9+1NTU5LfXzoE2bdo0Oq66ujref//9gjEXL14ce+yxR8H+PffcMxoaGuL111+P/v37x5FHHhknn3xyo2NKmXPlnG8RW9ecK9d8i9j4OVfO+RZR3uc5c648cy6itHlX6pw74IAD4vLLL49DDjmk0droo95+++24/PLLY9CgQY329+/fPzp16hRf//rXm75DImLGjBlFn+fq6+sL1hARH67LHn300Rg2bFh8+tOfjsmTJxe93g4dOsSSJUvy21VVVVFdXV1wv7377ruN7t+1zjjjjDj66KPj1FNPjd133z2+853vxJe//OX13paP+ui8LLYujfjwS58qKysL9p988slxySWXxGGHHRb7779/fPnLX46LL744PvnJT0avXr0iImLu3LkxadKkgjXe+uyxxx5x9dVXxxVXXBH/+7//G9OmTYv/+Z//aTTndtttt7j33ntj2LBhERHx05/+NKqrq+PBBx+MoUOH5o/7xS9+EX369CkYo0+fPvnH56MefvjhyOVy+fVwp06dYs2aNQX1nufKs55rzc9z5pw5F9F65lxEeV+3bpBNisq2sK997Wupvr4+3XnnnemDDz4ouPyDDz5Id911V+rSpUv+ZOfrGjFiRBoyZMjHjlXsc6r9+vVr9A6rdU2aNCnlcrl05JFHNpmY33777fntNWvWpPHjx+ffabTWXXfdlbbddtv19jd//vx07LHHppqamnTeeeelioqKj03Lr7jiijRjxow0Y8aM1KNHj/S///u/Bcfdc889qXPnzgX7f/Ob36TKysp0xhlnpLlz56Zf/vKXqWPHjunKK69Mf/jDH9If/vCHNGXKlCY/wtHUXwY/qqGhIf3kJz9JI0aMaLR/1KhRae+9905//etf06JFi9Lxxx+fdt9993TooYemd999N6X04YkNBw0alA4//PCC6137mK99i+lap59+eqqrq8ufV2zmzJlF30ExbNiwNGTIkIJ3oH3UypUr0+DBg9Pw4cMLLtt3333TmDFj1nvbU2r6s9G9evUq+lfYlD78S8k+++yT6uvr03XXXVdQ37Vr10aP8wcffJBqamoKvoBh5syZRf8qutZf//rXNHz48NS5c+d0yy23pJQ2/C/STz31VH67R48eRf9K+8ADDxR9l95VV12VOnfunL+Ob3zjG6l///6NfmfeeOON1K9fv/SZz3ymYOz1zbn33nsv3X333enwww9PVVVVBZfvu+++6Stf+Up+e9q0aammpqbgvHFnnXVW0Y9T9+vXr+jvwt13350qKirSggULUkofvhNg3XcxlDLnyjnfUirvnCvnfFs7/qbOuXLOt5TK+zxnzpVnzqVU2rwrdc49/fTTqa6uLm277bbp9NNPTzfccEO6884701133ZVuuOGGdPrpp6cePXqkurq6gpPWjhs3LvXp06fJ273WPffck3K5XMH+ww8/PE2YMKHJurXzbu0JgNd14IEHpm9961sfO/4111yT9txzz/Ues/b0FUOHDk1PPfXUBv2/2q5du/wXGVVVVaVrrrmm4Ljrrrsu7bzzzgX733///XTUUUelqqqqNGzYsPS1r30tdezYMdXU1KSBAwemgQMHpurq6lRfX1/01BMbsp5ba9317U033ZRyuVz61Kc+lT7zmc+kbbbZJv3whz9MNTU16cwzz0z//d//nU4//fRUVVWVrrrqqoLrW/uRnrPOOiv98pe/TLNnz06XXnpp6tSpUzrqqKPyx918881F73fPc+VZz7Xm5zlzzpxLqfXMuZS2jtet69MiQq+VK1em4cOHp1wul+rq6tIBBxyQjjjiiHTkkUemAw44INXV1aWKioo0YsSIJr+J77zzzisa6qzrgQceKDg31Ze+9KU0bNiw9dZ961vfavKzyUcdddR6F1lrnXvuuUXfrljMPffck3r06LFBTxzr/px99tkFx02cODHts88+Ra/j9ttvz3+uuWvXrqlt27aN3t6Yy+XSv//7vxeES2vH39BF0rqeeeaZRmPV19enl156Ke266675LxXo3r17qqysLPrx1yeffDLV1NSk7bbbLn3+859PJ598curXr1+qqKhodBLAyZMnF73fS1mYp1TexfnmXJin1LIW56UszFMq7+Lci8F/2Zg558Xgpr8YLOfznDlXnjmXUmnzrtQ5l1JKL730UvrsZz+bamtrC9YotbW16YQTTkgvvfRSQd3jjz/e6FyfTVmwYEHRdcFVV12V6urqmvzG55T+dTLhYnPue9/7XtFzgK7rk5/85Aadi/att95KRx99dNpmm20+9o+Yxb7QqNicO/jgg4ueryWlD19IfPe73019+vQpuN/btWuXxo4d2+S3lpWynksppf/8z/9MvXr1Sn369Mn3feuttzaaA8cee2yTJ40+55xzUlVVVaO15+DBg/MvBFP6cM7ddNNNBbWe5/5lS67nWvPznDn3L+Zc9udcSlvX69ZiWkTotdbMmTPTuHHj0qBBg1Lfvn1T375906BBg9Kpp55acH6sda1YsaLg2wM21GOPPZY++9nPNvqPtZipU6cWfTfZH/7whw06J9mpp55a9HxbTVm5cmV6/fXXi4ZNa82ePbvgZ93UNKWUxo4dm6644oomr2fevHlp0qRJadiwYalfv375+/60005LDz30UJN1J598cknfEPHiiy+mb37zm2ny5Mn5x+/1119PJ5xwQurXr1867LDD0s9//vMm65966qk0cuTI1KFDh1RdXZ323nvvdOuttzY65vnnn0+vvPJK0fpNXZinVN7F+eZemKfUchbnpS7MUyrv4tyLwX/Z0DnnxeCmz7eUyvc8Z86Vb86lVNq8K3XOrbV69er08ssvp9/+9rfpt7/9bXr55ZfT6tWrS7pd6/PBBx+klStXFv3UwEe9++67m7xmTOnD85duzDd+3X333WnSpEnrPQHxhnrjjTfSkiVLPva4N998M82ZM2eL3O/rs2TJkjRnzpw0d+7cjz123rx5acaMGWn69OkbdFLpj/I89y9bcj3Xmp/nzLl/MedKm3P//Oc/88dsjXMupa3vdeu6cimltGkfjITW44MPPoi//OUv+XOMdenSJXbZZZei583YXNasWRPvvvtutG3btui5ydZatWpVzJ8/P3baaaeNHmP58uVRU1NT8Fnz9bnnnnvihRdeiC9+8Yux4447bvSYHzV37tyoq6uLTp06rfe4t956K+bNmxdr1qzZIvd9U5YuXRovv/xy9OzZM3bYYYf1Hvu3v/0t5syZE++9917sscceMWDAgI0aa0vPuS0x3yLKO+eyPt+eeOKJeP/99zdpvkWYcx/VWudcxIbPu80x59b1zjvvxBe+8IW45JJLip7bpLlqy13fknsvtX5Lj+157l+29HqupT7PlbKWizDnPmrGjBnx/PPPm3MZm3MRW+/r1rWEXlCiVatWxT//+c9NfvIuZ31L7r3U+pbcO2wJixYtitdeey123nnn6NKlyxatL+fYpda35N5LrS917GXLlkXnzp3jV7/6VRx66KFbrLbc9cuWLYv6+vqYPXt2i+u91Ppy997Q0BC5XG6TXkSVWl/Osctd31p7f+yxx+KZZ56JysrKOPDAAwu+rGND6ysqKuLAAw+Mgw46aIvUtvT6ct7v69YPGjRoo8bf0LGfeuqp2H///TfpywLKXV/q2Btkk94fBuQ1dUK/llDfknsvtX5r7X3WrFlp+PDhqV+/fum4444r+nHkpr5mupTall6v902vv/TSS9NOO+2Udtlll3TzzTenlD58m3qbNm1SRUVFqqqqShMnTixaW2p9Ocduqn7q1Kkttvdy3vYNrV17npamftZ+DKNDhw4FJ6wtpbbc9S2595Z+25988smCc/4+9NBDaeDAgfmPEe27777pscceK6gttb6cY5e7vjX3fskll6Rvf/vb+e3ly5enQw89NP+Rtdz/fx7oUaNG5b9Ya3PVl3Pscte35t5zuVzacccd08UXX7xJH88vZ32pY28IoReUaGsNT7bhWee/AAANeUlEQVT2sctdvzX2/vTTT6dtttkm/0UNnTp1Sm3atEk/+MEPGh1XLMAopbal1+t90+tvu+22lMvl0oEHHpiOPvro1KZNm3TjjTemysrKNGHChPSjH/0onXTSSamioiLdcccdm7W+nGO35t7LfdtzuVzq1atX0fO2jB07NuVyuXT44Yfn922u2nLXt+TeW/ptr6ioaHSenscffzxVVVWlHXbYIU2YMCGNHz8+9erVK7Vp0yY9/fTTm7W+nGOXu741977bbruladOm5bfHjx+famtr07XXXpteeeWV9PLLL6err746tW3bNl144YWbtb6cY5e7vjX3nsvlUrdu3VIul0uVlZVp5MiR6a677ioakBVTzvpSx94QQi9owuTJkzfo54QTTij6YrKc9S2599Z820eNGpUGDRqU/7rhZcuWpRNPPDFVVFSkyy+/PH9csQCjlNqWXq/3Ta8fNGhQGjt2bH77+9//fqqpqUmnn356o+NOOOGENHTo0M1aX86xW3Pv5b7ta7/Ja9SoUWnevHmNLluyZEnK5Zr+Zq9Sastd35J7L7W+3L2ve3LqkSNHpj333DMtXbo0v2/x4sX5d8tuzvpyjl3u+tbce9u2bRud7HvbbbdNU6dOLThuypQpqXfv3pu1vpxjl7u+Nfe+ds7Onj07nXTSSam2tjZVVFSkbt26pXPOOafot1VuLfWljr0hhF7QhLVvI1332y+K/RR7MVnO+pbce2u+7dtvv32aMWNGwXVeeOGFqaKiIv+252IBRim1Lb1e75teX19fn2bOnJnfXrBgQcrlcgXfiDxjxoxUX1+/WevLOXZr7r3ctz2lD7+F7+ijj04dO3ZMN954Y37/0qVLPzbAKKW23PUtufdS68s59roBRl1dXdFvS7/ppptS9+7dN2t9Occud31r7r1z587p/vvvz29XVVUVnaOPPPJIatOmzWatL+fY5a5vzb2vO2eXLVuWbrjhhrTffvvlX3MMGjQoTZs2Lf+H0q2lvtSxN0TTp9aHVq5r164xbty4WLBgwXp/pk2bttXVt+TeW/NtX7p0aXTr1q1g/7e//e246KKL4qKLLopJkyYVHbeU2pZer/dNr3/33XejXbt2+e3OnTtHRMS2227b6LiuXbvGypUrN2t9Ocduzb2XWl/q2BERPXv2jPvuuy+uv/76uPDCC+PQQw+Nl19+ueixm7O23PUtufdS68vd+0e98847seuuuxbs79u3byxevLhZ68s5drnrW1PvgwYNiunTp+e3+/fvH3PmzCk4bs6cObHddttt1vpyjl3u+tbc+7rq6upi/Pjx8bvf/S6effbZOOOMM+KVV16JcePGRc+ePbfq+lLHLqZqk6qgFdh7773jlVde+dhvoKqrq9vq6lty76XWt+Ted9hhh3jxxReLfgPVxRdfHBERkydPjt/97nebtbal1+t90+u7desW8+bNy29XVFTEaaedVhBgzJ8/v+jXgpdSX86xW3Pv5b7tH/WFL3whRowYEaeffnoMHDgwvvrVr27wtzeVUlvu+pbce6n15Rp79uzZ8dZbb0XEh4HsokWLCo5ZuHBhtG/ffrPXl3Pscte31t4vuOCCGDJkSHTu3DnOP//8uOKKK+L444+PXC4XI0aMiIiIBx54IC699NI466yzNmt9Occud31r7n199tprr7j22mvjO9/5Ttx7771x6623tpj6UsfO26T3h0ErcN5556XOnTt/7HEPPPBA0c9Wl7O+Jfdean1L7v1LX/pSGjZs2HrrvvWtbxX9aGQptS29Xu+bXn/UUUelCRMmrLc+pZTOPffcNHjw4M1aX86xS61vyb2XWl/q2E255557Uo8ePTboo26bs7bc9S2591Lrt9TYxU4vcPbZZxccN3HixLTPPvts1vpyjl3u+tbce0op3X777al9+/apoqIide3aNbVt2zZVVFTkf3K5XPr3f//3tGrVqs1eX86xy13fWntf9yOCG6uc9aWOvUFjpJTSpsVlkG0rV66MRYsWxU477dTi6lty76XWt+TeZ82aFTfccEP84Ac/iK5duzZ53FVXXRX3339/zJo1a7PUtvR6vW96/bPPPhtLly6NwYMHN1kbEXHaaafFQQcdFP/xH/+x2erLOXZr7r3U+lLHXp+33347Fi5cGD169Ijq6uoNriu1ttz1Lbn3Uuu3xNi/+tWvCvZ17NgxBg4c2GjfiSeeGP/2b/8W559//marL+fY5a5vzb2v9be//S1uvvnm+M1vfhPz5s2LNWvWRJcuXWLAgAFx7LHHxvDhw4vWbY76co5d7vrW2PsXv/jFuOiii6JPnz7r7a0p5awvdewNIfQCAAAAIHOcyB4AAACAzBF6AQAAAJA5Qi8AAAAAMkfoBQAAAEDmCL0AALag2bNnRy6Xi9mzZ5e1j0mTJkUul9ugY3v37h0nn3xy8zYEALCZCb0AAFqhcePGxRNPPFHuNgAAmk1VuRsAAGDL69WrV/Tq1avcbQAANBvv9AIA2AR//vOfY+zYsbHttttGdXV17L777vH973+/0TEvvfRSHH744VFbWxtdu3aN8ePHx4oVKwquK6UUl112Wey0005RU1MT++23Xzz88MMxZMiQGDJkSKNjly9fHueee2706dMn2rRpE9tvv32cddZZ8fbbb29U/8U+3vj+++/H+eefHz169Ija2to45JBD4qmnntqo6wUA2Fp4pxcAwEZ68cUX46CDDoodd9wxrrrqqujRo0f88pe/jDPPPDMWLlwYF198ccyfPz8GDx4c22yzTfzgBz+I7t27x+233x5nnHFGwfV985vfjClTpsSpp54aY8aMiTfffDPGjRsX77//fvTt2zd/3DvvvBODBw+Ot956K77xjW/EgAED4oUXXoiLLroonnvuuXjkkUc2+DxdxZxyyinx3//933HuuefG8OHD4/nnn48xY8YUDeoAALZ2Qi8AgI10zjnnRIcOHeLxxx+Purq6iIgYPnx4NDQ0xOWXXx5nnnlmfPe7340FCxbE73//+/i3f/u3iIg44ogjYsSIETF37tz8dS1ZsiSuvvrqOOGEE+KHP/xhfn///v1j0KBBjUKv733ve/HHP/4xnnzyydhvv/0iImLYsGGx/fbbx3HHHRcPPvhgHHHEEZt0m1566aX48Y9/HGeffXZceeWV+dvUvXv3OPHEEzfpOgEAysnHGwEANsKqVavi0UcfjdGjR0dtbW2sXr06/3PkkUfGqlWrYs6cOTFr1qzYc88984HXWmPHjm20PWfOnGhoaIjjjz++0f4DDzwwevfu3Wjf/fffH/3794+BAwc2GnfkyJElfyPkrFmzIiIKAq7jjz8+qqr8nRQAaHmsYAAANsKiRYti9erVcd1118V1111X9JiFCxfGokWLok+fPgWX9ejRo+D6IiK6d+9ecOy6++bPnx+vvvpqbLPNNk2Ou6nW9rFuf1VVVdGlS5dNvl4AgHIRegEAbITOnTtHZWVlnHTSSfGVr3yl6DF9+vSJ66+/Pv7xj38UXLbuvrWB0vz584se+9F3e3Xt2jXatm0bt956a9Fxu3btuqE3o8DaPv7xj3/E9ttvn9+/evXqfCAGANCSCL0AADZCbW1tDB06NH7/+9/HgAEDok2bNkWPGzp0aFx55ZXx7LPPNvqI4x133NHouAMOOCCqq6vjzjvvjDFjxuT3z5kzJ954441GodfRRx8dl112WXTp0qXou8hKsfZbIm+//fbYd9998/vvuuuuWL169WYdCwBgSxB6AQBspGuvvTYOOeSQOPTQQ2PChAnRu3fvWLFiRbz66qtx3333xWOPPRZnnXVW3HrrrXHUUUfFJZdckv/2xpdeeqnRddXX18c555wTU6ZMic6dO8fo0aPjrbfeismTJ8d2220XFRX/OgXrWWedFTNmzIhPfepTcfbZZ8eAAQNizZo1MXfu3HjooYfi61//ehxwwAGbdJt23333+MIXvhDXXHNNbLPNNvHpT386nn/++Zg6der/194dskQSxnEc/91h0QHdZrMJi8lgMm3YZBGb0Wqyq2CQBdkowsrCsm7a5IsQqwiCxbRmMYgvYPfCgSB3LCx33ODc55P/DP/48GXmmY/L+gEAvhLRCwBgRmtra7m/v8/p6WmOj4/z8vKSWq2W1dXVbG1tJfl5N9bNzU0ODg6yv7+fhYWF7Ozs5OLiItvb25+e12q1UhRFLi8v0+/3U6/X0+l0cnR0lFqt9jFXFEVub29zdnaWbreb0WiU+fn5rKyspNls/nLx/ax6vV6Wl5dzdXWV8/PzrK+v5/r6Oru7u3/0XACAMnybTCaTspcAAOCz0WiUer2ek5OTHB4elr0OAMCXI3oBAJTs4eEhw+Ewm5ubWVxczNPTU9rtdt7f3/P4+PjbPzsCADCdzxsBAEpWFEXu7u7S6/Xy9vaWpaWlNBqNtFqtmYPXeDzOeDyeOjM35wgIAFSfN70AACpkb28vg8Fg6ozjHwDwPxC9AAAq5Pn5Oa+vr1NnNjY2/tE2AADlEb0AAAAAqJzvZS8AAAAAAH+b6AUAAABA5YheAAAAAFSO6AUAAABA5YheAAAAAFSO6AUAAABA5YheAAAAAFSO6AUAAABA5fwAPmBe0/+toFAAAAAASUVORK5CYII=\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "ax = Segment_df[['No_of_stops','waiting_cars']].plot(kind='bar', title =\"stops and waiting cars\", figsize=(15, 10), legend=True, fontsize=12)\n",
+ "ax.set_xlabel(\"edge_id\", fontsize=12)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAABL0AAANfCAYAAAA8aq+mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeXRN1///8dfNPBKJKQiJIFLE8IkoLYmiUUNbQyktIsaiavq12hpbqqrmL9KWipYaavqquUV0MJRqSs1T0I8hhhpqTrJ/f1i5X1ciYgy3z8daWcvde59z3ufcc2/XffXscyzGGCMAAAAAAADAjjjkdAEAAAAAAADAg0boBQAAAAAAALtD6AUAAAAAAAC7Q+gFAAAAAAAAu0PoBQAAAAAAALtD6AUAAAAAAAC7Q+gFAAAAAAAAu0PoBQAAAAAAALtD6AUAAAAAAAC7Q+gFAHho4uPjZbFYZLFYlJCQkKHfGKMSJUrIYrEoKirqkdf3b2CxWDRo0KCcLkM7d+5Uq1atVLx4cbm5uSlv3ryqVKmSunXrpvPnz+d0eVmKiYlRYGDgHcdFRUVlOI8fxvG/dZ07duzQoEGDlJSU9EC3c68GDRoki8Wi/Pnz68KFCxn6AwMD1aBBgxyoTBo/frxKlCghFxcXWSwWnT17NkfquF9Hjx7VoEGDlJiYmNOlPBLZ/QwCAHArQi8AwEPn7e2tKVOmZGhfu3at9u/fL29v7xyoCo/K77//rv/85z/asWOHBgwYoOXLlysuLk7169fXihUrdObMmZwu8aFZv3692rdv/1DXuWPHDg0ePPixCb3SnTx5Up988klOl2GVmJio7t27q2bNmlq9erXWr1//xH73HD16VIMHD/7XhF79+/fXggULcroMAMATyCmnCwAA2L/mzZtrxowZmjBhgnLlymVtnzJliqpWrfrYX+mD+zNmzBg5ODgoISHBJmRo2rSpPvzwQxljcrC6h+vpp59+Itb5MNStW1ejR49W165dVbBgwZwuR9u3b5ckdejQQRERETlaS2pqqlJSUuTq6vpItnfp0iV5eHg8km1l1+XLl+Xm5iaLxXLHscHBwY+gIgCAPeJKLwDAQ9eiRQtJ0syZM61t586d07x58xQbG5vpMteuXdOQIUNUunRpubq6Kl++fGrbtq1OnjxpM2727Nl6/vnn5e/vL3d3d4WGhqpv3766ePGizbiYmBh5eXlp3759qlevnry8vBQQEKDevXvr6tWrd9yH1atXKyoqSn5+fnJ3d1fRokXVpEkTXbp0SZKUlJQki8WiTz75REOHDlXRokXl5uam8PBwrVq1KsP69u7dq5YtWyp//vxydXVVaGioJkyYkGHc+fPn1adPHwUFBcnFxUWFCxdWjx49Muzf+fPn1aFDB/n5+cnLy0t169bVnj177rhfJ0+elIuLi/r375+hb9euXbJYLBo3bpykGz+c02txc3OTr6+vwsPDbd7XzJw+fVq5cuWSl5dXpv03/+iNiopS2bJl9dNPP+npp5+Wu7u7ChcurP79+ys1NdVmueyeI9KN86Rq1ary9PSUl5eXoqOj9fvvv2cYFx8fr5CQEOt78tVXX2W5b3dy61TE9Cm/q1evtr5fuXLlUuvWrXXx4kUdP35czZo1k4+Pj/z9/dWnTx9dv379tuuMj4/XK6+8IkmqWbOmdTpxfHx8pvUsXLhQFosl03Ny0qRJslgs2rp1qyTpwIEDevXVV1WoUCG5urqqQIECqlWrVravLhoyZIhSUlKyNb3zzJkz6tKliwoXLiwXFxcVL15c77//frY+m5L05Zdfqnz58tbzslGjRtq5c6e1PyoqSq+//rokqUqVKrJYLIqJiclynbt27VKLFi1UoEABubq6qmjRomrdurW1ppMnT6pLly566qmn5OXlpfz58+u5557TTz/9ZLOem78bhgwZoqCgILm6umrNmjVKS0vTkCFDFBISInd3d/n4+CgsLExjx469bV0JCQmqXLmyJKlt27bW9zz9OKd/123btk3PP/+8vL29VatWLUnS999/r5deeklFihSRm5ubSpQooU6dOunUqVPW9d/NOSJJmzdv1osvvihfX1+5ubmpYsWKmjNnjs1y6ef9ypUrFRsbq3z58snDw0NXr17VyZMn1bFjRwUEBFg/x88884x++OEH6/KZTW+0WCzq1q2bvv76a4WGhsrDw0Ply5fX4sWLM9T9v//7vwoLC5Orq6uKFy+usWPHWqfhAgDsnAEA4CGZOnWqkWQ2bdpkWrVqZSIiIqx9kyZNMp6enub8+fOmTJkyJjIy0tqXmppq6tatazw9Pc3gwYPN999/byZPnmwKFy5snnrqKXPp0iXr2A8//NCMHj3aLFmyxCQkJJi4uDgTFBRkatasaVNLmzZtjIuLiwkNDTWffvqp+eGHH8yAAQOMxWIxgwcPznI/Dh48aNzc3EydOnXMwoULTUJCgpkxY4Zp1aqV+fvvv61jJJmAgADz7LPPmnnz5plvv/3WVK5c2Tg7O5t169ZZ17d9+3aTO3duU65cOfPVV1+ZlStXmt69exsHBwczaNAg67iLFy+aChUqmLx585pRo0aZH374wYwdO9bkzp3bPPfccyYtLc0YY0xaWpqpWbOmcXV1NUOHDjUrV640AwcONMWLFzeSzMCBA7Pcv0aNGpmAgACTmppq0/72228bFxcXc+rUKWOMMZ06dTIeHh5m1KhRZs2aNWbx4sXm448/NuPHj89y/UOGDDGSTIsWLUxCQoLN+3eryMhI4+fnZwoVKmTGjRtnVqxYYbp3724kma5du1rH3c05MnToUGOxWExsbKxZvHixmT9/vqlatarx9PQ027dvt45LP19feukl891335np06ebEiVKmICAAFOsWLEs9zG99pvPY2NMhuOfvo2goCDTu3dvs3LlSjN8+HDj6OhoWrRoYSpVqmSGDBlivv/+e/POO+8YSWbkyJG3XWdycrL56KOPjCQzYcIEs379erN+/XqTnJycaY3Xr183+fPnN6+99lqGvoiICFOpUiXr65CQEFOiRAnz9ddfm7Vr15p58+aZ3r17mzVr1mR5HAYOHGgkmZMnT5qePXsaJycns3v3bmt/sWLFTP369a2vL1++bMLCwoynp6f59NNPzcqVK03//v2Nk5OTqVevXpbbMsZY979FixZmyZIl5quvvjLFixc3uXPnNnv27DHG3PjM9evXz0gyU6dONevXrzf79u277ToTExONl5eXCQwMNHFxcWbVqlVm+vTpplmzZub8+fPGGGN27dpl3njjDTNr1iyTkJBgFi9ebNq1a2ccHBxsjlH6d0PhwoVNzZo1zdy5c83KlSvNwYMHzbBhw4yjo6MZOHCgWbVqlVm+fLkZM2aMzffArc6dO2c9j/r162d9z48cOWKMufFd5+zsbAIDA82wYcPMqlWrzIoVK4wxN753hw0bZhYtWmTWrl1rpk2bZsqXL29CQkLMtWvXjDF3d46sXr3auLi4mOrVq5vZs2eb5cuXm5iYGOtxTpdeb+HChU3Hjh3NsmXLzNy5c01KSoqJjo42+fLlM59//rlJSEgwCxcuNAMG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n1ehQoVs2i9cuKBFixZl2BcHBwfVqFFDUvbPkejoaDk5OWn//v2ZjgsPD5d048e5v7+/Zs6cKWOMdbuHDh3SunXrsjhyOS/9/M/udFPpxhNV3dzcFB8fr/j4eBUuXFjPP//8bceXKlVK/fr1U7ly5TKc89kRGxtrfbLqrdMka9WqpX/++UcLFy60aU9/cmb6kwczU7VqVbm7u2v69Ok27X/99ZdWr16d5bK34+7ursjISH377bcZrlS6mcViyfDds3XrVq1fv/6utylJPj4+atq0qbp27aozZ84oKSnptmPv5T2/2+/LO50jISEhKlmypP7444/bfrZunnqYHUWLFlW3bt1Up06dezrPbuXp6anw8HAtXLhQ165ds7b/888/mT7lEQBgf7jSCwDwSH388cd3HPPqq69qxowZqlevnt566y1FRETI2dlZf/31l9asWaOXXnpJjRo1UrVq1ZQnTx517txZAwcOlLOzs2bMmKE//vjjgdYcFxen1atXq379+ipatKiuXLlivfqqdu3aNmMdHR1Vp04d9erVS2lpaRo+fLjOnz+vwYMHW8eMHTtWzz77rKpXr6433nhDgYGBunDhgvbt26fvvvtOq1evlnRjWti8efNUo0YN9ezZU2FhYUpLS9Phw4e1cuVK9e7dW1WqVNHzzz+vGjVq6O2339bFixcVHh6uX375RV9//fVd7WdsbKw6deqko0ePqlq1ahmu0qhSpYoaNGigsLAw5cmTRzt37tTXX3+tqlWrZnlFSseOHXX27Fk1adJEZcuWlaOjo3bt2qXRo0fLwcFB77zzjs14Pz8/vfHGGzp8+LBKlSqlpUuX6osvvtAbb7yhokWLSsr+ORIYGKgPPvhA77//vg4cOKC6desqT548OnHihH799Vfr1WsODg768MMP1b59ezVq1EgdOnTQ2bNnNWjQoIcyvfFBKlu2rCTp888/l7e3t9zc3BQUFJTp1K90Pj4+atSokeLj43X27Fn16dNHDg7/9/9Ct27dqm7duumVV15RyZIl5eLiotWrV2vr1q3q27fvXdfo6Oiojz76SI0aNZJ041566Vq3bq0JEyaoTZs2SkpKUrly5fTzzz/ro48+Ur169TJ8xm7dj/79++u9995T69at1aJFC50+fVqDBw+Wm5ubBg4ceNe1SjemLj777LOqUqWK+vbtqxIlSujEiRNa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xaDcj3h75+56kZiYGE2bNk2dOnVSXFycTV+XLl00adIktWnTRvHx8Q+oyCdDQECAjh07prx5897XeubPny9nZ2fr68DAQPXo0YMgDAAAAACAfwmu9MpBAQEBmjVrli5fvmxtu3LlimbOnKmiRYvmYGU5x9HRUQULFpST0/3lsb6+vvL29n5AVQEAAAAAgCcNoVcOqlSpkooWLar58+db2+bPn6+AgABVrFjR2rZ8+XI9++yz8vHxkZ+fnxo0aKD9+/db+7/66it5eXlp79691rY333xTpUqV0sWLF+9Yx8SJE1WyZEm5ubmpQIECatq0qbUvKipK3bp1U7du3azb79evn4wx1jHJyclq2LCh3N3dFRQUpBkzZtzzMbl1emNCQoIsFotWrFihihUryt3dXc8995ySk5O1bNkyhYaGKleuXGrRooUuXbpkU3f6VV1RUVE6dOiQevbsKYvFIovFcs/1AQAAAAAeb4F9lyiw75KcLgOPAUKvHNa2bVtNnTrV+vrLL79UbGyszZiLFy+qV69e2rRpk1atWiUHBwc1atRIaWlpkqTWrVurXr16eu2115SSkqLly5frs88+04wZM+Tp6Znl9jdv3qzu3bvrgw8+0O7du7V8+XLVqFHDZsy0adPk5OSkjRs3aty4cRo9erQmT55s7Y+JiVFSUpJWr16tuXPnauLEiUpOTr7fQ2Nj0KBB+p//+R+tW7dOR44cUbNmzTRmzBh98803WrJkib7//nuNHz8+02Xnz5+vIkWK6IMPPtCxY8d07NixB1obAAAAAAB4/NjnPb2eIK1atdK7775rvcLpl19+0axZs5SQkGAd06RJE5tlpkyZovz582vHjh0qW7asJOmzzz5TWFiYunfvrvnz52vgwIGqXLnyHbd/+PBheXp6qkGDBvL29laxYsVsrjKTbkzDHD16tCwWi0JCQrRt2zaNHj1aHTp00J49e7Rs2TJt2LBBVapUsdYXGhp6n0fG1pAhQ/TMM89Iktq1a6d3331X+/fvV/HixSVJTZs21Zo1a/TOO+9kWNbX11eOjo7y9vZWwYIFH2hdAAAAAADg8cSVXjksb968ql+/vqZNm6apU6eqfv36GW7ivn//frVs2VLFixdXrly5FBQUJOlGYJUuT548mjJliiZNmqTg4GD17ds3W9uvU6eOihUrpuLFi6tVq1aaMWOGzTRB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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "bx = Segment_df[['Mean_speed','Max_spd_limit','Cars_traversing']].plot(kind='bar', title =\"Mean speed vs Speed limit vs No of cars traversing\", figsize=(15, 10), legend=True, fontsize=12)\n",
+ "bx.set_xlabel(\"edge_id\", fontsize=12)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#no.of.individual exceeded cases per segment\n",
+ "def individual_cases(edge, track_id):\n",
+ " \n",
+ " \n",
+ " \"\"\"\n",
+ " DOC STRING\n",
+ " \n",
+ " Parameters:\n",
+ " edge- ID of the road segment\n",
+ " track_id- ID of a particular track\n",
+ " \n",
+ " Usage:\n",
+ " returns the number of cases where the speed limit has been exceeded by cars for the given segment\n",
+ " \n",
+ " Output:\n",
+ " Number of cases where the speed limit has been exceeded by cars for the given segment (Integer)\n",
+ " \n",
+ " Note:\n",
+ " In this function, when the speed of a car is above the maxspeed (speed limit) continuously \n",
+ " for a single track then all the consecutive speed which is above the speed limit is considered\n",
+ " as a single case instead of a number of cases\n",
+ " \n",
+ " \"\"\"\n",
+ " \n",
+ " count = 0\n",
+ " edge_df= tracks[(tracks['id_2'] == edge)] #id_2 is the edge id of our defined network\n",
+ " max_speed = speed_limit(edge)\n",
+ " edge_track= edge_df[edge_df['track.id']==track_id]\n",
+ " list_of_speedS = list(edge_track['Speed.valu'])\n",
+ " \n",
+ " for i in range(len(list_of_speedS)):\n",
+ " if i!=0 and list_of_speedS[i]> max_speed:\n",
+ " \n",
+ " if list_of_speedS[i-1]> max_speed:\n",
+ " continue\n",
+ " else:\n",
+ " count=count+1 \n",
+ " elif i==0 and list_of_speedS[i]> max_speed:\n",
+ " count=count+1\n",
+ " \n",
+ " return count"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#performing individual_cases() for all tracks passing through all segments\n",
+ "\n",
+ "indi_excedCases=[]\n",
+ "for i in segment_numbers:\n",
+ " cases =0\n",
+ " for j in track_numbers:\n",
+ " a=individual_cases(i,j)\n",
+ " cases=cases + a\n",
+ " indi_excedCases.append(cases)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#appending the number of cases to the segment dataframe\n",
+ "\n",
+ "Segment_df['Spd_Ex_Indi_cases']=indi_excedCases"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " segment_id \n",
+ " No_of_stops \n",
+ " Cars_traversing \n",
+ " Mean_speed \n",
+ " waiting_cars \n",
+ " Geometry \n",
+ " Max_spd_limit \n",
+ " Spd_Ex_Indi_cases \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 58 \n",
+ " 3 \n",
+ " 34 \n",
+ " 36.970931 \n",
+ " 3 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 57 \n",
+ " 0 \n",
+ " 34 \n",
+ " 42.215972 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 16 \n",
+ " 0 \n",
+ " 5 \n",
+ " 35.180043 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 34 \n",
+ " 0 \n",
+ " 16 \n",
+ " 43.091033 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 67 \n",
+ " 5 \n",
+ " 12 \n",
+ " 33.084823 \n",
+ " 4 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " 13 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 69 \n",
+ " 11 \n",
+ " 0 \n",
+ " 5 \n",
+ " 51.757365 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " 70 \n",
+ " 9 \n",
+ " 0 \n",
+ " 5 \n",
+ " 53.403321 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " 71 \n",
+ " 2 \n",
+ " 4 \n",
+ " 16 \n",
+ " 31.404686 \n",
+ " 4 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " 72 \n",
+ " 40 \n",
+ " 0 \n",
+ " 3 \n",
+ " 72.666667 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 70.0 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " 73 \n",
+ " 70 \n",
+ " 0 \n",
+ " 3 \n",
+ " 52.600000 \n",
+ " 0 \n",
+ " [LINESTRING (7.6101365 51.9491494, 7.6107765 5... \n",
+ " 50.0 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "74 rows × 8 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " segment_id No_of_stops Cars_traversing Mean_speed waiting_cars \\\n",
+ "0 58 3 34 36.970931 3 \n",
+ "1 57 0 34 42.215972 0 \n",
+ "2 16 0 5 35.180043 0 \n",
+ "3 34 0 16 43.091033 0 \n",
+ "4 67 5 12 33.084823 4 \n",
+ ".. ... ... ... ... ... \n",
+ "69 11 0 5 51.757365 0 \n",
+ "70 9 0 5 53.403321 0 \n",
+ "71 2 4 16 31.404686 4 \n",
+ "72 40 0 3 72.666667 0 \n",
+ "73 70 0 3 52.600000 0 \n",
+ "\n",
+ " Geometry Max_spd_limit \\\n",
+ "0 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "1 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "2 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "3 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "4 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ ".. ... ... \n",
+ "69 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "70 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "71 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "72 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 70.0 \n",
+ "73 [LINESTRING (7.6101365 51.9491494, 7.6107765 5... 50.0 \n",
+ "\n",
+ " Spd_Ex_Indi_cases \n",
+ "0 5 \n",
+ "1 5 \n",
+ "2 0 \n",
+ "3 4 \n",
+ "4 13 \n",
+ ".. ... \n",
+ "69 6 \n",
+ "70 7 \n",
+ "71 2 \n",
+ "72 2 \n",
+ "73 2 \n",
+ "\n",
+ "[74 rows x 8 columns]"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Segment_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAABL0AAANfCAYAAAA8aq+mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdedhXVb03/vfNeDMrMzLK4AA+IGQKauJEDkCamJojiR7Hx3JKEUEoFTHNtJNZmcPjFGJaOaSVoEcTc0aPQw4J6iEVRUAREGT//vDHfbpjvAGFdq/XdX3/uPdae63P3t+vV/G+1l67oiiKIgAAAABQIrU2dAEAAAAAsL4JvQAAAAAoHaEXAAAAAKUj9AIAAACgdIReAAAAAJSO0AsAAACA0hF6AQAAAFA6Qi8AAAAASkfoBQAAAEDpCL0AYDWuu+66VFRUpLKyMjNmzFiufdddd80222yzASpLJk6cmF69eqVBgwapqKjIM888s8J+DzzwQCoqKvLAAw+st7mnT5+eioqKXHfddVXHxo4dm4qKirUar0uXLhk+fPhq+30e17Iu9fwrWtF39+9mff9+AYCNj9ALANbQokWLcu65527oMqrMmjUrRxxxRLp165Z77703U6dOzRZbbLHCvv369cvUqVPTr1+/z7WmY445JlOnTl2rc++4446MHj16PVcEa25dfr8AwManzoYuAAD+Vey99965+eabc8YZZ6RPnz4bupy8/PLLWbx4cQ4//PAMHDhwlX2bNm2a/v37f+41dejQIR06dFirc/v27bueq4GaWZffLwCw8bHSCwDW0He/+920aNEiZ5111mr7Lly4MCNHjszmm2+eevXqpX379jnppJMyZ86cNZrrd7/7XQYMGJCGDRumSZMmGTRoULUVKMOHD8/OO++cJDn44INTUVGRXXfddaXjreiRwOHDh6dx48Z59dVXs++++6Zx48bp2LFjTj/99CxatKja+TNnzsxBBx2UJk2apFmzZjn44IPz9ttvLzfPPz8etv/++6dz585ZunTpcn132GGHaivPVvQ44UsvvZS99947DRs2TMuWLXP88cfnww8/XG6slT2KuOuuu1a7LwsXLszpp5+ebbfdNs2aNUvz5s0zYMCA/Pa3v13u3DU1adKk7LDDDmnWrFkaNmyYrl275uijj65qX3bvb7zxxpx22mlp27ZtGjRokIEDB+bpp59ebrwnnngiX/va19K8efNUVlamb9++ufXWW5fr9/bbb+e4445Lhw4dUq9evWy++eYZN25clixZUq3fmn53K7O6eYqiyL777psWLVrkjTfeqDrv448/Tq9evbL11ltn/vz5Vcfvvffe7LHHHlX3a+utt8748eM3inuwoscbu3TpkiFDhuTee+9Nv3790qBBg2y11Va55pprljv/4YcfzoABA1JZWZn27dtn9OjRufrqq1NRUZHp06ev9l7/5S9/ydChQ9OiRYtUVlamW7du+c53vlPV/uqrr+Zb3/pWevTokYYNG6Z9+/YZOnRonnvuuWrjLF26NOeff3623HLLNGjQIJtsskl69+6dyy+/vFq/V155JYceemhat26d+vXrZ+utt85PfvKTtRoLADZGVnoBwBpq0qRJzj333Hz729/O5MmTs/vuu6+wX1EU2X///XP//fdn5MiR+cpXvpJnn3025513XqZOnZqpU6emfv36K53n5ptvzmGHHZavfvWrueWWW7Jo0aJcfPHF2XXXXXP//fdn5513zujRo7P99tvnpJNOyoUXXpjddtstTZs2rfE1LV68OF/72tcyYsSInH766fmv//qvfP/730+zZs0yZsyYJMmCBQuy5557ZubMmRk/fny22GKL3H333Tn44INXO/7RRx+d/fbbL5MnT86ee+5Zdfyll17KY489liuuuGKl577zzjsZOHBg6tatmyuvvDJt2rTJTTfdlJNPPrnG17nMokWLMnv27Jxxxhlp3759Pvnkk/zpT3/KAQcckGuvvTZHHnlkjcabOnVqDj744Bx88MEZO3Zs1b5vkydPXq7vOeeck379+uXqq6/O3LlzM3bs2Oy66655+umn07Vr1yTJlClTsvfee2eHHXbIVVddlWbNmuVXv/pVDj744Hz88cdVwd7bb7+d7bffPrVq1cqYMWPSrVu3TJ06Neeff36mT5+ea6+9Nsm6fXdrOk9FRUVuuOGGbLvttjnooIPy0EMPpW7dujnxxBPz+uuv5y9/+UsaNWqUJPnlL3+ZY489NgMHDsxVV12V1q1b5+WXX85///d/V825sd2DJJk2bVpOP/30nH322WnTpk2uvvrqjBgxIt27d88uu+ySJHn22WczaNCgbLHFFrn++uvTsGHDXHXVVbnxxhvXaI777rsvQ4cOzdZbb50f/vCH6dSpU6ZPn54//OEPVX1mzpyZFi1a5KKLLkqrVq0ye/bsXH/99dlhhx3y9NNPZ8stt0ySXHzxxRk7dmzOPffc7LLLLlm8eHFeeumlaqH7Cy+8kB133DGdOnXKpZdemrZt2+a+++7LKaeckvfeey/nnXfeGo8FAButAgBYpWuvvbZIUjz++OPFokWLiq5duxbbbbddsXTp0qIoimLgwIFFr169qvrfe++9RZLi4osvrjbOxIkTiyTFz3/+85XO9emnnxabbbZZ8X/+z/8pPv3006rjH374YdG6detixx13rDo2ZcqUIkkxadKk1V7Dsr5TpkypOnbUUUcVSYpbb721Wt9999232HLLLav+/ulPf1okKX77299W63fssccWSYprr7226th5551X/OP/vVi8eHHRpk2b4tBDD6127ne/+92iXr16xXvvvVd1rHPnzsVRRx1V9fdZZ51VVFRUFM8880y1cwcNGrTctfzzucsMHDiwGDhw4HLHl1myZEmxePHiYsSIEUXfvn2rta1szH90ySWXFEmKOXPmrLTPsnvfr1+/qt9MURTF9OnTi7p16xbHHHNM1bGtttqq6Nu3b7F48eJqYwwZMqRo165d1W/iuOOOKxo3blzMmDFjhfU8//zzRVHU7LtbkTWdpyiK4uGHHy7q1KlTfOc73ymuueaaIklx9dVXV7V/+OGHRdOmTYudd9652n34ZxvyHvzz77coPvsdVFZWVptnwYIFRfPmzYvjjjuu6tg3vvGNolGjRsWsWbOqjn366adFz549iyTF66+/vtJrLoqi6NatW9GtW7diwYIFq+z3j5YsWVJ88sknRY8ePYpTTz216viQIUOKbbfddpXn7rXXXkWHDh2KuXPnVjt+8sknF5WVlcXs2bPXeCwA2Fh5vBEAaqBevXo5//zz88QTT6zwcaskVat8/vlxu2984xtp1KhR7r///pWO/9e//jUzZ87MEUcckVq1/vd/phs3bpxhw4bl0Ucfzccff7zuF/L/q6ioyNChQ6sd6927d7W3VE6ZMiVNmjTJ1772tWr9Dj300NWOX6dOnRx++OG5/fbbM3fu3CTJp59+mhtuuCH77bdfWrRosdJzp0yZkl69ei23f9qazLsqkyZNyk477ZTGjRunTp06qVu3bn75y1/mxRdfrPFYX/7yl5MkBx10UG699db8z//8z0r7HnroodUenevcuXN23HHHTJkyJclnj6699NJLOeyww5IkS5Ysqfrsu++++fvf/56//vWvSZK77roru+22WzbbbLNq/fbZZ58kyYMPPphk3b67msyTJDvttFMuuOCC/OhHP8oJJ5yQww8/PCNGjKhqf+SRRzJv3ryceOKJK31D4sZ4D5Jk2223TadOnar+rqyszBZbbFHtv5MHH3wwu+++e1q2bFl1rFatWjnooINWO/7LL7+c1157LSNGjEhlZeVK+y1ZsiQXXnhhevbsmXr16qVOnTqpV69eXnnllWq/3+233z7Tpk3LiSeemPvuuy/z5s2rNs7ChQtz//335+tf/3oaNmy43H1euHBhHn300TUaCwA2ZkIvAKihQw45JP369cuoUaOyePHi5drff//91KlTJ61atap2vKKiIm3bts3777+/0rGXtbVr1265ts022yxLly7NBx98sI5X8L8aNmy43D+y69evn4ULF1arqU2bNsud27Zt2zWa4+ijj87ChQvzq1/9Kslnj3H9/e9/z7e+9a1Vnvf++++vcI41nXdFbr/99hx00EFp3759brzxxkydOjWPP/54VY01tcsuu+Q3v/lNlixZkiOPPDIdOnTINttsk1tuuWWN6v7H38M777yTJDnjjDNSt27dap8TTzwxSfLee+9V9b3zzjuX69erV69q/db1u1vTeZY57LDDUq9evSxatChnnnlmtbZZs2YlySo3it8Y70GSFYaz9evXz4IFC6r+Xtk8Kzr2z9bk3iTJaaedltGjR2f//ffPnXfemb/85S95/PHH06dPn2q1jBw5MpdcckkeffTR7LPPPmnRokX22GOPPPHEE1W1LlmyJD/+8Y+Xu3/77rtvkv+9f6sbCwA2Zvb0AoAaqqioyIQJEzJo0KD8/Oc/X669RYsWWbJkSWbNmlUt+CqKIm+//XbV6qAVWfaP67///e/Ltc2cOTO1atXKpptuuh6uYs21aNEijz322HLH13Qz9J49e2b77bfPtddem+OOOy7XXnttNttss3z1q19d7bwrmmNFxyorK5fbfD/57B/u/7jy5sYbb8zmm2+eiRMnVltttKJz19R+++2X/fbbL4sWLcqjjz6a8ePH59BDD02XLl0yYMCAVdb99ttvV33ny+ocOXJkDjjggBXOtWzPppYtW6Z379654IILVthvs802S7Lu392azpN8toLvsMMOy6abbpr69etnxIgR+fOf/5x69eolSdV/C2+99dYq50s2rnuwplq0aFEV2tV0njW5N8lnv98jjzwyF154YbXj7733XjbZZJOqv+vUqZPTTjstp512WubMmZM//elPOeecc7LXXnvlzTffzKabbpratWvniCOOyEknnbTCuTbffPM1Gqthw4arvT4A2FCs9AKAtbDnnntm0KBB+d73vpePPvqoWtsee+yRJMttYP3rX/868+fPr2pfkS233DLt27fPzTffnKIoqo7Pnz8/v/71r6ve6PhF2m233fLhhx/md7/7XbXjN9988xqP8a1vfSt/+ctf8vDDD+fOO+/MUUcdldq1a6923ueffz7Tpk1b7bxdunTJs88+W+3Yyy+/XPUo3DIVFRWpV69etcDr7bffXqe3Ny5Tv379DBw4MBMmTEiS5d7MeMstt1T7TmfMmJFHHnmk6u2SW265ZXr06JFp06Zlu+22W+GnSZMmSZIhQ4bkv//7v9OtW7cV9lsW+Kzrd7em8yTJeeedl4ceeig33XRTJk6cmGnTplVb7bXjjjumWbNmueqqq6rdh3+0Md6DNTVw4MBMnjy52uq3pUuXZtKkSas9d4sttki3bt1yzTXXrDKAraioWO4lGHffffcqH6vdZJNNcuCBB+akk07K7NmzM3369DRs2DC77bZbnn766fTu3XuF929Fq9tWNBYAbMys9AKAtTRhwoR86Utfyrvvvlv1SFWSDBo0KHvttVfOOuuszJs3LzvttFPV2xv79u2bI444YqVj1qpVKxdffHEOO+ywDBkyJMcdd1wWLVqUH/zgB5kzZ04uuuiiL+LSqjnyyCNz2WWX5cgjj8wFF1yQHj165J577sl99923xmN885vfzGmnnZZvfvObWbRo0XL7na3Id77znVxzzTUZPHhwzj///Kq3N7700kvL9T3iiCNy+OGH58QTT8ywYcMyY8aMXHzxxcs9YjpkyJDcfvvtOfHEE3PggQfmzTffzPe///20a9cur7zyyhpfzzJjxozJW2+9lT322CMdOnTInDlzcvnll6du3boZOHBgtb7vvvtuvv71r+fYY4/N3Llzc95556WysjIjR46s6vOzn/0s++yzT/baa68MHz487du3z+zZs/Piiy/mqaeeqgpQvve97+WPf/xjdtxxx5xyyinZcssts3DhwkyfPj333HNPrrrqqnTo0GGdv7s1neePf/xjxo8fn9GjR1eFuuPHj88ZZ5yRXXfdNV//+tfTuHHjXHrppTnmmGOy55575thjj02bNm3y6quvZtq0afnP//zPjfIerKlRo0blzjvvzB577JFRo0alQYMGueqqqzJ//vwkqbZH34r85Cc/ydChQ9O/f/+ceuqp6dSpU954443cd999uemmm5J89vu97rrrstVWW6V379558skn84Mf/GC5xyKHDh2abbbZJtttt11atWqVGTNm5Ec/+lE6d+6cHj16JEkuv/zy7LzzzvnKV76SE044IV26dMmHH36YV199NXfeeWfV3oRrMhYAbLQ27D76ALDx+8e3N/6zQw89tEhS7e2NRfHZ293OOuusonPnzkXdunWLdu3aFSeccELxwQcfrNGcv/nNb4oddtihqKysLBo1alTssccexZ///OdqfdbH2xsbNWq0XN8VvcHurbfeKoYNG1Y0bty4aNKkSTFs2LDikUceWaO33y2z7F7ttNNOK2xf0dsSX3jhhWLQoEFFZWVl0bx582LEiBHFb3/72+WuZenSpcXFF19cdO3ataisrCy22267YvLkySt8e+NFF11UdOnSpahfv36x9dZbF7/4xS9W+ta+1b298a677ir22Wefon379kW9evWK1q1bF/vuu2/x0EMPVfVZdu9vuOGG4pRTTilatWpV1K9fv/jKV75SPPHEE8uNOW3atOKggw4qWrduXdStW7do27ZtsfvuuxdXXXVVtX6zZs0qTjnllGLzzTcv6tatWzRv3rz40pe+VIwaNar46KOPqvqt6Xe3MqubZ+bMmUXr1q2L3XffvdobR5cuXVoMHTq02GSTTaq9ufCee+4pBg4cWDRq1Kho2LBh0bNnz2LChAkbxT1Y2e9g8ODBy92XFf22HnrooWKHHXYo6tevX7Rt27Y488wziwkTJqz2DZ/LTJ06tdhnn32KZs2aFfXr1y+6detW7a2MH3zwQTFixIiidevWRcOGDYudd965eOihh5ar5dJLLy123HHHomXLlkW9evWKTp06FSNGjCimT59ebb7XX3+9OProo4v27dsXdevWLVq1alXsuOOOxfnnn1/jsQBgY1RRFCtZXw4AwDp74IEHsttuu2XSpEk58MADN3Q5fMG++tWvZvr06Xn55Zc3dCkA8G/H440AALAenHbaaenbt286duyY2bNn56abbsof//jH/PKXv9zQpQHAvyWhFwAArAeffvppxowZk7fffjsVFRXp2bNnbrjhhhx++OEbujQA+Lfk8UYAAAAASmfVr5EBAAAAgH9BQi8AAAAASkfoBQAAAEDpbPQb2S9dujQzZ85MkyZNUlFRsaHLAQAAAGADKYoiH374YTbbbLPUqrXqtVwbfeg1c+bMdOzYcUOXAQAAAMBG4s0330yHDh1W2WejD72aNGmS5LOLadq06QauBgAAAIANZd68eenYsWNVXrQqG33oteyRxqZNmwq9AAAAAFijLbBsZA8AAABA6Qi9AAAAACgdoRcAAAAApbPR7+kFAAAA1MzSpUvzySefbOgyYK3UrVs3tWvXXudxhF4AAABQIp988klef/31LF26dEOXAmttk002Sdu2bddow/qVEXoBAABASRRFkb///e+pXbt2OnbsmFq17GrEv5aiKPLxxx/n3XffTZK0a9durccSegEAAEBJLFmyJB9//HE222yzNGzYcEOXA2ulQYMGSZJ33303rVu3XutHHUW+AAAAUBKffvppkqRevXobuBJYN8tC28WLF6/1GEIvAAAAKJl12QcJNgbr4zcs9AIAAACgdIReAAAAQClNnz49FRUVeeaZZzZ0KevN2LFjs+2221b9PXz48Oy///4bsKKNl43sAQAAoOS6nH33Fzrf9IsG1/icd999N6NHj87vf//7vPPOO9l0003Tp0+fjB07NgMGDPgcqqxu+vTp2XzzzVfYNnXq1PTv33+9jP/0009XC63W1eWXX56iKNbbeGUi9AIAAAA2uGHDhmXx4sW5/vrr07Vr17zzzju5//77M3v27C+0jj/96U/p1atXtWMtWrT4QmuoiWbNmm3oEjZaHm8EAAAANqg5c+bk4YcfzoQJE7Lbbrulc+fO2X777TNy5MgMHvzZqrGKior89Kc/zT777JMGDRpk8803z6RJk6qN89hjj6Vv376prKzMdtttl6effrrGtbRo0SJt27at9qlbt26Kosiee+6Zvffeu2pl1Zw5c9KpU6eMGjWqxvM88MADqaioyP3335/tttsuDRs2zI477pi//vWv1fpddNFFadOmTZo0aZIRI0Zk4cKF1dpr8njj0qVLM2HChHTv3j3169dPp06dcsEFF1S1n3XWWdliiy3SsGHDdO3aNaNHj6729sRp06Zlt912S5MmTdK0adN86UtfyhNPPFHV/sgjj2SXXXZJgwYN0rFjx5xyyimZP39+VfuVV16ZHj16pLKyMm3atMmBBx5Yo3tWU0IvAAAAYINq3LhxGjdunN/85jdZtGjRSvuNHj06w4YNy7Rp03L44Yfnm9/8Zl588cUkyfz58zNkyJBsueWWefLJJzN27NicccYZ663GioqKXH/99XnsscdyxRVXJEmOP/74tGnTJmPHjl3rcUeNGpVLL700TzzxROrUqZOjjz66qu3WW2/NeeedlwsuuCBPPPFE2rVrlyuvvHKt5xo5cmQmTJiQ0aNH54UXXsjNN9+cNm3aVLU3adIk1113XV544YVcfvnl+cUvfpHLLrusqv2www5Lhw4d8vjjj+fJJ5/M2Wefnbp16yZJnnvuuey111454IAD8uyzz2bixIl5+OGHc/LJJydJnnjiiZxyyin53ve+l7/+9a+59957s8suu6z1tayJimIjf/Bz3rx5adasWebOnZumTZtu6HIAAABgo7Vw4cK8/vrr2XzzzVNZWVl1/F9hT69f//rXOfbYY7NgwYL069cvAwcOzCGHHJLevXsn+Sx0Ov744/PTn/606pz+/funX79+ufLKK/Pzn/88I0eOzJtvvpmGDRsmSa666qqccMIJa7SP1rI9txo0aJBataqvEZo7d25q166dJJk0aVKOOOKInHbaabn88svz9NNPZ4sttljt9f3znl4PPPBAdtttt/zpT3/KHnvskSS55557Mnjw4CxYsCCVlZXZcccd06dPn+WueeHChVWb8w8fPjxz5szJb37zm1XO/+GHH6ZVq1b5z//8zxxzzDGrrTdJfvCDH2TixIlVq7maNm2aH//4xznqqKOW63vkkUemQYMG+dnPflZ17OGHH87AgQMzf/783HPPPfnWt76Vt956K02aNFnt3Cv7LdckJ7LSCwAAANjghg0blpkzZ+Z3v/td9tprrzzwwAPp169frrvuuqo+/7yh/YABA6pWer344ovp06dPVeC1ov5rYuLEiXnmmWeqfZYFXknyjW98IwcccEDGjx+fSy+9dI0Cr1VZFuolSbt27ZJ8tql/8tk1reia18aLL76YRYsWVQVsK3Lbbbdl5513Ttu2bdO4ceOMHj06b7zxRlX7aaedlmOOOSZ77rlnLrroorz22mtVbU8++WSuu+66qlV7jRs3zl577ZWlS5fm9ddfz6BBg9K5c+d07do1RxxxRG666aZ8/PHHa3Uta0roBQAAAGwUKisrM2jQoIwZMyaPPPJIhg8fnvPOO2+V51RUVCTJenuDYceOHdO9e/dqn3/08ccf58knn0zt2rXzyiuvrPN8yx4PTP73WpYuXbrO4/6zBg0arLL90UcfzSGHHJJ99tknd911V55++umMGjUqn3zySVWfsWPH5vnnn8/gwYMzefLk9OzZM3fccUdVzccdd1y1sHDatGl55ZVX0q1btzRp0iRPPfVUbrnllrRr1y5jxoxJnz59MmfOnPV+rcsIvQAAAICNUs+ePatthP7oo49Wa3/00Uez1VZbVfWdNm1aFixYsNL+68Ppp5+eWrVq5fe//32uuOKKTJ48eb3PsczWW2+9wmteGz169EiDBg1y//33r7D9z3/+czp37pxRo0Zlu+22S48ePTJjxozl+m2xxRY59dRT84c//CEHHHBArr322iRJv3798vzzzy8XGHbv3j316tVLktSpUyd77rlnLr744jz77LOZPn3653r/6nxuIwMAAACsgffffz/f+MY3cvTRR6d3795p0qRJnnjiiVx88cXZb7/9qvpNmjQp2223XXbeeefcdNNNeeyxx/LLX/4ySXLooYdm1KhRGTFiRM4999xMnz49l1xyyVrV8vbbb1c7tskmm6SysjJ33313rrnmmkydOjX9+vXL2WefnaOOOirPPvtsNt1003W7CSvw7W9/O0cddVS1a37++efTtWvXGo9VWVmZs846K9/97ndTr1697LTTTpk1a1aef/75jBgxIt27d88bb7yRX/3qV/nyl7+cu+++u2oVV5IsWLAgZ555Zg488MBsvvnmeeutt/L4449n2LBhST5782P//v1z0kkn5dhjj02jRo3y4osv5o9//GN+/OMf56677srf/va37LLLLtl0001zzz33ZOnSpdlyyy3X2/36Z0IvAAAAYINq3Lhxdthhh1x22WV57bXXsnjx4nTs2DHHHntszjnnnKp+48aNy69+9auceOKJadu2bW666ab07Nmzaow777wzxx9/fPr27ZuePXtmwoQJVaHMmtpzzz2XO3bLLbdkjz32yIgRIzJ27Nj069cvSXLeeeflD3/4Q44//vhMnDhxHe7Aih188MF57bXXctZZZ2XhwoUZNmxYTjjhhNx3331rNd7o0aNTp06djBkzJjNnzky7du1y/PHHJ0n222+/nHrqqTn55JOzaNGiDB48OKNHj656M2Xt2rXz/vvv58gjj8w777yTli1b5oADDsi4ceOSfLY32YMPPphRo0blK1/5SoqiSLdu3XLwwQcn+Sw4vP322zN27NgsXLgwPXr0yC233JJevXqt+41aCW9vBAAAgJJY2RvvyqCioiJ33HFH9t9//w1dCl8Ab28EAAAAgBUQegEAAACld/zxx6dx48Yr/Cx7xG9jHn913njjjZXO37hx47zxxhufew0bGzmoca8AACAASURBVI83AgAAQEmU+fHGdfXuu+9m3rx5K2xr2rRpWrduvVGPvzpLlizJ9OnTV9repUuX1Knzr7O1+/p4vPFf52oBAAAA1lLr1q0/1+Dp8x5/derUqZPu3btvsPk3Rh5vBAAAAKB0hF4AAABQMhv5TkawWkuXLl3nMdb58carr746xx57bBo1apSPPvqoWttTTz2V7373u3n00UdTp06d7L777rnkkkvStWvXdZ0WAAAA+Cd169ZNRUVFZs2alVatWqWiomJDlwQ1UhRFPvnkk8yaNSu1atVKvXr11nqsddrI/n/+53/Sq1evNGrUKHPnzq0Wer300kvZfvvts+222+bss8/OwoULM2bMmHzwwQd55pln0qpVqzWaw0b2AAAAsOY++uijvPXWW1Z78S+tYcOGadeu3XKhV01yonUKvYYOHZqKioo0b948t912W7XQ66CDDsqUKVPy2muvVRUxY8aM9OjRI6eeemomTJiwRnMIvQAAAKBmPv300yxevHhDlwFrpXbt2qlTp84KVyp+IW9vvPHGG/Pggw/mhRdeyLnnnlutbcmSJbnrrrty5JFHViugc+fO2W233XLHHXescegFAAAA1Ezt2rVTu3btDV0GbFBrtZH9u+++m+985zu56KKL0qFDh+XaX3vttSxYsCC9e/derq1379559dVXs3DhwrWZGgAAAABWa61Wep144onZcsstc8IJJ6yw/f3330+SNG/efLm25s2bpyiKfPDBB2nXrt1y7YsWLcqiRYuq/p43b97alAgAAADAv7Eah16//vWvc+edd+bpp59e7VsgVtW+srbx48dn3LhxNS0LANiAupx99yrbp180+AuqBAAAPlOjxxs/+uijnHTSSfm///f/ZrPNNsucOXMyZ86cfPLJJ0mSOXPmZP78+WnRokWS/13x9Y9mz56dioqKbLLJJiucY+TIkZk7d27V580336zpNQEAAADwb65GK73ee++9vPPOO7n00ktz6aWXLte+6aabZr/99sttt92WBg0a5Lnnnluuz3PPPZfu3bunsrJyhXPUr18/9evXr0lZAAAAAFBNjUKvtm3bZsqUKcsdv+iii/Lggw/m97//fVq2bJk6depk6NChuf3223PxxRenSZMmSZI33ngjU6ZMyamnnrp+qgcAAACAFahR6FVZWZldd911uePXXXddateuXa1t3Lhx+fKXv5whQ4bk7LPPzsKFCzNmzJi0bNkyp59++rrWDQAAAAArVaM9vWpiq622ygMPPJC6devmwAMPzPDhw9O9e/f813/9V1q1avV5TQsAAAAAqSiKotjQRazKvHnz0qxZs8ydOzdNmzbd0OUAACvg7Y0AAHwRapITfW4rvQAAAABgQxF6AQAAAFA6Qi8AAAAASkfoBQAAAEDpCL0AAAAAKB2hFwAAAAClI/QCAAAAoHSEXgAAAACUjtALAAAAgNIRegEAAABQOkIvAAAAAEpH6AUAAABA6Qi9AAAAACgdoRcAAAAApSP0AgAAAKB0hF4AAAAAlI7QCwAAAIDSEXoBAAAAUDpCLwAAAABKR+gFAAAAQOkIvQAAAAAoHaEXAAAAAKUj9AIAAACgdIReAAAAAJSO0AsAAACA0hF6AQAAAFA6Qi8AAAAASkfoBQAAAEDpCL0AAAAAKB2hFwAAAAClI/QCAAAAoHSEXgAAAACUjtALAAAAgNIRegEAAABQOkIvAAAAAEpH6AUAAABA6Qi9AAAAACgdoRcAAAAApSP0AgAAAKB0hF4AAAAAlI7QCwAAAIDSEXoBAAAAUDpCLwAAAABKR+gFAAAAQOkIvQAAAAAoHaEXAAAAAKUj9AIAAACgdIReAAAAAJSO0AsAAACA0hF6AQAAAFA6Qi8AAAAASkfoBQAAAEDpCL0AAAAAKB2hFwAAAAClI/QCAAAAoHSEXgAAAACUjtALAAAAgNIRegEAAABQOkIvAAAAAEpH6AUAAABA6Qi9AAAAACgdoRcAAAAApSP0AgAAAKB0hF4AAAAAlI7QCwAAAIDSEXoBAAAAUDpCLwAAAABKR+gFAAAAQOkIvQAAAAAoHaEXAAAAAKUj9AIAAACgdIReAAAAAJSO0AsAAACA0hF6AQAAAFA6Qi8AAAAASkfoBQAAAEDpCL0AAAAAKB2hFwAAAAClI/QCAAAAoHRqFHo988wzGTx4cDp16pQGDRqkefPmGTBgQG688cZq/YYPH56KiorlPltttdV6LR4AAAAAVqROTTrPmTMnHTt2zDe/+c20b98+8+fPz0033ZQjjjgi06dPz7nnnlvVt0GDBpk8eXK18xs0aLB+qgYAAACAVahR6LXrrrtm1113rXZsyJAhef311/Pzn/+8WuhVq1at9O/ff70UCQAAAAA1sV729GrZsmXq1KlRfgYAAAAAn5u1Cr2WLl2aJUuWZNasWbnyyitz33335ayzzqrWZ8GCBWnbtm1q166dDh065OSTT87s2bPXS9EAAAAAsCprtTzrxBNPzM9+9rMkSb169XLFFVfkuOOOq2rv06dP+vTpk2222SZJ8uCDD+ayyy7L/fffn8cffzyNGzde6diLFi3KokWLqv6eN2/e2pQIAAAAwL+xtQq9zjnnnBxzzDF59913c+edd+bkk0/O/Pnzc8YZZyRJTj311Gr9Bw0alL59++bAAw/ML37xi+Xa/9H48eMzbty4tSkLAAAAAJIkFUVRFOs6yAknnJCrr746M2fOTKtWrVbYZ+nSpWnatGkGDx6ciRMnrnSsFa306tixY+bOnZumTZuua6kAwOegy9l3r7J9+kWDv6BKAAAos3nz5qVZs2ZrlBOtl43st99++yxZsiR/+9vfVtmvKIrUqrXqKevXr5+mTZtW+wAAAABATayX0GvKlCmpVatWunbtutI+t912Wz7++OP0799/fUwJAAAAACtVoz29/uM//iNNmzbN9ttvnzZt2uS9997LpEmTMnHixJx55plp1apVZsyYkUMPPTSHHHJIunfvnoqKijz44IP50Y9+lF69euWYY475vK4FAAAAAJLUMPQaMGBArr322lx//fWZM2dOGjdunD59+uSGG27I4YcfniRp2rRp2rRpkx/+8Id555138umnn6Zz58455ZRTcs4556RRo0afy4UAAAAAwDLrZSP7z1NNNigDADYMG9kDAPBF+MI3sgcAAACAjYnQCwAAAIDSEXoBAAAAUDpCLwAAAABKR+gFAAAAQOkIvQAAAAAoHaEXAAAAAKUj9AIAAACgdIReAAAAAJSO0AsAAACA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AAAAlI7QCwAAAIDSEXoBAAAAUDpCLwAAAABKR+gFAAAAQOkIvQAAAAAoHaEXAAAAAKUj9AIAAACgdIReAAAAAJSO0AsAAACA0hF6AQAAAFA6Qi8AAAAASkfoBQAAAEDp1NnQBQAAAP8aupx99yrbp180+AuqBABWz0ovAAAAAEpH6AUAAABA6Qi9AAAAACgdoRcAAAAApSP0AgAAAKB0hF4AAAAAlI7QCwAAAIDSEXoBAAAAUDpCLwAAAABKR+gFAAAAQOkIvQAAAAAonRqFXpMnT87RRx+drbbaKo0aNUr79u2z33775cknn6zWb/jw4amoqFjus9VWW63X4gEAAABgRerUpPNPf/rTvP/++/n2t7+dnj17ZtasWbn00kvTv3//3Hfffdl9992r+jZo0CCTJ0+udn6DBg3WT9UAAAAAsAo1Cr1+8pOfpHXr1tWO7b333unevXsuvPDCaqFXrVq10r9///VTJQAAAADUQI0eb/znwCtJGjdunJ49e+bNN99cb0UBAAAAwLpY543s586dm6eeeiq9evWqdnzBggVp27ZtateunQ4dOuTkk0/O7Nmz13U6AAAAAFitGj3euCInnXRS5s+fn1GjRlUd69OnT/r06ZNtttkmSfLggw/msssuy/3335/HH388jRs3Xul4ixYtyqJFi6r+njdv3rqWCAAAAMC/mXUKvUaPHp2bbropP/7xj/OlL32p6vipp55ard+gQYPSt2/fHHjggfnFL36xXPs/Gj9+fMaNG7cuZQEAfGG6nH33KtunXzT4C6oEAIB/tNaPN44bNy7nn39+Lrjggpx88smr7f/1r389jRo1yqOPPrrKfiNHjszcuXOrPvYKAwAAAKCm1mql17hx4zJ27NiMHTs255xzzhqfVxRFatVadc5Wv3791K9ff23KAgAAAIAka7HS6/vf/37Gjh2bc889N+edd94an3fbbbfl448/Tv/+/Ws6JQAAAADUSI1Wel166aUZM2ZM9t577wwePHi5RxX79++fGTNm5NBDD80hhxyS7t27p6KiIg8++GB+9KMfpVevXjnmmGPW6wUAAAAAwD+rUeh15513Jknuvffe3Hvvvcu1F0WRpk2bpk2bNvnhD3+Yd955J59++mk6d+6cU045Jeecc04aNWq0fioHAAAAgJWoUej1wAMPrLbPpptumttvv31t6wEAAACA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W7PW/PuW1d7XVN+ae19TfWvufU31xe69NWvLr51/m9evvtg/c8fJ9attqtY85j7L9a259zXVt+be11TfmntftX7lfyOi0e1TSikXa7PVeujdu3fq1atXuu++++otf/vtt9Pmm2+eJkyYkMaMGZNXN27cuDR+/PjmaAkAAACADHjjjTdSz549G92m2c706tq1a8GzuebPn59S+vSMr9WNHTs2nXHGGXX3V6xYkebPn5+6du2acrlc3vaLFi1KW265ZXrjjTdSZWXlOvfZlPpi7rup9a2596bW613vnnvr2Hex6/XeOuv1rnfPvXXsu9j1em+d9XpvnfV61/uGro+ItHjx4rT55puv8XGaLfTadddd05QpU9Ly5cvrXdfrmWeeSSml1KdPn4J15eXlqby8vN6yqqqqNe6vsrJyvV7IDVFfzH03tb41997Uer3rvaXr9d466/XeOuv1rveWrtd766zXe+us13vrrNe73jdkfZcuXdaqvtkuZD9ixIi0ZMmSNG3atHrLf/WrX6XNN9887bnnns21awAAAADauGY70+uggw5K+++/fxo9enRatGhR2n777dOUKVPS/fffn2666aZUWlraXLsGAAAAoI0rHTdu3LjmevARI0akd999N1111VXpuuuuS7W1tenyyy9Po0aN2qD7KS0tTYMGDar3McqWqi/mvpta35p7b2q93vXe0vV6b531em+d9XrXe0vX67111uu9ddbrvXXW613vxahPqRm/vREAAAAAiqXZrukFAAAAAMUi9AIAAAAgc4ReAAAAAGSO0AsAAACAzBF6AQAAAJA5Qq9W7IMPPkgjR45Mzz//fLFbAQBYZx9++GF655130n/+85/04YcfFrudoli+fHn63e9+l+bPn1+U/b/77rtF23dKn8xnAaC5tKrQKyLSrFmz0uTJk9PFF1+cfvzjH6fJkyenWbNmpYjYIPtYtmxZmjNnzgZ5rLUxb9689Je//CXNmzdvnWs/+uij9Jvf/Ga9alNKqba2dr0nmDNmzEiTJk1Kl156afrTn/7U4HZPPPFEk382CxcuTEuXLq237I9//GO6+uqr0913352WL1++xsd455130kMPPZRuu+22dMcdd6Q//elPqba2dp36MDH/hMl5y03OjblPFHPMtaXxlpIxt1JbHnMpNf+4mzdvXho7dmyqqalJHTp0SJtvvnnabLPNUocOHVJNTU36wQ9+sN5zm5RS+sMf/pCGDBlScF1tbW265ZZb0sUXX5zuueeegtu89tpr6Rvf+EbBdf/4xz/SuHHj0oUXXpjeeuutlFJKL7zwQhoxYkTaZZdd0mGHHZb++te/rlO/77//fhoxYkR67rnn1qnugw8+SFdccUU6+uij09e+9rV01VVX5c2XVpo1a1Z6+OGH6y27/vrr09Zbb5023XTT1L1799S7d+901113Fazfeeed0znnnJNee+21depxpd/85jdpxIgR6eijj06zZs1KKaX04IMPpl69eqXOnTunbt26pQkTJjRY//HHH6frr78+HXzwwalnz56pffv2qWPHjql3797phBNOSH/729/WuhfHuU84zpnPtTRjzpgrmmglpkyZEj179oySkpLI5XL1biUlJdGzZ8+YMmVKk/czderUKCkpyVv+yCOPxP777x81NTVxxBFHxF//+te8bWbNmlWwNiLiwgsvjK233jp69eoV1113XUREXHLJJdGuXbsoKSmJsrKyGDNmTF5d586dG73lcrno0KFDdO7cOSorK/PqH3/88Xj//ffrLXvggQeiX79+UVJSEiUlJdG/f/+YMWNGwb4vuOCCOP/88+vuL1q0KPbee+96P4eSkpIYPnx4fPjhh3n1uVwuttpqqzjvvPNi9uzZBffRkA8++CAOO+ywutfntNNOi4iI4447rt6+d91115g/f37Bx5g1a1Z86Utfqnuuq946d+4c3/3ud/Nen1W9++67MWbMmNhxxx2jtLS0rra0tDR23HHHOPvss+Pdd99dp+e1ukcffTQGDx5ccN2yZcvi5ptvjokTJ8bdd99dcJtXX301vv71r+ctf/nll+O8886LCy64IN58882IiHj++efjsMMOi5133jmGDx8eTz311Dr3+95770VJSUn84Q9/WKe6999/Py6//PI46qijYtSoUXHllVfGBx98UHDbP//5z/HQQw/VWzZ58uTYaqut6n4GO+ywQ9x55515tTvttFP84Ac/iFdffXWd+lvVXXfdFYcddlgcddRR8ec//zkiPvm92W677aKkpCS6du0aF110UYP1y5cvj8mTJ8dBBx0UW2yxRVRUVESHDh1ihx12iOOPPz6efvrpBmube8w113iL+GyNuZYabxFNH3PFHG8RxT3OGXOfaskxF9G0cdeUMffaa6/FFltsEe3atYsDDzwwzjzzzJgwYUJMmDAhzjzzzBg6dGiUl5fHlltuGa+99tp6PbeG5nLvvfde9OnTp94cYs8998ybnzQ0n3vuueeiU6dOdfWbbbZZvPjii9GjR4/YdNNNY5999onq6uro1KlTvPDCC/Vqv/3tbzd4++Y3vxm5XC5GjhwZ3/72t+M73/lO3r532mmn+Pvf/153f/78+bHzzjtHLpeLTp06RceOHSOXy0Xfvn1j0aJFefV77bVXvfncr371q8jlctG/f/84++yzY+zYsdGvX78oLS2Ne++9N69+5XMuLS2NfffdN6ZMmRK1tbUFXv1806dPj1wuF1VVVdGjR4/o0KFDPPzww9GxY8cYNGhQfO9734u99torSkpKCs7lFyxYEHvssUe9n1sul4uysrL4/Oc/H5WVlVFWVhY//vGPG+zBcS5fc8/n2vJxLsKYK8SYy+6Yi/hsvm9dqVWEXrfeemvkcrk44IADYsqUKfHcc8/F22+/HW+//XY899xzMWXKlBg6dGiUlJTE7bff3qR9FZooPfnkk7HRRhtFjx49YsiQIVFVVRXt2rWLn//85/W2a2iSdNNNN0Uul4sBAwbEIYccEu3atYtrrrkmSktLY/To0XHjjTfGMcccEyUlJXHLLbfUq83lctGzZ8849thj826jRo2KXC4XQ4cOrVu2upKSknj88cfr7j/22GNRVlYWW265ZYwePTpOOumk6NmzZ7Rr1y6efPLJvPoddtghrr/++rr7J510UnTo0CGuuOKKePnll+Oll16KSy+9NNq3bx/nnHNOXn0ul4vu3bvXTZQOPPDAuP322wsGZKv70Y9+FGVlZfHNb34zzjrrrKiqqorTTjstunTpEjfeeGM8++yzce2110bnzp3jrLPOyqv/f//v/0VFRUV07949Dj/88Bg1alT06tUrysrKYuzYsXHiiSdGVVVV7LnnngUPnC0xMY9onsl5UybmEa17ct6UiXlEcSfnbfXNYETTxpw3g+v/ZrCYxzljrjhjLqJp466pY27kyJHRp0+feP311xvs7/XXX49dd901Dj/88Lzla3O7+uqrC46ZMWPGRHV1dUydOjXmzJkTN954Y/To0SM222yzePbZZ+u2a2jMHXXUUbHjjjvGCy+8EHPnzo3hw4dHTU1N7LHHHrF48eKIiJg7d27stNNO8b//+7/1ald9rQrdVv9j4upyuVy9+dwpp5wSHTt2jGnTpsWKFStixYoVcdttt0X79u1j7NixefVVVVX1xtIuu+wSX/3qV/O2GzFiRHzxi18suP8rrrgijj322OjUqVOUlJREdXV1fOc734m//e1veduvap999okDDjggli1bFhERp59+enTr1i1GjRpVb7vDDz+84L5Hjx4dXbp0iSlTpsTixYtj2bJl8fDDD0fv3r1j7Nix8eGHH8YVV1wRpaWlBd9oOc4VZz7Xlo9zxpwx15bGXERx37eujVYRevXr1y9OPPHENW53wgknRL9+/QquGz9+/FrdjjzyyLwfxPDhw2PgwIGxZMmSiIhYuHBhfO1rX4uSkpKYOHFi3XYNHTwGDhxY7x/2n/3sZ1FRUREnn3xyve2OPPLIvOT0uuuui6qqqhg+fHi89dZb9dYtWLAgcrlcPProow2+JqtPkg488MDYZZdd4r333qtbNn/+/Loz2FbXvn37mDlzZt39TTbZJCZNmpS33YQJE2KbbbZpcP8zZ86MY445Jjp06BAlJSXRvXv3OOOMM+K5555rsPeampoYP3583f277747SkpK8vZ/4YUXRk1NTV794MGD44tf/GLdRDTikwT9uOOOi7322isiPplAd+/ePc4777y8+qZMzFeuK9bkvCkT84jWPTlvysQ8oriT87b6ZjCiaWPOm8H1fzNYzOOcMVecMRfRtHHX1DFXVVUVd9111xp7vPPOO6OqqirveRc6c7uh2+p22mmnuOyyy+ote/PNN6Nv377RvXv3uteuoTG31VZbxS9/+cu6+y+88ELkcrm8P1heffXVsdVWW9Vbtvfee8fmm28ev/nNb/Ied33mcz179owf/vCHedut/Cv/6tq3b1/v8cvKyuLBBx/M2+7ee++NDh06NLr/xYsXx7XXXht77rln3c/kC1/4QvziF78oGPJ27do17rnnnrr7//rXvyKXy8X9999fb7u77747unXrlle/2WabxU9/+tO85Sv/uLny9/3444+PffbZJ287x7nizOfa8nHOmDPmItrOmIso7vvWtdEqQq+Kiop6wUtDHnnkkaioqCi4bk2/gKv/Mq5qiy22iGnTpuU95jnnnBMlJSV1iXJDB4/q6uqYPn163f25c+dGLpeL++67r95206ZNi+rq6rz6t956Kw455JDo0qVLXHPNNXXL33vvvXWeJFVWVtabsK107bXXxqabbpq3fOONN643USkrKyu4v4ceeijatWu3xv0vXLgwrr766vj85z9f91oPHDgwrr/++rpQcaUOHTrEI488Und/8eLFkcvl4o9//GO97WbMmBEdO3bM23enTp0KTi7nzJkTJSUl8cYbb0RExKRJk6J379552zVlYh5R3Ml5UybmEa17ct6UiXlEcSfnbfXNYETTxpw3g+v/ZrCYxzljrjhjLqJp466pY65Tp055+ynkvvvui06dOtVbVl5eHkOGDIlJkyY1evuf//mfgmOmQ4cOBX+m8+fPj9133z26du0aTz31VINjrry8vN7Hcmpra/PGQsQn85JCc6Irr7wyOnfuHEcccUT8+9//rlu+PvO50tLSvI/xRETcf//9BefCu+66a70/1G666aYF57a33nprdOnSZY37X+m5556L008/ve6s/o4dO+Z9dKWysrJeryt/v1a/tMYDDzxQcN/l5eUFn+vK1+2ZZ56JiE+OU4Uu9eE4V5z5XFs+zhlzxlxE2xlzEcV937o2yop9TbG1UV1dnf7xj3+kffbZp9HtXnnllVRdXV1wXbdu3dKIESPSRRdd1Ohj/O53v0vHH398vWXvvfde6t69e962559/fiorK0vnnntuWr58eTrooIMKPubSpUtTx44d6+5vvPHGKaWUNtlkk7welyxZkle/+eabp7vvvjvddNNN6fTTT0833XRTmjx5curRo0ejz6WQDz74IG2//fZ5y3v37l3w4n4DBw5MU6ZMScOGDUsppdSnT580a9as9OUvf7nedrNmzUqbbbbZGvdfWVmZTjrppHTSSSelZ555Jk2ePDndfPPN6fjjj0+nn356WrhwYd22VVVV9S5kO3fu3JTSJxciXNW7776bunTpkrevXC6XSkryv6uhtLQ0RURatGhRSimlfv36FfzyguXLl6f27duv8Tm1b9++4MX027Vrl/baa6908MEHN1r/97//Pd100015y19//fW0++6711u2xRZbpJkzZ6b99tsvDRkyJD344IMFH/Odd95J2223Xd39lf/fq1evetvtuOOO6d///nde/R/+8Id01VVXpWOOOSYdeOCB6aqrrkqbbrppSumT13Vdvf322wV/fwcNGpQuv/zyvOXbb799+vOf/1w3zrp27Vr381rVokWL0kYbbdTgfjt16pROOOGEdMIJJ6Tnn38+TZ48Od10003ppJNOSmeccUb66le/mm644YZ6NR999FGqqKiou79yDLRr167eduXl5emjjz7K2+f8+fPTzjvvnLd8l112SbW1tWn27NmpT58+6eCDD07HHntsvW2aMuaKOd5S+myNuWKNt5TWfcwVc7ylVNzjnDFXnDGXUtPGXVPH3J577pkmTpyYvvSlL9WbG63q/fffTxMnTkwDBw6st7xPnz6pqqoqffe73234BUkpTZs2reBxrrq6Om8OkdIn87KHH3447bvvvmm//fZL48ePL/i4nTt3TgsWLKi7X1ZWlsrLy/Net6VLl9Z7fVc65ZRT0iGHHJJOPPHEtNNOO6Wf/OQn6bjjjmv0uaxq1XFZaF6a0idf+lRaWpq3/Nhjj00XXHBBGjJkSNpjjz3Scccdl84777z0hS98IfXs2TOllNKcOXPSuHHj8uZ4jdl5553TpZdemi6++OL029/+Nl1//fXp17/+db0xt8MOO6S77ror7bvvvimllO68885UXl6e7r///jR48OC67e6999607bbb5u1j2223rfv5rOrBBx9MuVyubj5cVVWVVqxYkVfvOFec+VwC7qc0AAAXJElEQVRbPs4Zc8ZcSm1nzKVU3Peta2W9orIWduqpp0Z1dXXcdttt8fHHH+et//jjj+P222+Prl271l3sfHUHHHBADBo0aI37KvQ51ZqamnpnWK1u3Lhxkcvl4uCDD24wMb/55pvr7q9YsSJOOumkujONVrr99ttjk002abS/d955Jw4//PCoqKiIM888M0pKStaYll988cUxbdq0mDZtWvTo0SN++9vf5m03derU2HjjjfOW//GPf4zS0tI45ZRTYs6cOfH73/8+unTpEj/+8Y/j6aefjqeffjomTJjQ4Ec4GvrL4Kpqa2vj1ltvjQMOOKDe8uHDh8duu+0W//znP2PevHnx1a9+NXbaaafYe++9Y+nSpRHxyYUNBw4cGEOHDs173JU/85WnmK508sknR2VlZd11xaZPn17wDIp99903Bg0alHcG2qqWLFkS++yzT+y///556/r37x8jR45s9LlHNPzZ6J49exb8K2zEJ38p2X333aO6ujquvPLKvPpu3brV+zl//PHHUVFRkfcFDNOnTy/4V9GV/vnPf8b+++8fG2+8cUyePDki1v4v0k888UTd/R49ehT8K+19991X8Cy9Sy65JDbeeOO6xzj77LOjT58+9X5nXn/99aipqYlDDz00b9+NjbkPP/ww7rjjjhg6dGiUlZXlre/fv39861vfqrt//fXXR0VFRd5140477bSCH6euqakp+Ltwxx13RElJScydOzciPjkTYPWzGJoy5oo53iKKO+aKOd5W7n99x1wxx1tEcY9zxlxxxlxE08ZdU8fck08+GZWVlbHJJpvEySefHFdffXXcdtttcfvtt8fVV18dJ598cvTo0SMqKyvzLlp7/PHHx7bbbtvg815p6tSpkcvl8pYPHTo0Ro8e3WDdynG38gLAqxswYED86Ec/WuP+L7/88thll10a3Wbl5SsGDx4cTzzxxFr9u9qxY8e6LzIqKyuLyy+/PG+7K6+8Mrbbbru85R999FEMGzYsysrKYt99941TTz01unTpEhUVFdGvX7/o169flJeXR3V1dcFLT6zNfG6l1ee31157beRyufjyl78chx56aGy00Ubxi1/8IioqKuI73/lO/N///V+cfPLJUVZWFpdcckne4638SM9pp50Wv//972PmzJlx4YUXRlVVVQwbNqxuu+uuu67g6+44V5z5XFs+zhlzxlxE2xlzEZ+N962NaRWh15IlS2L//fePXC4XlZWVseeee8ZBBx0UBx98cOy5555RWVkZJSUlccABBzT4TXxnnnlmwVBndffdd1/etam+8Y1vxL777tto3Y9+9KMGP5s8bNiwRidZK33ve98reLpiIVOnTo0ePXqs1YFj9dvpp5+et92YMWNi9913L/gYN998c93nmrt16xbt27evd3pjLpeL//qv/8oLl1buf20nSat76qmn6u2ruro6Xnzxxdh+++3rvlRg0003jdLS0oIff3388cejoqIiNttsszj66KPj2GOPjZqamigpKal3EcDx48cXfN2bMjGPKO7kfENOzCNa1+S8KRPziOJOzr0Z/NS6jDlvBtf/zWAxj3PGXHHGXETTxl1Tx1xExIsvvhhf+cpXokOHDnlzlA4dOsSRRx4ZL774Yl7dY489Vu9anw2ZO3duwXnBJZdcEpWVlQ1+43PEpxcTLjTmfvrTnxa8BujqvvCFL6zVtWjffPPNOOSQQ2KjjTZa4x8xC32hUaExt9deexW8XkvEJ28kLrvssth2223zXveOHTvGqFGjGvzWsqbM5yIifvjDH0bPnj1j2223rev7hhtuqDcGDj/88AYvGn3GGWdEWVlZvbnnPvvsU/dGMOKTMXfttdfm1TrOfaol53Nt+ThnzH3KmMv+mIv4bL1vLaRVhF4rTZ8+PY4//vgYOHBg9O7dO3r37h0DBw6ME088Me/6WKtbvHhx3rcHrK0ZM2bEV77ylXr/sBYyadKkgmeTPf3002t1TbITTzyx4PW2GrJkyZKYPXt2wbBppZkzZ+bdVk9NIyJGjRoVF198cYOP89Zbb8W4ceNi3333jZqamrrX/pvf/GY88MADDdYde+yxTfqGiOeffz5+8IMfxPjx4+t+frNnz44jjzwyampqYsiQIfG73/2uwfonnngiDjzwwOjcuXOUl5fHbrvtFjfccEO9bZ599tl4+eWXC9av78Q8oriT8w09MY9oPZPzpk7MI4o7Ofdm8FNrO+a8GVz/8RZRvOOcMVe8MRfRtHHX1DG30vLly+Oll16KP/3pT/GnP/0pXnrppVi+fHmTnldjPv7441iyZEnBTw2saunSpes9Z4z45Pql6/KNX3fccUeMGzeu0QsQr63XX389FixYsMbt3njjjZg1a1aLvO6NWbBgQcyaNSvmzJmzxm3feuutmDZtWkyZMmWtLiq9Kse5T7XkfK4tH+eMuU8Zc00bc//5z3/qtvksjrmIz9771tXlIiLW74OR0HZ8/PHH6dVXX627xljXrl1Tr169Cl43Y0NZsWJFWrp0aWrfvn3Ba5OttGzZsvTOO++krbfeep33sWjRolRRUZH3WfPGTJ06NT333HPp61//etpqq63WeZ+rmjNnTqqsrExVVVWNbvfmm2+mt956K61YsaJFXvuGvPfee+mll15Km2++edpyyy0b3fZf//pXmjVrVvrwww/TzjvvnPr27btO+2rpMdcS4y2l4o65rI+3P//5z+mjjz5ar/GWkjG3qrY65lJa+3G3Icbc6j744IP03//93+mCCy4oeG2T5qotdn1r7r2p9S29b8e5T7X0fK61HueaMpdLyZhb1bRp09Kzzz5rzGVszKX02X3fupLQC5po2bJl6T//+c96H7yLWd+ae29qfWvuHVrCvHnz0muvvZa222671LVr1xatL+a+m1rfmntvan1T971w4cK08cYbp0cffTTtvffeLVZb7PqFCxem6urqNHPmzFbXe1Pri917bW1tyuVy6/Umqqn1xdx3sevbau8z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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "cx = Segment_df[['Spd_Ex_Indi_cases']].plot(kind='bar', title =\"No of individual speed exceeding cases\", figsize=(15, 10), legend=True, fontsize=12)\n",
+ "cx.set_xlabel(\"edge_id\", fontsize=12)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#no.of.individual exceeded cases per segment\n",
+ "def individual_cases_id(edge, track_id):\n",
+ " \n",
+ " \"\"\"\n",
+ " DOC STRING\n",
+ " \n",
+ " Parameters:\n",
+ " edge- ID of the road segment\n",
+ " track_id- ID of a particular track\n",
+ " \n",
+ " Usage:\n",
+ " returns list of point id in tracks where the speed limit has been exceeded for the given segment (Warning: contains empty lists where\n",
+ " speed limit isn't exceeded)\n",
+ " \n",
+ " Output:\n",
+ " Number of cases where the speed limit has been exceeded by cars for the given segment (Integer)\n",
+ " \n",
+ " Note:\n",
+ " In this function, when the speed of a car is above the maxspeed (speed limit) continuously \n",
+ " for a single track then the first time the speed reaches above the speed limit is considered\n",
+ " instead of a number of times\n",
+ " \n",
+ " \"\"\"\n",
+ " \n",
+ " point_id = []\n",
+ " edge_df= tracks[(tracks['id_2'] == edge)] #id_2 is the edge id of our defined network\n",
+ " edge_track_df= edge_df[edge_df['track.id']==track_id] \n",
+ " max_speed = speed_limit(edge)\n",
+ " edge_track= list(edge_track_df['id'])\n",
+ " list_of_speedS = list(edge_track_df['Speed.valu'])\n",
+ " \n",
+ " for i in range(len(list_of_speedS)):\n",
+ " if i!=0 and list_of_speedS[i]> max_speed:\n",
+ " \n",
+ " if list_of_speedS[i-1]> max_speed:\n",
+ " continue\n",
+ " else:\n",
+ " point_id.append(edge_track[i])\n",
+ " \n",
+ " elif i==0 and list_of_speedS[i]> max_speed:\n",
+ " point_id.append(edge_track[i])\n",
+ " \n",
+ " return point_id"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#performing individual_cases_id\n",
+ "id_indi_excedCases=[]\n",
+ "for i in segment_numbers:\n",
+ " cases = []\n",
+ " for j in track_numbers:\n",
+ " a=individual_cases_id(i,j)\n",
+ " cases.append(a)\n",
+ " id_indi_excedCases.append(cases)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#cleaning the data and removing empty lists present in data\n",
+ "\n",
+ "point_id=[]\n",
+ "for i in range(len(id_indi_excedCases)):\n",
+ " for j in range(len(id_indi_excedCases[i])):\n",
+ " if id_indi_excedCases[i][j]!=[]:\n",
+ " point_id.append(id_indi_excedCases[i][j])\n",
+ " \n",
+ "indi_id=[]\n",
+ "for i in range(len(point_id)):\n",
+ " for j in range(len(point_id[i])):\n",
+ " indi_id.append(point_id[i][j])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#creating a new dataframe where speed limit has been exceeded for the first point ID\n",
+ "\n",
+ "exceed_location_df=tracks[(tracks['id'] == indi_id[0])]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#appending all point information to the exceed_location_df \n",
+ "\n",
+ "for i in range(1,len(indi_id)):\n",
+ " a= tracks[(tracks['id'] == indi_id[i])]\n",
+ " exceed_location_df=pd.concat([exceed_location_df,a], ignore_index=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " field_1 \n",
+ " u \n",
+ " v \n",
+ " maxspeed \n",
+ " geometry_x \n",
+ " id \n",
+ " time \n",
+ " geometry_y \n",
+ " Engine Loa \n",
+ " Engine L_1 \n",
+ " ... \n",
+ " id_2 \n",
+ " n \n",
+ " distance \n",
+ " feature_x \n",
+ " feature_y \n",
+ " nearest_x \n",
+ " nearest_y \n",
+ " xcoord \n",
+ " ycoord \n",
+ " coords \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 6 \n",
+ " 256786473 \n",
+ " 354520341 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6101365 51.9491494, 7.6107765 51... \n",
+ " 57a49fc5e4b086b281d08f88 \n",
+ " 2016-08-05T05:36:20 \n",
+ " POINT (7.610525850168475 51.94917292496002) \n",
+ " 52.190475 \n",
+ " % \n",
+ " ... \n",
+ " 58 \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.610509 \n",
+ " 51.949211 \n",
+ " 7.610509 \n",
+ " 51.949211 \n",
+ " 7.610509 \n",
+ " 51.949211 \n",
+ " [[7.610509098707607, 51.949211287324566]] \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 1194 \n",
+ " 354520341 \n",
+ " 256786473 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ " 5dcbbb1444ea856b7037b2ea \n",
+ " 2019-09-24T15:05:40 \n",
+ " POINT (7.611024408784614 51.94935334599669) \n",
+ " 38.552851 \n",
+ " % \n",
+ " ... \n",
+ " 58 \n",
+ " 1 \n",
+ " 1.000000e-15 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " [[7.611047248156788, 51.94930182879455]] \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 1195 \n",
+ " 354520341 \n",
+ " 256786473 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ " 5dcead4044ea856b704d80bd \n",
+ " 2019-09-24T15:05:40 \n",
+ " POINT (7.611024408784614 51.94935334599669) \n",
+ " 38.552851 \n",
+ " % \n",
+ " ... \n",
+ " 58 \n",
+ " 1 \n",
+ " 1.000000e-15 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " [[7.611047248156788, 51.94930182879455]] \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 1199 \n",
+ " 354520341 \n",
+ " 256786473 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ " 5dca7dce44ea856b70362f1b \n",
+ " 2019-09-18T14:08:52 \n",
+ " POINT (7.610880452988644 51.94931189195075) \n",
+ " 31.650219 \n",
+ " % \n",
+ " ... \n",
+ " 58 \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.610896 \n",
+ " 51.949280 \n",
+ " 7.610896 \n",
+ " 51.949280 \n",
+ " 7.610896 \n",
+ " 51.949280 \n",
+ " [[7.610895693850486, 51.94928031266417]] \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 1201 \n",
+ " 354520341 \n",
+ " 256786473 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ " 5dca7e7c44ea856b70363094 \n",
+ " 2019-09-12T15:08:38 \n",
+ " POINT (7.610889834289421 51.94930340792172) \n",
+ " 35.618887 \n",
+ " % \n",
+ " ... \n",
+ " 58 \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.610901 \n",
+ " 51.949281 \n",
+ " 7.610901 \n",
+ " 51.949281 \n",
+ " 7.610901 \n",
+ " 51.949281 \n",
+ " [[7.610901006464991, 51.949281034130344]] \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 463 \n",
+ " 6606 \n",
+ " 427878668 \n",
+ " 925611073 \n",
+ " 50.0 \n",
+ " LINESTRING (7.5985984 51.9649594, 7.5984512 51... \n",
+ " 5dca7e7c44ea856b703630d1 \n",
+ " 2019-09-12T15:13:48 \n",
+ " POINT (7.597760768327716 51.964967237234) \n",
+ " 33.102136 \n",
+ " % \n",
+ " ... \n",
+ " 2 \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.597986 \n",
+ " 51.964953 \n",
+ " 7.597986 \n",
+ " 51.964953 \n",
+ " 7.597986 \n",
+ " 51.964953 \n",
+ " [[7.597985990815306, 51.964952726622606]] \n",
+ " \n",
+ " \n",
+ " 464 \n",
+ " 6777 \n",
+ " 253357613 \n",
+ " 277896935 \n",
+ " 70.0 \n",
+ " LINESTRING (7.6081001 51.934976, 7.6087635 51.... \n",
+ " 580c4f13e4b01fb1c08caaf0 \n",
+ " 2016-10-19T08:34:53 \n",
+ " POINT (7.620954777648336 51.9357843263963) \n",
+ " 71.058823 \n",
+ " % \n",
+ " ... \n",
+ " 40 \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.620957 \n",
+ " 51.935775 \n",
+ " 7.620957 \n",
+ " 51.935775 \n",
+ " 7.620957 \n",
+ " 51.935775 \n",
+ " [[7.620956632534495, 51.93577531594185]] \n",
+ " \n",
+ " \n",
+ " 465 \n",
+ " 6796 \n",
+ " 253357613 \n",
+ " 277896935 \n",
+ " 70.0 \n",
+ " LINESTRING (7.6081001 51.934976, 7.6087635 51.... \n",
+ " 5ddbc68044ea85025cfc4c9f \n",
+ " 2019-11-25T08:18:35 \n",
+ " POINT (7.620792579775808 51.9357502859272) \n",
+ " 51.965566 \n",
+ " % \n",
+ " ... \n",
+ " 40 \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.620794 \n",
+ " 51.935744 \n",
+ " 7.620794 \n",
+ " 51.935744 \n",
+ " 7.620794 \n",
+ " 51.935744 \n",
+ " [[7.62079441014606, 51.93574438950464]] \n",
+ " \n",
+ " \n",
+ " 466 \n",
+ " 7701 \n",
+ " 253458645 \n",
+ " 277727534 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6055724 51.9378612, 7.6054618 51... \n",
+ " 5e4a353b3965f368945da891 \n",
+ " 2020-01-08T09:24:34 \n",
+ " POINT (7.604951030273845 51.93741837197971) \n",
+ " 25.309770 \n",
+ " % \n",
+ " ... \n",
+ " 70 \n",
+ " 1 \n",
+ " 2.000000e-15 \n",
+ " 7.604898 \n",
+ " 51.937454 \n",
+ " 7.604898 \n",
+ " 51.937454 \n",
+ " 7.604898 \n",
+ " 51.937454 \n",
+ " [[7.604898296116925, 51.937454254402006]] \n",
+ " \n",
+ " \n",
+ " 467 \n",
+ " 7704 \n",
+ " 253458645 \n",
+ " 277727534 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6055724 51.9378612, 7.6054618 51... \n",
+ " 56f120ede4b0b5e237d575c2 \n",
+ " 2016-03-22T06:40:59 \n",
+ " POINT (7.605252657318901 51.9376766230018) \n",
+ " 43.376375 \n",
+ " % \n",
+ " ... \n",
+ " 70 \n",
+ " 1 \n",
+ " 1.000000e-15 \n",
+ " 7.605260 \n",
+ " 51.937675 \n",
+ " 7.605260 \n",
+ " 51.937675 \n",
+ " 7.605260 \n",
+ " 51.937675 \n",
+ " [[7.605259801260397, 51.937674614894505]] \n",
+ " \n",
+ " \n",
+ "
\n",
+ "468 rows × 81 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " field_1 u v maxspeed \\\n",
+ "0 6 256786473 354520341 50.0 \n",
+ "1 1194 354520341 256786473 50.0 \n",
+ "2 1195 354520341 256786473 50.0 \n",
+ "3 1199 354520341 256786473 50.0 \n",
+ "4 1201 354520341 256786473 50.0 \n",
+ ".. ... ... ... ... \n",
+ "463 6606 427878668 925611073 50.0 \n",
+ "464 6777 253357613 277896935 70.0 \n",
+ "465 6796 253357613 277896935 70.0 \n",
+ "466 7701 253458645 277727534 50.0 \n",
+ "467 7704 253458645 277727534 50.0 \n",
+ "\n",
+ " geometry_x \\\n",
+ "0 LINESTRING (7.6101365 51.9491494, 7.6107765 51... \n",
+ "1 LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ "2 LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ "3 LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ "4 LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ ".. ... \n",
+ "463 LINESTRING (7.5985984 51.9649594, 7.5984512 51... \n",
+ "464 LINESTRING (7.6081001 51.934976, 7.6087635 51.... \n",
+ "465 LINESTRING (7.6081001 51.934976, 7.6087635 51.... \n",
+ "466 LINESTRING (7.6055724 51.9378612, 7.6054618 51... \n",
+ "467 LINESTRING (7.6055724 51.9378612, 7.6054618 51... \n",
+ "\n",
+ " id time \\\n",
+ "0 57a49fc5e4b086b281d08f88 2016-08-05T05:36:20 \n",
+ "1 5dcbbb1444ea856b7037b2ea 2019-09-24T15:05:40 \n",
+ "2 5dcead4044ea856b704d80bd 2019-09-24T15:05:40 \n",
+ "3 5dca7dce44ea856b70362f1b 2019-09-18T14:08:52 \n",
+ "4 5dca7e7c44ea856b70363094 2019-09-12T15:08:38 \n",
+ ".. ... ... \n",
+ "463 5dca7e7c44ea856b703630d1 2019-09-12T15:13:48 \n",
+ "464 580c4f13e4b01fb1c08caaf0 2016-10-19T08:34:53 \n",
+ "465 5ddbc68044ea85025cfc4c9f 2019-11-25T08:18:35 \n",
+ "466 5e4a353b3965f368945da891 2020-01-08T09:24:34 \n",
+ "467 56f120ede4b0b5e237d575c2 2016-03-22T06:40:59 \n",
+ "\n",
+ " geometry_y Engine Loa Engine L_1 ... \\\n",
+ "0 POINT (7.610525850168475 51.94917292496002) 52.190475 % ... \n",
+ "1 POINT (7.611024408784614 51.94935334599669) 38.552851 % ... \n",
+ "2 POINT (7.611024408784614 51.94935334599669) 38.552851 % ... \n",
+ "3 POINT (7.610880452988644 51.94931189195075) 31.650219 % ... \n",
+ "4 POINT (7.610889834289421 51.94930340792172) 35.618887 % ... \n",
+ ".. ... ... ... ... \n",
+ "463 POINT (7.597760768327716 51.964967237234) 33.102136 % ... \n",
+ "464 POINT (7.620954777648336 51.9357843263963) 71.058823 % ... \n",
+ "465 POINT (7.620792579775808 51.9357502859272) 51.965566 % ... \n",
+ "466 POINT (7.604951030273845 51.93741837197971) 25.309770 % ... \n",
+ "467 POINT (7.605252657318901 51.9376766230018) 43.376375 % ... \n",
+ "\n",
+ " id_2 n distance feature_x feature_y nearest_x nearest_y \\\n",
+ "0 58 1 0.000000e+00 7.610509 51.949211 7.610509 51.949211 \n",
+ "1 58 1 1.000000e-15 7.611047 51.949302 7.611047 51.949302 \n",
+ "2 58 1 1.000000e-15 7.611047 51.949302 7.611047 51.949302 \n",
+ "3 58 1 0.000000e+00 7.610896 51.949280 7.610896 51.949280 \n",
+ "4 58 1 0.000000e+00 7.610901 51.949281 7.610901 51.949281 \n",
+ ".. ... .. ... ... ... ... ... \n",
+ "463 2 1 0.000000e+00 7.597986 51.964953 7.597986 51.964953 \n",
+ "464 40 1 0.000000e+00 7.620957 51.935775 7.620957 51.935775 \n",
+ "465 40 1 0.000000e+00 7.620794 51.935744 7.620794 51.935744 \n",
+ "466 70 1 2.000000e-15 7.604898 51.937454 7.604898 51.937454 \n",
+ "467 70 1 1.000000e-15 7.605260 51.937675 7.605260 51.937675 \n",
+ "\n",
+ " xcoord ycoord coords \n",
+ "0 7.610509 51.949211 [[7.610509098707607, 51.949211287324566]] \n",
+ "1 7.611047 51.949302 [[7.611047248156788, 51.94930182879455]] \n",
+ "2 7.611047 51.949302 [[7.611047248156788, 51.94930182879455]] \n",
+ "3 7.610896 51.949280 [[7.610895693850486, 51.94928031266417]] \n",
+ "4 7.610901 51.949281 [[7.610901006464991, 51.949281034130344]] \n",
+ ".. ... ... ... \n",
+ "463 7.597986 51.964953 [[7.597985990815306, 51.964952726622606]] \n",
+ "464 7.620957 51.935775 [[7.620956632534495, 51.93577531594185]] \n",
+ "465 7.620794 51.935744 [[7.62079441014606, 51.93574438950464]] \n",
+ "466 7.604898 51.937454 [[7.604898296116925, 51.937454254402006]] \n",
+ "467 7.605260 51.937675 [[7.605259801260397, 51.937674614894505]] \n",
+ "\n",
+ "[468 rows x 81 columns]"
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "exceed_location_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#level of exceedance of speed for each points in exceed_location_df\n",
+ "\n",
+ "exceeded_speed=[]\n",
+ "for i in range(468):\n",
+ " exceeded_speed.append(exceed_location_df['Speed.valu'][i]-exceed_location_df['maxspeed'][i])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " field_1 \n",
+ " u \n",
+ " v \n",
+ " maxspeed \n",
+ " geometry_x \n",
+ " id \n",
+ " time \n",
+ " geometry_y \n",
+ " Engine Loa \n",
+ " Engine L_1 \n",
+ " ... \n",
+ " n \n",
+ " distance \n",
+ " feature_x \n",
+ " feature_y \n",
+ " nearest_x \n",
+ " nearest_y \n",
+ " xcoord \n",
+ " ycoord \n",
+ " coords \n",
+ " Exceeded_speed \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 6 \n",
+ " 256786473 \n",
+ " 354520341 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6101365 51.9491494, 7.6107765 51... \n",
+ " 57a49fc5e4b086b281d08f88 \n",
+ " 2016-08-05T05:36:20 \n",
+ " POINT (7.610525850168475 51.94917292496002) \n",
+ " 52.190475 \n",
+ " % \n",
+ " ... \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.610509 \n",
+ " 51.949211 \n",
+ " 7.610509 \n",
+ " 51.949211 \n",
+ " 7.610509 \n",
+ " 51.949211 \n",
+ " [[7.610509098707607, 51.949211287324566]] \n",
+ " 1.828163 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 1194 \n",
+ " 354520341 \n",
+ " 256786473 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ " 5dcbbb1444ea856b7037b2ea \n",
+ " 2019-09-24T15:05:40 \n",
+ " POINT (7.611024408784614 51.94935334599669) \n",
+ " 38.552851 \n",
+ " % \n",
+ " ... \n",
+ " 1 \n",
+ " 1.000000e-15 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " [[7.611047248156788, 51.94930182879455]] \n",
+ " 2.000002 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 1195 \n",
+ " 354520341 \n",
+ " 256786473 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ " 5dcead4044ea856b704d80bd \n",
+ " 2019-09-24T15:05:40 \n",
+ " POINT (7.611024408784614 51.94935334599669) \n",
+ " 38.552851 \n",
+ " % \n",
+ " ... \n",
+ " 1 \n",
+ " 1.000000e-15 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " 7.611047 \n",
+ " 51.949302 \n",
+ " [[7.611047248156788, 51.94930182879455]] \n",
+ " 2.000002 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 1199 \n",
+ " 354520341 \n",
+ " 256786473 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ " 5dca7dce44ea856b70362f1b \n",
+ " 2019-09-18T14:08:52 \n",
+ " POINT (7.610880452988644 51.94931189195075) \n",
+ " 31.650219 \n",
+ " % \n",
+ " ... \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.610896 \n",
+ " 51.949280 \n",
+ " 7.610896 \n",
+ " 51.949280 \n",
+ " 7.610896 \n",
+ " 51.949280 \n",
+ " [[7.610895693850486, 51.94928031266417]] \n",
+ " 3.000002 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 1201 \n",
+ " 354520341 \n",
+ " 256786473 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ " 5dca7e7c44ea856b70363094 \n",
+ " 2019-09-12T15:08:38 \n",
+ " POINT (7.610889834289421 51.94930340792172) \n",
+ " 35.618887 \n",
+ " % \n",
+ " ... \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.610901 \n",
+ " 51.949281 \n",
+ " 7.610901 \n",
+ " 51.949281 \n",
+ " 7.610901 \n",
+ " 51.949281 \n",
+ " [[7.610901006464991, 51.949281034130344]] \n",
+ " 4.000000 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 463 \n",
+ " 6606 \n",
+ " 427878668 \n",
+ " 925611073 \n",
+ " 50.0 \n",
+ " LINESTRING (7.5985984 51.9649594, 7.5984512 51... \n",
+ " 5dca7e7c44ea856b703630d1 \n",
+ " 2019-09-12T15:13:48 \n",
+ " POINT (7.597760768327716 51.964967237234) \n",
+ " 33.102136 \n",
+ " % \n",
+ " ... \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.597986 \n",
+ " 51.964953 \n",
+ " 7.597986 \n",
+ " 51.964953 \n",
+ " 7.597986 \n",
+ " 51.964953 \n",
+ " [[7.597985990815306, 51.964952726622606]] \n",
+ " 2.000002 \n",
+ " \n",
+ " \n",
+ " 464 \n",
+ " 6777 \n",
+ " 253357613 \n",
+ " 277896935 \n",
+ " 70.0 \n",
+ " LINESTRING (7.6081001 51.934976, 7.6087635 51.... \n",
+ " 580c4f13e4b01fb1c08caaf0 \n",
+ " 2016-10-19T08:34:53 \n",
+ " POINT (7.620954777648336 51.9357843263963) \n",
+ " 71.058823 \n",
+ " % \n",
+ " ... \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.620957 \n",
+ " 51.935775 \n",
+ " 7.620957 \n",
+ " 51.935775 \n",
+ " 7.620957 \n",
+ " 51.935775 \n",
+ " [[7.620956632534495, 51.93577531594185]] \n",
+ " 3.000000 \n",
+ " \n",
+ " \n",
+ " 465 \n",
+ " 6796 \n",
+ " 253357613 \n",
+ " 277896935 \n",
+ " 70.0 \n",
+ " LINESTRING (7.6081001 51.934976, 7.6087635 51.... \n",
+ " 5ddbc68044ea85025cfc4c9f \n",
+ " 2019-11-25T08:18:35 \n",
+ " POINT (7.620792579775808 51.9357502859272) \n",
+ " 51.965566 \n",
+ " % \n",
+ " ... \n",
+ " 1 \n",
+ " 0.000000e+00 \n",
+ " 7.620794 \n",
+ " 51.935744 \n",
+ " 7.620794 \n",
+ " 51.935744 \n",
+ " 7.620794 \n",
+ " 51.935744 \n",
+ " [[7.62079441014606, 51.93574438950464]] \n",
+ " 8.000001 \n",
+ " \n",
+ " \n",
+ " 466 \n",
+ " 7701 \n",
+ " 253458645 \n",
+ " 277727534 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6055724 51.9378612, 7.6054618 51... \n",
+ " 5e4a353b3965f368945da891 \n",
+ " 2020-01-08T09:24:34 \n",
+ " POINT (7.604951030273845 51.93741837197971) \n",
+ " 25.309770 \n",
+ " % \n",
+ " ... \n",
+ " 1 \n",
+ " 2.000000e-15 \n",
+ " 7.604898 \n",
+ " 51.937454 \n",
+ " 7.604898 \n",
+ " 51.937454 \n",
+ " 7.604898 \n",
+ " 51.937454 \n",
+ " [[7.604898296116925, 51.937454254402006]] \n",
+ " 11.999999 \n",
+ " \n",
+ " \n",
+ " 467 \n",
+ " 7704 \n",
+ " 253458645 \n",
+ " 277727534 \n",
+ " 50.0 \n",
+ " LINESTRING (7.6055724 51.9378612, 7.6054618 51... \n",
+ " 56f120ede4b0b5e237d575c2 \n",
+ " 2016-03-22T06:40:59 \n",
+ " POINT (7.605252657318901 51.9376766230018) \n",
+ " 43.376375 \n",
+ " % \n",
+ " ... \n",
+ " 1 \n",
+ " 1.000000e-15 \n",
+ " 7.605260 \n",
+ " 51.937675 \n",
+ " 7.605260 \n",
+ " 51.937675 \n",
+ " 7.605260 \n",
+ " 51.937675 \n",
+ " [[7.605259801260397, 51.937674614894505]] \n",
+ " 1.000000 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "468 rows × 82 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " field_1 u v maxspeed \\\n",
+ "0 6 256786473 354520341 50.0 \n",
+ "1 1194 354520341 256786473 50.0 \n",
+ "2 1195 354520341 256786473 50.0 \n",
+ "3 1199 354520341 256786473 50.0 \n",
+ "4 1201 354520341 256786473 50.0 \n",
+ ".. ... ... ... ... \n",
+ "463 6606 427878668 925611073 50.0 \n",
+ "464 6777 253357613 277896935 70.0 \n",
+ "465 6796 253357613 277896935 70.0 \n",
+ "466 7701 253458645 277727534 50.0 \n",
+ "467 7704 253458645 277727534 50.0 \n",
+ "\n",
+ " geometry_x \\\n",
+ "0 LINESTRING (7.6101365 51.9491494, 7.6107765 51... \n",
+ "1 LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ "2 LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ "3 LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ "4 LINESTRING (7.6113933 51.949358, 7.6113682 51.... \n",
+ ".. ... \n",
+ "463 LINESTRING (7.5985984 51.9649594, 7.5984512 51... \n",
+ "464 LINESTRING (7.6081001 51.934976, 7.6087635 51.... \n",
+ "465 LINESTRING (7.6081001 51.934976, 7.6087635 51.... \n",
+ "466 LINESTRING (7.6055724 51.9378612, 7.6054618 51... \n",
+ "467 LINESTRING (7.6055724 51.9378612, 7.6054618 51... \n",
+ "\n",
+ " id time \\\n",
+ "0 57a49fc5e4b086b281d08f88 2016-08-05T05:36:20 \n",
+ "1 5dcbbb1444ea856b7037b2ea 2019-09-24T15:05:40 \n",
+ "2 5dcead4044ea856b704d80bd 2019-09-24T15:05:40 \n",
+ "3 5dca7dce44ea856b70362f1b 2019-09-18T14:08:52 \n",
+ "4 5dca7e7c44ea856b70363094 2019-09-12T15:08:38 \n",
+ ".. ... ... \n",
+ "463 5dca7e7c44ea856b703630d1 2019-09-12T15:13:48 \n",
+ "464 580c4f13e4b01fb1c08caaf0 2016-10-19T08:34:53 \n",
+ "465 5ddbc68044ea85025cfc4c9f 2019-11-25T08:18:35 \n",
+ "466 5e4a353b3965f368945da891 2020-01-08T09:24:34 \n",
+ "467 56f120ede4b0b5e237d575c2 2016-03-22T06:40:59 \n",
+ "\n",
+ " geometry_y Engine Loa Engine L_1 ... \\\n",
+ "0 POINT (7.610525850168475 51.94917292496002) 52.190475 % ... \n",
+ "1 POINT (7.611024408784614 51.94935334599669) 38.552851 % ... \n",
+ "2 POINT (7.611024408784614 51.94935334599669) 38.552851 % ... \n",
+ "3 POINT (7.610880452988644 51.94931189195075) 31.650219 % ... \n",
+ "4 POINT (7.610889834289421 51.94930340792172) 35.618887 % ... \n",
+ ".. ... ... ... ... \n",
+ "463 POINT (7.597760768327716 51.964967237234) 33.102136 % ... \n",
+ "464 POINT (7.620954777648336 51.9357843263963) 71.058823 % ... \n",
+ "465 POINT (7.620792579775808 51.9357502859272) 51.965566 % ... \n",
+ "466 POINT (7.604951030273845 51.93741837197971) 25.309770 % ... \n",
+ "467 POINT (7.605252657318901 51.9376766230018) 43.376375 % ... \n",
+ "\n",
+ " n distance feature_x feature_y nearest_x nearest_y xcoord \\\n",
+ "0 1 0.000000e+00 7.610509 51.949211 7.610509 51.949211 7.610509 \n",
+ "1 1 1.000000e-15 7.611047 51.949302 7.611047 51.949302 7.611047 \n",
+ "2 1 1.000000e-15 7.611047 51.949302 7.611047 51.949302 7.611047 \n",
+ "3 1 0.000000e+00 7.610896 51.949280 7.610896 51.949280 7.610896 \n",
+ "4 1 0.000000e+00 7.610901 51.949281 7.610901 51.949281 7.610901 \n",
+ ".. .. ... ... ... ... ... ... \n",
+ "463 1 0.000000e+00 7.597986 51.964953 7.597986 51.964953 7.597986 \n",
+ "464 1 0.000000e+00 7.620957 51.935775 7.620957 51.935775 7.620957 \n",
+ "465 1 0.000000e+00 7.620794 51.935744 7.620794 51.935744 7.620794 \n",
+ "466 1 2.000000e-15 7.604898 51.937454 7.604898 51.937454 7.604898 \n",
+ "467 1 1.000000e-15 7.605260 51.937675 7.605260 51.937675 7.605260 \n",
+ "\n",
+ " ycoord coords Exceeded_speed \n",
+ "0 51.949211 [[7.610509098707607, 51.949211287324566]] 1.828163 \n",
+ "1 51.949302 [[7.611047248156788, 51.94930182879455]] 2.000002 \n",
+ "2 51.949302 [[7.611047248156788, 51.94930182879455]] 2.000002 \n",
+ "3 51.949280 [[7.610895693850486, 51.94928031266417]] 3.000002 \n",
+ "4 51.949281 [[7.610901006464991, 51.949281034130344]] 4.000000 \n",
+ ".. ... ... ... \n",
+ "463 51.964953 [[7.597985990815306, 51.964952726622606]] 2.000002 \n",
+ "464 51.935775 [[7.620956632534495, 51.93577531594185]] 3.000000 \n",
+ "465 51.935744 [[7.62079441014606, 51.93574438950464]] 8.000001 \n",
+ "466 51.937454 [[7.604898296116925, 51.937454254402006]] 11.999999 \n",
+ "467 51.937675 [[7.605259801260397, 51.937674614894505]] 1.000000 \n",
+ "\n",
+ "[468 rows x 82 columns]"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#adding level of exceedance to the exceed_location_df as a column\n",
+ "\n",
+ "exceed_location_df['Exceeded_speed']=exceeded_speed\n",
+ "exceed_location_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#creating lists of coordinates from the exceed_location_df\n",
+ "\n",
+ "lat = list(exceed_location_df['ycoord'])\n",
+ "lng = list(exceed_location_df['xcoord'])\n",
+ "\n",
+ "track_coords = [c for c in zip(lat, lng)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#map visualisation for the location of the points where speed limit has been exceeded and pop up will present \n",
+ "#the level of exceedance\n",
+ "\n",
+ "m = folium.Map(location=[51.950296032982756, 7.615756988525391], zoom_start=13)\n",
+ "for point in range(0, len(track_coords)):\n",
+ " folium.Marker(track_coords[point], popup=exceeded_speed[point]).add_to(m)\n",
+ "m"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#creating new dataframe based for information analysing correlations\n",
+ "\n",
+ "correlation_df = pd.DataFrame(\n",
+ " {'Cars traversing': Segment_df['Cars_traversing'],\n",
+ " 'No_of_stops': Segment_df['waiting_cars'],\n",
+ " 'Waiting cars': Segment_df['No_of_stops'],\n",
+ " 'Exceeded cases': Segment_df['Spd_Ex_Indi_cases'] \n",
+ " })"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "