va/Assignment3/MaggioniClaudio_Assignment3.ipynb

1087 lines
159 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "23b48f71",
"metadata": {},
"source": [
"# S&DE Atelier - Visual Analytics\n",
"\n",
"# Assignment 3\n",
"\n",
"**Due** June 2, 2023 @23:55\n",
"\n",
"**Contacts**: [marco.dambros@usi.ch](mailto:marco.dambros@usi.ch) - [carmen.armenti@usi.ch](mailto:carmen.armenti@usi.ch)\n",
"\n",
"---\n",
"\n",
"The goal of this assignment is to use Spark in Jupyter notebooks (PySpark). The files `trip_data.csv`, `trip_fare.csv` and `nyc_boroughs.geojson` can be found in the following folder: [Assignment3-data](https://usi365-my.sharepoint.com/:f:/g/personal/armenc_usi_ch/Ejp7sb8QAMROoWe0XUDcAkMBoqUFk-w2Vgroup025NhAww?e=TFG5CD). You should clean the data if needed. \n",
"\n",
"Note that you can use Spark [window functions](https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-window.html) whenever applicable. \n",
"\n",
"Please name your file as `SurnameName_Assignment3.ipynb`."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "9f434eb8",
"metadata": {},
"outputs": [],
"source": [
"# Import the basic spark library\n",
"from pyspark.sql import SparkSession\n",
"from pyspark.sql.functions import col\n",
"from math import pi\n",
"from bokeh.models import BasicTicker, PrintfTickFormatter\n",
"from bokeh.plotting import figure, show\n",
"from bokeh.transform import linear_cmap\n",
"from pyspark.sql import types as T\n",
"from pyspark.sql import functions as F\n",
"from pyspark.sql import Window\n",
"from shapely.geometry import Polygon, Point\n",
"from typing import Tuple, List\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib as mpl"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "b9a87a5c",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Setting default log level to \"WARN\".\n",
"To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n",
"23/05/31 16:53:08 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n"
]
}
],
"source": [
"# Create an entry point to the PySpark Application\n",
"spark = SparkSession.builder \\\n",
" .config(\"spark.driver.bindAddress\", \"127.0.0.1\") \\\n",
" .config(\"spark.driver.memory\", \"16g\") \\\n",
" .config(\"spark.executor.memory\", \"16g\") \\\n",
" .config(\"spark.executor.cores\", \"4\") \\\n",
" .config(\"spark.executor.memory\", \"16g\") \\\n",
" .master(\"local\") \\\n",
" .appName(\"MaggioniClaudio_Assignment3\") \\\n",
" .getOrCreate()"
]
},
{
"cell_type": "markdown",
"id": "536a6cc4",
"metadata": {},
"source": [
"### Exercise 1\n",
"Join the `trip_data` and `trip_fare` dataframes into one and consider only data on 2013-01-01."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "9fc094c8",
"metadata": {},
"outputs": [],
"source": [
"def sanitize_column_names(df):\n",
" for original, renamed in [(x, x.strip().replace(\" \", \"_\"),) for x in df.columns]:\n",
" df = df.withColumnRenamed(original, renamed)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "afe8000d",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
}
],
"source": [
"df_trip_data = spark.read \\\n",
" .option(\"header\", True) \\\n",
" .csv(\"data/trip_data.csv\", inferSchema=True)\n",
"\n",
"df_trip_data = sanitize_column_names(df_trip_data)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "4dfe92f6",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
}
],
"source": [
"df_trip_fare = spark.read \\\n",
" .option(\"header\", True) \\\n",
" .csv(\"data/trip_fare.csv\", inferSchema=True)\n",
"\n",
"df_trip_fare = sanitize_column_names(df_trip_fare)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "d76abc83",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"+--------------------+--------------------+---------+---------+------------------+-------------------+-------------------+---------------+-----------------+-------------+----------------+---------------+-----------------+----------------+\n",
"| medallion| hack_license|vendor_id|rate_code|store_and_fwd_flag| pickup_datetime| dropoff_datetime|passenger_count|trip_time_in_secs|trip_distance|pickup_longitude|pickup_latitude|dropoff_longitude|dropoff_latitude|\n",
"+--------------------+--------------------+---------+---------+------------------+-------------------+-------------------+---------------+-----------------+-------------+----------------+---------------+-----------------+----------------+\n",
"|89D227B655E5C82AE...|BA96DE419E711691B...| CMT| 1| N|2013-01-01 15:11:48|2013-01-01 15:18:10| 4| 382| 1.0| -73.978165| 40.757977| -73.989838| 40.751171|\n",
"|0BD7C8F5BA12B88E0...|9FD8F69F0804BDB55...| CMT| 1| N|2013-01-06 00:18:35|2013-01-06 00:22:54| 1| 259| 1.5| -74.006683| 40.731781| -73.994499| 40.75066|\n",
"|0BD7C8F5BA12B88E0...|9FD8F69F0804BDB55...| CMT| 1| N|2013-01-05 18:49:41|2013-01-05 18:54:23| 1| 282| 1.1| -74.004707| 40.73777| -74.009834| 40.726002|\n",
"|DFD2202EE08F7A8DC...|51EE87E3205C985EF...| CMT| 1| N|2013-01-07 23:54:15|2013-01-07 23:58:20| 2| 244| 0.7| -73.974602| 40.759945| -73.984734| 40.759388|\n",
"|DFD2202EE08F7A8DC...|51EE87E3205C985EF...| CMT| 1| N|2013-01-07 23:25:03|2013-01-07 23:34:24| 1| 560| 2.1| -73.97625| 40.748528| -74.002586| 40.747868|\n",
"|20D9ECB2CA0767CF7...|598CCE5B9C1918568...| CMT| 1| N|2013-01-07 15:27:48|2013-01-07 15:38:37| 1| 648| 1.7| -73.966743| 40.764252| -73.983322| 40.743763|\n",
"|496644932DF393260...|513189AD756FF14FE...| CMT| 1| N|2013-01-08 11:01:15|2013-01-08 11:08:14| 1| 418| 0.8| -73.995804| 40.743977| -74.007416| 40.744343|\n",
"|0B57B9633A2FECD3D...|CCD4367B417ED6634...| CMT| 1| N|2013-01-07 12:39:18|2013-01-07 13:10:56| 3| 1898| 10.7| -73.989937| 40.756775| -73.86525| 40.77063|\n",
"|2C0E91FF20A856C89...|1DA2F6543A62B8ED9...| CMT| 1| N|2013-01-07 18:15:47|2013-01-07 18:20:47| 1| 299| 0.8| -73.980072| 40.743137| -73.982712| 40.735336|\n",
"|2D4B95E2FA7B2E851...|CD2F522EEE1FF5F5A...| CMT| 1| N|2013-01-07 15:33:28|2013-01-07 15:49:26| 2| 957| 2.5| -73.977936| 40.786983| -73.952919| 40.80637|\n",
"|E12F6AF991172EAC3...|06918214E951FA000...| CMT| 1| N|2013-01-08 13:11:52|2013-01-08 13:19:50| 1| 477| 1.3| -73.982452| 40.773167| -73.964134| 40.773815|\n",
"|E12F6AF991172EAC3...|06918214E951FA000...| CMT| 1| N|2013-01-08 09:50:05|2013-01-08 10:02:54| 1| 768| 0.7| -73.99556| 40.749294| -73.988686| 40.759052|\n",
"|78FFD9CD0CDA541F3...|E949C583ECF62C8F0...| CMT| 1| N|2013-01-10 12:07:08|2013-01-10 12:17:29| 1| 620| 2.3| -73.971497| 40.791321| -73.964478| 40.775921|\n",
"|237F49C3ECC11F502...|93C363DDF8ED9385D...| CMT| 1| N|2013-01-07 07:35:47|2013-01-07 07:46:00| 1| 612| 2.3| -73.98851| 40.774307| -73.981094| 40.755325|\n",
"|3349F919AA8AE5DC9...|7CE849FEF67514F08...| CMT| 1| N|2013-01-10 15:42:29|2013-01-10 16:04:02| 1| 1293| 3.2| -73.994911| 40.723221| -73.971558| 40.761612|\n",
"|3349F919AA8AE5DC9...|7CE849FEF67514F08...| CMT| 1| N|2013-01-10 14:27:28|2013-01-10 14:45:21| 1| 1073| 4.4| -74.010391| 40.708702| -73.987846| 40.756104|\n",
"|4C005EEBAA7BF26B8...|351BE7D984BE17DB2...| CMT| 1| N|2013-01-07 22:09:59|2013-01-07 22:19:50| 1| 591| 1.7| -73.973732| 40.756287| -73.998413| 40.756832|\n",
"|7D99C30FCE69B1A9D...|460C3F57DD9CB2265...| CMT| 1| N|2013-01-07 17:18:16|2013-01-07 17:20:55| 1| 158| 0.7| -73.968925| 40.767704| -73.96199| 40.776566|\n",
"|E6FBF80668FE0611A...|36773E80775F26CD1...| CMT| 1| N|2013-01-07 06:08:51|2013-01-07 06:13:14| 1| 262| 1.7| -73.96212| 40.769737| -73.979561| 40.75539|\n",
"|0C5296F3C8B16E702...|D2363240A9295EF57...| CMT| 1| N|2013-01-07 22:25:46|2013-01-07 22:36:56| 1| 669| 2.3| -73.989708| 40.756714| -73.977615| 40.787575|\n",
"+--------------------+--------------------+---------+---------+------------------+-------------------+-------------------+---------------+-----------------+-------------+----------------+---------------+-----------------+----------------+\n",
"only showing top 20 rows\n",
"\n"
]
}
],
"source": [
"df_trip_data.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "3c7ccbd4",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"+--------------------+--------------------+---------+-------------------+------------+-----------+---------+-------+----------+------------+------------+\n",
"| medallion| hack_license|vendor_id| pickup_datetime|payment_type|fare_amount|surcharge|mta_tax|tip_amount|tolls_amount|total_amount|\n",
"+--------------------+--------------------+---------+-------------------+------------+-----------+---------+-------+----------+------------+------------+\n",
"|89D227B655E5C82AE...|BA96DE419E711691B...| CMT|2013-01-01 15:11:48| CSH| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|\n",
"|0BD7C8F5BA12B88E0...|9FD8F69F0804BDB55...| CMT|2013-01-06 00:18:35| CSH| 6.0| 0.5| 0.5| 0.0| 0.0| 7.0|\n",
"|0BD7C8F5BA12B88E0...|9FD8F69F0804BDB55...| CMT|2013-01-05 18:49:41| CSH| 5.5| 1.0| 0.5| 0.0| 0.0| 7.0|\n",
"|DFD2202EE08F7A8DC...|51EE87E3205C985EF...| CMT|2013-01-07 23:54:15| CSH| 5.0| 0.5| 0.5| 0.0| 0.0| 6.0|\n",
"|DFD2202EE08F7A8DC...|51EE87E3205C985EF...| CMT|2013-01-07 23:25:03| CSH| 9.5| 0.5| 0.5| 0.0| 0.0| 10.5|\n",
"|20D9ECB2CA0767CF7...|598CCE5B9C1918568...| CMT|2013-01-07 15:27:48| CSH| 9.5| 0.0| 0.5| 0.0| 0.0| 10.0|\n",
"|496644932DF393260...|513189AD756FF14FE...| CMT|2013-01-08 11:01:15| CSH| 6.0| 0.0| 0.5| 0.0| 0.0| 6.5|\n",
"|0B57B9633A2FECD3D...|CCD4367B417ED6634...| CMT|2013-01-07 12:39:18| CSH| 34.0| 0.0| 0.5| 0.0| 4.8| 39.3|\n",
"|2C0E91FF20A856C89...|1DA2F6543A62B8ED9...| CMT|2013-01-07 18:15:47| CSH| 5.5| 1.0| 0.5| 0.0| 0.0| 7.0|\n",
"|2D4B95E2FA7B2E851...|CD2F522EEE1FF5F5A...| CMT|2013-01-07 15:33:28| CSH| 13.0| 0.0| 0.5| 0.0| 0.0| 13.5|\n",
"|E12F6AF991172EAC3...|06918214E951FA000...| CMT|2013-01-08 13:11:52| CSH| 7.5| 0.0| 0.5| 0.0| 0.0| 8.0|\n",
"|E12F6AF991172EAC3...|06918214E951FA000...| CMT|2013-01-08 09:50:05| CSH| 9.0| 0.0| 0.5| 0.0| 0.0| 9.5|\n",
"|78FFD9CD0CDA541F3...|E949C583ECF62C8F0...| CMT|2013-01-10 12:07:08| CSH| 9.5| 0.0| 0.5| 0.0| 0.0| 10.0|\n",
"|237F49C3ECC11F502...|93C363DDF8ED9385D...| CMT|2013-01-07 07:35:47| CSH| 10.0| 0.0| 0.5| 0.0| 0.0| 10.5|\n",
"|3349F919AA8AE5DC9...|7CE849FEF67514F08...| CMT|2013-01-10 15:42:29| CSH| 15.5| 0.0| 0.5| 0.0| 0.0| 16.0|\n",
"|3349F919AA8AE5DC9...|7CE849FEF67514F08...| CMT|2013-01-10 14:27:28| CSH| 16.5| 0.0| 0.5| 0.0| 0.0| 17.0|\n",
"|4C005EEBAA7BF26B8...|351BE7D984BE17DB2...| CMT|2013-01-07 22:09:59| CSH| 9.0| 0.5| 0.5| 0.0| 0.0| 10.0|\n",
"|7D99C30FCE69B1A9D...|460C3F57DD9CB2265...| CMT|2013-01-07 17:18:16| CSH| 4.5| 1.0| 0.5| 0.0| 0.0| 6.0|\n",
"|E6FBF80668FE0611A...|36773E80775F26CD1...| CMT|2013-01-07 06:08:51| CSH| 7.0| 0.0| 0.5| 0.0| 0.0| 7.5|\n",
"|0C5296F3C8B16E702...|D2363240A9295EF57...| CMT|2013-01-07 22:25:46| CSH| 10.5| 0.5| 0.5| 0.0| 0.0| 11.5|\n",
"+--------------------+--------------------+---------+-------------------+------------+-----------+---------+-------+----------+------------+------------+\n",
"only showing top 20 rows\n",
"\n"
]
}
],
"source": [
"df_trip_fare.show()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "61e21d2a",
"metadata": {},
"outputs": [],
"source": [
"df_left = df_trip_data.filter(col('pickup_datetime').startswith(\"2013-01-01 \"))\n",
"df_right = df_trip_fare.filter(col('pickup_datetime').startswith(\"2013-01-01 \"))\n",
"\n",
"df_joined = df_left.join(df_right, ['medallion', 'pickup_datetime']).cache()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "d73ab313",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Stage 7:====================================================> (12 + 1) / 13]\r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"+--------------------+-------------------+--------------------+---------+---------+------------------+-------------------+---------------+-----------------+-------------+----------------+---------------+-----------------+----------------+--------------------+---------+------------+-----------+---------+-------+----------+------------+------------+\n",
"| medallion| pickup_datetime| hack_license|vendor_id|rate_code|store_and_fwd_flag| dropoff_datetime|passenger_count|trip_time_in_secs|trip_distance|pickup_longitude|pickup_latitude|dropoff_longitude|dropoff_latitude| hack_license|vendor_id|payment_type|fare_amount|surcharge|mta_tax|tip_amount|tolls_amount|total_amount|\n",
"+--------------------+-------------------+--------------------+---------+---------+------------------+-------------------+---------------+-----------------+-------------+----------------+---------------+-----------------+----------------+--------------------+---------+------------+-----------+---------+-------+----------+------------+------------+\n",
"|000318C2E3E638158...|2013-01-01 20:46:00|91CE3B3A2F548CD8A...| VTS| 1| null|2013-01-01 20:56:00| 5| 600| 1.35| -73.989677| 40.756554| -73.970673| 40.752541|91CE3B3A2F548CD8A...| VTS| CRD| 8.5| 0.5| 0.5| 1.8| 0.0| 11.3|\n",
"|00790C7BAD30B7A9E...|2013-01-01 04:26:00|3EF1ED607505C991D...| VTS| 1| null|2013-01-01 04:59:00| 1| 1980| 10.99| -73.996811| 40.716587| -73.949448| 40.827671|3EF1ED607505C991D...| VTS| CRD| 36.5| 0.5| 0.5| 9.25| 0.0| 46.75|\n",
"|00A1EA0E8CD47CE24...|2013-01-01 06:09:50|4FD770C068437BBA9...| CMT| 1| N|2013-01-01 06:29:03| 1| 1153| 5.8| -73.89653| 40.759472| -73.952698| 40.780788|4FD770C068437BBA9...| CMT| CRD| 20.5| 0.0| 0.5| 4.0| 0.0| 25.0|\n",
"+--------------------+-------------------+--------------------+---------+---------+------------------+-------------------+---------------+-----------------+-------------+----------------+---------------+-----------------+----------------+--------------------+---------+------------+-----------+---------+-------+----------+------------+------------+\n",
"only showing top 3 rows\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
}
],
"source": [
"df_joined.show(3)"
]
},
{
"cell_type": "markdown",
"id": "5f246287",
"metadata": {},
"source": [
"### Exercise 2\n",
"Consider only Manhattan, Bronx and Brooklyn districts. Then create a dataframe that shows the total number of trips *within* the same district and *across* all the other districts mentioned before.\n",
"\n",
"For example, for Manhattan borough you should consider the total number of the following trips:\n",
"- Manhattan → Manhattan\n",
"- Manhattan → Brooklyn\n",
"- Manhattan → Bronx\n",
"\n",
"You should then do the same for Bronx and Brooklyn boroughs."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "97e35f13",
"metadata": {},
"outputs": [],
"source": [
"df_boroughs = spark.read \\\n",
" .option(\"multiline\", \"true\") \\\n",
" .json(r'data/nyc-boroughs.geojson')\n",
"\n",
"df_boroughs = df_boroughs.select(F.explode(df_boroughs.features).alias(\"feature\"))\n",
"\n",
"boroughs_list = df_boroughs.select( \\\n",
" df_boroughs.feature.properties.borough.alias(\"borough\"), \\\n",
" df_boroughs.feature.geometry.coordinates.alias(\"coordinates\")).collect()\n",
"\n",
"boroughs_list: list[tuple[str, list[Polygon]]] = \\\n",
" [(r.borough, [Polygon(shell=p) for p in r.coordinates]) for r in boroughs_list]\n",
"\n",
"@F.udf(returnType=T.StringType())\n",
"def get_borough(lon: float, lat: float) -> bool:\n",
" global boroughs_list\n",
"\n",
" if lon is None or lat is None:\n",
" return None\n",
"\n",
" point = Point(lon, lat)\n",
" \n",
" for b in boroughs_list:\n",
" for p in b[1]:\n",
" if p.contains(point):\n",
" return b[0]\n",
" return None"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "b12aa2ec",
"metadata": {},
"outputs": [],
"source": [
"# use UDF as join condition\n",
"df_with_bor = df_joined \\\n",
" .withColumn(\"pickup_borough\", get_borough(\"pickup_longitude\", \"pickup_latitude\")) \\\n",
" .withColumn(\"dropoff_borough\", get_borough(\"dropoff_longitude\", \"dropoff_latitude\")) \\\n",
" .cache()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "9c14ad76-388a-454a-96c0-bf38765ce0dd",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Stage 13:=====================================================>(199 + 1) / 200]\r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"+--------------+---------------+------+\n",
"|pickup_borough|dropoff_borough|count |\n",
"+--------------+---------------+------+\n",
"|Bronx |Bronx |487 |\n",
"|Bronx |Brooklyn |6 |\n",
"|Bronx |Manhattan |284 |\n",
"|Brooklyn |Bronx |57 |\n",
"|Brooklyn |Brooklyn |10454 |\n",
"|Brooklyn |Manhattan |6408 |\n",
"|Manhattan |Bronx |2779 |\n",
"|Manhattan |Brooklyn |14396 |\n",
"|Manhattan |Manhattan |319706|\n",
"+--------------+---------------+------+\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
}
],
"source": [
"def isin(var, values):\n",
" cond = (var == values[0])\n",
" for i in range(0, len(values)):\n",
" cond = cond | (var == values[i])\n",
" return cond\n",
"\n",
"boroughs = [\"Manhattan\", \"Bronx\", \"Brooklyn\"]\n",
"df_ex2 = df_with_bor \\\n",
" .where((isin(df_with_bor.pickup_borough, boroughs)) & (isin(df_with_bor.dropoff_borough, boroughs))) \\\n",
" .groupBy(\"pickup_borough\", \"dropoff_borough\") \\\n",
" .count() \\\n",
" .orderBy(\"pickup_borough\", \"dropoff_borough\")\n",
"df_ex2.show(truncate=False)"
]
},
{
"cell_type": "markdown",
"id": "21bd4ac8",
"metadata": {},
"source": [
"### Exercise 3\n",
"Imagine you are a taxi driver and one day you can work only two hours. Assume the data is representative of a typical working day. Which hours of the day - retrieved from `pickup_datetime` - would you choose to work based on the fare and tip amount?"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "46d191e1-fd13-4de3-8851-5e10a7319286",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Stage 20:=================================================> (184 + 1) / 200]\r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"+-----------+------------------+\n",
"|pickup_hour|fare_and_tip_total|\n",
"+-----------+------------------+\n",
"| 1| 453700.23|\n",
"| 2| 418415.82|\n",
"| 0| 390741.27|\n",
"| 3| 367018.78|\n",
"| 14| 286852.68|\n",
"| 15| 278953.43|\n",
"| 4| 272856.05|\n",
"| 18| 269648.14|\n",
"| 13| 263915.72|\n",
"| 17| 258134.56|\n",
"| 16| 246552.73|\n",
"| 12| 238716.32|\n",
"| 19| 234377.86|\n",
"| 20| 211402.98|\n",
"| 21| 208110.83|\n",
"| 22| 204481.56|\n",
"| 11| 194952.87|\n",
"| 5| 180075.5|\n",
"| 23| 158957.41|\n",
"| 10| 146400.51|\n",
"| 6| 135810.97|\n",
"| 7| 118466.26|\n",
"| 9| 111925.58|\n",
"| 8| 99021.68|\n",
"+-----------+------------------+\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
}
],
"source": [
"df_ex3 = df_joined.select( \\\n",
" F.hour(F.from_utc_timestamp(df_joined.pickup_datetime, 'UTC')).alias('pickup_hour'), \\\n",
" F.col(\"fare_amount\"), \\\n",
" F.col(\"tip_amount\")) \\\n",
" .groupby(\"pickup_hour\") \\\n",
" .agg(F.round(F.sum(F.col(\"fare_amount\") + F.col(\"tip_amount\")), 2).alias('fare_and_tip_total')) \\\n",
" .select(\"pickup_hour\", \"fare_and_tip_total\") \\\n",
" .sort(F.desc(\"fare_and_tip_total\"))\n",
"\n",
"df_ex3.show(24)"
]
},
{
"cell_type": "markdown",
"id": "ffbbaf04-65b5-4fc2-879f-a2a8bcc87519",
"metadata": {},
"source": [
"Given the table above I would choose to work at **1 AM** and **2 AM** as they are the most profitable hours based on total fare and tip amount. This may be the case for the chosen date `2013-01-01` because of the new year celebrations."
]
},
{
"cell_type": "markdown",
"id": "b24e0922",
"metadata": {},
"source": [
"### Exercise 4\n",
"Provide a graphical representation to compare the average fare amount for trips _within_ and _across_ all the districts. You may want to have a look at: https://docs.bokeh.org/en/latest/docs/user_guide/topics/categorical.html#heatmaps."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "0643d9e4",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
}
],
"source": [
"ex4_data = df_with_bor \\\n",
" .withColumn(\"pickup_borough\", F.coalesce(F.col(\"pickup_borough\"), F.lit(\"Unknown\"))) \\\n",
" .withColumn(\"dropoff_borough\", F.coalesce(F.col(\"dropoff_borough\"), F.lit(\"Unknown\"))) \\\n",
" .groupBy(\"pickup_borough\", \"dropoff_borough\") \\\n",
" .agg(F.mean(F.col('fare_amount')).alias('mean_fare_amount')) \\\n",
" .collect()\n",
"\n",
"df_ex4 = pd.DataFrame()\n",
"for i, row in enumerate(ex4_data):\n",
" df_ex4.loc[i, 'pickup_borough'] = row.pickup_borough\n",
" df_ex4.loc[i, 'dropoff_borough'] = row.dropoff_borough\n",
" df_ex4.loc[i, 'mean_fare'] = row.mean_fare_amount"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "2cba45e6-7ad1-4044-b9f0-81943c1cf547",
"metadata": {},
"outputs": [],
"source": [
"pickup = list(sorted(df_ex4['pickup_borough'].unique()))\n",
"dropoff = list(reversed(sorted(df_ex4['dropoff_borough'].unique())))\n",
"\n",
"colors = [\"#75968f\", \"#a5bab7\", \"#c9d9d3\", \"#e2e2e2\", \"#dfccce\", \"#ddb7b1\", \"#cc7878\", \"#933b41\", \"#550b1d\"]\n",
"\n",
"p = figure(title=f\"Mean NYC Taxi fares on 2013-01-01\",\n",
" x_range=pickup, y_range=dropoff,\n",
" x_axis_location=\"above\", width=900, height=900,\n",
" tools=\"hover,save,pan,box_zoom,reset,wheel_zoom\", toolbar_location='below',\n",
" tooltips=[ \\\n",
" ('Pickup Borough', '@pickup_borough'), \\\n",
" ('Dropoff Borough', '@dropoff_borough'), \\\n",
" ('Average Fare Amount', '$@mean_fare')])\n",
"\n",
"p.grid.grid_line_color = None\n",
"p.axis.axis_line_color = None\n",
"p.axis.major_tick_line_color = None\n",
"p.axis.major_label_text_font_size = \"14px\"\n",
"p.axis.major_label_standoff = 0\n",
"p.xaxis.major_label_orientation = pi / 3\n",
"\n",
"r = p.rect(x=\"pickup_borough\", y=\"dropoff_borough\", width=1, height=1, source=df_ex4,\n",
" fill_color=linear_cmap(\"mean_fare\", colors, low=df_ex4.mean_fare.min(), high=df_ex4.mean_fare.max()),\n",
" line_color=None)\n",
"\n",
"p.add_layout(r.construct_color_bar(\n",
" major_label_text_font_size=\"14px\",\n",
" ticker=BasicTicker(desired_num_ticks=len(colors)),\n",
" formatter=PrintfTickFormatter(format=\"$%d\"),\n",
" label_standoff=6,\n",
" border_line_color=None,\n",
" padding=5\n",
"), 'right')\n",
"\n",
"show(p)"
]
},
{
"cell_type": "markdown",
"id": "9b4a8445",
"metadata": {},
"source": [
"### Exercise 5\n",
"Find the average amount of tolls per hour for trips within the following districts: Manhattan, Bronx, Brooklyn, Queens. Show a graphical representation of the data and report if there is any trend or peak during the day. Overall which district has the largest amount of tolls?"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "b80cbb2d",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
},
{
"data": {
"text/plain": [
"<Axes: xlabel='Hour of day of 2013-01-01', ylabel='Mean toll amount'>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABboAAAKnCAYAAABAjvvfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXjU9b3+//szM0kme0I2khASdsIqaqW4EAE9aJVW7aketYJY7bF1wVrb4tdTrbbVY4/aDf35VauotWrbY/u11WoVBJRFQUQFw54EyB6yJ2Sd+f0x+QykbJkwM5+ZzPNxXXNdZNYXEQm585r7bbjdbrcAAAAAAAAAAAhTNqsHAAAAAAAAAADgVBB0AwAAAAAAAADCGkE3AAAAAAAAACCsEXQDAAAAAAAAAMIaQTcAAAAAAAAAIKwRdAMAAAAAAAAAwhpBNwAAAAAAAAAgrBF0AwAAAAAAAADCmsPqAYLN5XKpoqJCiYmJMgzD6nEAAAAAAAAAAMfgdrvV0tKinJwc2Wwn3tmOuKC7oqJCeXl5Vo8BAAAAAAAAABiA/fv3a8SIESe8T8QF3YmJiZI8n5ykpCSLpwEAAAAAAAAAHEtzc7Py8vK8me6JRFzQbdaVJCUlEXQDAAAAAAAAQIgbSAU1h1ECAAAAAAAAAMIaQTcAAAAAAAAAIKwRdAMAAAAAAAAAwlrEdXQDAAAAAAAACG1ut1s9PT3q7e21ehQEWFRUlOx2+yk/D0E3AAAAAAAAgJDR1dWlyspKtbe3Wz0KgsAwDI0YMUIJCQmn9DwE3QAAAAAAAABCgsvlUklJiex2u3JychQdHS3DMKweCwHidrtVW1urAwcOaNy4cae02U3QDQAAAAAAACAkdHV1yeVyKS8vT3FxcVaPgyDIyMhQaWmpuru7Tyno5jBKAAAAAAAAACHFZiO2jBT+2tjnTwwAAAAAAAAAIKwRdAMAAAAAAADAMZx//vm64447rB5j0MJ9fl8QdAMAAAAAAAAAwhpBNwAAAAAAAAAEQW9vr1wul9VjDEkE3QAAAAAAAABwHD09Pbr11luVnJys9PR0/fjHP5bb7ZYkNTQ0aOHChUpNTVVcXJwuvvhi7dq1y/vY5cuXKyUlRa+//romTZqkmJgY7du376SP+8lPfqLTTjut3xy/+tWvVFBQ0G+u22+/XSkpKUpLS9OPfvQjLVq0SJdddlm/x7lcLv3whz/UsGHDNHz4cP3kJz/x96coJBB0AwAAAAAAAMBxPP/883I4HProo4/061//Wo899pieeeYZSdL111+vTZs26fXXX9f69evldrv1la98Rd3d3d7Ht7e36+GHH9Yzzzyjbdu2KTMzc0CPO5mHH35YL730kp577jmtXbtWzc3N+utf/3rM+ePj4/Xhhx/qF7/4hR544AG98847p/x5CTUOqwcAAAAAAAAAgFCVl5enX/7ylzIMQxMmTNDnn3+uX/7ylzr//PP1+uuva+3atTr77LMlSS+99JLy8vL017/+Vd/4xjckSd3d3XriiSc0ffp0SdKuXbsG9LiT+e1vf6u7775bl19+uSRp2bJlevPNN4+637Rp03TfffdJksaNG6dly5ZpxYoVuvDCC0/tExNi2OgGAAAAAAAAgOP48pe/LMMwvB/PmjVLu3bt0hdffCGHw6GZM2d6b0tLS9OECRNUXFzsvS46OlrTpk3zflxcXDygx51IU1OTqqurddZZZ3mvs9vtOuOMM46675GvLUnZ2dmqqakZ0OuEE4JuAAAAAAAAAAiQ2NjYfkH5QNhsNm8PuMmXWpMjRUVF9fvYMIwheSAmQTcAAAAAAAAAHMeHH37Y7+MNGzZo3LhxmjRpknp6evrdfvDgQe3YsUOTJk067vMVFhae9HEZGRmqqqrqF3Zv2bLF++vk5GRlZWVp48aN3ut6e3u1efPmQf8+wx1BNwAAAAAAAAAcx759+3TnnXdqx44devnll/Xb3/5WS5Ys0bhx4/S1r31NN910kz744AN9+umn+uY3v6nc3Fx97WtfO+7zDeRx559/vmpra/WLX/xCe/bs0eOPP65//OMf/Z7ntttu00MPPaT/9//+n3bs2KElS5aooaHB5+3xoYKgGwAAAAAAAACOY+HChTp06JDOOuss3XLLLVqyZIm+/e1vS5Kee+45nXHGGbr00ks1a9Ysud1uvfnmm0fVhfyrkz2usLBQTzzxhB5//HFNnz5dH330ke66665+z/GjH/1IV199tRYuXKhZs2YpISFB8+fPl9PpDMwnIsQZ7n8texnimpublZycrKamJiUlJVk9DgAAAAAAAIA+HR0dKikp0ahRoyI2sB0sl8ulwsJCXXnllfrpT39q9TgDdqL/5r5kuY5ADgkAAAAAAAAA8L+ysjL985//VFFRkTo7O7Vs2TKVlJTommuusXo0S1BdAgAAAAAAAABhxmazafny5frSl76kc845R59//rneffddFRYWWj2aJdjoBgAAAAAAAIAwk5eXp7Vr11o9RshgoxsAAAAAAAAAENYIugEAAAAAAAAAYY2gGwAAAAAAAAAQ1gi6AQAAAAAAAABhjaAbAAAAAAAAABDWCLoBAAAAAAAAAGGNoBsAAAAAAAAAENYIugEAAAAAAADgFF1//fUyDMN7SUtL00UXXaTPPvvM6tEiAkE3AAAAAAAAAPjBRRddpMrKSlVWVmrFihVyOBy69NJLj3v/7u7uIE43tBF0AwAAAAAAAIAfxMTEaPjw4Ro+fLhOO+00LV26VPv371dtba1KS0tlGIZeffVVFRUVyel06qWXXpLL5dIDDzygESNGKCYmRqeddpreeust73Oaj3vttdc0Z84cxcXFafr06Vq/fr33PjfccIOmTZumzs5OSVJXV5dmzJihhQsXBv1zYBVLg+41a9ZowYIFysnJkWEY+utf/zrgx65du1YOh0OnnXZawOYDAAAAAAAAYC232632rh5LLm63e9Bzt7a26ve//73Gjh2rtLQ07/VLly7VkiVLVFxcrPnz5+vXv/61Hn30UT3yyCP67LPPNH/+fH31q1/Vrl27+j3fPffco7vuuktbtmzR+PHjdfXVV6unp0eS9Jvf/EZtbW1aunSp976NjY1atmzZoOcPNw4rX7ytrU3Tp0/XDTfcoCuuuGLAj2tsbNTChQs1b948VVdXB3BCAAAAAAAAAFY61N2rSfe+bclrf/HAfMVFDzxC/fvf/66EhARJnuwzOztbf//732WzHd43vuOOO/ploY888oh+9KMf6T/+4z8kSQ8//LDee+89/epXv9Ljjz/uvd9dd92lSy65RJJ0//33a/Lkydq9e7cmTpyohIQE/f73v1dRUZESExP1q1/9Su+9956SkpJO6fcfTiwNui+++GJdfPHFPj/u5ptv1jXXXCO73e7TFjgAAAAAAAAABMqcOXP0//1//58kqaGhQU888YQuvvhiffTRR977nHnmmd5fNzc3q6KiQuecc06/5znnnHP06aef9rtu2rRp3l9nZ2dLkmpqajRx4kRJ0qxZs3TXXXfppz/9qX70ox/p3HPP9e9vLsRZGnQPxnPPPae9e/fq97//vX72s5+d9P6dnZ3ebhrJ84cHAAAAAAAAQHiIjbLriwfmW/bavoiPj9fYsWO9Hz/zzDNKTk7W008/rRtvvNF7n8GIiory/towDEmSy+XyXudyubR27VrZ7Xbt3r17UK8RzsIq6N61a5eWLl2q999/Xw7HwEZ/6KGHdP/99wd4MgAAAAAAAACBYBiGT/UhocQwDNlsNh06dOiYtyclJSknJ0dr165VUVGR9/q1a9fqrLPO8um1/ud//kfbt2/X6tWrNX/+fD333HNavHjxKc0fTiw9jNIXvb29uuaaa3T//fdr/PjxA37c3XffraamJu9l//79AZwSAAAAAAAAQKTq7OxUVVWVqqqqVFxcrNtuu02tra1asGDBcR/zgx/8QA8//LBeffVV7dixQ0uXLtWWLVu0ZMmSAb/uJ598onvvvVfPPPOMzjnnHD322GNasmSJ9u7d64/fVlgImx+FtLS0aNOmTfrkk0906623SvKs47vdbjkcDv3zn//U3Llzj3pcTEyMYmJigj0uAAAAAAAAgAjz1ltvefuzExMTNXHiRP3pT3/S+eefr9LS0mM+5vbbb1dTU5O+//3vq6amRpMmTdLrr7+ucePGDeg1Ozo69M1vflPXX3+9N1D/9re/rTfeeEPXXXed1qxZI7vdtwqWcGS43W631UNInjX+v/zlL7rsssuOebvL5dIXX3zR77onnnhCK1eu1J///GeNGjVqQP02zc3NSk5OVlNTU0SdOgoAAAAAAACEuo6ODpWUlGjUqFFyOp1Wj4MgONF/c1+yXEs3ultbW/sVo5eUlGjLli0aNmyYRo4cqbvvvlvl5eV64YUXZLPZNGXKlH6Pz8zMlNPpPOp6AAAAAAAAAEDksDTo3rRpk+bMmeP9+M4775QkLVq0SMuXL1dlZaX27dtn1XgAAAAAAAAAgDAQMtUlwUJ1CQAAAAAAABCaqC6JPP6qLrEFckgAAAAAAAAAAAKNoBsAAAAAAAAAENYIugEAAAAAAAAAYY2gGwAAAAAAAAAQ1gi6AQAAAAAAAABhjaAbAAAAAAAAABDWCLoBAAAAAAAAIIxdf/31uuyyy457+09+8hOddtppQZvHCgTdAAAAAAAAAHCKrr/+ehmG4b2kpaXpoosu0meffWb1aBGBoBsAAAAAAAAA/OCiiy5SZWWlKisrtWLFCjkcDl166aXHvX93d3cQpxvaCLoBAAAAAAAAwA9iYmI0fPhwDR8+XKeddpqWLl2q/fv3q7a2VqWlpTIMQ6+++qqKiorkdDr10ksvyeVy6YEHHtCIESMUExOj0047TW+99Va/5/388881d+5cxcbGKi0tTd/+9rfV2tp63Dk2btyojIwMPfzww0fdtmbNGkVFRamqqqrf9XfccYfOO+88SdLy5cuVkpKit99+W4WFhUpISPCG+KGKoBsAAAAAAABA6HK7pa42ay5u96DHbm1t1e9//3uNHTtWaWlp3uuXLl2qJUuWqLi4WPPnz9evf/1rPfroo3rkkUf02Wefaf78+frqV7+qXbt2SZLa2to0f/58paamauPGjfrTn/6kd999V7feeusxX3flypW68MIL9fOf/1w/+tGPjrp99uzZGj16tF588UXvdd3d3XrppZd0ww03eK9rb2/XI488ohdffFFr1qzRvn37dNdddw368xFoDqsHAAAAAAAAAIDj6m6XHsyx5rX/T4UUHT/gu//9739XQkKCJE9AnZ2drb///e+y2Q7vG99xxx264oorvB8/8sgj+tGPfqT/+I//kCQ9/PDDeu+99/SrX/1Kjz/+uP7whz+oo6NDL7zwguLjPbMsW7ZMCxYs0MMPP6ysrCzvc/3lL3/RwoUL9cwzz+iqq6467pzf+ta39Nxzz+kHP/iBJOlvf/ubOjo6dOWVV3rv093drSeffFJjxoyRJN1666164IEHBvy5CDY2ugEAAAAAAADAD+bMmaMtW7Zoy5Yt+uijjzR//nxdfPHFKisr897nzDPP9P66ublZFRUVOuecc/o9zznnnKPi4mJJUnFxsaZPn+4Nuc3bXS6XduzY4b3uww8/1De+8Q29+OKLJwy5Jc/Bmbt379aGDRskeapKrrzyyn6vERcX5w25JSk7O1s1NTW+fDqCio1uAAAAAAAAAKErKs6zWW3Va/sgPj5eY8eO9X78zDPPKDk5WU8//bRuvPFG730CYcyYMUpLS9Ozzz6rSy65RFFRUce9b2ZmphYsWKDnnntOo0aN0j/+8Q+tWrWq333+9fGGYch9ClUugcZGNwAAAAAAAIDQZRie+hArLoZxiqMbstlsOnTo0DFvT0pKUk5OjtauXdvv+rVr12rSpEmSpMLCQn366adqa2vrd7vNZtOECRO816Wnp2vlypXavXu3rrzySnV3d59wthtvvFGvvvqqnnrqKY0ZM+aorfJw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serscWn93qPfzQgAOLFgbHTHOOw6e0yaJGn1ztqAvQ4AIPT5HHT/+7//u1atWuWXF3/11Vd155136r777tPmzZs1ffp0zZ8/XzU1xz7d/g9/+IOWLl2q++67T8XFxfrd736nV199Vf/n//wfv8wDAACAgWs61K32vk3n7GT/HzJmNcMwNHeiZ6t7RfGx/30KADi+siBsdEtS0YQMSdIagm4AiGg+d3QvW7ZM3/jGN/T+++9r6tSpioqK6nf77bffPuDneuyxx3TTTTdp8eLFkqQnn3xSb7zxhp599lktXbr0qPuvW7dO55xzjq655hpJUkFBga6++mp9+OGHvv42AAAAcIoONHi2udMTouWMsls8TWDMLczUixvKtHJ7jdxutwyD7lcAGAiXy62yvo3u/ABudEvS7HGeoHtTaYNaO3uUEONz1AEAGAJ8/tv/5Zdf1j//+U85nU6tWrWq3z/2DcMYcNDd1dWljz/+WHfffbf3OpvNpgsuuEDr168/5mPOPvts/f73v9dHH32ks846S3v37tWbb76p66677riv09nZqc7OTu/Hzc10dgEAAPjDUK4tMc0anabYKLsqmzpUXNmiSTlJVo8EAGGhuqVDnT0uOWxGwA8sLkiPV35anMoOtmv9noO6cJJ/qlYBAOHF5+qSe+65R/fff7+amppUWlqqkpIS72Xv3r0Dfp66ujr19vYe1fWdlZWlqqqqYz7mmmuu0QMPPKBzzz1XUVFRGjNmjM4///wTVpc89NBDSk5O9l7y8vIGPCMAAACOz3sQ5RAOup1Rdp0z1tP9unJ7tcXTAED4MLe5R6TGymH3OXrwWdF4z1b36p1UTQFApPL5q01XV5euuuoq2WyB/0L1r1atWqUHH3xQTzzxhDZv3qzXXntNb7zxhn76058e9zF33323mpqavJf9+/cHcWIAAIChq6LJcyD4UN7olqS5Ez2LGSu2E54AwEAFq5/bZNaXrN5ZK7fbHZTXBACEFp/T6kWLFunVV1895RdOT0+X3W5XdXX/zZjq6moNHz78mI/58Y9/rOuuu0433nijpk6dqssvv1wPPvigHnroIblcrmM+JiYmRklJSf0uAAAAOHXlEVBdIsl7IOWW/Y062Np5knsDACSptG+juyDA/dymWWPSFGU3tL/+kPe1AQCRxeeO7t7eXv3iF7/Q22+/rWnTph11GOVj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eughFBQUaB1arZ0/fx6rVq1Chw4dsHPnTrz00kt45ZVX8Nlnn2kdmltt3boVubm5mDBhgtahuMUbb7yBsWPHonPnztDpdOjZsyemT5+OcePGaR1arfn5+SE6Ohrz5s1DZmYmZFnGl19+if379yMrK0vr8NzK1h+hvopnKy0txeuvv46nn34a/v7+WofjFtu3b4evry8MBgPef/99JCQkoHnz5lqHVWsLFy6EKIp45ZVXtA6lTsTGxuLzzz/Hrl27sHDhQiQmJmLo0KEef1v3tWvXUFhYiAULFiA2NhY//vgjnnjiCTz55JNITEzUOjy3+uyzz+Dn5+cRU0S4Yvny5ejatStatWoFSZIQGxuLlStXYsCAAVqHViu2pO+bb76JW7duwWg0YuHChbhy5YrH9VWcXW9nZ2dDkqQKH956Wv+kMeYSbFxp240bNzBv3jz86U9/qufoaqeqtv3rX/+Cr68vfH198cMPPyAhIQGSJGkUacPiWR9lEHIXmzJlCo4fP+6Rn4xXplOnTkhOTkZeXh6+/vprjB8/HomJiR6f7L58+TKmTZuGhIQEj5gvsSbsR8l2794dffv2RUREBDZu3OjxI24URUHv3r3x7rvvAgB69uyJ48ePY/Xq1Rg/frzG0bnP2rVrMXToUI+bj7UyGzduxFdffYV169YhKioKycnJmD59OsLCwhrFz+2LL77AxIkT0bJlSwiCgPvuuw9PP/00kpKStA6NEAcmkwmjR48GYwyrVq3SOhy3eeSRR5CcnIwbN27go48+wujRo3HgwAEEBwdrHdodS0pKwrJly3DkyJFGcWePM2PHjlW3u3Xrhu7du6Ndu3bYs2cPBg0apGFktaMoCgAgLi4Or776KgDg3nvvxa+//orVq1dj4MCBWobnVp988gnGjRvXaPrSy5cvx2+//YZt27YhIiICe/fuxZQpUxAWFubRd3/qdDps3rwZkyZNQmBgIARBwODBgzF06FCP+2Lwxni9bXM3ty0/Px/Dhg1D165dMXfu3PoNrpaqatu4cePw2GOPISsrC4sXL8bo0aOxb9++RvM3szZoRPddoHnz5hAEocI3A1+9ehUhISEaRUVqYurUqdi+fTt2796NVq1aaR2O20iShPbt26NXr16YP38+evTogWXLlmkdVq0lJSXh2rVruO+++yCKIkRRRGJiIv75z39CFEWPH01k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",
"text/plain": [
"<Figure size 1800x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"boroughs_ex5 = [\"Manhattan\", \"Bronx\", \"Brooklyn\", \"Queens\"]\n",
"\n",
"ex5_data = df_with_bor \\\n",
" .where((isin(df_with_bor.pickup_borough, boroughs_ex5)) & (df_with_bor.pickup_borough == df_with_bor.dropoff_borough)) \\\n",
" .withColumn(\"hour\", F.hour(F.from_utc_timestamp(F.col(\"pickup_datetime\"), 'UTC'))) \\\n",
" .groupBy(\"pickup_borough\", \"dropoff_borough\", \"hour\") \\\n",
" .agg(F.mean(F.col('tolls_amount')).alias('mean_tolls_amount')) \\\n",
" .select(F.col('pickup_borough').alias('borough'), F.col('hour'), F.col('mean_tolls_amount')) \\\n",
" .orderBy(\"borough\", \"hour\") \\\n",
" .collect()\n",
"\n",
"df_ex5 = pd.DataFrame()\n",
"for i, row in enumerate(ex5_data):\n",
" df_ex5.loc[i, 'borough'] = row.borough\n",
" df_ex5.loc[i, 'hour'] = row.hour\n",
" df_ex5.loc[i, 'mean_tolls_amount'] = row.mean_tolls_amount\n",
"\n",
"# Initialize the matplotlib figure\n",
"f, ax = plt.subplots(figsize=(18, 8))\n",
"ax.set(ylabel=\"Mean toll amount\", ylim=[0, 1.5], xticks=range(24), \n",
" xlabel=\"Hour of day of 2013-01-01\")\n",
"sns.lineplot(data=df_ex5, x=\"hour\", y=\"mean_tolls_amount\", hue=\"borough\")"
]
},
{
"cell_type": "markdown",
"id": "a575ddfa-5b39-4871-ad02-e81439eb13e6",
"metadata": {},
"source": [
"For trips within _Bronx_, there are several toll amount peaks, namely in decreasing order of magnitude between 10 AM and 11 AM, at 5 PM, at 8 PM and at 5 AM. Trips within _Queens_ show a steady toll amount increase peaking at 4 PM and then decreasing again. "
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "d0153a6e-3da5-49a2-8772-488c7d364ac2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>mean_tolls_amount</th>\n",
" </tr>\n",
" <tr>\n",
" <th>borough</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Bronx</th>\n",
" <td>4.465003</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Queens</th>\n",
" <td>2.672513</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Brooklyn</th>\n",
" <td>0.417684</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Manhattan</th>\n",
" <td>0.145958</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mean_tolls_amount\n",
"borough \n",
"Bronx 4.465003\n",
"Queens 2.672513\n",
"Brooklyn 0.417684\n",
"Manhattan 0.145958"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ex5.groupby(\"borough\").sum().loc[:, [\"mean_tolls_amount\"]].sort_values(\"mean_tolls_amount\", ascending=False)"
]
},
{
"cell_type": "markdown",
"id": "501ef279-4b61-43d5-aa33-5c20d5354bb7",
"metadata": {},
"source": [
"As shown by the table above, _Bronx_ is the borough with the overall highest toll amounts for within-borough trips on 2013-01-01."
]
},
{
"cell_type": "markdown",
"id": "884b4cf9",
"metadata": {},
"source": [
"### Exercise 6\n",
"Create a dataframe that for each district shows the shortest and longest `trip_distance` starting and ending in the same district. What is the length of the longest and shortest trips in Manhattan?"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "0aa8d795",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Stage 50:===================================================> (189 + 1) / 200]\r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"+-------------+-----------------+-----------------+\n",
"|borough |min_trip_distance|max_trip_distance|\n",
"+-------------+-----------------+-----------------+\n",
"|Bronx |0.0 |20.0 |\n",
"|Brooklyn |0.0 |80.5 |\n",
"|Manhattan |0.0 |100.0 |\n",
"|Queens |0.0 |98.7 |\n",
"|Staten Island|0.0 |5.7 |\n",
"+-------------+-----------------+-----------------+\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
}
],
"source": [
"df_ex6 = df_with_bor \\\n",
" .where((df_with_bor.pickup_borough == df_with_bor.dropoff_borough) & (df_with_bor.pickup_borough.isNotNull())) \\\n",
" .groupBy(\"pickup_borough\") \\\n",
" .agg(F.min('trip_distance').alias('min_trip_distance'), F.max('trip_distance').alias('max_trip_distance')) \\\n",
" .withColumnRenamed(\"pickup_borough\", \"borough\") \\\n",
" .orderBy(\"borough\")\n",
"\n",
"df_ex6.show(truncate=False)"
]
},
{
"cell_type": "markdown",
"id": "7a903390-2ef0-45da-8d76-f992d43a53b1",
"metadata": {},
"source": [
"The shortest trip within _Manhattan_ has distance $= 0$ while the longest one has distance $= 100$."
]
},
{
"cell_type": "markdown",
"id": "756da7e4",
"metadata": {},
"source": [
"### Exercise 7\n",
"Consider only the trips _within_ districts. What are the first and second-most expensive\n",
"trips - based on `total_amount` - in every district?"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "ca83556d",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Stage 100:==================================================> (192 + 1) / 200]\r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"+--------------------+-------------------+--------------------+---------+---------+------------------+-------------------+---------------+-----------------+-------------+----------------+---------------+-----------------+----------------+--------------------+---------+------------+-----------+---------+-------+----------+------------+------------+-------------+---------------+----+\n",
"| medallion| pickup_datetime| hack_license|vendor_id|rate_code|store_and_fwd_flag| dropoff_datetime|passenger_count|trip_time_in_secs|trip_distance|pickup_longitude|pickup_latitude|dropoff_longitude|dropoff_latitude| hack_license|vendor_id|payment_type|fare_amount|surcharge|mta_tax|tip_amount|tolls_amount|total_amount| borough|dropoff_borough|rank|\n",
"+--------------------+-------------------+--------------------+---------+---------+------------------+-------------------+---------------+-----------------+-------------+----------------+---------------+-----------------+----------------+--------------------+---------+------------+-----------+---------+-------+----------+------------+------------+-------------+---------------+----+\n",
"|157E792C9A2041556...|2013-01-01 04:12:46|5AE2BD64DE046BC5C...| CMT| 5| N|2013-01-01 04:13:30| 3| 44| 0.0| -73.884644| 40.856674| -73.884636| 40.856693|5AE2BD64DE046BC5C...| CMT| CRD| 70.0| 0.0| 0.0| 14.0| 0.0| 84.0| Bronx| Bronx| 1|\n",
"|0984728E985ADC092...|2013-01-01 05:02:38|A3E9537FA108A49E4...| CMT| 5| N|2013-01-01 05:03:53| 2| 75| 0.2| -73.896759| 40.886013| -73.89904| 40.887779|A3E9537FA108A49E4...| CMT| CRD| 80.0| 0.0| 0.0| 0.0| 0.0| 80.0| Bronx| Bronx| 2|\n",
"|2D84EC6CD02550324...|2013-01-01 04:25:00|AC22E37790A7E433E...| VTS| 5| null|2013-01-01 04:25:00| 2| 0| 0.12| -73.939285| 40.723331| -73.939285| 40.723343|AC22E37790A7E433E...| VTS| CRD| 136.0| 0.0| 0.0| 34.0| 10.25| 180.25| Brooklyn| Brooklyn| 1|\n",
"|2A7C1AF76D40C1D22...|2013-01-01 03:56:00|7EAD01D87E93BA1E5...| VTS| 5| null|2013-01-01 03:56:00| 1| 0| 0.0| -73.983307| 40.679096| -73.983307| 40.6791|7EAD01D87E93BA1E5...| VTS| CRD| 100.0| 0.0| 0.0| 20.0| 10.25| 130.25| Brooklyn| Brooklyn| 2|\n",
"|152CBE18BB178155B...|2013-01-01 03:59:34|46B7AEDD5C8ECFF1E...| CMT| 5| N|2013-01-01 04:00:41| 3| 66| 0.0| -73.976433| 40.746506| -73.976433| 40.746506|46B7AEDD5C8ECFF1E...| CMT| DIS| 500.0| 0.0| 0.0| 0.0| 0.0| 500.0| Manhattan| Manhattan| 1|\n",
"|152CBE18BB178155B...|2013-01-01 04:03:32|46B7AEDD5C8ECFF1E...| CMT| 5| N|2013-01-01 04:04:51| 1| 79| 0.0| -73.976433| 40.746506| -73.976433| 40.746506|46B7AEDD5C8ECFF1E...| CMT| CSH| 475.0| 0.0| 0.0| 0.0| 0.0| 475.0| Manhattan| Manhattan| 2|\n",
"|FA189EABBB4058AC0...|2013-01-01 11:10:12|4E557EC0844425C75...| CMT| 5| N|2013-01-01 11:13:34| 2| 202| 2.2| -73.875206| 40.773304| -73.912048| 40.769394|4E557EC0844425C75...| CMT| CRD| 123.0| 0.0| 0.0| 15.0| 0.0| 138.0| Queens| Queens| 1|\n",
"|6B22AE697469CEA3D...|2013-01-01 03:53:00|52169A073CB4E5B1D...| VTS| 1| null|2013-01-01 04:35:00| 2| 2520| 17.24| -73.902206| 40.775982| -73.769829| 40.778721|52169A073CB4E5B1D...| VTS| CRD| 52.5| 0.5| 0.5| 62.5| 0.0| 116.0| Queens| Queens| 2|\n",
"|25C8D6B5EFFDE4FA5...|2013-01-01 02:41:48|70CD78D1142589EF0...| CMT| 5| N|2013-01-01 02:42:22| 1| 33| 0.0| -74.092506| 40.594997| -74.092484| 40.595036|70CD78D1142589EF0...| CMT| CRD| 73.0| 0.0| 0.0| 18.25| 0.0| 91.25|Staten Island| Staten Island| 1|\n",
"|B0B78CD05C8A1737E...|2013-01-01 03:42:19|B104BA3D279D230A0...| CMT| 5| N|2013-01-01 03:43:38| 2| 78| 0.0| -74.149422| 40.612503| -74.149399| 40.61248|B104BA3D279D230A0...| CMT| CRD| 89.6| 0.0| 0.0| 0.0| 0.0| 89.6|Staten Island| Staten Island| 2|\n",
"+--------------------+-------------------+--------------------+---------+---------+------------------+-------------------+---------------+-----------------+-------------+----------------+---------------+-----------------+----------------+--------------------+---------+------------+-----------+---------+-------+----------+------------+------------+-------------+---------------+----+\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
}
],
"source": [
"w = Window.partitionBy(\"borough\").orderBy(F.col(\"total_amount\").desc())\n",
"\n",
"df_ex7 = df_with_bor \\\n",
" .where((df_with_bor.pickup_borough == df_with_bor.dropoff_borough) & (df_with_bor.pickup_borough.isNotNull())) \\\n",
" .withColumnRenamed(\"pickup_borough\", \"borough\") \\\n",
" .withColumn(\"rank\", F.rank().over(w)) \\\n",
" .where(F.col(\"rank\") <= 2) \\\n",
"\n",
"df_ex7.show()"
]
},
{
"cell_type": "markdown",
"id": "6f88a475-1ef1-4b5d-829c-fb33e4b71d76",
"metadata": {},
"source": [
"The dataframe above shows the most expensive (with `rank` $=1$) and second most expensive (with `rank` $=2$) within-district trip data for each district."
]
},
{
"cell_type": "markdown",
"id": "4f1e0800",
"metadata": {},
"source": [
"### Exercise 8\n",
"Create a dataframe where each row represents a driver, and there is one column per district.\n",
"For each driver-district, the dataframe provides the maximum number of consecutive trips\n",
"for the given driver, within the given district. \n",
"\n",
"For example, if for driver A we have (sorted by time):\n",
"- Trip 1: Bronx → Bronx\n",
"- Trip 2: Bronx → Bronx\n",
"- Trip 3: Bronx → Manhattan\n",
"- Trip 4: Manhattan → Bronx.\n",
" \n",
"The maximum number of consecutive trips for Bronx is 2."
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "edde38bb",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Stage 265:> (0 + 1) / 1]\r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"+--------------------+-----+--------+---------+------+-------------+\n",
"| medallion|Bronx|Brooklyn|Manhattan|Queens|Staten Island|\n",
"+--------------------+-----+--------+---------+------+-------------+\n",
"|35E11D9D2AE5C8A80...| 0| 1| 15| 5| 0|\n",
"|DA350783B6954CC67...| 0| 0| 27| 0| 0|\n",
"|35B2F21FAF5E53F1E...| 0| 3| 8| 3| 0|\n",
"|6695FB6E06F7D99F5...| 0| 1| 21| 0| 0|\n",
"|36372627462019376...| 0| 0| 5| 2| 0|\n",
"|EF882BDAF03D41517...| 0| 0| 17| 1| 0|\n",
"|846DFE2D59F6E76EC...| 0| 1| 25| 0| 0|\n",
"|9B69C5971F62F151B...| 0| 0| 13| 1| 0|\n",
"|0F621E366CFE63044...| 0| 1| 11| 1| 0|\n",
"|87EB479F55B88D47C...| 0| 1| 19| 0| 0|\n",
"|4EE5F2532F57F2124...| 0| 0| 14| 1| 0|\n",
"|4F4CA97166A04A455...| 0| 0| 13| 1| 0|\n",
"|DB1964B903773868E...| 0| 0| 6| 0| 0|\n",
"|B01A3E26873C4B514...| 0| 3| 20| 1| 0|\n",
"|F49F752E7E9CAAE41...| 1| 0| 8| 2| 0|\n",
"|D72C164FE66ADFFFE...| 0| 1| 20| 1| 0|\n",
"|E1BD31C1BF8DDCFCB...| 0| 2| 3| 1| 0|\n",
"|80F732B990A7E3763...| 0| 0| 13| 2| 0|\n",
"|F9B3A00E6DDCA4F8B...| 0| 0| 15| 0| 0|\n",
"|1E8EDF1C2EF489B7A...| 0| 0| 2| 1| 0|\n",
"|6AFD7E44A278CFD00...| 0| 0| 4| 1| 0|\n",
"|27E7626D5A223B479...| 0| 0| 21| 0| 0|\n",
"|DDCBE3295F4678F61...| 0| 0| 4| 0| 0|\n",
"|EB6F0753E865DA0AB...| 0| 3| 13| 1| 0|\n",
"|963BEE5F306952D20...| 0| 0| 15| 1| 0|\n",
"|ADFCF211DDD6D7885...| 0| 0| 12| 2| 0|\n",
"|BF46B95E44ED3BE1B...| 0| 0| 17| 0| 0|\n",
"|DCE32B5E6CAD1AFEB...| 0| 2| 12| 2| 0|\n",
"|7D4F34EF0A251F3A6...| 0| 4| 6| 1| 0|\n",
"|764CA5AE502C0FEC9...| 0| 1| 13| 0| 0|\n",
"|4D0A5B1BD7C0B459D...| 0| 1| 12| 1| 0|\n",
"|ED9B774735449ABBE...| 0| 2| 9| 0| 0|\n",
"|198109D0AF980C5BC...| 0| 0| 16| 0| 0|\n",
"|F0BC746C7DD8C0BC9...| 0| 1| 6| 0| 0|\n",
"|223670562219093D6...| 1| 0| 9| 0| 0|\n",
"|59DF6039EC312EE6D...| 0| 2| 7| 0| 0|\n",
"|A02946A94C960AF04...| 0| 0| 7| 0| 0|\n",
"|15162141EA7436635...| 0| 0| 9| 1| 0|\n",
"|5803D6EAD49AEAA82...| 0| 0| 16| 1| 0|\n",
"|618BB39CEEAE5E9A6...| 0| 1| 12| 1| 0|\n",
"|B9E10026AAC457AA6...| 0| 1| 8| 0| 0|\n",
"|E7C49B0A85D992BF1...| 0| 0| 28| 0| 0|\n",
"|4E8142153D6520C41...| 0| 0| 14| 0| 0|\n",
"|72EAFBA3FB9F0507C...| 0| 1| 11| 0| 0|\n",
"|7550D0BD520A691EC...| 0| 0| 7| 0| 0|\n",
"|A5A2F3BDEA888D6A7...| 0| 0| 7| 2| 0|\n",
"|7F82F9083BCBA1011...| 0| 1| 6| 0| 0|\n",
"|586D9BD604B923DA3...| 0| 0| 28| 0| 0|\n",
"|06EAD4C8D98202F1E...| 0| 1| 17| 0| 0|\n",
"|D563F5CC514A87541...| 1| 0| 8| 2| 0|\n",
"|496036713FC662D71...| 0| 0| 13| 0| 0|\n",
"|595917A7813CC80DA...| 0| 1| 22| 0| 0|\n",
"|DAF60A90A00F8FE30...| 0| 0| 20| 0| 0|\n",
"|C251B99766928BB4A...| 0| 0| 7| 2| 0|\n",
"|B59C6B4E3CFAB9EDF...| 0| 0| 33| 0| 0|\n",
"|1109955CCAABCBCE1...| 0| 0| 3| 0| 0|\n",
"|56CF5E3DD6328847A...| 0| 0| 5| 1| 0|\n",
"|5CCB4924B158F945B...| 0| 0| 24| 0| 0|\n",
"|73039762E0F4B253E...| 0| 0| 22| 0| 0|\n",
"|C0D5941A4A93777E9...| 0| 0| 15| 1| 0|\n",
"|57E8E649531AB8807...| 0| 0| 5| 0| 0|\n",
"|911B6F71706854496...| 0| 0| 9| 0| 0|\n",
"|B2B089B939CB4A0A6...| 0| 0| 15| 0| 0|\n",
"|753BC0484097BB236...| 0| 0| 11| 0| 0|\n",
"|47D63452A91E1705F...| 0| 0| 6| 1| 0|\n",
"|BEA5A07E7B365D7F6...| 0| 0| 20| 0| 0|\n",
"|34CE2E3B6B1E89A38...| 0| 1| 9| 0| 0|\n",
"|5B9AB2A961429F558...| 0| 1| 24| 1| 0|\n",
"|72AAE2B8FF50AF611...| 0| 1| 24| 0| 0|\n",
"|4A9DED62DD8EA1E19...| 1| 0| 20| 0| 0|\n",
"|9771700E1AE5E87B2...| 0| 0| 7| 1| 0|\n",
"|C50532B1D6B517BCB...| 0| 2| 8| 1| 0|\n",
"|4F9B5CF4F0FC8835D...| 0| 2| 16| 0| 0|\n",
"|2B8C6434EB5875E58...| 0| 0| 18| 0| 0|\n",
"|BA57B240D0EEE2F43...| 0| 2| 36| 2| 0|\n",
"|4A17962CB3E106E57...| 0| 1| 12| 1| 0|\n",
"|286EFDDA8BBA68C50...| 0| 0| 22| 0| 0|\n",
"|98EDCE7D6FB0741BD...| 0| 7| 5| 0| 0|\n",
"|F0C30DB1889710471...| 0| 3| 7| 0| 0|\n",
"|B6585890F68EE0270...| 0| 0| 26| 1| 0|\n",
"|DC8694A18613057F7...| 0| 2| 9| 2| 0|\n",
"|41EB945E62B7F03D9...| 0| 0| 15| 1| 0|\n",
"|4CD65097EFB67A8D6...| 0| 0| 11| 0| 0|\n",
"|08E9F5633328D780C...| 0| 5| 18| 1| 0|\n",
"|8D708B5B292FB555F...| 1| 0| 21| 1| 0|\n",
"|F4BB93A9C7E2E0A47...| 0| 0| 8| 0| 0|\n",
"|9586875D692663562...| 0| 4| 4| 1| 0|\n",
"|552CCF061B871F717...| 0| 2| 10| 0| 0|\n",
"|167C661512D5AA2C5...| 0| 0| 13| 0| 0|\n",
"|1C8CB1A88201C4E83...| 0| 0| 16| 0| 0|\n",
"|D50F5974294A3AC41...| 0| 0| 4| 0| 0|\n",
"|5205D3FE7D57F5494...| 0| 0| 6| 0| 0|\n",
"|B50F660464E5D0649...| 0| 0| 5| 3| 0|\n",
"|2EBD87EE737D1AB90...| 0| 1| 12| 0| 0|\n",
"|5EE2C4D3BF57BDB45...| 0| 0| 13| 0| 0|\n",
"|C12F3B53D695B3195...| 0| 1| 17| 0| 0|\n",
"|3C698F44315B54EF2...| 0| 0| 19| 0| 0|\n",
"|652979D8BB6F2409F...| 0| 0| 6| 1| 0|\n",
"|667F9BBD97EADE903...| 0| 0| 16| 0| 0|\n",
"|725D9245A61E2C54D...| 0| 0| 31| 0| 0|\n",
"+--------------------+-----+--------+---------+------+-------------+\n",
"only showing top 100 rows\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
}
],
"source": [
"w_ex8 = Window.partitionBy(\"medallion\").orderBy(F.col(\"pickup_datetime\"))\n",
"\n",
"@F.udf(returnType=T.IntegerType())\n",
"def max_consecutive_rank_seq_len(ranks: list[int]) -> int:\n",
" if len(ranks) <= 1:\n",
" return len(ranks)\n",
"\n",
" longest_len = 0\n",
" start = 0\n",
" \n",
" for i, rank in enumerate(ranks):\n",
" if i == 0:\n",
" continue\n",
" if rank - 1 != ranks[i - 1]:\n",
" longest_len = max(i - start, longest_len)\n",
" start = i\n",
" \n",
" longest_len = max(len(ranks) - start, longest_len) \n",
" return longest_len\n",
"\n",
"df_ex8 = df_with_bor \\\n",
" .select(\"medallion\", \"pickup_borough\", \"dropoff_borough\", \"pickup_datetime\") \\\n",
" .withColumn(\"tripNo\", F.rank().over(w_ex8)) \\\n",
" .where((F.col(\"pickup_borough\") == F.col(\"dropoff_borough\")) & (F.col(\"pickup_borough\").isNotNull())) \\\n",
" .select(F.col(\"medallion\"), F.col(\"pickup_borough\").alias(\"borough\"), F.col(\"tripNo\")) \\\n",
" .groupBy(\"medallion\", \"borough\").agg(max_consecutive_rank_seq_len(F.collect_list(\"tripNo\")).alias('maxTrips')) \\\n",
" .groupBy(\"medallion\").pivot(\"borough\").sum(\"maxTrips\") \\\n",
" .fillna(value=0)\n",
"\n",
"df_ex8.show(100)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2261d0e4-cf9d-4190-836b-32981b8ceb64",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}