https://github.com/mapbox/mapboxgl-jupyter
These examples require the installation of the following python modules
pip install mapboxgl
pip install pandas
import pandas as pd
import os
from mapboxgl.utils import *
from mapboxgl.viz import *
# Load data from sample csv
data_url = 'https://raw.githubusercontent.com/mapbox/mapboxgl-jupyter/master/examples/data/points.csv'
df = pd.read_csv(data_url).round(3)
df.head(2)
Avg Total Payments | Avg Covered Charges | Total Discharges | Avg Medicare Payments | admin1_id | Provider Id | admin2_id | lon | lat | date | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 8749.025 | 35247.028 | 58.750 | 7678.214 | USA101 | 10001 | USA201069 | -85.363 | 31.216 | 1/1/14 12:00 AM |
1 | 6812.131 | 16451.092 | 28.959 | 5793.631 | USA101 | 10005 | USA201119 | -88.143 | 32.453 | 1/2/14 12:00 AM |
Set a MAPBOX_ACCESS_TOKEN
environment variable or copy/paste your token
If you do not have a Mapbox access token, sign up for an account at https://www.mapbox.com/
If you already have an account, you can grab your token at https://www.mapbox.com/account/
# Must be a public token, starting with `pk`
token = os.getenv('MAPBOX_ACCESS_TOKEN')
# Create a geojson file export from the current dataframe
df_to_geojson(df, filename='../data/healthcare_points.geojson',
properties=['Avg Medicare Payments', 'Avg Covered Charges', 'date'],
lat='lat', lon='lon', precision=3)
{'feature_count': 3173, 'filename': '../data/healthcare_points.geojson', 'type': 'file'}
# Just show a map of the data
viz = CircleViz('../data/healthcare_points.geojson', access_token=token,
radius = 2, center = (-95, 40), zoom = 3)
viz.show()
# Generate data breaks using numpy quantiles and color stops from colorBrewer
measure = 'Avg Medicare Payments'
color_breaks = [round(df[measure].quantile(q=x*0.1), 2) for x in range(1,9)]
color_stops = create_color_stops(color_breaks, colors='YlGnBu')
# Create the viz from the dataframe
viz = CircleViz('../data/healthcare_points.geojson',
access_token=token,
color_property = "Avg Medicare Payments",
color_stops = color_stops,
radius = 2.5,
stroke_color = 'black',
stroke_width = 0.2,
center = (-95, 40),
zoom = 3,
below_layer = 'waterway-label')
viz.show()
viz.label_property = "Avg Medicare Payments"
viz.stroke_width = 0
viz.label_size = 8
viz.show()
# Generate a new data domain breaks and a new color palette from colorBrewer2
measure = 'Avg Covered Charges'
color_breaks = [round(df[measure].quantile(q=x*0.1), 1) for x in range(1,9)]
color_stops = create_color_stops(color_breaks, colors='YlOrRd')
# Show the viz
viz.color_property='Avg Covered Charges'
viz.color_stops=color_stops
viz.show()
viz.style='mapbox://styles/mapbox/dark-v9?optimize=true'
viz.label_color = 'hsl(0, 0%, 70%)'
viz.label_halo_color = 'hsla(0, 0%, 10%, 0.75)'
viz.show()
# Generate data breaks and color stops from colorBrewer
measure_color = 'Avg Covered Charges'
color_breaks = [round(df[measure_color].quantile(q=x*0.1), 2) for x in range(2, 10)]
color_stops = create_color_stops(color_breaks, colors='Blues')
# Generate radius breaks from data domain and circle-radius range
measure_radius = 'Avg Medicare Payments'
radius_breaks = [round(df[measure_radius].quantile(q=x*0.1), 2) for x in range(2,10)]
radius_stops = create_radius_stops(radius_breaks, 0.5, 10)
# Create the viz
viz2 = GraduatedCircleViz('../data/healthcare_points.geojson',
access_token=token,
color_property = "Avg Covered Charges",
color_stops = color_stops,
radius_property = "Avg Medicare Payments",
radius_stops = radius_stops,
stroke_color = 'black',
stroke_width = 0.5,
center = (-95, 40),
zoom = 3,
opacity=0.75,
below_layer = 'waterway-label')
viz2.show()
#Create a heatmap
measure = 'Avg Medicare Payments'
heatmap_color_stops = create_color_stops([0.01, 0.25, 0.5, 0.75, 1], colors='RdPu')
heatmap_radius_stops = [[0, 3], [14, 100]] #increase radius with zoom
color_breaks = [round(df[measure].quantile(q=x*0.1), 2) for x in range(2,10)]
color_stops = create_color_stops(color_breaks, colors='Spectral')
heatmap_weight_stops = create_weight_stops(color_breaks)
#Create a heatmap
viz3 = HeatmapViz('../data/healthcare_points.geojson',
access_token=token,
weight_property = "Avg Medicare Payments",
weight_stops = heatmap_weight_stops,
color_stops = heatmap_color_stops,
radius_stops = heatmap_radius_stops,
opacity = 0.8,
center = (-95, 40),
zoom = 3,
below_layer='waterway-label'
)
viz3.show()
#Create a clustered circle map
color_stops = create_color_stops([1, 10, 25, 50, 75, 100], colors='YlOrBr')
viz4 = ClusteredCircleViz('../data/healthcare_points.geojson',
access_token=token,
color_stops = color_stops,
stroke_color = 'black',
radius_stops = [[1,5], [10, 10], [50, 15], [100, 20]],
radius_default = 2,
cluster_maxzoom = 10,
cluster_radius = 30,
label_size = 12,
opacity = 0.9,
center = (-95, 40),
zoom = 3
)
viz4.show()
with open('viz4.html', 'w') as f:
f.write(viz4.create_html())
Python2: python -m SimpleHTTPServer 8080
Python3: python3 -m http.server 8080
Now navigate your browser to http://localhost:8080/viz4.html
to see the viz