{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import geoviews as gv\n", "import geoviews.feature as gf\n", "from bokeh.sampledata.airport_routes import airports, routes\n", "\n", "gv.extension('matplotlib')\n", "\n", "gv.output(fig='svg')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Count the number of connections from each airport\n", "counts = routes.groupby('SourceID')[['Stops']].count().reset_index().rename(columns={'Stops': 'Connections'})\n", "airports_df = pd.merge(airports, counts, left_on='AirportID', right_on='SourceID', how='left')\n", "\n", "# Select only US mainland airports & convert from Mercator to Latitudes/Longitudes\n", "airport_points = gv.Points(airports_df, ['Longitude', 'Latitude'])[-170:-50, 0: 50]\n", "\n", "# Declare nodes, graph and tiles\n", "nodes = gv.Nodes(airport_points, ['Longitude', 'Latitude', 'AirportID'],\n", " ['Name', 'City', 'Connections'])\n", "graph = gv.Graph((routes, nodes), ['SourceID', 'DestinationID'], ['Source', 'Destination'])\n", "tiles = gv.tile_sources.OSM\n", "\n", "# Select 50 busiest airports\n", "busiest = list(routes.groupby('SourceID').count().sort_values('Stops').iloc[-50:].index.values)\n", "busiest_airports = graph.select(AirportID=busiest, selection_mode='nodes')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "gf.ocean * gf.land * gf.coastline * gf.borders * busiest_airports.opts(\n", " node_size=8, edge_linewidth=1, edge_alpha=0.05, fig_size=300, padding=0.1)" ] } ], "metadata": { "language_info": { "name": "python", "pygments_lexer": "ipython3" } }, "nbformat": 4, "nbformat_minor": 2 }