diff --git a/notebooks/aviation/aviation_update.ipynb b/notebooks/aviation/aviation_update.ipynb new file mode 100644 index 00000000..5ff0fc49 --- /dev/null +++ b/notebooks/aviation/aviation_update.ipynb @@ -0,0 +1,1883 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Aviation Trends\n", + "\n", + "\n", + "There are four international airports in Syria - Damascus International Airport (DAM), Aleppo International Airport (ALP), Bassel Al-Assad International Airport (LTK) and Qamishli International Airport (KAC). DAM and ALP are bigger than the other two.This notebook analyses trends of flights in DAM, ALP and LTK airports.\n", + "\n", + "## Data \n", + "\n", + "The dataset used for this update is from [Aviation Stack](https://aviationstack.com/documentation).This data is purchased through their API subscription. The data was validated in Lebanon using FlightRadar and the resulting flight details were a close match although not entirely identical. The validation exercise for Syria is still ongoing. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Define a function to get a range of dates for the desirable date range" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "from datetime import datetime, timedelta\n", + "\n", + "\n", + "def daterange(start_date, end_date):\n", + " for n in range(int((end_date - start_date).days) + 1):\n", + " yield (start_date + timedelta(n)).strftime(\"%Y-%m-%d\")\n", + "\n", + "\n", + "# Define the start and end dates\n", + "start_date = datetime(2024, 1, 1)\n", + "end_date = datetime(2024, 10, 15)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "# Define empty dataset to concat all the arrivals and departures\n", + "departures = pd.DataFrame()\n", + "arrivals = pd.DataFrame()" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "289it [14:50, 3.08s/it]\n" + ] + } + ], + "source": [ + "# run the API to collect arrivals and departures\n", + "import requests\n", + "import urllib3\n", + "from tqdm import tqdm\n", + "\n", + "# Suppress only the InsecureRequestWarning from urllib3\n", + "urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n", + "\n", + "# arr_iata_values = ['LOS', 'KWI', 'SHJ']\n", + "# arr_iata_values = ','.join(arr_iata_values)\n", + "\n", + "for one_day in tqdm(daterange(start_date, end_date)):\n", + " params = {\n", + " \"access_key\": \"12925396bddce38222e47eed53e76e6c\",\n", + " \"dep_iata\": \"LTK\",\n", + " #'arr_iata': 'LTK',\n", + " \"limit\": \"100\",\n", + " # To get the next 100 flights we need to change the offset\n", + " #\"offset\": \"100\",\n", + " \"flight_date\": one_day,\n", + " }\n", + "\n", + " api_result = requests.get(\n", + " \"https://api.aviationstack.com/v1/flights\", params, verify=False\n", + " )\n", + "\n", + " api_response = api_result.json()\n", + "\n", + " df = pd.DataFrame(api_response[\"data\"])\n", + "\n", + " departures = pd.concat([departures, df])" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "flight_date\n", + "2024-01-02 2\n", + "2024-01-03 2\n", + "2024-06-30 1\n", + "2024-07-30 1\n", + "2024-08-20 1\n", + " ..\n", + "2024-05-05 1\n", + "2024-04-28 1\n", + "2024-04-23 1\n", + "2024-04-21 1\n", + "2024-10-15 1\n", + "Name: count, Length: 74, dtype: int64" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check if the number of flights per day are 100. If they are exactly 100 we need to rerun the API to get the next 100 flight.\n", + "departures['flight_date'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "flight_date\n", + "2024-01-02 2\n", + "2024-01-03 2\n", + "2024-08-20 2\n", + "2024-05-05 1\n", + "2024-04-14 1\n", + " ..\n", + "2024-06-30 1\n", + "2024-06-25 1\n", + "2024-06-23 1\n", + "2024-06-18 1\n", + "2024-06-11 1\n", + "Name: count, Length: 70, dtype: int64" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check if the number of flights per day are 100. If they are exactly 100 we need to rerun the API to get the next 100 flight.\n", + "arrivals.sort_values(by='flight_date', ascending=False)['flight_date'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "departures.to_csv(\"../../data/aviation/aviationstack_ltk_01012024_15102024_dep.csv\")\n", + "#arrivals.to_csv('../../data/aviation/aviationstack_ltk_01012024_14102024_arr.csv')\n", + "\n", + "# arrivals.to_csv('../../data/aviation/aviationstack_bey_26082024_01012024_arr.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "source": [ + "Functions to clean the database and explode columns" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "import ast\n", + "\n", + "\n", + "def safe_literal_eval(value):\n", + " if isinstance(value, str):\n", + " try:\n", + " return ast.literal_eval(value)\n", + " except (ValueError, SyntaxError):\n", + " return value\n", + " return value\n", + "\n", + "\n", + "def explode(flights):\n", + " flights[\"arrival\"] = flights[\"arrival\"].apply(safe_literal_eval)\n", + " flights[\"departure\"] = flights[\"departure\"].apply(safe_literal_eval)\n", + "\n", + " fr1 = pd.json_normalize(flights[\"arrival\"]).add_suffix(\"_arr\")\n", + " fr2 = pd.json_normalize(flights[\"departure\"]).add_suffix(\"_dep\")\n", + "\n", + " flights_exploded = pd.concat(\n", + " [flights.drop(columns=[\"arrival\", \"departure\"]), fr1, fr2], axis=1\n", + " )\n", + "\n", + " return flights_exploded" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [], + "source": [ + "from bokeh.plotting import figure, show\n", + "from bokeh.io import output_notebook\n", + "from bokeh.models import (\n", + " ColumnDataSource,\n", + " DatetimeTickFormatter,\n", + " FixedTicker,\n", + " HoverTool,\n", + " Label,\n", + " Span,\n", + " Panel,\n", + " Tabs,\n", + " TabPanel\n", + ")\n", + "from bokeh.palettes import Spectral6\n", + "\n", + "\n", + "def get_area_plot(\n", + " df, title, source_text, acled_events_daily, reindex_freq=\"D\", events_dict={}\n", + "):\n", + " complete_date_range = pd.date_range(\n", + " start=df[\"flight_date\"].min(), end=df[\"flight_date\"].max(), freq=reindex_freq\n", + " )\n", + " # Pivot the data to have flight_status as columns\n", + " df_pivot = df.pivot_table(\n", + " index=\"flight_date\", columns=\"flight_status\", values=\"iata_arr\", aggfunc=\"sum\"\n", + " )\n", + " df_reindexed = df_pivot.reindex(complete_date_range).fillna(0)\n", + " df_reindexed = df_reindexed.reset_index().rename(columns={\"index\": \"flight_date\"})\n", + "\n", + " df[\"total_flights\"] = df.groupby(\"flight_date\")[\"iata_arr\"].transform(\"sum\")\n", + " if acled_events_daily['nrEvents'].max()<500:\n", + " max_flight = acled_events_daily[\"nrEvents\"].max() + 50\n", + " else:\n", + " max_flight = acled_events_daily[\"nrEvents\"].max() + 200\n", + "\n", + " # Create a ColumnDataSource\n", + " source = ColumnDataSource(df_reindexed)\n", + "\n", + " # Create a Bokeh figure\n", + " p = figure(\n", + " x_axis_type=\"datetime\",\n", + " height=600,\n", + " width=800,\n", + " title=title,\n", + " toolbar_location='above',\n", + " tools=\"pan,box_zoom,reset,save\",\n", + " x_axis_label=\"Flight Date\",\n", + " y_axis_label=\"Nr Flights\",\n", + " )\n", + "\n", + " # Create a stacked area plot using varea_stack\n", + " status_list = list(df[\"flight_status\"].unique())\n", + " colors = Spectral6[\n", + " : len(status_list)\n", + " ] # Adjust the color palette to the number of flight statuses\n", + "\n", + " p.varea_stack(\n", + " stackers=status_list,\n", + " x=\"flight_date\",\n", + " color=colors,\n", + " source=source,\n", + " legend_label=status_list,\n", + " )\n", + " p.line(\n", + " x=acled_events_daily[\"event_date\"],\n", + " y=acled_events_daily[\"nrEvents\"],\n", + " line_width=2,\n", + " line_color=\"black\",\n", + " legend_label=\"Number of Conflict Events w/o Protests\",\n", + " )\n", + "\n", + " # Customize the plot\n", + " p.y_range.start = 0\n", + " p.y_range.end = max_flight\n", + "\n", + " # Format x-axis to show only the first day of each month\n", + " p.xaxis.formatter = DatetimeTickFormatter(months=\"%b %Y\", days=\"%d %b %Y\")\n", + "\n", + " # Limit the number of ticks by using FixedTicker\n", + " date_range = pd.date_range(\n", + " start=df[\"flight_date\"].min(), end=df[\"flight_date\"].max(), freq=\"W\"\n", + " )\n", + " ticks = [pd.to_datetime(date).timestamp() * 1000 for date in date_range]\n", + "\n", + " # complete_date_range = pd.date_range(start=df['flight_date'].min(), end=df['flight_date'].max())\n", + "\n", + " # Only keep a few ticks for clarity\n", + " p.xaxis.ticker = FixedTicker(\n", + " ticks=ticks[::2]\n", + " ) # Adjust the slicing (e.g., [::2], [::3]) for more or fewer ticks\n", + "\n", + " # Rotate x-axis labels for better readability\n", + " p.xaxis.major_label_orientation = 1.2\n", + "\n", + " # Enable clickable legend\n", + " p.legend.click_policy = \"mute\"\n", + "\n", + " hover = p.select(dict(type=HoverTool))\n", + " hover.tooltips = [\n", + " (\"Flight Date\", \"@flight_date{%F}\"),\n", + " (\"Status\", \"$name\"),\n", + " (\"Value\", \"@$name\"),\n", + " ]\n", + " hover.formatters = {\"@flight_date\": \"datetime\"}\n", + "\n", + " # p.legend.title = 'Flight Status'\n", + " p.legend.location = \"top_left\"\n", + " p.legend.orientation = \"horizontal\"\n", + "\n", + " source_label = Label(\n", + " x=0,\n", + " y=0,\n", + " x_units=\"screen\",\n", + " y_units=\"screen\",\n", + " text=source_text,\n", + " text_font_size=\"10pt\",\n", + " text_color=\"gray\",\n", + " )\n", + "\n", + " # Add the label to the plot\n", + " p.add_layout(source_label, \"below\")\n", + "\n", + " if events_dict:\n", + " used_y_positions = []\n", + "\n", + " for index, (event_date, label) in enumerate(events_dict.items()):\n", + " # Convert event_date to a timestamp in milliseconds (as expected by Bokeh for datetime axes)\n", + " event_date_dt = pd.to_datetime(event_date)\n", + " event_timestamp = event_date_dt.timestamp() * 1000\n", + "\n", + " # Create a vertical line (Span) at the event date\n", + " span = Span(\n", + " location=event_timestamp,\n", + " dimension=\"height\",\n", + " line_color='#C6C6C6',\n", + " line_width=2,\n", + " line_dash=(4, 4)\n", + " )\n", + " p.renderers.append(span)\n", + "\n", + " # Determine a base y position for the label\n", + " base_y = max_flight - (max_flight/5) # Adjust for visibility above the plot\n", + " y_position = base_y # Default position\n", + "\n", + " # Adjust y_position if it overlaps with previous labels\n", + " while y_position in used_y_positions:\n", + " y_position -= base_y / 10 # Move down until it's free\n", + "\n", + " used_y_positions.append(y_position) # Store the used position\n", + "\n", + " # Add a label near the vertical line, aligned to the left\n", + " event_label = Label(\n", + " x=event_timestamp,\n", + " y=y_position,\n", + " x_offset=-5, # Offset to move the label to the left of the line\n", + " text=label,\n", + " text_align=\"right\", # Align the text to the right so it stays to the left of the line\n", + " text_color=\"black\",\n", + " text_font_size=\"10pt\",\n", + " background_fill_color=\"grey\",\n", + " background_fill_alpha=0.2,\n", + " )\n", + " p.add_layout(event_label)\n", + "\n", + " return p\n", + " # Show the plot\n", + " # show(p)" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "departures = pd.concat(\n", + " [\n", + " pd.read_csv(\"../../data/aviation/aviationstack_dam_01012024_14102024_dep.csv\"),\n", + " pd.read_csv('../../data/aviation/aviationstack_alp_01012024_15102024_dep.csv'),\n", + " pd.read_csv('../../data/aviation/aviationstack_ltk_01012024_15102024_dep.csv')\n", + " ]\n", + ")\n", + "departures.drop(columns=\"Unnamed: 0\", inplace=True)\n", + "departures.drop_duplicates(inplace=True)\n", + "departures.reset_index(drop=True, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "departures_exploded = explode(departures)\n", + "# departures_exploded = departures_exploded[~(departures_exploded['airport_arr']==departures_exploded['airport_dep'])]" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The following dates are not available in the data. The reasons are unknown.: DatetimeIndex(['2024-01-28', '2024-01-29', '2024-01-30', '2024-04-29',\n", + " '2024-04-30', '2024-06-07', '2024-06-08', '2024-06-09'],\n", + " dtype='datetime64[ns]', freq=None)\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = departures\n", + "# Assuming df is your DataFrame and 'flight_date' is the column with the dates\n", + "df[\"flight_date\"] = pd.to_datetime(\n", + " df[\"flight_date\"]\n", + ") # Ensure 'flight_date' is in datetime format\n", + "\n", + "# Generate the complete date range from the minimum to the maximum date\n", + "complete_date_range = pd.date_range(\n", + " start=df[\"flight_date\"].min(), end=df[\"flight_date\"].max()\n", + ")\n", + "\n", + "# Find missing dates by comparing the complete date range with the dates in the DataFrame\n", + "missing_dates = complete_date_range.difference(df[\"flight_date\"])\n", + "\n", + "if missing_dates.empty:\n", + " print(\"All dates are present.\")\n", + "else:\n", + " print(\n", + " f\"The following dates are not available in the data. The reasons are unknown.: {missing_dates}\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Analysing Number of Departures from Beirut International Airport in 2024" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Data is available from 2024-01-01 00:00:00 to 2024-10-15 00:00:00\n" + ] + } + ], + "source": [ + "beginning = departures[\"flight_date\"].min()\n", + "end = departures[\"flight_date\"].max()\n", + "print(f\"Data is available from {beginning} to {end}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "source": [ + "Conduct a duplication check for flights. If the flight is taking off from the same place, to the same place at the same time and has two entries, it is a duplicate flight" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "There were 4497 flights before duplication check\n", + "There are 4464 flights after duplication check. 33 flights were duplicated\n" + ] + } + ], + "source": [ + "before = departures_exploded.shape[0]\n", + "print(f\"There were {before} flights before duplication check\")\n", + "# check for duplicate flights i.e., flights scheduled to take off at the exact same time from the same place to the same destination\n", + "departures_exploded = departures_exploded.drop_duplicates(\n", + " subset=[\"flight_date\", \"scheduled_arr\", \"iata_arr\", \"iata_dep\", \"scheduled_dep\"]\n", + ")\n", + "\n", + "after = departures_exploded.shape[0]\n", + "print(\n", + " f\"There are {after} flights after duplication check. {before-after} flights were duplicated\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Flight Status Legend\n", + "- Scheduled: A flight that we have a schedule or flight plan for that hasn’t departed or has been canceled.\n", + "- Active: A flight that either left the gate or the runway and is on its way to its destination.\n", + "- Landed or Arrived: A flight that landed on the runway or arrived at the gate at the destination.\n", + "- Canceled: A flight that one or more data sources have indicated is canceled.\n", + "- Redirected: The flight is being redirected to another airport.\n", + "- Diverted: A flight that has landed or arrived at the gate of an airport where it wasn’t scheduled to arrive.\n", + "- Unknown: We were unable to detect the final arrival status." + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "acled_events_daily = pd.read_csv(\n", + " \"../../data/conflict/acled_daily_20240101_20241014.csv\"\n", + ")\n", + "acled_events_daily[\"event_date\"] = acled_events_daily[\"event_date\"].apply(\n", + " lambda x: pd.to_datetime(x)\n", + ")\n", + "acled_events_daily = acled_events_daily[acled_events_daily[\"event_date\"] > \"2024-01-01\"]\n", + "acled_events_daily.drop(columns=[\"Unnamed: 0\"], inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "acled_events_daily = (\n", + " acled_events_daily.groupby([pd.Grouper(key=\"event_date\", freq=\"D\")])[\n", + " [\"nrFatalities\", \"nrEvents\"]\n", + " ]\n", + " .sum()\n", + " .reset_index()\n", + ")\n", + "acled_events_weekly = (\n", + " acled_events_daily.groupby([pd.Grouper(key=\"event_date\", freq=\"W\")])[\n", + " [\"nrFatalities\", \"nrEvents\"]\n", + " ]\n", + " .sum()\n", + " .reset_index()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
flight_datescheduled_arriata_arriata_depscheduled_depflight_status
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [flight_date, scheduled_arr, iata_arr, iata_dep, scheduled_dep, flight_status]\n", + "Index: []" + ] + }, + "execution_count": 141, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Test to see if any flight has more than one flight status assoctaed with it.\n", + "duplicate_status_test = (\n", + " departures_exploded.groupby(\n", + " [\"flight_date\", \"scheduled_arr\", \"iata_arr\", \"iata_dep\", \"scheduled_dep\"]\n", + " )[[\"flight_status\"]]\n", + " .count()\n", + " .reset_index()\n", + ")\n", + "duplicate_status_test[duplicate_status_test[\"flight_status\"] > 1]" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "#missing_dates\n", + "\n", + "events = {\n", + " \"2024-06-09\":\"Airline data\\nnot available\",\n", + " \"2024-08-25\":\"Israeli strikes in\\nSouthern Lebanon\",\n", + " \"2024-09-23\":\"Start of the Israel-Hezboullah\\nConflict\",\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"d3a7cafd-1eb4-47cd-9b47-31c548dc9f2c\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.4.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"d3a7cafd-1eb4-47cd-9b47-31c548dc9f2c\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"57487c6f-8790-4acf-9379-690f53be804e\":{\"version\":\"3.4.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p2353\",\"attributes\":{\"width\":800,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p2354\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p2355\",\"attributes\":{\"start\":0,\"end\":127}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p2363\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p2364\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p2356\",\"attributes\":{\"text\":\"Daily Departures from DAM, ALP and LTK\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2414\",\"attributes\":{\"name\":\"cancelled\",\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p2350\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p2351\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p2352\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAAAAgQAAAIIAAACDAAAAhAAAAIUAAACGAAAAhwAAAIgAAACJAAAAigAAAIsAAACMAAAAjQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAJQAAACVAAAAlgAAAJcAAACYAAAAmQAAAJoAAACbAAAAnAAAAJ0AAACeAAAAnwAAAKAAAAChAAAAogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAAK8AAACwAAAAsQAAALIAAACzAAAAtAAAALUAAAC2AAAAtwAAALgAAAC5AAAAugAAALsAAAC8AAAAvQAAAL4AAAC/AAAAwAAAAMEAAADCAAAAwwAAAMQAAADFAAAAxgAAAMcAAADIAAAAyQAAAMoAAADLAAAAzAAAAM0AAADOAAAAzwAAANAAAADRAAAA0gAAANMAAADUAAAA1QAAANYAAADXAAAA2AAAANkAAADaAAAA2wAAANwAAADdAAAA3gAAAN8AAADgAAAA4QAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAACAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAAFAEAABUBAAAWAQAAFwEAABgBAAAZAQAAGgEAABsBAAAcAQAAHQEAAB4BAAAfAQAAIAEAAA==\"},\"shape\":[289],\"dtype\":\"int32\",\"order\":\"little\"}],[\"flight_date\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AABAHyXMeEIAAACFd8x4QgAAwOrJzHhCAACAUBzNeEIAAEC2bs14QgAAABzBzXhCAADAgRPOeEIAAIDnZc54QgAAQE24znhCAAAAswrPeEIAAMAYXc94QgAAgH6vz3hCAABA5AHQeEIAAABKVNB4QgAAwK+m0HhCAACAFfnQeEIAAEB7S9F4QgAAAOGd0XhCAADARvDReEIAAICsQtJ4QgAAQBKV0nhCAAAAeOfSeEIAAMDdOdN4QgAAgEOM03hCAABAqd7TeEIAAAAPMdR4QgAAwHSD1HhCAACA2tXUeEIAAEBAKNV4QgAAAKZ61XhCAADAC83VeEIAAIBxH9Z4QgAAQNdx1nhCAAAAPcTWeEIAAMCiFtd4QgAAgAhp13hCAABAbrvXeEIAAADUDdh4QgAAwDlg2HhCAACAn7LYeEIAAEAFBdl4QgAAAGtX2XhCAADA0KnZeEIAAIA2/Nl4QgAAQJxO2nhCAAAAAqHaeEIAAMBn89p4QgAAgM1F23hCAABAM5jbeEIAAACZ6tt4QgAAwP483HhCAACAZI/ceEIAAEDK4dx4QgAAADA03XhCAADAlYbdeEIAAID72N14QgAAQGEr3nhCAAAAx33eeEIAAMAs0N54QgAAgJIi33hCAABA+HTfeEIAAABex994QgAAwMMZ4HhCAACAKWzgeEIAAECPvuB4QgAAAPUQ4XhCAADAWmPheEIAAIDAteF4QgAAQCYI4nhCAAAAjFrieEIAAMDxrOJ4QgAAgFf/4nhCAABAvVHjeEIAAAAjpON4QgAAwIj243hCAACA7kjkeEIAAEBUm+R4QgAAALrt5HhCAADAH0DleEIAAICFkuV4QgAAQOvk5XhCAAAAUTfmeEIAAMC2ieZ4QgAAgBzc5nhCAABAgi7neEIAAADogOd4QgAAwE3T53hCAACAsyXoeEIAAEAZeOh4QgAAAH/K6HhCAADA5BzpeEIAAIBKb+l4QgAAQLDB6XhCAAAAFhTqeEIAAMB7Zup4QgAAgOG46nhCAABARwvreEIAAACtXet4QgAAwBKw63hCAACAeALseEIAAEDeVOx4QgAAAESn7HhCAADAqfnseEIAAIAPTO14QgAAQHWe7XhCAAAA2/DteEIAAMBAQ+54QgAAgKaV7nhCAABADOjueEIAAAByOu94QgAAwNeM73hCAACAPd/veEIAAECjMfB4QgAAAAmE8HhCAADAbtbweEIAAIDUKPF4QgAAQDp78XhCAAAAoM3xeEIAAMAFIPJ4QgAAgGty8nhCAABA0cTyeEIAAAA3F/N4QgAAwJxp83hCAACAArzzeEIAAEBoDvR4QgAAAM5g9HhCAADAM7P0eEIAAICZBfV4QgAAQP9X9XhCAAAAZar1eEIAAMDK/PV4QgAAgDBP9nhCAABAlqH2eEIAAAD88/Z4QgAAwGFG93hCAACAx5j3eEIAAEAt6/d4QgAAAJM9+HhCAADA+I/4eEIAAIBe4vh4QgAAQMQ0+XhCAAAAKof5eEIAAMCP2fl4QgAAgPUr+nhCAABAW376eEIAAADB0Pp4QgAAwCYj+3hCAACAjHX7eEIAAEDyx/t4QgAAAFga/HhCAADAvWz8eEIAAIAjv/x4QgAAQIkR/XhCAAAA72P9eEIAAMBUtv14QgAAgLoI/nhCAABAIFv+eEIAAACGrf54QgAAwOv//nhCAACAUVL/eEIAAEC3pP94QgAAAB33/3hCAADAgkkAeUIAAIDomwB5QgAAQE7uAHlCAAAAtEABeUIAAMAZkwF5QgAAgH/lAXlCAABA5TcCeUIAAABLigJ5QgAAwLDcAnlCAACAFi8DeUIAAEB8gQN5QgAAAOLTA3lCAADARyYEeUIAAICteAR5QgAAQBPLBHlCAAAAeR0FeUIAAMDebwV5QgAAgETCBXlCAABAqhQGeUIAAAAQZwZ5QgAAwHW5BnlCAACA2wsHeUIAAEBBXgd5QgAAAKewB3lCAADADAMIeUIAAIByVQh5QgAAQNinCHlCAAAAPvoIeUIAAMCjTAl5QgAAgAmfCXlCAABAb/EJeUIAAADVQwp5QgAAwDqWCnlCAACAoOgKeUIAAEAGOwt5QgAAAGyNC3lCAADA0d8LeUIAAIA3Mgx5QgAAQJ2EDHlCAAAAA9cMeUIAAMBoKQ15QgAAgM57DXlCAABANM4NeUIAAACaIA55QgAAwP9yDnlCAACAZcUOeUIAAEDLFw95QgAAADFqD3lCAADAlrwPeUIAAID8DhB5QgAAQGJhEHlCAAAAyLMQeUIAAMAtBhF5QgAAgJNYEXlCAABA+aoReUIAAABf/RF5QgAAwMRPEnlCAACAKqISeUIAAECQ9BJ5QgAAAPZGE3lCAADAW5kTeUIAAIDB6xN5QgAAQCc+FHlCAAAAjZAUeUIAAMDy4hR5QgAAgFg1FXlCAABAvocVeUIAAAAk2hV5QgAAwIksFnlCAACA734WeUIAAEBV0RZ5QgAAALsjF3lCAADAIHYXeUIAAICGyBd5QgAAQOwaGHlCAAAAUm0YeUIAAMC3vxh5QgAAgB0SGXlCAABAg2QZeUIAAADpthl5QgAAwE4JGnlCAACAtFsaeUIAAEAarhp5QgAAAIAAG3lCAADA5VIbeUIAAIBLpRt5QgAAQLH3G3lCAAAAF0oceUIAAMB8nBx5QgAAgOLuHHlCAABASEEdeUIAAACukx15QgAAwBPmHXlCAACAeTgeeUIAAEDfih55QgAAAEXdHnlCAADAqi8feUIAAIAQgh95QgAAQHbUH3lCAAAA3CYgeUIAAMBBeSB5QgAAgKfLIHlCAABADR4heUIAAABzcCF5QgAAwNjCIXlCAACAPhUieUIAAECkZyJ5QgAAAAq6InlCAADAbwwjeUIAAIDVXiN5QgAAQDuxI3lCAAAAoQMkeUIAAMAGViR5QgAAgGyoJHlCAABA0vokeUIAAAA4TSV5QgAAwJ2fJXlCAACAA/IleUIAAEBpRCZ5QgAAAM+WJnlCAADANOkmeUIAAICaOyd5QgAAQACOJ3lCAAAAZuAneUIAAMDLMih5QgAAgDGFKHlCAABAl9coeUI=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"active\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAAAAAAAAAAAQQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAIQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABRAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAAAAAAAAAAAABAAAAAAAAA8D8AAAAAAAAUQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABRAAAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAEEAAAAAAAAAAQAAAAAAAABhAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAUQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAA8D8AAAAAAADwPwAAAAAAABBAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAIQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAIQAAAAAAAAAAAAAAAAAAACEAAAAAAAADwPwAAAAAAAAhAAAAAAAAACEAAAAAAAAAIQAAAAAAAABRAAAAAAAAAFEAAAAAAAAAUQAAAAAAAABBAAAAAAAAACEAAAAAAAAAQQAAAAAAAABhAAAAAAAAAKEAAAAAAAAAQQAAAAAAAACBAAAAAAAAAEEAAAAAAAAAcQAAAAAAAABhAAAAAAAAAFEAAAAAAAAAIQAAAAAAAAABAAAAAAAAAEEAAAAAAAAAIQAAAAAAAABRAAAAAAAAAFEAAAAAAAAAYQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAUQAAAAAAAABhAAAAAAAAAFEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAAABhAAAAAAAAAFEAAAAAAAAAUQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAYQAAAAAAAACBAAAAAAAAAFEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAYQAAAAAAAAAhAAAAAAAAAGEAAAAAAAAAUQAAAAAAAABBAAAAAAAAAGEAAAAAAAAAQQAAAAAAAABRAAAAAAAAACEAAAAAAAAAgQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAcQAAAAAAAABBAAAAAAAAAIEAAAAAAAAAQQAAAAAAAABxAAAAAAAAAFEAAAAAAAAAUQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAQQAAAAAAAABxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhAAAAAAAAAFEAAAAAAAAAUQAAAAAAAABRAAAAAAAAAEEAAAAAAAAAUQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAUQAAAAAAAAAhAAAAAAAAAJEAAAAAAAAAgQAAAAAAAABhAAAAAAAAAAEAAAAAAAAAgQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABhAAAAAAAAA8D8AAAAAAADwPwAAAAAAABxAAAAAAAAACEAAAAAAAAAYQAAAAAAAAAhAAAAAAAAAFEAAAAAAAAAiQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAIQAAAAAAAABRAAAAAAAAAHEAAAAAAAAAgQAAAAAAAACBAAAAAAAAAGEAAAAAAAAAQQAAAAAAAAABAAAAAAAAAHEAAAAAAAAAUQAAAAAAAACBAAAAAAAAAGEAAAAAAAAAQQAAAAAAAABhAAAAAAAAAFEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAUQAAAAAAAABBAAAAAAAAACEAAAAAAAADwPwAAAAAAABBAAAAAAAAAEEAAAAAAAAAgQAAAAAAAAAhAAAAAAAAAJkAAAAAAAAAmQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAQQAAAAAAAABBAAAAAAAAAGEAAAAAAAAAUQAAAAAAAACBAAAAAAAAAEEAAAAAAAAAQQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAEEAAAAAAAAAQQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAiQAAAAAAAABxAAAAAAAAAEEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAUQAAAAAAAAPA/AAAAAAAAGEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAAEAAAAAAAAAUQAAAAAAAABhAAAAAAAAAAEAAAAAAAAAUQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAUQAAAAAAAABRAAAAAAAAACEAAAAAAAAAiQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAAQAAAAAAAABRAAAAAAAAAIEAAAAAAAAAQQAAAAAAAAABAAAAAAAAAFEAAAAAAAAAcQAAAAAAAAAhAAAAAAAAAHEAAAAAAAAAQQAAAAAAAAPA/AAAAAAAAFEAAAAAAAAAQQAAAAAAAABxAAAAAAAAAGEAAAAAAAAAUQAAAAAAAABhAAAAAAAAAAEAAAAAAAAAIQAAAAAAAABRAAAAAAAAAHEAAAAAAAAAQQAAAAAAAACBAAAAAAAAAAAA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"cancelled\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"diverted\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"landed\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAACEAAAAAAAAAkQAAAAAAAABhAAAAAAAAAEEAAAAAAAAAYQAAAAAAAAABAAAAAAAAAEEAAAAAAAAAUQAAAAAAAABhAAAAAAAAAIEAAAAAAAAAUQAAAAAAAABxAAAAAAAAAJEAAAAAAAAAYQAAAAAAAABRAAAAAAAAAHEAAAAAAAAAgQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAgQAAAAAAAABxAAAAAAAAAIkAAAAAAAAAgQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAQQAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAUQAAAAAAAABxAAAAAAAAAFEAAAAAAAAAYQAAAAAAAABhAAAAAAAAAHEAAAAAAAADwPwAAAAAAAABAAAAAAAAAFEAAAAAAAAAUQAAAAAAAAABAAAAAAAAAHEAAAAAAAAAcQAAAAAAAABhAAAAAAAAAEEAAAAAAAAAUQAAAAAAAABBAAAAAAAAAGEAAAAAAAAAcQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAQQAAAAAAAABhAAAAAAAAAIkAAAAAAAAAUQAAAAAAAAAhAAAAAAAAAIEAAAAAAAAAcQAAAAAAAABRAAAAAAAAAHEAAAAAAAAAiQAAAAAAAABBAAAAAAAAAHEAAAAAAAAAYQAAAAAAAABxAAAAAAAAAHEAAAAAAAAAgQAAAAAAAABxAAAAAAAAAGEAAAAAAAAAgQAAAAAAAABxAAAAAAAAAIEAAAAAAAAAgQAAAAAAAABBAAAAAAAAAIEAAAAAAAAAYQAAAAAAAABhAAAAAAAAAEEAAAAAAAAAYQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAcQAAAAAAAABhAAAAAAAAAEEAAAAAAAAAIQAAAAAAAABxAAAAAAAAAGEAAAAAAAAAIQAAAAAAAABRAAAAAAAAAFEAAAAAAAAAQQAAAAAAAABxAAAAAAAAAIEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAJkAAAAAAAAAYQAAAAAAAABBAAAAAAAAACEAAAAAAAAAYQAAAAAAAAAhAAAAAAAAAFEAAAAAAAAAgQAAAAAAAAPA/AAAAAAAAEEAAAAAAAAAQQAAAAAAAABhAAAAAAAAAAEAAAAAAAAAIQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAYQAAAAAAAABhAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAHEAAAAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAYQAAAAAAAABxAAAAAAAAAEEAAAAAAAAAcQAAAAAAAABxAAAAAAAAAIEAAAAAAAAAYQAAAAAAAACBAAAAAAAAAHEAAAAAAAAAUQAAAAAAAACJAAAAAAAAAIkAAAAAAAAAgQAAAAAAAABBAAAAAAAAAIEAAAAAAAAAgQAAAAAAAABhAAAAAAAAAIEAAAAAAAAAiQAAAAAAAACRAAAAAAAAAHEAAAAAAAAAgQAAAAAAAABxAAAAAAAAAHEAAAAAAAAAgQAAAAAAAACBAAAAAAAAAHEAAAAAAAAAUQAAAAAAAACBAAAAAAAAAHEAAAAAAAAAgQAAAAAAAAABAAAAAAAAAFEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAiQAAAAAAAABxAAAAAAAAAEEAAAAAAAAAYQAAAAAAAACJAAAAAAAAAIkAAAAAAAAAiQAAAAAAAAC5AAAAAAAAAJEAAAAAAAAAcQAAAAAAAACJAAAAAAAAAFEAAAAAAAAAgQAAAAAAAABhAAAAAAAAAIkAAAAAAAAAcQAAAAAAAABRAAAAAAAAAJkAAAAAAAAAUQAAAAAAAACBAAAAAAAAAHEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAEEAAAAAAAAAiQAAAAAAAABhAAAAAAAAAIkAAAAAAAAAQQAAAAAAAABxAAAAAAAAAIkAAAAAAAAAgQAAAAAAAACBAAAAAAAAAEEAAAAAAAAAQQAAAAAAAABhAAAAAAAAAIkAAAAAAAAAiQAAAAAAAABhAAAAAAAAAIkAAAAAAAAAYQAAAAAAAABxAAAAAAAAAHEAAAAAAAAAiQAAAAAAAACJAAAAAAAAAFEAAAAAAAAAmQAAAAAAAACBAAAAAAAAAIEAAAAAAAAAiQAAAAAAAACRAAAAAAAAAKkAAAAAAAAAiQAAAAAAAACJAAAAAAAAAHEAAAAAAAAAUQAAAAAAAABhAAAAAAAAAFEAAAAAAAAAIQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAYQAAAAAAAACBAAAAAAAAAIEAAAAAAAAAcQAAAAAAAABxAAAAAAAAAGEAAAAAAAAAgQAAAAAAAABhAAAAAAAAAHEAAAAAAAAAiQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAUQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAUQAAAAAAAACJAAAAAAAAAJEAAAAAAAAAUQAAAAAAAABxAAAAAAAAAHEAAAAAAAAAYQAAAAAAAAPA/AAAAAAAAIEAAAAAAAAAiQAAAAAAAACJAAAAAAAAAHEAAAAAAAAAiQAAAAAAAABhAAAAAAAAAIEAAAAAAAAAkQAAAAAAAACpAAAAAAAAAIEAAAAAAAAAgQAAAAAAAACJAAAAAAAAAHEAAAAAAAAAcQAAAAAAAACRAAAAAAAAAJEAAAAAAAAAcQAAAAAAAABRAAAAAAAAAIkAAAAAAAAAcQAAAAAAAACZAAAAAAAAAHEAAAAAAAAAoQAAAAAAAACZAAAAAAAAAHEAAAAAAAAAUQAAAAAAAABxAAAAAAAAAIEAAAAAAAAAkQAAAAAAAACJAAAAAAAAAFEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAHEAAAAAAAAAYQAAAAAAAABxAAAAAAAAAJkAAAAAAAAAiQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAgQAAAAAAAABRAAAAAAAAA8D8=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"scheduled\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAIkAAAAAAAADwPwAAAAAAABBAAAAAAAAAFEAAAAAAAAAQQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAYQAAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAABBAAAAAAAAAAAAAAAAAAADwPwAAAAAAABRAAAAAAAAAHEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAEEAAAAAAAAAAQAAAAAAAAABAAAAAAAAACEAAAAAAAAAUQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAYQAAAAAAAABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAIQAAAAAAAABRAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABRAAAAAAAAAHEAAAAAAAAAUQAAAAAAAABBAAAAAAAAAGEAAAAAAAAAAQAAAAAAAABRAAAAAAAAAAEAAAAAAAAAgQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAEEAAAAAAAAAUQAAAAAAAABxAAAAAAAAACEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABhAAAAAAAAAFEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAFEAAAAAAAAAYQAAAAAAAAPA/AAAAAAAACEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAACEAAAAAAAAAUQAAAAAAAABRAAAAAAAAA8D8AAAAAAAAAQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAIEAAAAAAAAAAAAAAAAAAAAhAAAAAAAAACEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAHEAAAAAAAAAcQAAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAkQAAAAAAAABBAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAA8D8AAAAAAAAIQAAAAAAAABxAAAAAAAAACEAAAAAAAAAUQAAAAAAAABRAAAAAAAAACEAAAAAAAAAAQAAAAAAAABhAAAAAAAAAIEAAAAAAAAAkQAAAAAAAABhAAAAAAAAAIEAAAAAAAAAcQAAAAAAAABBAAAAAAAAACEAAAAAAAAAcQAAAAAAAABxAAAAAAAAAIEAAAAAAAAAcQAAAAAAAABxAAAAAAAAAEEAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAUQAAAAAAAAAhAAAAAAAAAJEAAAAAAAAAUQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAQQAAAAAAAABhAAAAAAAAAFEAAAAAAAAAgQAAAAAAAACBAAAAAAAAACEAAAAAAAAAIQAAAAAAAABRAAAAAAAAAAEAAAAAAAAAAQAAAAAAAACBAAAAAAAAAIkAAAAAAAADwPwAAAAAAAABAAAAAAAAAEEAAAAAAAAAAQAAAAAAAABRAAAAAAAAAFEAAAAAAAAAcQAAAAAAAAABAAAAAAAAAEEAAAAAAAAAQQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAAEAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAHEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAHEAAAAAAAAAYQAAAAAAAAPA/AAAAAAAAFEAAAAAAAAAYQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAQQAAAAAAAABBAAAAAAAAAAAAAAAAAAAAUQAAAAAAAABxAAAAAAAAAEEAAAAAAAADwPwAAAAAAABBAAAAAAAAA8D8AAAAAAAAIQAAAAAAAABRAAAAAAAAAKEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAIEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAFEAAAAAAAAAYQAAAAAAAABRAAAAAAAAAEEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAUQAAAAAAAABBAAAAAAAAACEAAAAAAAAAAQAAAAAAAABRAAAAAAAAA8D8AAAAAAAAAQAAAAAAAABxAAAAAAAAAGEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAFEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAFEAAAAAAAAAcQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABBAAAAAAAAACEAAAAAAAAAYQAAAAAAAACRAAAAAAAAAEEAAAAAAAAAQQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAQQAAAAAAAACRAAAAAAAAAIkAAAAAAAAAYQAAAAAAAAABAAAAAAAAAFEAAAAAAAAAQQAAAAAAAABBAAAAAAAAAIkAAAAAAAAAUQAAAAAAAABhAAAAAAAAAAEAAAAAAAAAQQAAAAAAAABhAAAAAAAAA8D8AAAAAAAAgQAAAAAAAABxAAAAAAAAAEEAAAAAAAADwPwAAAAAAAABAAAAAAAAAGEAAAAAAAADwPwAAAAAAAChAAAAAAAAAFEAAAAAAAAAQQAAAAAAAAABAAAAAAAAAFEAAAAAAAAAQQAAAAAAAAPA/AAAAAAAAHEAAAAAAAAAcQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABBAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAhAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAACEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABBAAAAAAAAACEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAUQAAAAAAAABRAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAhAAAAAAAAA8D8AAAAAAADwPwAAAAAAABBAAAAAAAAAAAA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"unknown\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAIQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAACEAAAAAAAADwPwAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAEEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAhAAAAAAAAACEAAAAAAAADwPwAAAAAAABBAAAAAAAAAAEAAAAAAAAAQQAAAAAAAAAhAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAABBAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAhAAAAAAAAACEAAAAAAAAAQQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAQQAAAAAAAABhAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAEEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAIQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAIQAAAAAAAAPA/AAAAAAAACEAAAAAAAAAIQAAAAAAAABBAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAQQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAEEAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAUQAAAAAAAABBAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2415\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2416\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2411\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2396\",\"attributes\":{\"fields\":[]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2397\",\"attributes\":{\"fields\":[\"cancelled\"]}}},\"fill_color\":\"#3288bd\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2412\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2396\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2397\"}},\"fill_color\":\"#3288bd\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2413\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2396\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2397\"}},\"fill_color\":\"#3288bd\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2425\",\"attributes\":{\"name\":\"landed\",\"data_source\":{\"id\":\"p2350\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2426\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2427\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2422\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2398\",\"attributes\":{\"fields\":[\"cancelled\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2399\",\"attributes\":{\"fields\":[\"cancelled\",\"landed\"]}}},\"fill_color\":\"#99d594\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2423\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2398\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2399\"}},\"fill_color\":\"#99d594\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2424\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2398\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2399\"}},\"fill_color\":\"#99d594\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2435\",\"attributes\":{\"name\":\"scheduled\",\"data_source\":{\"id\":\"p2350\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2436\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2437\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2432\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2400\",\"attributes\":{\"fields\":[\"cancelled\",\"landed\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2401\",\"attributes\":{\"fields\":[\"cancelled\",\"landed\",\"scheduled\"]}}},\"fill_color\":\"#e6f598\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2433\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2400\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2401\"}},\"fill_color\":\"#e6f598\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2434\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2400\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2401\"}},\"fill_color\":\"#e6f598\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2445\",\"attributes\":{\"name\":\"active\",\"data_source\":{\"id\":\"p2350\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2446\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2447\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2442\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2402\",\"attributes\":{\"fields\":[\"cancelled\",\"landed\",\"scheduled\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2403\",\"attributes\":{\"fields\":[\"cancelled\",\"landed\",\"scheduled\",\"active\"]}}},\"fill_color\":\"#fee08b\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2443\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2402\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2403\"}},\"fill_color\":\"#fee08b\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2444\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2402\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2403\"}},\"fill_color\":\"#fee08b\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2455\",\"attributes\":{\"name\":\"unknown\",\"data_source\":{\"id\":\"p2350\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2456\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2457\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2452\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2404\",\"attributes\":{\"fields\":[\"cancelled\",\"landed\",\"scheduled\",\"active\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2405\",\"attributes\":{\"fields\":[\"cancelled\",\"landed\",\"scheduled\",\"active\",\"unknown\"]}}},\"fill_color\":\"#fc8d59\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2453\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2404\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2405\"}},\"fill_color\":\"#fc8d59\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2454\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2404\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2405\"}},\"fill_color\":\"#fc8d59\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2465\",\"attributes\":{\"name\":\"diverted\",\"data_source\":{\"id\":\"p2350\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2466\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2467\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2462\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2406\",\"attributes\":{\"fields\":[\"cancelled\",\"landed\",\"scheduled\",\"active\",\"unknown\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2407\",\"attributes\":{\"fields\":[\"cancelled\",\"landed\",\"scheduled\",\"active\",\"unknown\",\"diverted\"]}}},\"fill_color\":\"#d53e4f\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2463\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2406\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2407\"}},\"fill_color\":\"#d53e4f\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2464\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2406\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2407\"}},\"fill_color\":\"#d53e4f\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2475\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p2469\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p2470\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p2471\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAhXfMeEIAAMDqycx4QgAAgFAczXhCAABAtm7NeEIAAAAcwc14QgAAwIETznhCAACA52XOeEIAAEBNuM54QgAAALMKz3hCAADAGF3PeEIAAIB+r894QgAAQOQB0HhCAAAASlTQeEIAAMCvptB4QgAAgBX50HhCAABAe0vReEIAAADhndF4QgAAwEbw0XhCAACArELSeEIAAEASldJ4QgAAAHjn0nhCAADA3TnTeEIAAIBDjNN4QgAAQKne03hCAAAADzHUeEIAAMB0g9R4QgAAgNrV1HhCAABAQCjVeEIAAACmetV4QgAAwAvN1XhCAACAcR/WeEIAAEDXcdZ4QgAAAD3E1nhCAADAohbXeEIAAIAIadd4QgAAQG6713hCAAAA1A3YeEIAAMA5YNh4QgAAgJ+y2HhCAABABQXZeEIAAABrV9l4QgAAwNCp2XhCAACANvzZeEIAAECcTtp4QgAAAAKh2nhCAADAZ/PaeEIAAIDNRdt4QgAAQDOY23hCAAAAmerbeEIAAMD+PNx4QgAAgGSP3HhCAABAyuHceEIAAAAwNN14QgAAwJWG3XhCAACA+9jdeEIAAEBhK954QgAAAMd93nhCAADALNDeeEIAAICSIt94QgAAQPh033hCAAAAXsffeEIAAMDDGeB4QgAAgCls4HhCAABAj77geEIAAAD1EOF4QgAAwFpj4XhCAACAwLXheEIAAEAmCOJ4QgAAAIxa4nhCAADA8azieEIAAIBX/+J4QgAAQL1R43hCAAAAI6TjeEIAAMCI9uN4QgAAgO5I5HhCAABAVJvkeEIAAAC67eR4QgAAwB9A5XhCAACAhZLleEIAAEDr5OV4QgAAAFE35nhCAADAtonmeEIAAIAc3OZ4QgAAQIIu53hCAAAA6IDneEIAAMBN0+d4QgAAgLMl6HhCAABAGXjoeEIAAAB/yuh4QgAAwOQc6XhCAACASm/peEIAAECwwel4QgAAABYU6nhCAADAe2bqeEIAAIDhuOp4QgAAQEcL63hCAAAArV3reEIAAMASsOt4QgAAgHgC7HhCAABA3lTseEIAAABEp+x4QgAAwKn57HhCAACAD0zteEIAAEB1nu14QgAAANvw7XhCAADAQEPueEIAAICmle54QgAAQAzo7nhCAAAAcjrveEIAAMDXjO94QgAAgD3f73hCAABAozHweEIAAAAJhPB4QgAAwG7W8HhCAACA1CjxeEIAAEA6e/F4QgAAAKDN8XhCAADABSDyeEIAAIBrcvJ4QgAAQNHE8nhCAAAANxfzeEIAAMCcafN4QgAAgAK883hCAABAaA70eEIAAADOYPR4QgAAwDOz9HhCAACAmQX1eEIAAED/V/V4QgAAAGWq9XhCAADAyvz1eEIAAIAwT/Z4QgAAQJah9nhCAAAA/PP2eEIAAMBhRvd4QgAAgMeY93hCAABALev3eEIAAACTPfh4QgAAwPiP+HhCAACAXuL4eEIAAEDENPl4QgAAACqH+XhCAADAj9n5eEIAAID1K/p4QgAAQFt++nhCAAAAwdD6eEIAAMAmI/t4QgAAgIx1+3hCAABA8sf7eEIAAABYGvx4QgAAwL1s/HhCAACAI7/8eEIAAECJEf14QgAAAO9j/XhCAADAVLb9eEIAAIC6CP54QgAAQCBb/nhCAAAAhq3+eEIAAMDr//54QgAAgFFS/3hCAABAt6T/eEIAAAAd9/94QgAAwIJJAHlCAACA6JsAeUIAAEBO7gB5QgAAALRAAXlCAADAGZMBeUIAAIB/5QF5QgAAQOU3AnlCAAAAS4oCeUIAAMCw3AJ5QgAAgBYvA3lCAABAfIEDeUIAAADi0wN5QgAAwEcmBHlCAACArXgEeUIAAEATywR5QgAAAHkdBXlCAADA3m8FeUIAAIBEwgV5QgAAQKoUBnlCAAAAEGcGeUIAAMB1uQZ5QgAAgNsLB3lCAABAQV4HeUIAAACnsAd5QgAAwAwDCHlCAACAclUIeUIAAEDYpwh5QgAAAD76CHlCAADAo0wJeUIAAIAJnwl5QgAAQG/xCXlCAAAA1UMKeUIAAMA6lgp5QgAAgKDoCnlCAABABjsLeUIAAABsjQt5QgAAwNHfC3lCAACANzIMeUIAAECdhAx5QgAAAAPXDHlCAADAaCkNeUIAAIDOew15QgAAQDTODXlCAAAAmiAOeUIAAMD/cg55QgAAgGXFDnlCAABAyxcPeUIAAAAxag95QgAAwJa8D3lCAACA/A4QeUIAAEBiYRB5QgAAAMizEHlCAADALQYReUIAAICTWBF5QgAAQPmqEXlCAAAAX/0ReUIAAMDETxJ5QgAAgCqiEnlCAABAkPQSeUIAAAD2RhN5QgAAwFuZE3lCAACAwesTeUIAAEAnPhR5QgAAAI2QFHlCAADA8uIUeUIAAIBYNRV5QgAAQL6HFXlCAAAAJNoVeUIAAMCJLBZ5QgAAgO9+FnlCAABAVdEWeUIAAAC7Ixd5QgAAwCB2F3lCAACAhsgXeUIAAEDsGhh5QgAAAFJtGHlCAADAt78YeUIAAIAdEhl5QgAAQINkGXlCAAAA6bYZeUIAAMBOCRp5QgAAgLRbGnlCAABAGq4aeUIAAACAABt5QgAAwOVSG3lCAACAS6UbeUIAAECx9xt5QgAAABdKHHlCAADAfJwceUIAAIDi7hx5QgAAQEhBHXlCAAAArpMdeUIAAMAT5h15QgAAgHk4HnlCAABA34oeeUIAAABF3R55QgAAwKovH3lCAACAEIIfeUIAAEB21B95QgAAANwmIHlCAADAQXkgeUIAAICnyyB5QgAAQA0eIXlCAAAAc3AheUIAAMDYwiF5QgAAgD4VInlCAABApGcieUIAAAAKuiJ5QgAAwG8MI3lCAACA1V4jeUIAAEA7sSN5QgAAAKEDJHlCAADABlYkeUIAAIBsqCR5QgAAQNL6JHlCAAAAOE0leUI=\"},\"shape\":[277],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"IQAAABUAAAAtAAAAKAAAADQAAABDAAAANwAAAC8AAAAeAAAAIAAAACgAAAAoAAAAOQAAADsAAAAhAAAALwAAACgAAAAbAAAAJQAAADIAAAAmAAAAFgAAABoAAAAWAAAAEgAAACsAAAArAAAAEgAAADkAAAAeAAAAFQAAACQAAAAhAAAAJQAAACAAAAAvAAAAJgAAACQAAAAiAAAALAAAADQAAAAtAAAAIgAAABwAAAATAAAAGQAAACkAAAAtAAAAFAAAACsAAAAeAAAAJAAAAB4AAAArAAAAMwAAACkAAAA9AAAAJwAAABwAAAAeAAAAMQAAADAAAAAxAAAAQAAAACYAAAAeAAAAJwAAACgAAAAvAAAAIAAAACEAAAAeAAAAIgAAACgAAAAsAAAAOAAAACsAAAA3AAAAIgAAACMAAAAnAAAAJwAAAC4AAAAfAAAAJwAAACcAAAApAAAAMAAAACwAAAAsAAAAMQAAAC4AAAAlAAAALQAAAC4AAAAzAAAAHwAAAC4AAAAfAAAAGwAAABMAAAApAAAALQAAACEAAAAuAAAALQAAABwAAAAlAAAAKQAAACoAAAAfAAAAJwAAACIAAAAiAAAAIAAAACsAAAA2AAAALwAAACUAAAAiAAAAJAAAAB4AAAAqAAAAJQAAADYAAAAkAAAAJQAAACsAAAAhAAAAKgAAADYAAAAaAAAAFAAAACMAAAAgAAAAFAAAAC0AAAAoAAAAMQAAABUAAAAmAAAANQAAACcAAAAhAAAAKwAAACoAAAAxAAAAKAAAACUAAAARAAAAKQAAACgAAAApAAAAGwAAACMAAAAcAAAAHwAAACsAAAAsAAAAMAAAACoAAAApAAAAMwAAACoAAAAnAAAAGAAAACAAAAAXAAAAHQAAAB0AAAAbAAAAKQAAACEAAAAjAAAALgAAACwAAAAhAAAAKgAAACcAAAA0AAAAMgAAACcAAAAXAAAAKQAAAC4AAAAwAAAAKgAAABcAAAAlAAAANgAAAC4AAAAjAAAAJQAAACEAAAAyAAAANQAAACsAAAAxAAAAKQAAAC0AAAA0AAAAOQAAAB0AAAAuAAAAMAAAACkAAAA1AAAATQAAAEAAAAAsAAAAJAAAACIAAAAmAAAAKwAAAC8AAAAeAAAAIwAAAC0AAAAoAAAAMAAAAEkAAAA6AAAAKAAAACoAAAAiAAAALwAAACYAAAAmAAAAHgAAAC0AAAAeAAAALAAAABoAAAAhAAAALwAAAC0AAAArAAAAFgAAABsAAAAbAAAAHQAAACUAAAAjAAAAKAAAACoAAAAgAAAAIAAAACMAAAAuAAAAMAAAACkAAAAjAAAAKQAAACIAAAAdAAAAIwAAADMAAAAwAAAAJgAAACkAAAAWAAAALAAAACgAAAArAAAAHgAAAC4AAAAiAAAAJgAAAB0AAAAXAAAAKgAAADUAAAA2AAAAMwAAABkAAAAoAAAAHwAAAA==\"},\"shape\":[277],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2476\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2477\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p2472\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p2473\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p2474\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p2482\",\"attributes\":{\"location\":1717891200000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p2484\",\"attributes\":{\"location\":1724544000000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p2486\",\"attributes\":{\"location\":1727049600000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p2362\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p2387\"},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p2388\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p2389\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p2394\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p2395\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p2382\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p2383\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p2384\"},\"axis_label\":\"Nr Flights\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2385\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"DatetimeAxis\",\"id\":\"p2365\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"FixedTicker\",\"id\":\"p2480\",\"attributes\":{\"ticks\":[1704585600000.0,1705795200000.0,1707004800000.0,1708214400000.0,1709424000000.0,1710633600000.0,1711843200000.0,1713052800000.0,1714262400000.0,1715472000000.0,1716681600000.0,1717891200000.0,1719100800000.0,1720310400000.0,1721520000000.0,1722729600000.0,1723939200000.0,1725148800000.0,1726358400000.0,1727568000000.0,1728777600000.0],\"minor_ticks\":[]}},\"formatter\":{\"type\":\"object\",\"name\":\"DatetimeTickFormatter\",\"id\":\"p2479\",\"attributes\":{\"days\":\"%d %b %Y\",\"months\":\"%b %Y\"}},\"axis_label\":\"Flight Date\",\"major_label_orientation\":1.2,\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2380\"}}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p2481\",\"attributes\":{\"text\":\"Source: Flight data from AviationStack and conflict events from ACLED\",\"text_color\":\"gray\",\"text_font_size\":\"10pt\",\"x\":0,\"y\":0,\"x_units\":\"screen\",\"y_units\":\"screen\"}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2381\",\"attributes\":{\"axis\":{\"id\":\"p2365\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2386\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p2382\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p2417\",\"attributes\":{\"location\":\"top_left\",\"orientation\":\"horizontal\",\"click_policy\":\"mute\",\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2418\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"cancelled\"},\"renderers\":[{\"id\":\"p2414\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2428\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"landed\"},\"renderers\":[{\"id\":\"p2425\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2438\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"scheduled\"},\"renderers\":[{\"id\":\"p2435\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2448\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"active\"},\"renderers\":[{\"id\":\"p2445\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2458\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"unknown\"},\"renderers\":[{\"id\":\"p2455\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2468\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"diverted\"},\"renderers\":[{\"id\":\"p2465\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2478\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Number of Conflict Events w/o Protests\"},\"renderers\":[{\"id\":\"p2475\"}]}}]}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p2483\",\"attributes\":{\"text\":\"Airline data\\nnot available\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1717891200000.0,\"y\":101.6,\"x_offset\":-5}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p2485\",\"attributes\":{\"text\":\"Israeli strikes in\\nSouthern Lebanon\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1724544000000.0,\"y\":91.44,\"x_offset\":-5}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p2487\",\"attributes\":{\"text\":\"Start of the Israel-Hezboullah\\nConflict\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1727049600000.0,\"y\":81.28,\"x_offset\":-5}}]}}]}};\n const render_items = [{\"docid\":\"57487c6f-8790-4acf-9379-690f53be804e\",\"roots\":{\"p2353\":\"a7f03ebe-70bd-4539-a437-bf1bc39ed8a1\"},\"root_ids\":[\"p2353\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "p2353" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "output_notebook() # Display plots inline in a Jupyter notebook\n", + "\n", + "complete_date_range = pd.date_range(\n", + " start=df[\"flight_date\"].min(), end=df[\"flight_date\"].max()\n", + ")\n", + "df = (\n", + " departures_exploded.groupby([\"flight_date\", \"flight_status\"])\n", + " .count()[[\"iata_arr\"]]\n", + " .reset_index()\n", + ")\n", + "df[\"flight_date\"] = df[\"flight_date\"].apply(lambda x: pd.to_datetime(x))\n", + "\n", + "show(\n", + " get_area_plot(\n", + " df,\n", + " \"Daily Departures from DAM, ALP and LTK\",\n", + " \"Source: Flight data from AviationStack and conflict events from ACLED\",\n", + " acled_events_daily,\n", + " events_dict=events,\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Findings\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "iata_mapping = {\n", + " \"BEY\": \"Beirut\",\n", + " \"ADA\": \"Adana\",\n", + " \"ADD\": \"Addis Ababa\",\n", + " \"AMM\": \"Amman\",\n", + " \"AUH\": \"Abu Dhabi\",\n", + " \"BAH\": \"Bahrain\",\n", + " \"BER\": \"Berlin\",\n", + " \"BGW\": \"Baghdad\",\n", + " \"CAI\": \"Cairo\",\n", + " \"CDG\": \"Paris (Charles de Gaulle)\",\n", + " \"DOH\": \"Doha\",\n", + " \"DUS\": \"Düsseldorf\",\n", + " \"DXB\": \"Dubai\",\n", + " \"FCO\": \"Rome (Fiumicino)\",\n", + " \"FRA\": \"Frankfurt\",\n", + " \"GVA\": \"Geneva\",\n", + " \"IST\": \"Istanbul\",\n", + " \"JED\": \"Jeddah\",\n", + " \"KAC\": \"Kuwait City\",\n", + " \"KWI\": \"Kuwait City\",\n", + " \"LCA\": \"Larnaca\",\n", + " \"LHR\": \"London (Heathrow)\",\n", + " \"LXR\": \"Luxor\",\n", + " \"MAD\": \"Madrid\",\n", + " \"NJF\": \"Najaf\",\n", + " \"ORY\": \"Paris (Orly)\",\n", + " \"ATH\": \"Athens\",\n", + " \"AYT\": \"Antalya\",\n", + " \"BRU\": \"Brussels\",\n", + " \"BSR\": \"Basra\",\n", + " \"CMF\": \"Chambéry\",\n", + " \"CPH\": \"Copenhagen\",\n", + " \"DMM\": \"Dammam\",\n", + " \"EBL\": \"Erbil\",\n", + " \"ESB\": \"Ankara\",\n", + " \"IKA\": \"Tehran\",\n", + " \"ACC\": \"Accra\",\n", + " \"ADJ\": \"Amman\",\n", + " \"ALP\": \"Aleppo\",\n", + " \"BRE\": \"Bremen\",\n", + " \"DAM\": \"Damascus\",\n", + " \"ISU\": \"Sulaymaniyah\",\n", + " \"AKT\": \"Akrotiri\",\n", + " \"EVN\": \"Yerevan\",\n", + " \"ARN\": \"Stockholm\",\n", + " \"BZZ\": \"Brize Norton\",\n", + " \"AZI\": \"Abu Dhabi (Al Bateen)\",\n", + " \"ADB\": \"Izmir\",\n", + " \"HAM\": \"Hamburg\",\n", + " \"HKG\": \"Hong Kong\",\n", + " \"FIH\": \"Kinshasa\",\n", + " \"CMB\": \"Colombo\",\n", + " \"NCE\": \"Nice\",\n", + " \"MFM\": \"Macau\",\n", + " \"MNL\": \"Manila\",\n", + " \"OTP\": \"Bucharest\",\n", + " \"RUH\": \"Riyadh\",\n", + " \"LOS\": \"Lagos\",\n", + " \"MLA\": \"Malta\",\n", + " \"MRS\": \"Marseille\",\n", + " \"PSA\": \"Pisa\",\n", + " \"ISL\": \"Istanbul (Sabiha Gökçen)\",\n", + " \"ALG\": \"Algiers\",\n", + " \"SAW\": \"Istanbul (Sabiha Gökçen)\",\n", + " \"SHJ\": \"Sharjah\",\n", + " \"SSH\": \"Sharm El Sheikh\",\n", + " \"DWC\": \"Dubai (Al Maktoum)\",\n", + " \"PFO\": \"Paphos\",\n", + " \"MCT\": \"Muscat\",\n", + " \"CIA\": \"Rome (Ciampino)\",\n", + " \"LBG\": \"Paris (Le Bourget)\",\n", + " \"LEJ\": \"Leipzig\",\n", + " \"BIA\": \"Bastia\",\n", + " \"BUD\": \"Budapest\",\n", + " \"CHQ\": \"Chania\",\n", + " \"HAN\": \"Hanoi\",\n", + " \"AMS\": \"Amsterdam\",\n", + " \"VIY\": \"Vigo\",\n", + " \"PNH\": \"Phnom Penh\",\n", + " \"BRI\": \"Bari\",\n", + " \"EIN\": \"Eindhoven\",\n", + " \"NBO\": \"Nairobi\",\n", + " \"CEQ\": \"Cannes\",\n", + " \"LYS\": \"Lyon\",\n", + " \"KTM\": \"Kathmandu\",\n", + " \"SIR\": \"Sion\",\n", + " \"BEG\": \"Belgrade\",\n", + " \"INI\": \"Niš\",\n", + " \"RMS\": \"Ramstein\",\n", + " \"ISB\": \"Islamabad\",\n", + " \"ZAZ\": \"Zaragoza\",\n", + " \"HRG\": \"Hurghada\",\n", + " \"KGS\": \"Kos\",\n", + " \"MED\": \"Medina\",\n", + " \"MHD\": \"Mashhad\",\n", + " \"HER\": \"Heraklion\",\n", + " \"ASW\": \"Aswan\",\n", + " \"DUB\": \"Dublin\",\n", + " \"HBE\": \"Alexandria\",\n", + " \"ABJ\": \"Abidjan\",\n", + " \"CTA\": \"Catania\",\n", + " \"BOJ\": \"Burgas\",\n", + " \"LDE\": \"Lourdes\",\n", + " \"DEL\": \"Delhi\",\n", + " \"LAD\": \"Luanda\",\n", + " \"BJZ\": \"Badajoz\",\n", + " \"MIR\": \"Monastir\",\n", + " \"MXP\": \"Milan (Malpensa)\",\n", + " \"HYD\": \"Hyderabad\",\n", + " \"KRK\": \"Krakow\",\n", + " \"BJV\": \"Bodrum\",\n", + " \"GYD\": \"Baku\",\n", + " \"TLV\": \"Tel Aviv\",\n", + " \"WAW\": \"Warsaw\",\n", + " \"DLM\": \"Dalaman\",\n", + " \"IBZ\": \"Ibiza\",\n", + " \"BLQ\": \"Bologna\",\n", + " \"FAB\": \"Farnborough\",\n", + " \"FLR\": \"Florence\",\n", + " \"BRQ\": \"Brno\",\n", + " \"BJY\": \"Belgrade (Batajnica)\",\n", + " \"GOT\": \"Gothenburg\",\n", + " \"DBB\": \"Dabaa\",\n", + " \"CGN\": \"Cologne\",\n", + " \"FOG\": \"Foggia\",\n", + " \"FJR\": \"Fujairah\",\n", + " \"CFU\": \"Corfu\",\n", + " \"ABV\": \"Abuja\",\n", + " \"COV\": \"Coventry\",\n", + " \"BUS\": \"Batumi\",\n", + " \"ZRH\": \"Zurich\",\n", + " \"UAB\": \"Incirlik\",\n", + " \"ULH\": \"Al Ula\",\n", + " \"TBS\": \"Tbilisi\",\n", + " \"STN\": \"London (Stansted)\",\n", + " \"XJD\": \"Al Udeid\",\n", + " \"TEB\": \"Teterboro\",\n", + " \"SPX\": \"Spangdahlem\",\n", + " \"VAR\": \"Varna\",\n", + " \"LIN\": \"Milan (Linate)\",\n", + " \"TMP\": \"Tampere\",\n", + " \"VCE\": \"Venice\",\n", + " \"LTN\": \"London (Luton)\",\n", + " \"SKG\": \"Thessaloniki\",\n", + " \"TRN\": \"Turin\",\n", + " \"TUN\": \"Tunis\",\n", + " \"THR\": \"Tehran\",\n", + " \"OSR\": \"Ostrava\",\n", + " \"SOF\": \"Sofia\",\n", + " \"TRS\": \"Trieste\",\n", + " \"LIS\": \"Lisbon\",\n", + " \"JMK\": \"Mykonos\",\n", + " \"RHO\": \"Rhodes\",\n", + " \"KYE\": \"Kiryat Shmona\",\n", + " \"RKE\": \"Roskilde\",\n", + " \"RIX\": \"Riga\",\n", + " \"TIV\": \"Tivat\",\n", + " \"NAP\": \"Naples\",\n", + " \"OLB\": \"Olbia\",\n", + " \"MUH\": \"Marsa Matruh\",\n", + " \"VIE\": \"Vienna\",\n", + " \"SZX\": \"Shenzhen\",\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "departures_exploded[\"airportcity\"] = departures_exploded[\"iata_arr\"].map(iata_mapping)\n", + "most_changed_departures = (\n", + " pd.DataFrame(\n", + " departures_exploded[\n", + " departures_exploded[\"flight_status\"].isin(\n", + " [\"scheduled\", \"cancelled\", \"diverted\"]\n", + " )\n", + " ][\"airportcity\"]\n", + " .value_counts()\n", + " .head(10)\n", + " )\n", + " .reset_index()\n", + " .sort_values(by=\"count\", ascending=True)\n", + ")\n", + "most_cancelled_departures = (\n", + " pd.DataFrame(\n", + " departures_exploded[departures_exploded[\"flight_status\"].isin([\"cancelled\"])][\n", + " \"airportcity\"\n", + " ]\n", + " .value_counts()\n", + " .head(10)\n", + " )\n", + " .reset_index()\n", + " .sort_values(by=\"count\", ascending=True)\n", + ")\n", + "most_scheduled_departures = (\n", + " pd.DataFrame(\n", + " departures_exploded[departures_exploded[\"flight_status\"].isin([\"scheduled\"])][\n", + " \"airportcity\"\n", + " ]\n", + " .value_counts()\n", + " .head(10)\n", + " )\n", + " .reset_index()\n", + " .sort_values(by=\"count\", ascending=True)\n", + ")\n", + "most_diverted_departures = (\n", + " pd.DataFrame(\n", + " departures_exploded[departures_exploded[\"flight_status\"].isin([\"diverted\"])][\n", + " \"airportcity\"\n", + " ]\n", + " .value_counts()\n", + " .head(10)\n", + " )\n", + " .reset_index()\n", + " .sort_values(by=\"count\", ascending=True)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"bc395ff1-f9d1-479f-b033-226f2e6f530e\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.4.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"bc395ff1-f9d1-479f-b033-226f2e6f530e\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"0264de37-93b3-4774-a248-62cd8d8ee244\":{\"version\":\"3.4.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p2692\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Div\",\"id\":\"p2691\",\"attributes\":{\"width\":800,\"text\":\"

Top 10 Destinations with Changes in Departures from DAM, ALP and LTK in 2024

\"}},{\"type\":\"object\",\"name\":\"Tabs\",\"id\":\"p2690\",\"attributes\":{\"tabs\":[{\"type\":\"object\",\"name\":\"TabPanel\",\"id\":\"p2545\",\"attributes\":{\"title\":\"Most Changed Departures\",\"child\":{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p2544\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p2501\",\"attributes\":{\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p2503\"},\"y_range\":{\"type\":\"object\",\"name\":\"FactorRange\",\"id\":\"p2511\",\"attributes\":{\"factors\":[\"Basra\",\"Tehran\",\"Doha\",\"Dubai\",\"Beirut\",\"Baghdad\",\"Kuwait City\",\"Sharjah\",\"Erbil\",\"Najaf\"]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p2512\"},\"y_scale\":{\"type\":\"object\",\"name\":\"CategoricalScale\",\"id\":\"p2513\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p2504\",\"attributes\":{\"text\":\"Most Changed Departures in 2024\"}},\"outline_line_color\":null,\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2531\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p2498\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p2499\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p2500\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"CQAAAAcAAAAIAAAABgAAAAUAAAAEAAAAAwAAAAIAAAABAAAAAAAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"airportcity\",{\"type\":\"ndarray\",\"array\":[\"Basra\",\"Tehran\",\"Doha\",\"Dubai\",\"Beirut\",\"Baghdad\",\"Kuwait City\",\"Sharjah\",\"Erbil\",\"Najaf\"],\"shape\":[10],\"dtype\":\"object\",\"order\":\"little\"}],[\"count\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"EgAAABUAAAAVAAAAHAAAAC4AAABLAAAAgwAAAI4AAADWAAAA9AAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2532\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2533\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2528\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.7},\"fill_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.7},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.7}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2529\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2530\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2540\",\"attributes\":{\"data_source\":{\"id\":\"p2498\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2541\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2542\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2537\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2538\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.1},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2539\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.2},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p2510\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p2524\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"CategoricalAxis\",\"id\":\"p2519\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"CategoricalTicker\",\"id\":\"p2520\"},\"formatter\":{\"type\":\"object\",\"name\":\"CategoricalTickFormatter\",\"id\":\"p2521\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2522\"},\"axis_line_color\":null,\"major_tick_line_color\":null,\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p2514\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p2515\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p2516\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2517\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2518\",\"attributes\":{\"visible\":false,\"axis\":{\"id\":\"p2514\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2523\",\"attributes\":{\"visible\":false,\"dimension\":1,\"axis\":{\"id\":\"p2519\"}}}]}},{\"type\":\"object\",\"name\":\"Div\",\"id\":\"p2543\",\"attributes\":{\"width\":600,\"text\":\"

Source: AviationStack. Acessed October 7th 2024.

\"}}]}}}},{\"type\":\"object\",\"name\":\"TabPanel\",\"id\":\"p2593\",\"attributes\":{\"title\":\"Most Cancelled Departures\",\"child\":{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p2592\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p2549\",\"attributes\":{\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p2551\"},\"y_range\":{\"type\":\"object\",\"name\":\"FactorRange\",\"id\":\"p2559\",\"attributes\":{\"factors\":[\"Sharjah\",\"Kuwait City\",\"Doha\"]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p2560\"},\"y_scale\":{\"type\":\"object\",\"name\":\"CategoricalScale\",\"id\":\"p2561\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p2552\",\"attributes\":{\"text\":\"Most Cancelled Departures in 2024\"}},\"outline_line_color\":null,\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2579\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p2546\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p2547\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p2548\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AgAAAAEAAAAAAAAA\"},\"shape\":[3],\"dtype\":\"int32\",\"order\":\"little\"}],[\"airportcity\",{\"type\":\"ndarray\",\"array\":[\"Sharjah\",\"Kuwait City\",\"Doha\"],\"shape\":[3],\"dtype\":\"object\",\"order\":\"little\"}],[\"count\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AQAAAAUAAAAHAAAA\"},\"shape\":[3],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2580\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2581\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2576\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"orange\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.7},\"fill_color\":{\"type\":\"value\",\"value\":\"orange\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.7},\"hatch_color\":{\"type\":\"value\",\"value\":\"orange\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.7}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2577\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"orange\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"orange\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"orange\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2578\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"orange\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"orange\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"orange\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2588\",\"attributes\":{\"data_source\":{\"id\":\"p2546\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2589\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2590\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2585\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2586\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.1},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2587\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.2},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p2558\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p2572\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"CategoricalAxis\",\"id\":\"p2567\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"CategoricalTicker\",\"id\":\"p2568\"},\"formatter\":{\"type\":\"object\",\"name\":\"CategoricalTickFormatter\",\"id\":\"p2569\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2570\"},\"axis_line_color\":null,\"major_tick_line_color\":null,\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p2562\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p2563\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p2564\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2565\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2566\",\"attributes\":{\"visible\":false,\"axis\":{\"id\":\"p2562\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2571\",\"attributes\":{\"visible\":false,\"dimension\":1,\"axis\":{\"id\":\"p2567\"}}}]}},{\"type\":\"object\",\"name\":\"Div\",\"id\":\"p2591\",\"attributes\":{\"width\":600,\"text\":\"

Source: AviationStack. Acessed October 7th 2024.

\"}}]}}}},{\"type\":\"object\",\"name\":\"TabPanel\",\"id\":\"p2641\",\"attributes\":{\"title\":\"Most Scheduled Departures\",\"child\":{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p2640\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p2597\",\"attributes\":{\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p2599\"},\"y_range\":{\"type\":\"object\",\"name\":\"FactorRange\",\"id\":\"p2607\",\"attributes\":{\"factors\":[\"Doha\",\"Basra\",\"Tehran\",\"Dubai\",\"Beirut\",\"Baghdad\",\"Kuwait City\",\"Sharjah\",\"Erbil\",\"Najaf\"]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p2608\"},\"y_scale\":{\"type\":\"object\",\"name\":\"CategoricalScale\",\"id\":\"p2609\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p2600\",\"attributes\":{\"text\":\"Most Scheduled Departures in 2024\"}},\"outline_line_color\":null,\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2627\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p2594\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p2595\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p2596\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"CQAAAAgAAAAHAAAABgAAAAUAAAAEAAAAAwAAAAIAAAABAAAAAAAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"airportcity\",{\"type\":\"ndarray\",\"array\":[\"Doha\",\"Basra\",\"Tehran\",\"Dubai\",\"Beirut\",\"Baghdad\",\"Kuwait City\",\"Sharjah\",\"Erbil\",\"Najaf\"],\"shape\":[10],\"dtype\":\"object\",\"order\":\"little\"}],[\"count\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"DgAAABIAAAAUAAAAGwAAAC4AAABHAAAAeAAAAI0AAADVAAAA8wAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2628\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2629\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2624\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.7},\"fill_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.7},\"hatch_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.7}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2625\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2626\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2636\",\"attributes\":{\"data_source\":{\"id\":\"p2594\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2637\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2638\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2633\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2634\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.1},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2635\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.2},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p2606\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p2620\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"CategoricalAxis\",\"id\":\"p2615\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"CategoricalTicker\",\"id\":\"p2616\"},\"formatter\":{\"type\":\"object\",\"name\":\"CategoricalTickFormatter\",\"id\":\"p2617\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2618\"},\"axis_line_color\":null,\"major_tick_line_color\":null,\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p2610\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p2611\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p2612\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2613\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2614\",\"attributes\":{\"visible\":false,\"axis\":{\"id\":\"p2610\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2619\",\"attributes\":{\"visible\":false,\"dimension\":1,\"axis\":{\"id\":\"p2615\"}}}]}},{\"type\":\"object\",\"name\":\"Div\",\"id\":\"p2639\",\"attributes\":{\"width\":600,\"text\":\"

Source: AviationStack. Acessed October 7th 2024.

\"}}]}}}},{\"type\":\"object\",\"name\":\"TabPanel\",\"id\":\"p2689\",\"attributes\":{\"title\":\"Most Diverted Departures\",\"child\":{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p2688\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p2645\",\"attributes\":{\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p2647\"},\"y_range\":{\"type\":\"object\",\"name\":\"FactorRange\",\"id\":\"p2655\",\"attributes\":{\"factors\":[\"Erbil\",\"Tehran\",\"Dubai\",\"Najaf\",\"Muscat\",\"Baghdad\",\"Kuwait City\"]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p2656\"},\"y_scale\":{\"type\":\"object\",\"name\":\"CategoricalScale\",\"id\":\"p2657\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p2648\",\"attributes\":{\"text\":\"Most Diverted Departures in 2024\"}},\"outline_line_color\":null,\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2675\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p2642\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p2643\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p2644\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AgAAAAMAAAAEAAAABQAAAAYAAAABAAAAAAAAAA==\"},\"shape\":[7],\"dtype\":\"int32\",\"order\":\"little\"}],[\"airportcity\",{\"type\":\"ndarray\",\"array\":[\"Erbil\",\"Tehran\",\"Dubai\",\"Najaf\",\"Muscat\",\"Baghdad\",\"Kuwait City\"],\"shape\":[7],\"dtype\":\"object\",\"order\":\"little\"}],[\"count\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AQAAAAEAAAABAAAAAQAAAAEAAAAEAAAABgAAAA==\"},\"shape\":[7],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2676\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2677\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2672\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.7},\"fill_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.7},\"hatch_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.7}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2673\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p2674\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2684\",\"attributes\":{\"data_source\":{\"id\":\"p2642\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2685\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2686\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2681\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2682\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.1},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p2683\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.2},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p2654\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p2668\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"CategoricalAxis\",\"id\":\"p2663\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"CategoricalTicker\",\"id\":\"p2664\"},\"formatter\":{\"type\":\"object\",\"name\":\"CategoricalTickFormatter\",\"id\":\"p2665\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2666\"},\"axis_line_color\":null,\"major_tick_line_color\":null,\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p2658\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p2659\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p2660\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2661\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2662\",\"attributes\":{\"visible\":false,\"axis\":{\"id\":\"p2658\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2667\",\"attributes\":{\"visible\":false,\"dimension\":1,\"axis\":{\"id\":\"p2663\"}}}]}},{\"type\":\"object\",\"name\":\"Div\",\"id\":\"p2687\",\"attributes\":{\"width\":600,\"text\":\"

Source: AviationStack. Acessed October 7th 2024.

\"}}]}}}}]}}]}}]}};\n const render_items = [{\"docid\":\"0264de37-93b3-4774-a248-62cd8d8ee244\",\"roots\":{\"p2692\":\"e51c413c-7160-41ba-9c8c-71bc70944e10\"},\"root_ids\":[\"p2692\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "p2692" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "output_notebook()\n", + "from bokeh.layouts import column\n", + "from bokeh.models import Div\n", + "\n", + "# Example datasets stored in a dictionary\n", + "datasets = {\n", + " \"Most Changed Departures\": most_changed_departures,\n", + " \"Most Cancelled Departures\": most_cancelled_departures,\n", + " \"Most Scheduled Departures\": most_scheduled_departures,\n", + " \"Most Diverted Departures\": most_diverted_departures\n", + "}\n", + "\n", + "# Initialize an empty list to store the tabs\n", + "# List of colors to use for each dataset\n", + "colors = [\"lightblue\", \"orange\", \"#023436\", \"#00BFB3\"]\n", + "\n", + "# Initialize an empty list to store the tabs\n", + "tabs = []\n", + "\n", + "# Loop through each dataset and its corresponding color\n", + "for (title, data), color in zip(datasets.items(), colors):\n", + " # Convert data to ColumnDataSource for Bokeh plotting\n", + " source = ColumnDataSource(data)\n", + "\n", + " # Create a figure for each dataset\n", + " p = figure(y_range=data['airportcity'], width=600, height=400, title=title + \" in 2024\", tools=\"save\", toolbar_location=\"above\")\n", + " p.hbar(y='airportcity', right='count', height=0.5, color=color, alpha=0.7, source=source)\n", + "\n", + " # Add text inside the bars (5 points inside the bar)\n", + " p.text(x='count', y='airportcity', text='count', source=source, \n", + " x_offset=-5, # This places the text 5 units inside the bar\n", + " y_offset=-3, # Vertical alignment\n", + " text_align='right', text_baseline='middle', text_color=\"black\", text_font_size=\"10pt\")\n", + "\n", + " # Customize plot (optional)\n", + " p.xaxis.visible = False\n", + " p.ygrid.visible = False\n", + " p.xgrid.visible = False\n", + " p.yaxis.major_tick_line_color = None # No major ticks\n", + " p.yaxis.minor_tick_line_color = None # No minor ticks\n", + " p.yaxis.axis_line_color = None \n", + " p.outline_line_color = None\n", + "\n", + " subtitle = Div(text=f\"

Source: AviationStack. Acessed October 7th 2024.

\", width=600)\n", + "\n", + " layout = column(p, subtitle)\n", + "\n", + " # Create a panel with the plot and the corresponding title\n", + " tab = TabPanel(child=layout, title=title)\n", + "\n", + " # Append the panel to the list of tabs\n", + " tabs.append(tab)\n", + "\n", + "# Arrange the tabs in a Tabs layout\n", + "tabs_layout = Tabs(tabs=tabs)\n", + "\n", + "main_title = Div(text=\"

Top 10 Destinations with Changes in Departures from DAM, ALP and LTK in 2024

\", width=800)\n", + "\n", + "# Use column layout to stack the title on top of the tabs\n", + "layout = column(main_title, tabs_layout)\n", + "\n", + "# Show the tabs\n", + "show(layout)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Findings \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"aa633006-0c31-45cc-936c-75075a8b02cb\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.4.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"aa633006-0c31-45cc-936c-75075a8b02cb\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"b2f14604-7e57-461e-9a66-852734272349\":{\"version\":\"3.4.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p2852\",\"attributes\":{\"width\":800,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p2853\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p2854\",\"attributes\":{\"start\":0,\"end\":408}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p2862\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p2863\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p2855\",\"attributes\":{\"text\":\"Weekly Departures from DAM, ALP, LTK\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2913\",\"attributes\":{\"name\":\"active\",\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p2849\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p2850\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p2851\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAA\"},\"shape\":[42],\"dtype\":\"int32\",\"order\":\"little\"}],[\"flight_date\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AADAgRPOeEIAAABKVNB4QgAAQBKV0nhCAACA2tXUeEIAAMCiFtd4QgAAAGtX2XhCAABAM5jbeEIAAID72N14QgAAwMMZ4HhCAAAAjFrieEIAAEBUm+R4QgAAgBzc5nhCAADA5BzpeEIAAACtXet4QgAAQHWe7XhCAACAPd/veEIAAMAFIPJ4QgAAAM5g9HhCAABAlqH2eEIAAIBe4vh4QgAAwCYj+3hCAAAA72P9eEIAAEC3pP94QgAAgH/lAXlCAADARyYEeUIAAAAQZwZ5QgAAQNinCHlCAACAoOgKeUIAAMBoKQ15QgAAADFqD3lCAABA+aoReUIAAIDB6xN5QgAAwIksFnlCAAAAUm0YeUIAAEAarhp5QgAAgOLuHHlCAADAqi8feUIAAABzcCF5QgAAQDuxI3lCAACAA/IleUIAAMDLMih5QgAAAJRzKnlC\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"active\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAMUAAAAAAAAAxQAAAAAAAACJAAAAAAAAAMEAAAAAAAAAgQAAAAAAAADBAAAAAAAAAMUAAAAAAAAAyQAAAAAAAADFAAAAAAAAAJEAAAAAAAAAiQAAAAAAAACpAAAAAAAAALEAAAAAAAAA9QAAAAAAAgEdAAAAAAAAAO0AAAAAAAIBBQAAAAAAAADhAAAAAAAAAQEAAAAAAAABBQAAAAAAAAEFAAAAAAACAQUAAAAAAAAAmQAAAAAAAAEFAAAAAAAAAPUAAAAAAAABAQAAAAAAAADtAAAAAAAAAQ0AAAAAAAABEQAAAAAAAAENAAAAAAAAAO0AAAAAAAABHQAAAAAAAAEFAAAAAAACAQUAAAAAAAABEQAAAAAAAAD1AAAAAAAAAO0AAAAAAAIBAQAAAAAAAAEFAAAAAAAAAQUAAAAAAAABAQAAAAAAAACBA\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"cancelled\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"diverted\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"landed\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAACAQUAAAAAAAIBHQAAAAAAAAEdAAAAAAACAQkAAAAAAAAA6QAAAAAAAADxAAAAAAACAQ0AAAAAAAABFQAAAAAAAgEVAAAAAAAAASEAAAAAAAIBIQAAAAAAAAENAAAAAAACAQEAAAAAAAIBGQAAAAAAAAD5AAAAAAAAAP0AAAAAAAAA+QAAAAAAAADZAAAAAAACAR0AAAAAAAIBJQAAAAAAAgEtAAAAAAAAASUAAAAAAAAAwQAAAAAAAAEVAAAAAAAAAUEAAAAAAAIBJQAAAAAAAgEhAAAAAAACASEAAAAAAAIBIQAAAAAAAAExAAAAAAABAUEAAAAAAAIBCQAAAAAAAAElAAAAAAAAARkAAAAAAAIBIQAAAAAAAgEhAAAAAAACAT0AAAAAAAIBLQAAAAAAAAE5AAAAAAAAASEAAAAAAAIBKQAAAAAAAABhA\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"scheduled\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAPUAAAAAAAAAuQAAAAAAAADhAAAAAAAAANkAAAAAAAAAqQAAAAAAAAEFAAAAAAAAAN0AAAAAAAAA1QAAAAAAAADVAAAAAAAAANkAAAAAAAAA1QAAAAAAAADhAAAAAAAAAN0AAAAAAAAA+QAAAAAAAAD9AAAAAAAAAR0AAAAAAAIBIQAAAAAAAADdAAAAAAACAQEAAAAAAAAA/QAAAAAAAAD9AAAAAAAAAO0AAAAAAAAA4QAAAAAAAADxAAAAAAAAAOUAAAAAAAAA5QAAAAAAAAENAAAAAAAAAO0AAAAAAAAA2QAAAAAAAADpAAAAAAAAAOUAAAAAAAIBCQAAAAAAAAERAAAAAAACAQEAAAAAAAAA9QAAAAAAAgEBAAAAAAAAAOUAAAAAAAAAqQAAAAAAAACZAAAAAAAAAMUAAAAAAAAA0QAAAAAAAABBA\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"unknown\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAEEAAAAAAAAAQQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAIQAAAAAAAABRAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAEEAAAAAAAAAcQAAAAAAAABhAAAAAAAAAJkAAAAAAAAAQQAAAAAAAACRAAAAAAAAAHEAAAAAAAAAYQAAAAAAAACRAAAAAAAAAMEAAAAAAAAAQQAAAAAAAADJAAAAAAAAAKkAAAAAAAAAyQAAAAAAAACBAAAAAAAAALEAAAAAAAAAuQAAAAAAAACJAAAAAAAAALkAAAAAAAAAzQAAAAAAAACRAAAAAAAAAMkAAAAAAAAAmQAAAAAAAACZAAAAAAAAAKkAAAAAAAAAiQAAAAAAAACBAAAAAAAAALEAAAAAAAAAiQAAAAAAAAPA/\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2914\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2915\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2910\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2895\",\"attributes\":{\"fields\":[]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2896\",\"attributes\":{\"fields\":[\"active\"]}}},\"fill_color\":\"#3288bd\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2911\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2895\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2896\"}},\"fill_color\":\"#3288bd\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2912\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2895\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2896\"}},\"fill_color\":\"#3288bd\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2924\",\"attributes\":{\"name\":\"cancelled\",\"data_source\":{\"id\":\"p2849\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2925\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2926\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2921\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2897\",\"attributes\":{\"fields\":[\"active\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2898\",\"attributes\":{\"fields\":[\"active\",\"cancelled\"]}}},\"fill_color\":\"#99d594\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2922\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2897\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2898\"}},\"fill_color\":\"#99d594\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2923\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2897\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2898\"}},\"fill_color\":\"#99d594\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2934\",\"attributes\":{\"name\":\"landed\",\"data_source\":{\"id\":\"p2849\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2935\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2936\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2931\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2899\",\"attributes\":{\"fields\":[\"active\",\"cancelled\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2900\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\"]}}},\"fill_color\":\"#e6f598\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2932\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2899\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2900\"}},\"fill_color\":\"#e6f598\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2933\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2899\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2900\"}},\"fill_color\":\"#e6f598\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2944\",\"attributes\":{\"name\":\"scheduled\",\"data_source\":{\"id\":\"p2849\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2945\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2946\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2941\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2901\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2902\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\",\"scheduled\"]}}},\"fill_color\":\"#fee08b\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2942\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2901\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2902\"}},\"fill_color\":\"#fee08b\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2943\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2901\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2902\"}},\"fill_color\":\"#fee08b\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2954\",\"attributes\":{\"name\":\"unknown\",\"data_source\":{\"id\":\"p2849\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2955\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2956\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2951\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2903\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\",\"scheduled\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2904\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\",\"scheduled\",\"unknown\"]}}},\"fill_color\":\"#fc8d59\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2952\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2903\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2904\"}},\"fill_color\":\"#fc8d59\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2953\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2903\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2904\"}},\"fill_color\":\"#fc8d59\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2964\",\"attributes\":{\"name\":\"diverted\",\"data_source\":{\"id\":\"p2849\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2965\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2966\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2961\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2905\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\",\"scheduled\",\"unknown\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p2906\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\",\"scheduled\",\"unknown\",\"diverted\"]}}},\"fill_color\":\"#d53e4f\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2962\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2905\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2906\"}},\"fill_color\":\"#d53e4f\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p2963\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2905\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p2906\"}},\"fill_color\":\"#d53e4f\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p2974\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p2968\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p2969\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p2970\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AADAgRPOeEIAAABKVNB4QgAAQBKV0nhCAACA2tXUeEIAAMCiFtd4QgAAAGtX2XhCAABAM5jbeEIAAID72N14QgAAwMMZ4HhCAAAAjFrieEIAAEBUm+R4QgAAgBzc5nhCAADA5BzpeEIAAACtXet4QgAAQHWe7XhCAACAPd/veEIAAMAFIPJ4QgAAAM5g9HhCAABAlqH2eEIAAIBe4vh4QgAAwCYj+3hCAAAA72P9eEIAAEC3pP94QgAAgH/lAXlCAADARyYEeUIAAAAQZwZ5QgAAQNinCHlCAACAoOgKeUIAAMBoKQ15QgAAADFqD3lCAABA+aoReUIAAIDB6xN5QgAAwIksFnlCAAAAUm0YeUIAAEAarhp5QgAAgOLuHHlCAADAqi8feUIAAABzcCF5QgAAQDuxI3lCAACAA/IleUI=\"},\"shape\":[40],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AgEAAC0BAAAlAQAA1AAAAOgAAAAbAQAA7QAAAP0AAAAoAQAAMwEAAA0BAAAjAQAAHgEAADEBAADyAAAADgEAABsBAAAOAQAADwEAAPEAAAANAQAACQEAAAABAAAPAQAA2QAAADIBAAAGAQAAJAEAAFQBAABmAQAAEAEAAFMBAAASAQAADAEAANkAAAAUAQAAEQEAAAIBAAAJAQAAyQAAAA==\"},\"shape\":[40],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p2975\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p2976\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p2971\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p2972\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p2973\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p2981\",\"attributes\":{\"location\":1717891200000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p2983\",\"attributes\":{\"location\":1724544000000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p2985\",\"attributes\":{\"location\":1727049600000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p2861\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p2886\"},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p2887\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p2888\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p2893\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p2894\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p2881\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p2882\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p2883\"},\"axis_label\":\"Nr Flights\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2884\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"DatetimeAxis\",\"id\":\"p2864\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"FixedTicker\",\"id\":\"p2979\",\"attributes\":{\"ticks\":[1704585600000.0,1705795200000.0,1707004800000.0,1708214400000.0,1709424000000.0,1710633600000.0,1711843200000.0,1713052800000.0,1714262400000.0,1715472000000.0,1716681600000.0,1717891200000.0,1719100800000.0,1720310400000.0,1721520000000.0,1722729600000.0,1723939200000.0,1725148800000.0,1726358400000.0,1727568000000.0,1728777600000.0],\"minor_ticks\":[]}},\"formatter\":{\"type\":\"object\",\"name\":\"DatetimeTickFormatter\",\"id\":\"p2978\",\"attributes\":{\"days\":\"%d %b %Y\",\"months\":\"%b %Y\"}},\"axis_label\":\"Flight Date\",\"major_label_orientation\":1.2,\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p2879\"}}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p2980\",\"attributes\":{\"text\":\"Source: Flight data from AviationStack and conflict events from ACLED\",\"text_color\":\"gray\",\"text_font_size\":\"10pt\",\"x\":0,\"y\":0,\"x_units\":\"screen\",\"y_units\":\"screen\"}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2880\",\"attributes\":{\"axis\":{\"id\":\"p2864\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p2885\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p2881\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p2916\",\"attributes\":{\"location\":\"top_left\",\"orientation\":\"horizontal\",\"click_policy\":\"mute\",\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2917\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"active\"},\"renderers\":[{\"id\":\"p2913\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2927\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"cancelled\"},\"renderers\":[{\"id\":\"p2924\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2937\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"landed\"},\"renderers\":[{\"id\":\"p2934\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2947\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"scheduled\"},\"renderers\":[{\"id\":\"p2944\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2957\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"unknown\"},\"renderers\":[{\"id\":\"p2954\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2967\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"diverted\"},\"renderers\":[{\"id\":\"p2964\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p2977\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Number of Conflict Events w/o Protests\"},\"renderers\":[{\"id\":\"p2974\"}]}}]}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p2982\",\"attributes\":{\"text\":\"Airline data\\nnot available\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1717891200000.0,\"y\":326.4,\"x_offset\":-5}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p2984\",\"attributes\":{\"text\":\"Israeli strikes in\\nSouthern Lebanon\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1724544000000.0,\"y\":293.76,\"x_offset\":-5}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p2986\",\"attributes\":{\"text\":\"Start of the Israel-Hezboullah\\nConflict\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1727049600000.0,\"y\":261.12,\"x_offset\":-5}}]}}]}};\n const render_items = [{\"docid\":\"b2f14604-7e57-461e-9a66-852734272349\",\"roots\":{\"p2852\":\"b7530573-e520-4c11-b824-c475662c05e3\"},\"root_ids\":[\"p2852\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "p2852" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "output_notebook() # Display plots inline in a Jupyter notebook\n", + "\n", + "departures_exploded[\"flight_date\"] = departures_exploded[\"flight_date\"].apply(\n", + " lambda x: pd.to_datetime(x)\n", + ")\n", + "df = (\n", + " departures_exploded.groupby(\n", + " [pd.Grouper(key=\"flight_date\", freq=\"W\"), \"flight_status\"]\n", + " )\n", + " .count()[[\"iata_arr\"]]\n", + " .reset_index()\n", + ")\n", + "\n", + "show(\n", + " get_area_plot(\n", + " df,\n", + " \"Weekly Departures from DAM, ALP, LTK\",\n", + " \"Source: Flight data from AviationStack and conflict events from ACLED\",\n", + " acled_events_weekly,\n", + " reindex_freq=\"W\",\n", + " events_dict=events,\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "arrivals = pd.concat(\n", + " [\n", + " pd.read_csv(\"../../data/aviation/aviationstack_dam_01012024_14102024_arr.csv\"),\n", + " pd.read_csv(\"../../data/aviation/aviationstack_alp_01012024_14102024_arr.csv\"),\n", + " pd.read_csv('../../data/aviation/aviationstack_ltk_01012024_14102024_arr.csv')\n", + " ]\n", + ")\n", + "arrivals.drop(columns=\"Unnamed: 0\", inplace=True)\n", + "arrivals.drop_duplicates(inplace=True)\n", + "arrivals.reset_index(drop=True, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "metadata": { + "tags": [ + "remove-cell", + "remove-input" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Flights for the following dates are missing in the data, reasons are unknown.: DatetimeIndex(['2024-01-29', '2024-01-30', '2024-04-29', '2024-04-30',\n", + " '2024-06-07', '2024-06-08', '2024-06-09'],\n", + " dtype='datetime64[ns]', freq=None)\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = arrivals\n", + "# Assuming df is your DataFrame and 'flight_date' is the column with the dates\n", + "df[\"flight_date\"] = pd.to_datetime(\n", + " df[\"flight_date\"]\n", + ") # Ensure 'flight_date' is in datetime format\n", + "\n", + "# Generate the complete date range from the minimum to the maximum date\n", + "complete_date_range = pd.date_range(\n", + " start=df[\"flight_date\"].min(), end=df[\"flight_date\"].max()\n", + ")\n", + "\n", + "# Find missing dates by comparing the complete date range with the dates in the DataFrame\n", + "missing_dates = complete_date_range.difference(df[\"flight_date\"])\n", + "\n", + "if missing_dates.empty:\n", + " print(\"All dates are present.\")\n", + "else:\n", + " print(\n", + " f\"Flights for the following dates are missing in the data, reasons are unknown.: {missing_dates}\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "arrivals_exploded = explode(arrivals)" + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "There were 4415 flights before duplication check\n", + "There are 4396 flights after duplication check. 19 flights were duplicated\n" + ] + } + ], + "source": [ + "before = arrivals_exploded.shape[0]\n", + "print(f\"There were {before} flights before duplication check\")\n", + "# check for duplicate flights i.e., flights scheduled to take off at the exact same time from the same place to the same destination\n", + "arrivals_exploded = arrivals_exploded.drop_duplicates(\n", + " subset=[\"flight_date\", \"scheduled_arr\", \"iata_arr\", \"iata_dep\", \"scheduled_dep\"]\n", + ")\n", + "\n", + "after = arrivals_exploded.shape[0]\n", + "print(\n", + " f\"There are {after} flights after duplication check. {before-after} flights were duplicated\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
flight_datescheduled_arriata_arriata_depscheduled_depflight_status
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [flight_date, scheduled_arr, iata_arr, iata_dep, scheduled_dep, flight_status]\n", + "Index: []" + ] + }, + "execution_count": 151, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Test to see if any flight has more than one flight status assoctaed with it.\n", + "duplicate_status_test = (\n", + " arrivals_exploded.groupby(\n", + " [\"flight_date\", \"scheduled_arr\", \"iata_arr\", \"iata_dep\", \"scheduled_dep\"]\n", + " )[[\"flight_status\"]]\n", + " .count()\n", + " .reset_index()\n", + ")\n", + "duplicate_status_test[duplicate_status_test[\"flight_status\"] > 1]" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"a358eed5-f7fe-4f55-8761-b60829eece95\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.4.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"a358eed5-f7fe-4f55-8761-b60829eece95\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"e4c41684-aeed-4ef8-990b-6927003875e9\":{\"version\":\"3.4.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p3148\",\"attributes\":{\"width\":800,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3149\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3150\",\"attributes\":{\"start\":0,\"end\":127}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3158\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3159\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p3151\",\"attributes\":{\"text\":\"Daily Arrivals to DAM, ALP and LTK\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3209\",\"attributes\":{\"name\":\"active\",\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3145\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3146\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3147\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAAAAgQAAAIIAAACDAAAAhAAAAIUAAACGAAAAhwAAAIgAAACJAAAAigAAAIsAAACMAAAAjQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAJQAAACVAAAAlgAAAJcAAACYAAAAmQAAAJoAAACbAAAAnAAAAJ0AAACeAAAAnwAAAKAAAAChAAAAogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAAK8AAACwAAAAsQAAALIAAACzAAAAtAAAALUAAAC2AAAAtwAAALgAAAC5AAAAugAAALsAAAC8AAAAvQAAAL4AAAC/AAAAwAAAAMEAAADCAAAAwwAAAMQAAADFAAAAxgAAAMcAAADIAAAAyQAAAMoAAADLAAAAzAAAAM0AAADOAAAAzwAAANAAAADRAAAA0gAAANMAAADUAAAA1QAAANYAAADXAAAA2AAAANkAAADaAAAA2wAAANwAAADdAAAA3gAAAN8AAADgAAAA4QAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAACAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAAFAEAABUBAAAWAQAAFwEAABgBAAAZAQAAGgEAABsBAAAcAQAAHQEAAB4BAAAfAQAAIAEAAA==\"},\"shape\":[289],\"dtype\":\"int32\",\"order\":\"little\"}],[\"flight_date\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AABAHyXMeEIAAACFd8x4QgAAwOrJzHhCAACAUBzNeEIAAEC2bs14QgAAABzBzXhCAADAgRPOeEIAAIDnZc54QgAAQE24znhCAAAAswrPeEIAAMAYXc94QgAAgH6vz3hCAABA5AHQeEIAAABKVNB4QgAAwK+m0HhCAACAFfnQeEIAAEB7S9F4QgAAAOGd0XhCAADARvDReEIAAICsQtJ4QgAAQBKV0nhCAAAAeOfSeEIAAMDdOdN4QgAAgEOM03hCAABAqd7TeEIAAAAPMdR4QgAAwHSD1HhCAACA2tXUeEIAAEBAKNV4QgAAAKZ61XhCAADAC83VeEIAAIBxH9Z4QgAAQNdx1nhCAAAAPcTWeEIAAMCiFtd4QgAAgAhp13hCAABAbrvXeEIAAADUDdh4QgAAwDlg2HhCAACAn7LYeEIAAEAFBdl4QgAAAGtX2XhCAADA0KnZeEIAAIA2/Nl4QgAAQJxO2nhCAAAAAqHaeEIAAMBn89p4QgAAgM1F23hCAABAM5jbeEIAAACZ6tt4QgAAwP483HhCAACAZI/ceEIAAEDK4dx4QgAAADA03XhCAADAlYbdeEIAAID72N14QgAAQGEr3nhCAAAAx33eeEIAAMAs0N54QgAAgJIi33hCAABA+HTfeEIAAABex994QgAAwMMZ4HhCAACAKWzgeEIAAECPvuB4QgAAAPUQ4XhCAADAWmPheEIAAIDAteF4QgAAQCYI4nhCAAAAjFrieEIAAMDxrOJ4QgAAgFf/4nhCAABAvVHjeEIAAAAjpON4QgAAwIj243hCAACA7kjkeEIAAEBUm+R4QgAAALrt5HhCAADAH0DleEIAAICFkuV4QgAAQOvk5XhCAAAAUTfmeEIAAMC2ieZ4QgAAgBzc5nhCAABAgi7neEIAAADogOd4QgAAwE3T53hCAACAsyXoeEIAAEAZeOh4QgAAAH/K6HhCAADA5BzpeEIAAIBKb+l4QgAAQLDB6XhCAAAAFhTqeEIAAMB7Zup4QgAAgOG46nhCAABARwvreEIAAACtXet4QgAAwBKw63hCAACAeALseEIAAEDeVOx4QgAAAESn7HhCAADAqfnseEIAAIAPTO14QgAAQHWe7XhCAAAA2/DteEIAAMBAQ+54QgAAgKaV7nhCAABADOjueEIAAAByOu94QgAAwNeM73hCAACAPd/veEIAAECjMfB4QgAAAAmE8HhCAADAbtbweEIAAIDUKPF4QgAAQDp78XhCAAAAoM3xeEIAAMAFIPJ4QgAAgGty8nhCAABA0cTyeEIAAAA3F/N4QgAAwJxp83hCAACAArzzeEIAAEBoDvR4QgAAAM5g9HhCAADAM7P0eEIAAICZBfV4QgAAQP9X9XhCAAAAZar1eEIAAMDK/PV4QgAAgDBP9nhCAABAlqH2eEIAAAD88/Z4QgAAwGFG93hCAACAx5j3eEIAAEAt6/d4QgAAAJM9+HhCAADA+I/4eEIAAIBe4vh4QgAAQMQ0+XhCAAAAKof5eEIAAMCP2fl4QgAAgPUr+nhCAABAW376eEIAAADB0Pp4QgAAwCYj+3hCAACAjHX7eEIAAEDyx/t4QgAAAFga/HhCAADAvWz8eEIAAIAjv/x4QgAAQIkR/XhCAAAA72P9eEIAAMBUtv14QgAAgLoI/nhCAABAIFv+eEIAAACGrf54QgAAwOv//nhCAACAUVL/eEIAAEC3pP94QgAAAB33/3hCAADAgkkAeUIAAIDomwB5QgAAQE7uAHlCAAAAtEABeUIAAMAZkwF5QgAAgH/lAXlCAABA5TcCeUIAAABLigJ5QgAAwLDcAnlCAACAFi8DeUIAAEB8gQN5QgAAAOLTA3lCAADARyYEeUIAAICteAR5QgAAQBPLBHlCAAAAeR0FeUIAAMDebwV5QgAAgETCBXlCAABAqhQGeUIAAAAQZwZ5QgAAwHW5BnlCAACA2wsHeUIAAEBBXgd5QgAAAKewB3lCAADADAMIeUIAAIByVQh5QgAAQNinCHlCAAAAPvoIeUIAAMCjTAl5QgAAgAmfCXlCAABAb/EJeUIAAADVQwp5QgAAwDqWCnlCAACAoOgKeUIAAEAGOwt5QgAAAGyNC3lCAADA0d8LeUIAAIA3Mgx5QgAAQJ2EDHlCAAAAA9cMeUIAAMBoKQ15QgAAgM57DXlCAABANM4NeUIAAACaIA55QgAAwP9yDnlCAACAZcUOeUIAAEDLFw95QgAAADFqD3lCAADAlrwPeUIAAID8DhB5QgAAQGJhEHlCAAAAyLMQeUIAAMAtBhF5QgAAgJNYEXlCAABA+aoReUIAAABf/RF5QgAAwMRPEnlCAACAKqISeUIAAECQ9BJ5QgAAAPZGE3lCAADAW5kTeUIAAIDB6xN5QgAAQCc+FHlCAAAAjZAUeUIAAMDy4hR5QgAAgFg1FXlCAABAvocVeUIAAAAk2hV5QgAAwIksFnlCAACA734WeUIAAEBV0RZ5QgAAALsjF3lCAADAIHYXeUIAAICGyBd5QgAAQOwaGHlCAAAAUm0YeUIAAMC3vxh5QgAAgB0SGXlCAABAg2QZeUIAAADpthl5QgAAwE4JGnlCAACAtFsaeUIAAEAarhp5QgAAAIAAG3lCAADA5VIbeUIAAIBLpRt5QgAAQLH3G3lCAAAAF0oceUIAAMB8nBx5QgAAgOLuHHlCAABASEEdeUIAAACukx15QgAAwBPmHXlCAACAeTgeeUIAAEDfih55QgAAAEXdHnlCAADAqi8feUIAAIAQgh95QgAAQHbUH3lCAAAA3CYgeUIAAMBBeSB5QgAAgKfLIHlCAABADR4heUIAAABzcCF5QgAAwNjCIXlCAACAPhUieUIAAECkZyJ5QgAAAAq6InlCAADAbwwjeUIAAIDVXiN5QgAAQDuxI3lCAAAAoQMkeUIAAMAGViR5QgAAgGyoJHlCAABA0vokeUIAAAA4TSV5QgAAwJ2fJXlCAACAA/IleUIAAEBpRCZ5QgAAAM+WJnlCAADANOkmeUIAAICaOyd5QgAAQACOJ3lCAAAAZuAneUIAAMDLMih5QgAAgDGFKHlCAABAl9coeUI=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"active\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAEAAAAAAAAAYQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAACEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAUQAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAABRAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAAEEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAIQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAIQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAABAAAAAAAAACEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAFEAAAAAAAAAIQAAAAAAAAABAAAAAAAAAFEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAABBAAAAAAAAACEAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAGEAAAAAAAAAIQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAIQAAAAAAAABhAAAAAAAAAEEAAAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAACEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAQQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAIQAAAAAAAABRAAAAAAAAACEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAACEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAACEAAAAAAAAAQQAAAAAAAAPA/AAAAAAAAFEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAQQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAAQAAAAAAAABBAAAAAAAAACEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAQQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAQQAAAAAAAAABAAAAAAAAAEEAAAAAAAAAQQAAAAAAAABRAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAACEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAFEAAAAAAAAAUQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAQQAAAAAAAAABAAAAAAAAACEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAIQAAAAAAAABBAAAAAAAAAFEAAAAAAAADwPwAAAAAAAAhAAAAAAAAACEAAAAAAAAAQQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAQQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAFEAAAAAAAAAQQAAAAAAAAPA/AAAAAAAAGEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAQQAAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAABBAAAAAAAAACEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAEEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAhAAAAAAAAACEAAAAAAAADwPwAAAAAAAAhAAAAAAAAACEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAACEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAQQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAUQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAUQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAEEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAACEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAABAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAABAAAAAAAAAAEA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"cancelled\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"diverted\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"landed\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAACEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABBAAAAAAAAACEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAhAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAIQAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAhAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAAEAAAAAAAADwPwAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAhAAAAAAAAACEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAhAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAhAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABRAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAUQAAAAAAAAAAAAAAAAAAACEAAAAAAAAAIQAAAAAAAABRAAAAAAAAACEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAIQAAAAAAAABBAAAAAAAAAEEAAAAAAAAAIQAAAAAAAAABAAAAAAAAACEAAAAAAAADwPwAAAAAAABBAAAAAAAAAFEAAAAAAAAAQQAAAAAAAAABAAAAAAAAAFEAAAAAAAAAUQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAIQAAAAAAAABBAAAAAAAAACEAAAAAAAAAQQAAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAACEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAEEAAAAAAAAAAQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAQQAAAAAAAABhAAAAAAAAACEAAAAAAAAAQQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAUQAAAAAAAABBAAAAAAAAAEEAAAAAAAAAAQAAAAAAAABhAAAAAAAAACEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAEAAAAAAAADwPwAAAAAAABRAAAAAAAAACEAAAAAAAAAYQAAAAAAAAAhAAAAAAAAAHEAAAAAAAAAIQAAAAAAAABhAAAAAAAAAEEAAAAAAAAAQQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAQQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAUQAAAAAAAAAhAAAAAAAAAFEAAAAAAAAAIQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAIQAAAAAAAABxAAAAAAAAACEAAAAAAAAAUQAAAAAAAABRAAAAAAAAAAEAAAAAAAAAIQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAUQAAAAAAAABRAAAAAAAAAAEAAAAAAAAAYQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAGEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAYQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAYQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAIQAAAAAAAABxAAAAAAAAAFEAAAAAAAADwPwAAAAAAABBAAAAAAAAAEEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAEEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAACEAAAAAAAADwPwAAAAAAAPA/AAAAAAAACEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAUQAAAAAAAAPA/AAAAAAAACEAAAAAAAAAAQAAAAAAAABBAAAAAAAAACEAAAAAAAAAQQAAAAAAAABhAAAAAAAAACEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAAQAAAAAAAABBAAAAAAAAACEAAAAAAAAAcQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAAA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"scheduled\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAJEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAJEAAAAAAAAAiQAAAAAAAACBAAAAAAAAAHEAAAAAAAAAgQAAAAAAAACBAAAAAAAAAGEAAAAAAAAAiQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAiQAAAAAAAACRAAAAAAAAAIEAAAAAAAAAcQAAAAAAAACJAAAAAAAAAHEAAAAAAAAAcQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAoQAAAAAAAABhAAAAAAAAAKEAAAAAAAAAgQAAAAAAAACBAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAAAAmQAAAAAAAAChAAAAAAAAAJEAAAAAAAAAiQAAAAAAAACRAAAAAAAAAHEAAAAAAAAAkQAAAAAAAACJAAAAAAAAAJEAAAAAAAAAgQAAAAAAAACBAAAAAAAAAIEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIEAAAAAAAAAcQAAAAAAAACJAAAAAAAAAJkAAAAAAAAAYQAAAAAAAACRAAAAAAAAAJEAAAAAAAAAkQAAAAAAAACZAAAAAAAAAIEAAAAAAAAAcQAAAAAAAACZAAAAAAAAAJEAAAAAAAAAcQAAAAAAAABxAAAAAAAAAHEAAAAAAAAAiQAAAAAAAACJAAAAAAAAAKEAAAAAAAAAgQAAAAAAAABhAAAAAAAAAIEAAAAAAAAAgQAAAAAAAACBAAAAAAAAAIEAAAAAAAAAkQAAAAAAAACBAAAAAAAAAGEAAAAAAAAAcQAAAAAAAABxAAAAAAAAAIEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIEAAAAAAAAAYQAAAAAAAABxAAAAAAAAAHEAAAAAAAAAYQAAAAAAAABxAAAAAAAAAJEAAAAAAAAAYQAAAAAAAABBAAAAAAAAAIEAAAAAAAAAQQAAAAAAAABBAAAAAAAAAGEAAAAAAAAAoQAAAAAAAACRAAAAAAAAAJEAAAAAAAAAkQAAAAAAAACZAAAAAAAAAIEAAAAAAAAAqQAAAAAAAACRAAAAAAAAALEAAAAAAAAAoQAAAAAAAACJAAAAAAAAAJEAAAAAAAAAgQAAAAAAAACRAAAAAAAAAIkAAAAAAAAAmQAAAAAAAACpAAAAAAAAAMEAAAAAAAAAcQAAAAAAAABhAAAAAAAAAJEAAAAAAAAAoQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAsQAAAAAAAACJAAAAAAAAAFEAAAAAAAAAsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmQAAAAAAAACpAAAAAAAAAJEAAAAAAAAAgQAAAAAAAACZAAAAAAAAAIkAAAAAAAAAmQAAAAAAAACZAAAAAAAAAJkAAAAAAAAAkQAAAAAAAACRAAAAAAAAAJkAAAAAAAAAmQAAAAAAAACxAAAAAAAAAJkAAAAAAAAAkQAAAAAAAACJAAAAAAAAAJEAAAAAAAAAkQAAAAAAAACpAAAAAAAAAKEAAAAAAAAAmQAAAAAAAACJAAAAAAAAAJkAAAAAAAAAoQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACZAAAAAAAAAJEAAAAAAAAAmQAAAAAAAACJAAAAAAAAAJkAAAAAAAAAmQAAAAAAAAC5AAAAAAAAACEAAAAAAAAAkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAAAAAAAAAKkAAAAAAAAAoQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAmQAAAAAAAABxAAAAAAAAAIEAAAAAAAAAqQAAAAAAAACBAAAAAAAAAJkAAAAAAAAAgQAAAAAAAACJAAAAAAAAAHEAAAAAAAAAcQAAAAAAAACxAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACJAAAAAAAAAHEAAAAAAAAAiQAAAAAAAACpAAAAAAAAAM0AAAAAAAAAcQAAAAAAAAChAAAAAAAAAKEAAAAAAAAAkQAAAAAAAACJAAAAAAAAAIkAAAAAAAAAqQAAAAAAAACBAAAAAAAAAJEAAAAAAAAAiQAAAAAAAACZAAAAAAAAAIkAAAAAAAAAiQAAAAAAAACxAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACBAAAAAAAAAJEAAAAAAAAAgQAAAAAAAACZAAAAAAAAALEAAAAAAAAAkQAAAAAAAACJAAAAAAAAAJEAAAAAAAAAmQAAAAAAAABxAAAAAAAAAIEAAAAAAAAAsQAAAAAAAACBAAAAAAAAAIEAAAAAAAAAgQAAAAAAAACZAAAAAAAAAIkAAAAAAAAAkQAAAAAAAADFAAAAAAAAAKkAAAAAAAAAqQAAAAAAAACJAAAAAAAAAJkAAAAAAAAAYQAAAAAAAACZAAAAAAAAAMUAAAAAAAAAoQAAAAAAAAChAAAAAAAAAJkAAAAAAAAAmQAAAAAAAABhAAAAAAAAAKkAAAAAAAAAqQAAAAAAAAChAAAAAAAAAJEAAAAAAAAAoQAAAAAAAACRAAAAAAAAAIkAAAAAAAAAqQAAAAAAAAC5AAAAAAAAAIkAAAAAAAAAoQAAAAAAAACxAAAAAAAAAKkAAAAAAAAAgQAAAAAAAAChAAAAAAAAALkAAAAAAAAAmQAAAAAAAACxAAAAAAAAAJkAAAAAAAAAkQAAAAAAAABRAAAAAAAAAKEAAAAAAAAAsQAAAAAAAACJAAAAAAAAAJEAAAAAAAAAgQAAAAAAAACBAAAAAAAAAEEAAAAAAAAAkQAAAAAAAAChAAAAAAAAAIEAAAAAAAAAcQAAAAAAAACZAAAAAAAAAIEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAJkAAAAAAAAAYQAAAAAAAACJAAAAAAAAAIEAAAAAAAAAcQAAAAAAAABRAAAAAAAAAJEAAAAAAAAAkQAAAAAAAABhAAAAAAAAAHEAAAAAAAAAkQAAAAAAAACJAAAAAAAAAHEAAAAAAAAAkQAAAAAAAACRAAAAAAAAAJEAAAAAAAAAUQAAAAAAAACBAAAAAAAAAJEAAAAAAAAAgQAAAAAAAACRAAAAAAAAAMUA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}],[\"unknown\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAQQAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABBAAAAAAAAACEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAACEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAEEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAUQAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAFEAAAAAAAAAQQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAhAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAA8D8AAAAAAAAIQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAAEEAAAAAAAAAAQAAAAAAAABRAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAAAhAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAEEAAAAAAAAAUQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAAAAAACEAAAAAAAAAIQAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAhAAAAAAAAA8D8AAAAAAAAIQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAhAAAAAAAAA8D8AAAAAAAAIQAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAhAAAAAAAAACEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAABRAAAAAAAAACEAAAAAAAADwPwAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAA8D8AAAAAAADwPwAAAAAAABBAAAAAAAAACEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAA=\"},\"shape\":[289],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3210\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3211\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3206\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3191\",\"attributes\":{\"fields\":[]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3192\",\"attributes\":{\"fields\":[\"active\"]}}},\"fill_color\":\"#3288bd\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3207\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3191\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3192\"}},\"fill_color\":\"#3288bd\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3208\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3191\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3192\"}},\"fill_color\":\"#3288bd\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3220\",\"attributes\":{\"name\":\"scheduled\",\"data_source\":{\"id\":\"p3145\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3221\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3222\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3217\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3193\",\"attributes\":{\"fields\":[\"active\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3194\",\"attributes\":{\"fields\":[\"active\",\"scheduled\"]}}},\"fill_color\":\"#99d594\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3218\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3193\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3194\"}},\"fill_color\":\"#99d594\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3219\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3193\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3194\"}},\"fill_color\":\"#99d594\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3230\",\"attributes\":{\"name\":\"cancelled\",\"data_source\":{\"id\":\"p3145\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3231\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3232\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3227\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3195\",\"attributes\":{\"fields\":[\"active\",\"scheduled\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3196\",\"attributes\":{\"fields\":[\"active\",\"scheduled\",\"cancelled\"]}}},\"fill_color\":\"#e6f598\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3228\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3195\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3196\"}},\"fill_color\":\"#e6f598\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3229\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3195\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3196\"}},\"fill_color\":\"#e6f598\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3240\",\"attributes\":{\"name\":\"landed\",\"data_source\":{\"id\":\"p3145\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3241\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3242\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3237\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3197\",\"attributes\":{\"fields\":[\"active\",\"scheduled\",\"cancelled\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3198\",\"attributes\":{\"fields\":[\"active\",\"scheduled\",\"cancelled\",\"landed\"]}}},\"fill_color\":\"#fee08b\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3238\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3197\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3198\"}},\"fill_color\":\"#fee08b\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3239\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3197\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3198\"}},\"fill_color\":\"#fee08b\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3250\",\"attributes\":{\"name\":\"unknown\",\"data_source\":{\"id\":\"p3145\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3251\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3252\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3247\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3199\",\"attributes\":{\"fields\":[\"active\",\"scheduled\",\"cancelled\",\"landed\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3200\",\"attributes\":{\"fields\":[\"active\",\"scheduled\",\"cancelled\",\"landed\",\"unknown\"]}}},\"fill_color\":\"#fc8d59\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3248\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3199\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3200\"}},\"fill_color\":\"#fc8d59\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3249\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3199\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3200\"}},\"fill_color\":\"#fc8d59\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3260\",\"attributes\":{\"name\":\"diverted\",\"data_source\":{\"id\":\"p3145\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3261\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3262\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3257\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3201\",\"attributes\":{\"fields\":[\"active\",\"scheduled\",\"cancelled\",\"landed\",\"unknown\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3202\",\"attributes\":{\"fields\":[\"active\",\"scheduled\",\"cancelled\",\"landed\",\"unknown\",\"diverted\"]}}},\"fill_color\":\"#d53e4f\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3258\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3201\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3202\"}},\"fill_color\":\"#d53e4f\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3259\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3201\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3202\"}},\"fill_color\":\"#d53e4f\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3270\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3264\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3265\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3266\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAhXfMeEIAAMDqycx4QgAAgFAczXhCAABAtm7NeEIAAAAcwc14QgAAwIETznhCAACA52XOeEIAAEBNuM54QgAAALMKz3hCAADAGF3PeEIAAIB+r894QgAAQOQB0HhCAAAASlTQeEIAAMCvptB4QgAAgBX50HhCAABAe0vReEIAAADhndF4QgAAwEbw0XhCAACArELSeEIAAEASldJ4QgAAAHjn0nhCAADA3TnTeEIAAIBDjNN4QgAAQKne03hCAAAADzHUeEIAAMB0g9R4QgAAgNrV1HhCAABAQCjVeEIAAACmetV4QgAAwAvN1XhCAACAcR/WeEIAAEDXcdZ4QgAAAD3E1nhCAADAohbXeEIAAIAIadd4QgAAQG6713hCAAAA1A3YeEIAAMA5YNh4QgAAgJ+y2HhCAABABQXZeEIAAABrV9l4QgAAwNCp2XhCAACANvzZeEIAAECcTtp4QgAAAAKh2nhCAADAZ/PaeEIAAIDNRdt4QgAAQDOY23hCAAAAmerbeEIAAMD+PNx4QgAAgGSP3HhCAABAyuHceEIAAAAwNN14QgAAwJWG3XhCAACA+9jdeEIAAEBhK954QgAAAMd93nhCAADALNDeeEIAAICSIt94QgAAQPh033hCAAAAXsffeEIAAMDDGeB4QgAAgCls4HhCAABAj77geEIAAAD1EOF4QgAAwFpj4XhCAACAwLXheEIAAEAmCOJ4QgAAAIxa4nhCAADA8azieEIAAIBX/+J4QgAAQL1R43hCAAAAI6TjeEIAAMCI9uN4QgAAgO5I5HhCAABAVJvkeEIAAAC67eR4QgAAwB9A5XhCAACAhZLleEIAAEDr5OV4QgAAAFE35nhCAADAtonmeEIAAIAc3OZ4QgAAQIIu53hCAAAA6IDneEIAAMBN0+d4QgAAgLMl6HhCAABAGXjoeEIAAAB/yuh4QgAAwOQc6XhCAACASm/peEIAAECwwel4QgAAABYU6nhCAADAe2bqeEIAAIDhuOp4QgAAQEcL63hCAAAArV3reEIAAMASsOt4QgAAgHgC7HhCAABA3lTseEIAAABEp+x4QgAAwKn57HhCAACAD0zteEIAAEB1nu14QgAAANvw7XhCAADAQEPueEIAAICmle54QgAAQAzo7nhCAAAAcjrveEIAAMDXjO94QgAAgD3f73hCAABAozHweEIAAAAJhPB4QgAAwG7W8HhCAACA1CjxeEIAAEA6e/F4QgAAAKDN8XhCAADABSDyeEIAAIBrcvJ4QgAAQNHE8nhCAAAANxfzeEIAAMCcafN4QgAAgAK883hCAABAaA70eEIAAADOYPR4QgAAwDOz9HhCAACAmQX1eEIAAED/V/V4QgAAAGWq9XhCAADAyvz1eEIAAIAwT/Z4QgAAQJah9nhCAAAA/PP2eEIAAMBhRvd4QgAAgMeY93hCAABALev3eEIAAACTPfh4QgAAwPiP+HhCAACAXuL4eEIAAEDENPl4QgAAACqH+XhCAADAj9n5eEIAAID1K/p4QgAAQFt++nhCAAAAwdD6eEIAAMAmI/t4QgAAgIx1+3hCAABA8sf7eEIAAABYGvx4QgAAwL1s/HhCAACAI7/8eEIAAECJEf14QgAAAO9j/XhCAADAVLb9eEIAAIC6CP54QgAAQCBb/nhCAAAAhq3+eEIAAMDr//54QgAAgFFS/3hCAABAt6T/eEIAAAAd9/94QgAAwIJJAHlCAACA6JsAeUIAAEBO7gB5QgAAALRAAXlCAADAGZMBeUIAAIB/5QF5QgAAQOU3AnlCAAAAS4oCeUIAAMCw3AJ5QgAAgBYvA3lCAABAfIEDeUIAAADi0wN5QgAAwEcmBHlCAACArXgEeUIAAEATywR5QgAAAHkdBXlCAADA3m8FeUIAAIBEwgV5QgAAQKoUBnlCAAAAEGcGeUIAAMB1uQZ5QgAAgNsLB3lCAABAQV4HeUIAAACnsAd5QgAAwAwDCHlCAACAclUIeUIAAEDYpwh5QgAAAD76CHlCAADAo0wJeUIAAIAJnwl5QgAAQG/xCXlCAAAA1UMKeUIAAMA6lgp5QgAAgKDoCnlCAABABjsLeUIAAABsjQt5QgAAwNHfC3lCAACANzIMeUIAAECdhAx5QgAAAAPXDHlCAADAaCkNeUIAAIDOew15QgAAQDTODXlCAAAAmiAOeUIAAMD/cg55QgAAgGXFDnlCAABAyxcPeUIAAAAxag95QgAAwJa8D3lCAACA/A4QeUIAAEBiYRB5QgAAAMizEHlCAADALQYReUIAAICTWBF5QgAAQPmqEXlCAAAAX/0ReUIAAMDETxJ5QgAAgCqiEnlCAABAkPQSeUIAAAD2RhN5QgAAwFuZE3lCAACAwesTeUIAAEAnPhR5QgAAAI2QFHlCAADA8uIUeUIAAIBYNRV5QgAAQL6HFXlCAAAAJNoVeUIAAMCJLBZ5QgAAgO9+FnlCAABAVdEWeUIAAAC7Ixd5QgAAwCB2F3lCAACAhsgXeUIAAEDsGhh5QgAAAFJtGHlCAADAt78YeUIAAIAdEhl5QgAAQINkGXlCAAAA6bYZeUIAAMBOCRp5QgAAgLRbGnlCAABAGq4aeUIAAACAABt5QgAAwOVSG3lCAACAS6UbeUIAAECx9xt5QgAAABdKHHlCAADAfJwceUIAAIDi7hx5QgAAQEhBHXlCAAAArpMdeUIAAMAT5h15QgAAgHk4HnlCAABA34oeeUIAAABF3R55QgAAwKovH3lCAACAEIIfeUIAAEB21B95QgAAANwmIHlCAADAQXkgeUIAAICnyyB5QgAAQA0eIXlCAAAAc3AheUIAAMDYwiF5QgAAgD4VInlCAABApGcieUIAAAAKuiJ5QgAAwG8MI3lCAACA1V4jeUIAAEA7sSN5QgAAAKEDJHlCAADABlYkeUIAAIBsqCR5QgAAQNL6JHlCAAAAOE0leUI=\"},\"shape\":[277],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"IQAAABUAAAAtAAAAKAAAADQAAABDAAAANwAAAC8AAAAeAAAAIAAAACgAAAAoAAAAOQAAADsAAAAhAAAALwAAACgAAAAbAAAAJQAAADIAAAAmAAAAFgAAABoAAAAWAAAAEgAAACsAAAArAAAAEgAAADkAAAAeAAAAFQAAACQAAAAhAAAAJQAAACAAAAAvAAAAJgAAACQAAAAiAAAALAAAADQAAAAtAAAAIgAAABwAAAATAAAAGQAAACkAAAAtAAAAFAAAACsAAAAeAAAAJAAAAB4AAAArAAAAMwAAACkAAAA9AAAAJwAAABwAAAAeAAAAMQAAADAAAAAxAAAAQAAAACYAAAAeAAAAJwAAACgAAAAvAAAAIAAAACEAAAAeAAAAIgAAACgAAAAsAAAAOAAAACsAAAA3AAAAIgAAACMAAAAnAAAAJwAAAC4AAAAfAAAAJwAAACcAAAApAAAAMAAAACwAAAAsAAAAMQAAAC4AAAAlAAAALQAAAC4AAAAzAAAAHwAAAC4AAAAfAAAAGwAAABMAAAApAAAALQAAACEAAAAuAAAALQAAABwAAAAlAAAAKQAAACoAAAAfAAAAJwAAACIAAAAiAAAAIAAAACsAAAA2AAAALwAAACUAAAAiAAAAJAAAAB4AAAAqAAAAJQAAADYAAAAkAAAAJQAAACsAAAAhAAAAKgAAADYAAAAaAAAAFAAAACMAAAAgAAAAFAAAAC0AAAAoAAAAMQAAABUAAAAmAAAANQAAACcAAAAhAAAAKwAAACoAAAAxAAAAKAAAACUAAAARAAAAKQAAACgAAAApAAAAGwAAACMAAAAcAAAAHwAAACsAAAAsAAAAMAAAACoAAAApAAAAMwAAACoAAAAnAAAAGAAAACAAAAAXAAAAHQAAAB0AAAAbAAAAKQAAACEAAAAjAAAALgAAACwAAAAhAAAAKgAAACcAAAA0AAAAMgAAACcAAAAXAAAAKQAAAC4AAAAwAAAAKgAAABcAAAAlAAAANgAAAC4AAAAjAAAAJQAAACEAAAAyAAAANQAAACsAAAAxAAAAKQAAAC0AAAA0AAAAOQAAAB0AAAAuAAAAMAAAACkAAAA1AAAATQAAAEAAAAAsAAAAJAAAACIAAAAmAAAAKwAAAC8AAAAeAAAAIwAAAC0AAAAoAAAAMAAAAEkAAAA6AAAAKAAAACoAAAAiAAAALwAAACYAAAAmAAAAHgAAAC0AAAAeAAAALAAAABoAAAAhAAAALwAAAC0AAAArAAAAFgAAABsAAAAbAAAAHQAAACUAAAAjAAAAKAAAACoAAAAgAAAAIAAAACMAAAAuAAAAMAAAACkAAAAjAAAAKQAAACIAAAAdAAAAIwAAADMAAAAwAAAAJgAAACkAAAAWAAAALAAAACgAAAArAAAAHgAAAC4AAAAiAAAAJgAAAB0AAAAXAAAAKgAAADUAAAA2AAAAMwAAABkAAAAoAAAAHwAAAA==\"},\"shape\":[277],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3271\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3272\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3267\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3268\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3269\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p3277\",\"attributes\":{\"location\":1717891200000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p3279\",\"attributes\":{\"location\":1724544000000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p3281\",\"attributes\":{\"location\":1727049600000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3157\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p3182\"},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p3183\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p3184\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p3189\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3190\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3177\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3178\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p3179\"},\"axis_label\":\"Nr Flights\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3180\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"DatetimeAxis\",\"id\":\"p3160\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"FixedTicker\",\"id\":\"p3275\",\"attributes\":{\"ticks\":[1704585600000.0,1705795200000.0,1707004800000.0,1708214400000.0,1709424000000.0,1710633600000.0,1711843200000.0,1713052800000.0,1714262400000.0,1715472000000.0,1716681600000.0,1717891200000.0,1719100800000.0,1720310400000.0,1721520000000.0,1722729600000.0,1723939200000.0,1725148800000.0,1726358400000.0,1727568000000.0,1728777600000.0],\"minor_ticks\":[]}},\"formatter\":{\"type\":\"object\",\"name\":\"DatetimeTickFormatter\",\"id\":\"p3274\",\"attributes\":{\"days\":\"%d %b %Y\",\"months\":\"%b %Y\"}},\"axis_label\":\"Flight Date\",\"major_label_orientation\":1.2,\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3175\"}}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p3276\",\"attributes\":{\"text\":\"Source: Flight data from AviationStack and conflict events from ACLED\",\"text_color\":\"gray\",\"text_font_size\":\"10pt\",\"x\":0,\"y\":0,\"x_units\":\"screen\",\"y_units\":\"screen\"}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3176\",\"attributes\":{\"axis\":{\"id\":\"p3160\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3181\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p3177\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p3212\",\"attributes\":{\"location\":\"top_left\",\"orientation\":\"horizontal\",\"click_policy\":\"mute\",\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3213\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"active\"},\"renderers\":[{\"id\":\"p3209\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3223\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"scheduled\"},\"renderers\":[{\"id\":\"p3220\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3233\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"cancelled\"},\"renderers\":[{\"id\":\"p3230\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3243\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"landed\"},\"renderers\":[{\"id\":\"p3240\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3253\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"unknown\"},\"renderers\":[{\"id\":\"p3250\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3263\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"diverted\"},\"renderers\":[{\"id\":\"p3260\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3273\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Number of Conflict Events w/o Protests\"},\"renderers\":[{\"id\":\"p3270\"}]}}]}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p3278\",\"attributes\":{\"text\":\"Airline data\\nnot available\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1717891200000.0,\"y\":101.6,\"x_offset\":-5}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p3280\",\"attributes\":{\"text\":\"Israeli strikes in\\nSouthern Lebanon\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1724544000000.0,\"y\":91.44,\"x_offset\":-5}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p3282\",\"attributes\":{\"text\":\"Start of the Israel-Hezboullah\\nConflict\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1727049600000.0,\"y\":81.28,\"x_offset\":-5}}]}}]}};\n const render_items = [{\"docid\":\"e4c41684-aeed-4ef8-990b-6927003875e9\",\"roots\":{\"p3148\":\"afb72e1d-6033-4a6d-88e7-7500edf37e44\"},\"root_ids\":[\"p3148\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "p3148" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "output_notebook() # Display plots inline in a Jupyter notebook\n", + "\n", + "df = df = (\n", + " arrivals_exploded.groupby([\"flight_date\", \"flight_status\"])\n", + " .count()[[\"iata_arr\"]]\n", + " .reset_index()\n", + ")\n", + "df[\"flight_date\"] = df[\"flight_date\"].apply(lambda x: pd.to_datetime(x))\n", + "\n", + "show(\n", + " get_area_plot(\n", + " df,\n", + " \"Daily Arrivals to DAM, ALP and LTK\",\n", + " \"Source: Flight data from AviationStack and conflict events from ACLED\",\n", + " acled_events_daily,\n", + " events_dict=events,\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Findings\n", + "\n", + "- Cross verifying AviationStack with FlightRadar data for 14th October shows one missing flight to Moscow and an additional flight to KWI in the early hours. Data Lab team to conduct further validation exercises to understand this discrepancy. " + ] + }, + { + "cell_type": "code", + "execution_count": 154, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"fbbfb89f-c3b8-4f7f-b0f8-c9800ef9c952\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.4.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"fbbfb89f-c3b8-4f7f-b0f8-c9800ef9c952\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"c14152c2-9c80-4151-bd78-fb040b3857aa\":{\"version\":\"3.4.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p3296\",\"attributes\":{\"width\":800,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3297\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3298\",\"attributes\":{\"start\":0,\"end\":408}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3306\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3307\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p3299\",\"attributes\":{\"text\":\"Weekly Arrivals to DAM, ALP, LTK\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3357\",\"attributes\":{\"name\":\"active\",\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3293\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3294\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3295\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAA\"},\"shape\":[42],\"dtype\":\"int32\",\"order\":\"little\"}],[\"flight_date\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AADAgRPOeEIAAABKVNB4QgAAQBKV0nhCAACA2tXUeEIAAMCiFtd4QgAAAGtX2XhCAABAM5jbeEIAAID72N14QgAAwMMZ4HhCAAAAjFrieEIAAEBUm+R4QgAAgBzc5nhCAADA5BzpeEIAAACtXet4QgAAQHWe7XhCAACAPd/veEIAAMAFIPJ4QgAAAM5g9HhCAABAlqH2eEIAAIBe4vh4QgAAwCYj+3hCAAAA72P9eEIAAEC3pP94QgAAgH/lAXlCAADARyYEeUIAAAAQZwZ5QgAAQNinCHlCAACAoOgKeUIAAMBoKQ15QgAAADFqD3lCAABA+aoReUIAAIDB6xN5QgAAwIksFnlCAAAAUm0YeUIAAEAarhp5QgAAgOLuHHlCAADAqi8feUIAAABzcCF5QgAAQDuxI3lCAACAA/IleUIAAMDLMih5QgAAAJRzKnlC\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"active\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAKkAAAAAAAAAsQAAAAAAAACBAAAAAAAAAIEAAAAAAAADwPwAAAAAAACJAAAAAAAAAHEAAAAAAAAAmQAAAAAAAACZAAAAAAAAAIEAAAAAAAAAsQAAAAAAAACpAAAAAAAAAJEAAAAAAAAA0QAAAAAAAAChAAAAAAAAAOUAAAAAAAAAmQAAAAAAAACxAAAAAAAAALkAAAAAAAAAxQAAAAAAAADFAAAAAAAAAOEAAAAAAAAAUQAAAAAAAACZAAAAAAAAAOEAAAAAAAAA8QAAAAAAAACpAAAAAAAAAM0AAAAAAAAA3QAAAAAAAADRAAAAAAAAAN0AAAAAAAAAxQAAAAAAAADJAAAAAAAAAMEAAAAAAAAAsQAAAAAAAACRAAAAAAAAANUAAAAAAAAAsQAAAAAAAACZAAAAAAAAAHEAAAAAAAAAcQAAAAAAAABBA\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"cancelled\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAhAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAiQAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"diverted\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAAAAAACEAAAAAAAAAQQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAYQAAAAAAAACZAAAAAAAAAFEAAAAAAAAAUQAAAAAAAAPA/\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"landed\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAIEAAAAAAAAAYQAAAAAAAAChAAAAAAAAAJkAAAAAAAADwPwAAAAAAABRAAAAAAAAAJEAAAAAAAAAIQAAAAAAAABxAAAAAAAAAJkAAAAAAAAAkQAAAAAAAACBAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACZAAAAAAAAAJkAAAAAAAAAwQAAAAAAAACJAAAAAAAAANEAAAAAAAAA0QAAAAAAAADVAAAAAAAAAN0AAAAAAAAAgQAAAAAAAADZAAAAAAAAAPkAAAAAAAAA6QAAAAAAAADdAAAAAAAAAPkAAAAAAAAA4QAAAAAAAAD1AAAAAAAAAOkAAAAAAAAA1QAAAAAAAADlAAAAAAAAAMUAAAAAAAAAxQAAAAAAAAC5AAAAAAAAAOEAAAAAAAAAwQAAAAAAAADVAAAAAAAAAOkAAAAAAAAA2QAAAAAAAAAhA\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"scheduled\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAACATUAAAAAAAIBMQAAAAAAAAEtAAAAAAAAAS0AAAAAAAIBHQAAAAAAAAE9AAAAAAAAATUAAAAAAAABPQAAAAAAAAE5AAAAAAAAATUAAAAAAAIBKQAAAAAAAgEhAAAAAAAAARUAAAAAAAIBSQAAAAAAAQFJAAAAAAAAAUkAAAAAAAMBTQAAAAAAAgEpAAAAAAABAUkAAAAAAAMBSQAAAAAAAwFNAAAAAAABAU0AAAAAAAIBDQAAAAAAAgFJAAAAAAAAAUEAAAAAAAEBQQAAAAAAAgFRAAAAAAABAUUAAAAAAAABRQAAAAAAAAFJAAAAAAACAUEAAAAAAAMBTQAAAAAAAAFRAAAAAAADAU0AAAAAAAABVQAAAAAAAgFNAAAAAAABAUEAAAAAAAIBPQAAAAAAAAEtAAAAAAACATUAAAAAAAIBOQAAAAAAAADtA\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}],[\"unknown\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAAIEAAAAAAAAAQQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAIQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAQQAAAAAAAAPA/AAAAAAAACEAAAAAAAAAAQAAAAAAAABRAAAAAAAAAHEAAAAAAAADwPwAAAAAAADBAAAAAAAAAJEAAAAAAAAAgQAAAAAAAABBAAAAAAAAAJEAAAAAAAAAkQAAAAAAAACJAAAAAAAAAHEAAAAAAAAAIQAAAAAAAADFAAAAAAAAAKkAAAAAAAAAcQAAAAAAAABBAAAAAAAAAJEAAAAAAAAAoQAAAAAAAACBAAAAAAAAALkAAAAAAAAAyQAAAAAAAACJAAAAAAAAAKkAAAAAAAAAiQAAAAAAAACZAAAAAAAAAJEAAAAAAAAAkQAAAAAAAAChAAAAAAAAAMUAAAAAAAAAwQAAAAAAAAABA\"},\"shape\":[42],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3358\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3359\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3354\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3339\",\"attributes\":{\"fields\":[]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3340\",\"attributes\":{\"fields\":[\"active\"]}}},\"fill_color\":\"#3288bd\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3355\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3339\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3340\"}},\"fill_color\":\"#3288bd\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3356\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3339\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3340\"}},\"fill_color\":\"#3288bd\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#3288bd\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3368\",\"attributes\":{\"name\":\"cancelled\",\"data_source\":{\"id\":\"p3293\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3369\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3370\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3365\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3341\",\"attributes\":{\"fields\":[\"active\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3342\",\"attributes\":{\"fields\":[\"active\",\"cancelled\"]}}},\"fill_color\":\"#99d594\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3366\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3341\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3342\"}},\"fill_color\":\"#99d594\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3367\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3341\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3342\"}},\"fill_color\":\"#99d594\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#99d594\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3378\",\"attributes\":{\"name\":\"landed\",\"data_source\":{\"id\":\"p3293\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3379\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3380\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3375\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3343\",\"attributes\":{\"fields\":[\"active\",\"cancelled\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3344\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\"]}}},\"fill_color\":\"#e6f598\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3376\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3343\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3344\"}},\"fill_color\":\"#e6f598\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3377\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3343\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3344\"}},\"fill_color\":\"#e6f598\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#e6f598\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3388\",\"attributes\":{\"name\":\"scheduled\",\"data_source\":{\"id\":\"p3293\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3389\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3390\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3385\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3345\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3346\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\",\"scheduled\"]}}},\"fill_color\":\"#fee08b\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3386\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3345\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3346\"}},\"fill_color\":\"#fee08b\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3387\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3345\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3346\"}},\"fill_color\":\"#fee08b\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fee08b\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3398\",\"attributes\":{\"name\":\"unknown\",\"data_source\":{\"id\":\"p3293\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3399\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3400\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3395\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3347\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\",\"scheduled\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3348\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\",\"scheduled\",\"unknown\"]}}},\"fill_color\":\"#fc8d59\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3396\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3347\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3348\"}},\"fill_color\":\"#fc8d59\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3397\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3347\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3348\"}},\"fill_color\":\"#fc8d59\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#fc8d59\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3408\",\"attributes\":{\"name\":\"diverted\",\"data_source\":{\"id\":\"p3293\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3409\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3410\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3405\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3349\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\",\"scheduled\",\"unknown\"]}}},\"y2\":{\"type\":\"expr\",\"expr\":{\"type\":\"object\",\"name\":\"Stack\",\"id\":\"p3350\",\"attributes\":{\"fields\":[\"active\",\"cancelled\",\"landed\",\"scheduled\",\"unknown\",\"diverted\"]}}},\"fill_color\":\"#d53e4f\",\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3406\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3349\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3350\"}},\"fill_color\":\"#d53e4f\",\"fill_alpha\":0.1,\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VArea\",\"id\":\"p3407\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"flight_date\"},\"y1\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3349\"}},\"y2\":{\"type\":\"expr\",\"expr\":{\"id\":\"p3350\"}},\"fill_color\":\"#d53e4f\",\"fill_alpha\":0.2,\"hatch_color\":{\"type\":\"value\",\"value\":\"#d53e4f\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3418\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3412\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3413\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3414\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AADAgRPOeEIAAABKVNB4QgAAQBKV0nhCAACA2tXUeEIAAMCiFtd4QgAAAGtX2XhCAABAM5jbeEIAAID72N14QgAAwMMZ4HhCAAAAjFrieEIAAEBUm+R4QgAAgBzc5nhCAADA5BzpeEIAAACtXet4QgAAQHWe7XhCAACAPd/veEIAAMAFIPJ4QgAAAM5g9HhCAABAlqH2eEIAAIBe4vh4QgAAwCYj+3hCAAAA72P9eEIAAEC3pP94QgAAgH/lAXlCAADARyYEeUIAAAAQZwZ5QgAAQNinCHlCAACAoOgKeUIAAMBoKQ15QgAAADFqD3lCAABA+aoReUIAAIDB6xN5QgAAwIksFnlCAAAAUm0YeUIAAEAarhp5QgAAgOLuHHlCAADAqi8feUIAAABzcCF5QgAAQDuxI3lCAACAA/IleUI=\"},\"shape\":[40],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AgEAAC0BAAAlAQAA1AAAAOgAAAAbAQAA7QAAAP0AAAAoAQAAMwEAAA0BAAAjAQAAHgEAADEBAADyAAAADgEAABsBAAAOAQAADwEAAPEAAAANAQAACQEAAAABAAAPAQAA2QAAADIBAAAGAQAAJAEAAFQBAABmAQAAEAEAAFMBAAASAQAADAEAANkAAAAUAQAAEQEAAAIBAAAJAQAAyQAAAA==\"},\"shape\":[40],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3419\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3420\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3415\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3416\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3417\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p3425\",\"attributes\":{\"location\":1717891200000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p3427\",\"attributes\":{\"location\":1724544000000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p3429\",\"attributes\":{\"location\":1727049600000.0,\"dimension\":\"height\",\"line_color\":\"#C6C6C6\",\"line_width\":2,\"line_dash\":[4,4]}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3305\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p3330\"},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p3331\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p3332\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p3337\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3338\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3325\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3326\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p3327\"},\"axis_label\":\"Nr Flights\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3328\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"DatetimeAxis\",\"id\":\"p3308\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"FixedTicker\",\"id\":\"p3423\",\"attributes\":{\"ticks\":[1704585600000.0,1705795200000.0,1707004800000.0,1708214400000.0,1709424000000.0,1710633600000.0,1711843200000.0,1713052800000.0,1714262400000.0,1715472000000.0,1716681600000.0,1717891200000.0,1719100800000.0,1720310400000.0,1721520000000.0,1722729600000.0,1723939200000.0,1725148800000.0,1726358400000.0,1727568000000.0,1728777600000.0],\"minor_ticks\":[]}},\"formatter\":{\"type\":\"object\",\"name\":\"DatetimeTickFormatter\",\"id\":\"p3422\",\"attributes\":{\"days\":\"%d %b %Y\",\"months\":\"%b %Y\"}},\"axis_label\":\"Flight Date\",\"major_label_orientation\":1.2,\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3323\"}}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p3424\",\"attributes\":{\"text\":\"Source: Flight data from AviationStack and conflict events from ACLED\",\"text_color\":\"gray\",\"text_font_size\":\"10pt\",\"x\":0,\"y\":0,\"x_units\":\"screen\",\"y_units\":\"screen\"}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3324\",\"attributes\":{\"axis\":{\"id\":\"p3308\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3329\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p3325\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p3360\",\"attributes\":{\"location\":\"top_left\",\"orientation\":\"horizontal\",\"click_policy\":\"mute\",\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3361\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"active\"},\"renderers\":[{\"id\":\"p3357\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3371\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"cancelled\"},\"renderers\":[{\"id\":\"p3368\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3381\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"landed\"},\"renderers\":[{\"id\":\"p3378\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3391\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"scheduled\"},\"renderers\":[{\"id\":\"p3388\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3401\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"unknown\"},\"renderers\":[{\"id\":\"p3398\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3411\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"diverted\"},\"renderers\":[{\"id\":\"p3408\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3421\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Number of Conflict Events w/o Protests\"},\"renderers\":[{\"id\":\"p3418\"}]}}]}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p3426\",\"attributes\":{\"text\":\"Airline data\\nnot available\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1717891200000.0,\"y\":326.4,\"x_offset\":-5}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p3428\",\"attributes\":{\"text\":\"Israeli strikes in\\nSouthern Lebanon\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1724544000000.0,\"y\":293.76,\"x_offset\":-5}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p3430\",\"attributes\":{\"text\":\"Start of the Israel-Hezboullah\\nConflict\",\"text_color\":\"black\",\"text_font_size\":\"10pt\",\"text_align\":\"right\",\"background_fill_color\":\"grey\",\"background_fill_alpha\":0.2,\"x\":1727049600000.0,\"y\":261.12,\"x_offset\":-5}}]}}]}};\n const render_items = [{\"docid\":\"c14152c2-9c80-4151-bd78-fb040b3857aa\",\"roots\":{\"p3296\":\"de8169b5-d229-4561-93f5-8befdadb3fea\"},\"root_ids\":[\"p3296\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "p3296" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "output_notebook() # Display plots inline in a Jupyter notebook\n", + "\n", + "arrivals_exploded[\"flight_date\"] = arrivals_exploded[\"flight_date\"].apply(\n", + " lambda x: pd.to_datetime(x)\n", + ")\n", + "df = (\n", + " arrivals_exploded.groupby(\n", + " [pd.Grouper(key=\"flight_date\", freq=\"W\"), \"flight_status\"]\n", + " )\n", + " .count()[[\"iata_arr\"]]\n", + " .reset_index()\n", + ")\n", + "\n", + "show(\n", + " get_area_plot(\n", + " df,\n", + " \"Weekly Arrivals to DAM, ALP, LTK\",\n", + " \"Source: Flight data from AviationStack and conflict events from ACLED\",\n", + " acled_events_weekly,\n", + " reindex_freq=\"W\",\n", + " events_dict=events,\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Findings\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "arrivals_exploded[\"airportcity\"] = arrivals_exploded[\"iata_dep\"].map(iata_mapping)\n", + "most_changed_arrivals = (\n", + " pd.DataFrame(\n", + " arrivals_exploded[\n", + " arrivals_exploded[\"flight_status\"].isin(\n", + " [\"scheduled\", \"cancelled\", \"diverted\"]\n", + " )\n", + " ][\"airportcity\"]\n", + " .value_counts()\n", + " .head(10)\n", + " )\n", + " .reset_index()\n", + " .sort_values(by=\"count\", ascending=True)\n", + ")\n", + "most_cancelled_arrivals = (\n", + " pd.DataFrame(\n", + " arrivals_exploded[arrivals_exploded[\"flight_status\"].isin([\"cancelled\"])][\n", + " \"airportcity\"\n", + " ]\n", + " .value_counts()\n", + " .head(10)\n", + " )\n", + " .reset_index()\n", + " .sort_values(by=\"count\", ascending=True)\n", + ")\n", + "most_scheduled_arrivals = (\n", + " pd.DataFrame(\n", + " arrivals_exploded[arrivals_exploded[\"flight_status\"].isin([\"scheduled\"])][\n", + " \"airportcity\"\n", + " ]\n", + " .value_counts()\n", + " .head(10)\n", + " )\n", + " .reset_index()\n", + " .sort_values(by=\"count\", ascending=True)\n", + ")\n", + "most_diverted_arrivals = (\n", + " pd.DataFrame(\n", + " arrivals_exploded[arrivals_exploded[\"flight_status\"].isin([\"diverted\"])][\n", + " \"airportcity\"\n", + " ]\n", + " .value_counts()\n", + " .head(10)\n", + " )\n", + " .reset_index()\n", + " .sort_values(by=\"count\", ascending=True)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 156, + "metadata": { + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"dd1ea9af-1f22-4ef7-8932-6e4b4535c40b\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.4.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.4.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"dd1ea9af-1f22-4ef7-8932-6e4b4535c40b\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"355d3c5a-40d3-4622-a62e-81b418eba6a5\":{\"version\":\"3.4.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p3635\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Div\",\"id\":\"p3634\",\"attributes\":{\"width\":800,\"text\":\"

Top 10 Destinations with Changes in Arrivals to BEY in 2024

\"}},{\"type\":\"object\",\"name\":\"Tabs\",\"id\":\"p3633\",\"attributes\":{\"tabs\":[{\"type\":\"object\",\"name\":\"TabPanel\",\"id\":\"p3488\",\"attributes\":{\"title\":\"Most Changed Arrivals\",\"child\":{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p3487\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p3444\",\"attributes\":{\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3446\"},\"y_range\":{\"type\":\"object\",\"name\":\"FactorRange\",\"id\":\"p3454\",\"attributes\":{\"factors\":[\"Beirut\",\"Tehran\",\"Abu Dhabi\",\"Dubai\",\"Doha\",\"Erbil\",\"Najaf\",\"Baghdad\",\"Sharjah\",\"Kuwait City\"]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3455\"},\"y_scale\":{\"type\":\"object\",\"name\":\"CategoricalScale\",\"id\":\"p3456\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p3447\",\"attributes\":{\"text\":\"Most Changed Arrivals in 2024\"}},\"outline_line_color\":null,\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3474\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3441\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3442\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3443\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"CQAAAAgAAAAHAAAABgAAAAUAAAAEAAAAAwAAAAIAAAABAAAAAAAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"airportcity\",{\"type\":\"ndarray\",\"array\":[\"Beirut\",\"Tehran\",\"Abu Dhabi\",\"Dubai\",\"Doha\",\"Erbil\",\"Najaf\",\"Baghdad\",\"Sharjah\",\"Kuwait City\"],\"shape\":[10],\"dtype\":\"object\",\"order\":\"little\"}],[\"count\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"PQAAAFsAAABdAAAAawAAAH8AAADoAAAA9QAAACMBAADUAQAADQMAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3475\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3476\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3471\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.7},\"fill_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.7},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.7}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3472\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3473\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightblue\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3483\",\"attributes\":{\"data_source\":{\"id\":\"p3441\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3484\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3485\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3480\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3481\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.1},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3482\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.2},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3453\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3467\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"CategoricalAxis\",\"id\":\"p3462\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"CategoricalTicker\",\"id\":\"p3463\"},\"formatter\":{\"type\":\"object\",\"name\":\"CategoricalTickFormatter\",\"id\":\"p3464\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3465\"},\"axis_line_color\":null,\"major_tick_line_color\":null,\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3457\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3458\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p3459\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3460\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3461\",\"attributes\":{\"visible\":false,\"axis\":{\"id\":\"p3457\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3466\",\"attributes\":{\"visible\":false,\"dimension\":1,\"axis\":{\"id\":\"p3462\"}}}]}},{\"type\":\"object\",\"name\":\"Div\",\"id\":\"p3486\",\"attributes\":{\"width\":600,\"text\":\"

Source: AviationStack. Acessed October 7th 2024.

\"}}]}}}},{\"type\":\"object\",\"name\":\"TabPanel\",\"id\":\"p3536\",\"attributes\":{\"title\":\"Most Cancelled Arrivals\",\"child\":{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p3535\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p3492\",\"attributes\":{\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3494\"},\"y_range\":{\"type\":\"object\",\"name\":\"FactorRange\",\"id\":\"p3502\",\"attributes\":{\"factors\":[\"Abu Dhabi\",\"Dubai\",\"Kuwait City\",\"Cairo\",\"Erbil\",\"Doha\"]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3503\"},\"y_scale\":{\"type\":\"object\",\"name\":\"CategoricalScale\",\"id\":\"p3504\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p3495\",\"attributes\":{\"text\":\"Most Cancelled Arrivals in 2024\"}},\"outline_line_color\":null,\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3522\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3489\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3490\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3491\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BQAAAAQAAAADAAAAAgAAAAEAAAAAAAAA\"},\"shape\":[6],\"dtype\":\"int32\",\"order\":\"little\"}],[\"airportcity\",{\"type\":\"ndarray\",\"array\":[\"Abu Dhabi\",\"Dubai\",\"Kuwait City\",\"Cairo\",\"Erbil\",\"Doha\"],\"shape\":[6],\"dtype\":\"object\",\"order\":\"little\"}],[\"count\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AQAAAAIAAAAFAAAABgAAAAgAAAAJAAAA\"},\"shape\":[6],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3523\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3524\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3519\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"orange\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.7},\"fill_color\":{\"type\":\"value\",\"value\":\"orange\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.7},\"hatch_color\":{\"type\":\"value\",\"value\":\"orange\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.7}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3520\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"orange\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"orange\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"orange\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3521\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"orange\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"orange\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"orange\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3531\",\"attributes\":{\"data_source\":{\"id\":\"p3489\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3532\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3533\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3528\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3529\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.1},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3530\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.2},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3501\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3515\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"CategoricalAxis\",\"id\":\"p3510\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"CategoricalTicker\",\"id\":\"p3511\"},\"formatter\":{\"type\":\"object\",\"name\":\"CategoricalTickFormatter\",\"id\":\"p3512\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3513\"},\"axis_line_color\":null,\"major_tick_line_color\":null,\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3505\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3506\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p3507\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3508\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3509\",\"attributes\":{\"visible\":false,\"axis\":{\"id\":\"p3505\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3514\",\"attributes\":{\"visible\":false,\"dimension\":1,\"axis\":{\"id\":\"p3510\"}}}]}},{\"type\":\"object\",\"name\":\"Div\",\"id\":\"p3534\",\"attributes\":{\"width\":600,\"text\":\"

Source: AviationStack. Acessed October 7th 2024.

\"}}]}}}},{\"type\":\"object\",\"name\":\"TabPanel\",\"id\":\"p3584\",\"attributes\":{\"title\":\"Most Scheduled Arrivals\",\"child\":{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p3583\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p3540\",\"attributes\":{\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3542\"},\"y_range\":{\"type\":\"object\",\"name\":\"FactorRange\",\"id\":\"p3550\",\"attributes\":{\"factors\":[\"Beirut\",\"Tehran\",\"Abu Dhabi\",\"Dubai\",\"Doha\",\"Erbil\",\"Najaf\",\"Baghdad\",\"Sharjah\",\"Kuwait City\"]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3551\"},\"y_scale\":{\"type\":\"object\",\"name\":\"CategoricalScale\",\"id\":\"p3552\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p3543\",\"attributes\":{\"text\":\"Most Scheduled Arrivals in 2024\"}},\"outline_line_color\":null,\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3570\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3537\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3538\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3539\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"CQAAAAgAAAAHAAAABgAAAAUAAAAEAAAAAwAAAAIAAAABAAAAAAAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"airportcity\",{\"type\":\"ndarray\",\"array\":[\"Beirut\",\"Tehran\",\"Abu Dhabi\",\"Dubai\",\"Doha\",\"Erbil\",\"Najaf\",\"Baghdad\",\"Sharjah\",\"Kuwait City\"],\"shape\":[10],\"dtype\":\"object\",\"order\":\"little\"}],[\"count\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"PAAAAFYAAABYAAAAaAAAAHYAAADfAAAA6wAAABcBAADKAQAABAMAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3571\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3572\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3567\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.7},\"fill_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.7},\"hatch_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.7}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3568\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3569\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#023436\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3579\",\"attributes\":{\"data_source\":{\"id\":\"p3537\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3580\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3581\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3576\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3577\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.1},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3578\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.2},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3549\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3563\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"CategoricalAxis\",\"id\":\"p3558\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"CategoricalTicker\",\"id\":\"p3559\"},\"formatter\":{\"type\":\"object\",\"name\":\"CategoricalTickFormatter\",\"id\":\"p3560\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3561\"},\"axis_line_color\":null,\"major_tick_line_color\":null,\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3553\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3554\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p3555\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3556\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3557\",\"attributes\":{\"visible\":false,\"axis\":{\"id\":\"p3553\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3562\",\"attributes\":{\"visible\":false,\"dimension\":1,\"axis\":{\"id\":\"p3558\"}}}]}},{\"type\":\"object\",\"name\":\"Div\",\"id\":\"p3582\",\"attributes\":{\"width\":600,\"text\":\"

Source: AviationStack. Acessed October 7th 2024.

\"}}]}}}},{\"type\":\"object\",\"name\":\"TabPanel\",\"id\":\"p3632\",\"attributes\":{\"title\":\"Most Diverted Arrivals\",\"child\":{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p3631\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p3588\",\"attributes\":{\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3590\"},\"y_range\":{\"type\":\"object\",\"name\":\"FactorRange\",\"id\":\"p3598\",\"attributes\":{\"factors\":[\"Dubai\",\"Beirut\",\"Cairo\",\"Muscat\",\"Kuwait City\",\"Abu Dhabi\",\"Tehran\",\"Najaf\",\"Sharjah\",\"Baghdad\"]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3599\"},\"y_scale\":{\"type\":\"object\",\"name\":\"CategoricalScale\",\"id\":\"p3600\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p3591\",\"attributes\":{\"text\":\"Most Diverted Arrivals in 2024\"}},\"outline_line_color\":null,\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3618\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3585\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3586\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3587\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BwAAAAgAAAAJAAAABgAAAAQAAAAFAAAAAwAAAAEAAAACAAAAAAAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"airportcity\",{\"type\":\"ndarray\",\"array\":[\"Dubai\",\"Beirut\",\"Cairo\",\"Muscat\",\"Kuwait City\",\"Abu Dhabi\",\"Tehran\",\"Najaf\",\"Sharjah\",\"Baghdad\"],\"shape\":[10],\"dtype\":\"object\",\"order\":\"little\"}],[\"count\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AQAAAAEAAAABAAAAAgAAAAQAAAAEAAAABQAAAAoAAAAKAAAADAAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3619\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3620\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3615\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.7},\"fill_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.7},\"hatch_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.7}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3616\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"HBar\",\"id\":\"p3617\",\"attributes\":{\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"height\":{\"type\":\"value\",\"value\":0.5},\"right\":{\"type\":\"field\",\"field\":\"count\"},\"line_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#00BFB3\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3627\",\"attributes\":{\"data_source\":{\"id\":\"p3585\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3628\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3629\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3624\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3625\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.1},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Text\",\"id\":\"p3626\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"count\"},\"y\":{\"type\":\"field\",\"field\":\"airportcity\"},\"text\":{\"type\":\"field\",\"field\":\"count\"},\"x_offset\":{\"type\":\"value\",\"value\":-5},\"y_offset\":{\"type\":\"value\",\"value\":-3},\"text_color\":{\"type\":\"value\",\"value\":\"black\"},\"text_alpha\":{\"type\":\"value\",\"value\":0.2},\"text_font_size\":{\"type\":\"value\",\"value\":\"10pt\"},\"text_align\":{\"type\":\"value\",\"value\":\"right\"},\"text_baseline\":{\"type\":\"value\",\"value\":\"middle\"}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3597\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3611\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"CategoricalAxis\",\"id\":\"p3606\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"CategoricalTicker\",\"id\":\"p3607\"},\"formatter\":{\"type\":\"object\",\"name\":\"CategoricalTickFormatter\",\"id\":\"p3608\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3609\"},\"axis_line_color\":null,\"major_tick_line_color\":null,\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3601\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3602\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p3603\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3604\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3605\",\"attributes\":{\"visible\":false,\"axis\":{\"id\":\"p3601\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3610\",\"attributes\":{\"visible\":false,\"dimension\":1,\"axis\":{\"id\":\"p3606\"}}}]}},{\"type\":\"object\",\"name\":\"Div\",\"id\":\"p3630\",\"attributes\":{\"width\":600,\"text\":\"

Source: AviationStack. Acessed October 7th 2024.

\"}}]}}}}]}}]}}]}};\n const render_items = [{\"docid\":\"355d3c5a-40d3-4622-a62e-81b418eba6a5\",\"roots\":{\"p3635\":\"bd585686-6b40-4874-9535-fd8640ce8994\"},\"root_ids\":[\"p3635\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "p3635" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "output_notebook()\n", + "from bokeh.layouts import column\n", + "from bokeh.models import Div\n", + "\n", + "# Example datasets stored in a dictionary\n", + "datasets = {\n", + " \"Most Changed Arrivals\": most_changed_arrivals,\n", + " \"Most Cancelled Arrivals\": most_cancelled_arrivals,\n", + " \"Most Scheduled Arrivals\": most_scheduled_arrivals,\n", + " \"Most Diverted Arrivals\": most_diverted_arrivals\n", + "}\n", + "\n", + "# Initialize an empty list to store the tabs\n", + "# List of colors to use for each dataset\n", + "colors = [\"lightblue\", \"orange\", \"#023436\", \"#00BFB3\"]\n", + "\n", + "# Initialize an empty list to store the tabs\n", + "tabs = []\n", + "\n", + "# Loop through each dataset and its corresponding color\n", + "for (title, data), color in zip(datasets.items(), colors):\n", + " # Convert data to ColumnDataSource for Bokeh plotting\n", + " source = ColumnDataSource(data)\n", + "\n", + " # Create a figure for each dataset\n", + " p = figure(y_range=data['airportcity'], width=600, height=400, title=title + \" in 2024\", tools=\"save\", toolbar_location=\"above\")\n", + " p.hbar(y='airportcity', right='count', height=0.5, color=color, alpha=0.7, source=source)\n", + "\n", + " # Add text inside the bars (5 points inside the bar)\n", + " p.text(x='count', y='airportcity', text='count', source=source, \n", + " x_offset=-5, # This places the text 5 units inside the bar\n", + " y_offset=-3, # Vertical alignment\n", + " text_align='right', text_baseline='middle', text_color=\"black\", text_font_size=\"10pt\")\n", + "\n", + " # Customize plot (optional)\n", + " p.xaxis.visible = False\n", + " p.ygrid.visible = False\n", + " p.xgrid.visible = False\n", + " p.yaxis.major_tick_line_color = None # No major ticks\n", + " p.yaxis.minor_tick_line_color = None # No minor ticks\n", + " p.yaxis.axis_line_color = None \n", + " p.outline_line_color = None\n", + "\n", + " subtitle = Div(text=f\"

Source: AviationStack. Acessed October 7th 2024.

\", width=600)\n", + "\n", + " layout = column(p, subtitle)\n", + "\n", + " # Create a panel with the plot and the corresponding title\n", + " tab = TabPanel(child=layout, title=title)\n", + " \n", + " # Append the panel to the list of tabs\n", + " tabs.append(tab)\n", + "\n", + "# Arrange the tabs in a Tabs layout\n", + "tabs_layout = Tabs(tabs=tabs)\n", + "\n", + "main_title = Div(text=\"

Top 10 Destinations with Changes in Arrivals to BEY in 2024

\", width=800)\n", + "\n", + "# Use column layout to stack the title on top of the tabs\n", + "layout = column(main_title, tabs_layout)\n", + "\n", + "# Show the tabs\n", + "show(layout)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Findings\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 157, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "arrivals_exploded.to_csv(\n", + " \"../../data/aviation/processed_arrivals_bey_20240101_20241014.csv\"\n", + ")\n", + "departures_exploded.to_csv(\n", + " \"../../data/aviation/processed_departures_bey_20240101_20241014.csv\"\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "data-goods", + "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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}