Jupyter Snippet CB2nd 02_airports
Jupyter Snippet CB2nd 02_airports
14.2. Drawing flight routes with NetworkX
import math
import json
import numpy as np
import pandas as pd
import networkx as nx
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from IPython.display import Image
%matplotlib inline
names = ('airline,airline_id,'
'source,source_id,'
'dest,dest_id,'
'codeshare,stops,equipment').split(',')
routes = pd.read_csv(
'https://github.com/ipython-books/'
'cookbook-2nd-data/blob/master/'
'routes.dat?raw=true',
names=names,
header=None)
routes
names = ('id,name,city,country,iata,icao,lat,lon,'
'alt,timezone,dst,tz,type,source').split(',')
airports = pd.read_csv(
'https://github.com/ipython-books/'
'cookbook-2nd-data/blob/master/'
'airports.dat?raw=true',
header=None,
names=names,
index_col=4,
na_values='\\N')
airports_us = airports[airports['country'] ==
'United States']
airports_us
routes_us = routes[
routes['source'].isin(airports_us.index) &
routes['dest'].isin(airports_us.index)]
routes_us
edges = routes_us[['source', 'dest']].values
edges
array([['ADQ', 'KLN'],
['KLN', 'KYK'],
['BRL', 'ORD'],
...,
['SOW', 'PHX'],
['VIS', 'LAX'],
['WRL', 'CYS']], dtype=object)
g = nx.from_edgelist(edges)
len(g.nodes()), len(g.edges())
(546, 2781)
fig, ax = plt.subplots(1, 1, figsize=(6, 6))
nx.draw_networkx(g, ax=ax, node_size=5,
font_size=6, alpha=.5,
width=.5)
ax.set_axis_off()
sg = next(nx.connected_component_subgraphs(g))
fig, ax = plt.subplots(1, 1, figsize=(6, 6))
nx.draw_networkx(sg, ax=ax, with_labels=False,
node_size=5, width=.5)
ax.set_axis_off()
pos = {airport: (v['lon'], v['lat'])
for airport, v in
airports_us.to_dict('index').items()}
deg = nx.degree(sg)
sizes = [5 * deg[iata] for iata in sg.nodes]
altitude = airports_us['alt']
altitude = [altitude[iata] for iata in sg.nodes]
labels = {iata: iata if deg[iata] >= 20 else ''
for iata in sg.nodes}
# Map projection
crs = ccrs.PlateCarree()
fig, ax = plt.subplots(
1, 1, figsize=(12, 8),
subplot_kw=dict(projection=crs))
ax.coastlines()
# Extent of continental US.
ax.set_extent([-128, -62, 20, 50])
nx.draw_networkx(sg, ax=ax,
font_size=16,
alpha=.5,
width=.075,
node_size=sizes,
labels=labels,
pos=pos,
node_color=altitude,
cmap=plt.cm.autumn)