Skip to content

Commit e42c10c

Browse files
committed
Add Wealth Of Nations Notebook example
1 parent 8697100 commit e42c10c

File tree

3 files changed

+433
-0
lines changed

3 files changed

+433
-0
lines changed

examples/WealthOfNations.ipynb

Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": null,
6+
"metadata": {},
7+
"outputs": [],
8+
"source": [
9+
"import os\n",
10+
"import json\n",
11+
"\n",
12+
"import numpy as np\n",
13+
"import pandas as pd\n",
14+
"\n",
15+
"from ipywidgets import Dropdown\n",
16+
"\n",
17+
"from bqplot import Lines, Figure, LinearScale, DateScale, Axis\n",
18+
"\n",
19+
"from ipyleaflet import Map, GeoJSON, WidgetControl"
20+
]
21+
},
22+
{
23+
"cell_type": "code",
24+
"execution_count": null,
25+
"metadata": {},
26+
"outputs": [],
27+
"source": [
28+
"data = pd.read_json(os.path.abspath('nations.json'))"
29+
]
30+
},
31+
{
32+
"cell_type": "code",
33+
"execution_count": null,
34+
"metadata": {},
35+
"outputs": [],
36+
"source": [
37+
"def clean_data(data):\n",
38+
" for column in ['income', 'lifeExpectancy', 'population']:\n",
39+
" data = data.drop(data[data[column].apply(len) <= 4].index)\n",
40+
" return data\n",
41+
"\n",
42+
"def extrap_interp(data):\n",
43+
" data = np.array(data)\n",
44+
" x_range = np.arange(1800, 2009, 1.)\n",
45+
" y_range = np.interp(x_range, data[:, 0], data[:, 1])\n",
46+
" return y_range\n",
47+
"\n",
48+
"def extrap_data(data):\n",
49+
" for column in ['income', 'lifeExpectancy', 'population']:\n",
50+
" data[column] = data[column].apply(extrap_interp)\n",
51+
" return data"
52+
]
53+
},
54+
{
55+
"cell_type": "code",
56+
"execution_count": null,
57+
"metadata": {},
58+
"outputs": [],
59+
"source": [
60+
"data = clean_data(data)\n",
61+
"data = extrap_data(data)"
62+
]
63+
},
64+
{
65+
"cell_type": "code",
66+
"execution_count": null,
67+
"metadata": {},
68+
"outputs": [],
69+
"source": [
70+
"data"
71+
]
72+
},
73+
{
74+
"cell_type": "code",
75+
"execution_count": null,
76+
"metadata": {},
77+
"outputs": [],
78+
"source": [
79+
"date_start = pd.datetime(1800, 12, 31)\n",
80+
"date_end = pd.datetime(2009, 12, 31)\n",
81+
"\n",
82+
"date_scale = DateScale(min=date_start, max=date_end)"
83+
]
84+
},
85+
{
86+
"cell_type": "code",
87+
"execution_count": null,
88+
"metadata": {},
89+
"outputs": [],
90+
"source": [
91+
"date_data = pd.date_range(start=date_start, end=date_end, freq='A', normalize=True)"
92+
]
93+
},
94+
{
95+
"cell_type": "code",
96+
"execution_count": null,
97+
"metadata": {},
98+
"outputs": [],
99+
"source": [
100+
"country_name = 'Angola'\n",
101+
"data_name = 'income'\n",
102+
"\n",
103+
"x_data = data[data.name == country_name][data_name].values[0]"
104+
]
105+
},
106+
{
107+
"cell_type": "code",
108+
"execution_count": null,
109+
"metadata": {},
110+
"outputs": [],
111+
"source": [
112+
"x_scale = LinearScale()\n",
113+
"\n",
114+
"lines = Lines(x=date_data, y=x_data, scales={'x': date_scale, 'y': x_scale})\n",
115+
"\n",
116+
"ax_x = Axis(label='Year', scale=date_scale, num_ticks=10, tick_format='%Y')\n",
117+
"ax_y = Axis(label=data_name.capitalize(), scale=x_scale, orientation='vertical', side='left')\n",
118+
"\n",
119+
"figure = Figure(axes=[ax_x, ax_y], title=country_name, marks=[lines], animation_duration=500,\n",
120+
" layout={'max_height': '250px', 'max_width': '400px'})\n",
121+
"figure"
122+
]
123+
},
124+
{
125+
"cell_type": "code",
126+
"execution_count": null,
127+
"metadata": {},
128+
"outputs": [],
129+
"source": [
130+
"def update_figure(country_name, data_name):\n",
131+
" lines.y = data[data.name == country_name][data_name].values[0]\n",
132+
" ax_y.label = data_name.capitalize()\n",
133+
" figure.title = country_name"
134+
]
135+
},
136+
{
137+
"cell_type": "code",
138+
"execution_count": null,
139+
"metadata": {},
140+
"outputs": [],
141+
"source": [
142+
"country_name = 'Benin'\n",
143+
"data_name = 'income'\n",
144+
"\n",
145+
"update_figure(country_name, data_name)"
146+
]
147+
},
148+
{
149+
"cell_type": "code",
150+
"execution_count": null,
151+
"metadata": {},
152+
"outputs": [],
153+
"source": [
154+
"country_name = 'Angola'\n",
155+
"data_name = 'population'\n",
156+
"\n",
157+
"update_figure(country_name, data_name)"
158+
]
159+
},
160+
{
161+
"cell_type": "code",
162+
"execution_count": null,
163+
"metadata": {},
164+
"outputs": [],
165+
"source": [
166+
"with open('./countries.geo.json') as f:\n",
167+
" countries = json.load(f)"
168+
]
169+
},
170+
{
171+
"cell_type": "code",
172+
"execution_count": null,
173+
"metadata": {},
174+
"outputs": [],
175+
"source": [
176+
"m = Map(zoom=3)\n",
177+
"\n",
178+
"geo = GeoJSON(data=countries, style={'fillColor': 'white', 'weight': 0.5}, hover_style={'fillColor': '#1f77b4'}, name='Countries')\n",
179+
"m.add_layer(geo)\n",
180+
"\n",
181+
"m"
182+
]
183+
},
184+
{
185+
"cell_type": "code",
186+
"execution_count": null,
187+
"metadata": {},
188+
"outputs": [],
189+
"source": [
190+
"widget_control1 = WidgetControl(widget=figure, position='bottomright')\n",
191+
"\n",
192+
"m.add_control(widget_control1)\n",
193+
"\n",
194+
"def on_hover(event, feature, **kwargs):\n",
195+
" global country_name\n",
196+
"\n",
197+
" country_name = feature['properties']['name']\n",
198+
" update_figure(country_name, data_name)\n",
199+
"\n",
200+
"geo.on_hover(on_hover)"
201+
]
202+
},
203+
{
204+
"cell_type": "code",
205+
"execution_count": null,
206+
"metadata": {},
207+
"outputs": [],
208+
"source": [
209+
"dropdown = Dropdown(\n",
210+
" options=['income', 'population', 'lifeExpectancy'],\n",
211+
" value=data_name,\n",
212+
" description='Plotting:'\n",
213+
")\n",
214+
"\n",
215+
"def on_click(change):\n",
216+
" global data_name\n",
217+
"\n",
218+
" data_name = change['new']\n",
219+
" update_figure(country_name, data_name)\n",
220+
"\n",
221+
"dropdown.observe(on_click, 'value')\n",
222+
"\n",
223+
"widget_control2 = WidgetControl(widget=dropdown, position='bottomleft')\n",
224+
"\n",
225+
"m.add_control(widget_control2)"
226+
]
227+
}
228+
],
229+
"metadata": {
230+
"kernelspec": {
231+
"display_name": "Python 3",
232+
"language": "python",
233+
"name": "python3"
234+
},
235+
"language_info": {
236+
"codemirror_mode": {
237+
"name": "ipython",
238+
"version": 3
239+
},
240+
"file_extension": ".py",
241+
"mimetype": "text/x-python",
242+
"name": "python",
243+
"nbconvert_exporter": "python",
244+
"pygments_lexer": "ipython3",
245+
"version": "3.7.3"
246+
}
247+
},
248+
"nbformat": 4,
249+
"nbformat_minor": 4
250+
}

0 commit comments

Comments
 (0)