├── LICENSE ├── README.md ├── Section 1 ├── 2008-election-results.csv ├── README.md ├── Visualizing the US Elections.ipynb ├── Wealth of Nations.ipynb ├── nations.json └── state_codes.csv ├── Section 2 ├── NetworkX - Creating and customizing LAN network.ipynb ├── NetworkX - Social Network.ipynb └── README.md ├── Section 3 ├── .ipynb_checkpoints │ └── Bokeh - NASA Moon Missions-checkpoint.ipynb ├── Bokeh - Intro.ipynb ├── Bokeh - NASA Moon Missions.ipynb ├── README.md ├── barplot.html ├── manned.csv └── weather │ ├── data │ ├── 2015_weather.csv │ └── london.csv │ └── main.py └── Section 4 ├── README.md ├── android1 └── app.py ├── android2 └── app.py ├── walmart1 └── app.py └── walmart2 └── app.py /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Packt 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Data-visualization-projects-in-python 2 | Data visualization projects in python [video], published by Packt 3 | # Data Visualization in Python by Examples [Video] 4 | This is the code repository for [Data Visualization in Python by Examples [Video]](https://www.packtpub.com/virtualization-and-cloud/data-visualization-python-examples-video?utm_source=github&utm_medium=repository&utm_campaign=9781788838658), published by [Packt](https://www.packtpub.com/?utm_source=github). It contains all the supporting project files necessary to work through the video course from start to finish. 5 | ## About the Video Course 6 | Some popular Python data visualization tools and techniques today include Data Visualization in Jupyter Notebook with Bloomberg's bqplot library, Programming Graph and Network Data Visualizations, Data Visualizations with Bokeh (a Python library), and building interactive web visualizations using Dash. 7 | 8 | You will start by programming stunning interactive Data Visualizations using bqplot, an open source Python library developed by Bloomberg. Then you will learn how to programmatically create interactive network graphs and visualizations. You will then programmatically visualize data with the interactive Python visualization library, Bokeh. 9 | 10 | Finally, you will build interactive web visualizations of data using Python: you will choose a number of inputs your users can control, then use any Python graphing library to create plots based on those inputs. 11 | 12 |

What You Will Learn

13 |
14 |
24 | 25 | ## Instructions and Navigation 26 | ### Assumed Knowledge 27 | To fully benefit from the coverage included in this course, you will need:
28 | Be familiar with the Python programming language 29 | Find your way around command line 30 | ### Technical Requirements 31 | This course has the following software requirements:
32 | Have access to a Windows, Mac or Linux Computer 33 | Have Python 3.x installed 34 | 35 | ## Related Products 36 | * [Data Visualization Solutions for Beginners [Video]](https://www.packtpub.com/big-data-and-business-intelligence/data-visualization-solutions-beginners-video?utm_source=github&utm_medium=repository&utm_campaign=9781788395786) 37 | 38 | * [Advanced Data Visualization Solutions [Video]](https://www.packtpub.com/big-data-and-business-intelligence/advanced-data-visualization-solutions-video?utm_source=github&utm_medium=repository&utm_campaign=9781788838269) 39 | 40 | * [Data Visualization with Tableau [Video]](https://www.packtpub.com/big-data-and-business-intelligence/data-visualization-tableau-video?utm_source=github&utm_medium=repository&utm_campaign=9781788837330) 41 | 42 | -------------------------------------------------------------------------------- /Section 1/README.md: -------------------------------------------------------------------------------- 1 | Section 1 Code Examples -------------------------------------------------------------------------------- /Section 1/Visualizing the US Elections.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Visualizing the 2016 General Election Polls" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 20, 13 | "metadata": { 14 | "collapsed": true 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "import pandas as pd\n", 19 | "import numpy as np\n", 20 | "from __future__ import print_function\n", 21 | "from ipywidgets import VBox, HBox\n", 22 | "import os\n", 23 | "\n", 24 | "codes = pd.read_csv(os.path.abspath('state_codes.csv'))" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 21, 30 | "metadata": {}, 31 | "outputs": [], 32 | "source": [ 33 | "try:\n", 34 | " from pollster import Pollster\n", 35 | "except ImportError:\n", 36 | " print('Pollster not found. Installing Pollster..')\n", 37 | " import pip\n", 38 | " try:\n", 39 | " pip.main(['install', 'pollster==0.1.6'])\n", 40 | " except:\n", 41 | " print(\"The pip installation failed. Please manually install Pollster and re-run this notebook.\")" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 22, 47 | "metadata": { 48 | "collapsed": true 49 | }, 50 | "outputs": [], 51 | "source": [ 52 | "def get_candidate_data(question):\n", 53 | " clinton, trump, undecided, other = 0., 0., 0., 0.\n", 54 | " for candidate in question['subpopulations'][0]['responses']:\n", 55 | " if candidate['last_name'] == 'Clinton':\n", 56 | " clinton = candidate['value']\n", 57 | " elif candidate['last_name'] == 'Trump':\n", 58 | " trump = candidate['value']\n", 59 | " elif candidate['choice'] == 'Undecided':\n", 60 | " undecided = candidate['value']\n", 61 | " else:\n", 62 | " other = candidate['value']\n", 63 | " return clinton, trump, other, undecided\n", 64 | "\n", 65 | "def get_row(question, partisan='Nonpartisan', end_date='2016-06-21'):\n", 66 | " # if question['topic'] != '2016-president':\n", 67 | " if ('2016' in question['topic']) and ('Presidential' in question['topic']):\n", 68 | " hillary, donald, other, undecided = get_candidate_data(question)\n", 69 | " return [{'Name': question['name'], 'Partisan': partisan, 'State': question['state'],\n", 70 | " 'Date': np.datetime64(end_date), 'Trump': donald, 'Clinton': hillary, 'Other': other,\n", 71 | " 'Undecided': undecided}]\n", 72 | " else:\n", 73 | " return\n", 74 | "\n", 75 | "def analyze_polls(polls):\n", 76 | " global data\n", 77 | " for poll in polls:\n", 78 | " for question in poll.questions:\n", 79 | " resp = get_row(question, partisan=poll.partisan, end_date=poll.end_date)\n", 80 | " if resp is not None:\n", 81 | " data = data.append(resp)\n", 82 | " return" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": 23, 88 | "metadata": { 89 | "collapsed": true 90 | }, 91 | "outputs": [], 92 | "source": [ 93 | "try:\n", 94 | " from pollster import Pollster\n", 95 | " pollster = Pollster()\n", 96 | " \n", 97 | " # Getting data from Pollster. This might take a second.\n", 98 | " raw_data = pollster.charts(topic='2016-president')\n", 99 | " \n", 100 | " data = pd.DataFrame(columns=['Name', 'Partisan', 'State', 'Date', 'Trump', 'Clinton', 'Other',\n", 101 | " 'Undecided'])\n", 102 | " \n", 103 | " for i in raw_data:\n", 104 | " analyze_polls(i.polls())\n", 105 | "except:\n", 106 | " raise ValueError('Please install Pollster and run the functions above')" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 24, 112 | "metadata": { 113 | "collapsed": true 114 | }, 115 | "outputs": [], 116 | "source": [ 117 | "def get_state_party(code):\n", 118 | " state = codes[codes['FIPS']==code]['USPS'].values[0]\n", 119 | " if data[data['State']==state].shape[0] == 0:\n", 120 | " return None\n", 121 | " polls = data[(data['State']==state) & (data['Trump'] > 0.) & (data['Clinton'] > 0.)].sort_values(by='Date')\n", 122 | " if polls.shape[0] == 0:\n", 123 | " return None\n", 124 | " if (polls.tail(1)['Trump'] > polls.tail(1)['Clinton']).values[0]:\n", 125 | " return 'Republican'\n", 126 | " else:\n", 127 | " return 'Democrat'\n", 128 | "\n", 129 | "def get_color_data():\n", 130 | " color_data = {}\n", 131 | " for i in codes['FIPS']:\n", 132 | " color_data[i] = get_state_party(i)\n", 133 | " return color_data\n", 134 | "\n", 135 | "def get_state_data(code):\n", 136 | " state = codes[codes['FIPS']==code]['USPS'].values[0]\n", 137 | " if data[data['State']==state].shape[0] == 0:\n", 138 | " return None\n", 139 | " polls = data[(data['State']==state) & (data['Trump'] > 0.) & (data['Clinton'] > 0.)].sort_values(by='Date')\n", 140 | " return polls" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 25, 146 | "metadata": { 147 | "collapsed": true 148 | }, 149 | "outputs": [], 150 | "source": [ 151 | "from bqplot import *\n", 152 | "from ipywidgets import Layout" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 26, 158 | "metadata": { 159 | "collapsed": true 160 | }, 161 | "outputs": [], 162 | "source": [ 163 | "dt_x = DateScale()\n", 164 | "sc_y = LinearScale()\n", 165 | "\n", 166 | "time_series = Lines(scales={'x': dt_x, 'y': sc_y}, colors=['#E91D0E', '#2aa1ec'], marker='circle')\n", 167 | "\n", 168 | "ax_x = Axis(scale=dt_x, label='Date')\n", 169 | "ax_y = Axis(scale=sc_y, orientation='vertical', label='Percentage')\n", 170 | "\n", 171 | "ts_fig = Figure(marks=[time_series], axes=[ax_x, ax_y], title='General Election - State Polls', \n", 172 | " layout=Layout(min_width='650px', min_height='400px'))" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 27, 178 | "metadata": { 179 | "collapsed": true 180 | }, 181 | "outputs": [], 182 | "source": [ 183 | "sc_geo = AlbersUSA()\n", 184 | "sc_c1 = OrdinalColorScale(domain=['Democrat', 'Republican'], colors=['#2aa1ec', '#E91D0E'])\n", 185 | "\n", 186 | "color_data = get_color_data()\n", 187 | "\n", 188 | "map_styles = {'color': color_data,\n", 189 | " 'scales': {'projection': sc_geo, 'color': sc_c1}, 'colors': {'default_color': 'Grey'}}\n", 190 | "\n", 191 | "axis = ColorAxis(scale=sc_c1)\n", 192 | "\n", 193 | "states_map = Map(map_data=topo_load('map_data/USStatesMap.json'), tooltip=ts_fig, **map_styles)\n", 194 | "map_fig = Figure(marks=[states_map], axes=[axis],title='General Election Polls - State Wise')" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 28, 200 | "metadata": { 201 | "collapsed": true 202 | }, 203 | "outputs": [], 204 | "source": [ 205 | "def hover_callback(name, value):\n", 206 | " polls = get_state_data(value['data']['id'])\n", 207 | " if polls is None or polls.shape[0] == 0:\n", 208 | " time_series.y = [0.]\n", 209 | " return\n", 210 | " time_series.x, time_series.y = polls['Date'].values.astype(np.datetime64), [polls['Trump'].values, polls['Clinton'].values]\n", 211 | " ts_fig.title = str(codes[codes['FIPS']==value['data']['id']]['Name'].values[0]) + ' Polls - Presidential Election'" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": 29, 217 | "metadata": { 218 | "collapsed": true 219 | }, 220 | "outputs": [], 221 | "source": [ 222 | "states_map.on_hover(hover_callback)" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 30, 228 | "metadata": { 229 | "collapsed": true, 230 | "scrolled": false 231 | }, 232 | "outputs": [], 233 | "source": [ 234 | "national = data[(data['State']=='US') & (data['Trump'] > 0.) & (data['Clinton'] > 0.)].sort_values(by='Date')\n", 235 | "\n", 236 | "dt_x = DateScale()\n", 237 | "sc_y = LinearScale()\n", 238 | "\n", 239 | "clinton_scatter = Scatter(x=national['Date'].values.astype(np.datetime64), y=national['Clinton'],\n", 240 | " scales={'x': dt_x, 'y': sc_y}, \n", 241 | " colors=['#2aa1ec'])\n", 242 | "\n", 243 | "trump_scatter = Scatter(x=national['Date'].values.astype(np.datetime64), y=national['Trump'],\n", 244 | " scales={'x': dt_x, 'y': sc_y},\n", 245 | " colors=['#E91D0E'])\n", 246 | "\n", 247 | "ax_x = Axis(scale=dt_x, label='Date', tick_format='%b-%Y', num_ticks=8)\n", 248 | "ax_y = Axis(scale=sc_y, orientation='vertical', label='Percentage')\n", 249 | "\n", 250 | "scat_fig = Figure(marks=[clinton_scatter, trump_scatter], axes=[ax_x, ax_y], title='General Election - National Polls')" 251 | ] 252 | }, 253 | { 254 | "cell_type": "markdown", 255 | "metadata": {}, 256 | "source": [ 257 | "#### Hover on the map to visualize the poll data for that state." 258 | ] 259 | }, 260 | { 261 | "cell_type": "code", 262 | "execution_count": 31, 263 | "metadata": { 264 | "scrolled": true 265 | }, 266 | "outputs": [ 267 | { 268 | "data": { 269 | "application/vnd.jupyter.widget-view+json": { 270 | "model_id": "18e10622553546e3b5da4b3b60ba5deb", 271 | "version_major": 2, 272 | "version_minor": 0 273 | }, 274 | "text/plain": [ 275 | "A Jupyter Widget" 276 | ] 277 | }, 278 | "metadata": {}, 279 | "output_type": "display_data" 280 | } 281 | ], 282 | "source": [ 283 | "VBox([map_fig, scat_fig])" 284 | ] 285 | }, 286 | { 287 | "cell_type": "markdown", 288 | "metadata": {}, 289 | "source": [ 290 | "## Visualizing the County Results of the 2008 Elections" 291 | ] 292 | }, 293 | { 294 | "cell_type": "code", 295 | "execution_count": 32, 296 | "metadata": { 297 | "collapsed": true 298 | }, 299 | "outputs": [], 300 | "source": [ 301 | "county_data = pd.read_csv(os.path.abspath('2008-election-results.csv'))" 302 | ] 303 | }, 304 | { 305 | "cell_type": "code", 306 | "execution_count": 33, 307 | "metadata": { 308 | "collapsed": true 309 | }, 310 | "outputs": [], 311 | "source": [ 312 | "winner = np.array(['McCain'] * county_data.shape[0])" 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 34, 318 | "metadata": { 319 | "collapsed": true 320 | }, 321 | "outputs": [], 322 | "source": [ 323 | "winner[(county_data['Obama'] > county_data['McCain']).values] = 'Obama'" 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "execution_count": 35, 329 | "metadata": { 330 | "collapsed": true, 331 | "scrolled": true 332 | }, 333 | "outputs": [], 334 | "source": [ 335 | "sc_geo_county = AlbersUSA()\n", 336 | "sc_c1_county = OrdinalColorScale(domain=['McCain', 'Obama'], colors=['Red', 'DeepSkyBlue'])\n", 337 | "\n", 338 | "color_data_county = dict(zip(county_data['FIPS'].values.astype(int), list(winner)))\n", 339 | "\n", 340 | "map_styles_county = {'color': color_data_county,\n", 341 | " 'scales': {'projection': sc_geo_county, 'color': sc_c1_county}, 'colors': {'default_color': 'Grey'}}\n", 342 | "\n", 343 | "axis_county = ColorAxis(scale=sc_c1_county)\n", 344 | "\n", 345 | "county_map = Map(map_data=topo_load('map_data/USCountiesMap.json'), **map_styles_county)\n", 346 | "county_fig = Figure(marks=[county_map], axes=[axis_county],title='US Elections 2008 - Example',\n", 347 | " layout=Layout(min_width='800px', min_height='550px'))" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 36, 353 | "metadata": { 354 | "collapsed": true 355 | }, 356 | "outputs": [], 357 | "source": [ 358 | "names_sc = OrdinalScale(domain=['Obama', 'McCain'])\n", 359 | "vote_sc_y = LinearScale(min=0, max=100.)\n", 360 | "\n", 361 | "names_ax = Axis(scale=names_sc, label='Candidate')\n", 362 | "vote_ax = Axis(scale=vote_sc_y, orientation='vertical', label='Percentage')\n", 363 | "\n", 364 | "vote_bars = Bars(scales={'x': names_sc, 'y': vote_sc_y}, colors=['#2aa1ec', '#E91D0E'])\n", 365 | "\n", 366 | "bar_fig = Figure(marks=[vote_bars], axes=[names_ax, vote_ax], title='Vote Margin',\n", 367 | " layout=Layout(min_width='600px', min_height='400px'))" 368 | ] 369 | }, 370 | { 371 | "cell_type": "code", 372 | "execution_count": 37, 373 | "metadata": { 374 | "collapsed": true 375 | }, 376 | "outputs": [], 377 | "source": [ 378 | "def county_hover(name, value):\n", 379 | " if (county_data['FIPS'] == value['data']['id']).sum() == 0:\n", 380 | " bar_fig.title = ''\n", 381 | " vote_bars.y = [0., 0.]\n", 382 | " return\n", 383 | " votes = county_data[county_data['FIPS'] == value['data']['id']]\n", 384 | " dem_vote = float(votes['Obama %'].values[0])\n", 385 | " rep_vote = float(votes['McCain %'].values[0])\n", 386 | " vote_bars.x, vote_bars.y = ['Obama', 'McCain'], [dem_vote, rep_vote]\n", 387 | " bar_fig.title = 'Vote % - ' + value['data']['name']\n", 388 | " \n", 389 | "county_map.on_hover(county_hover)\n", 390 | "county_map.tooltip = bar_fig" 391 | ] 392 | }, 393 | { 394 | "cell_type": "markdown", 395 | "metadata": {}, 396 | "source": [ 397 | "#### Hover on the map to visualize the voting percentage for each candidate in that county" 398 | ] 399 | }, 400 | { 401 | "cell_type": "code", 402 | "execution_count": 38, 403 | "metadata": { 404 | "scrolled": true 405 | }, 406 | "outputs": [ 407 | { 408 | "data": { 409 | "application/vnd.jupyter.widget-view+json": { 410 | "model_id": "613b0f78f24e4642bbc98338aec6cbda", 411 | "version_major": 2, 412 | "version_minor": 0 413 | }, 414 | "text/plain": [ 415 | "A Jupyter Widget" 416 | ] 417 | }, 418 | "metadata": {}, 419 | "output_type": "display_data" 420 | } 421 | ], 422 | "source": [ 423 | "county_fig" 424 | ] 425 | }, 426 | { 427 | "cell_type": "code", 428 | "execution_count": null, 429 | "metadata": { 430 | "collapsed": true 431 | }, 432 | "outputs": [], 433 | "source": [] 434 | } 435 | ], 436 | "metadata": { 437 | "kernelspec": { 438 | "display_name": "Python 3", 439 | "language": "python", 440 | "name": "python3" 441 | }, 442 | "language_info": { 443 | "codemirror_mode": { 444 | "name": "ipython", 445 | "version": 3 446 | }, 447 | "file_extension": ".py", 448 | "mimetype": "text/x-python", 449 | "name": "python", 450 | "nbconvert_exporter": "python", 451 | "pygments_lexer": "ipython3", 452 | "version": "3.5.2" 453 | } 454 | }, 455 | "nbformat": 4, 456 | "nbformat_minor": 1 457 | } 458 | -------------------------------------------------------------------------------- /Section 1/Wealth of Nations.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "This is a `bqplot` recreation of Mike Bostock's [Wealth of Nations](https://bost.ocks.org/mike/nations/). This was also done by [Gapminder](http://www.gapminder.org/world/#$majorMode=chart$is;shi=t;ly=2003;lb=f;il=t;fs=11;al=30;stl=t;st=t;nsl=t;se=t$wst;tts=C$ts;sp=5.59290322580644;ti=2013$zpv;v=0$inc_x;mmid=XCOORDS;iid=phAwcNAVuyj1jiMAkmq1iMg;by=ind$inc_y;mmid=YCOORDS;iid=phAwcNAVuyj2tPLxKvvnNPA;by=ind$inc_s;uniValue=8.21;iid=phAwcNAVuyj0XOoBL_n5tAQ;by=ind$inc_c;uniValue=255;gid=CATID0;by=grp$map_x;scale=log;dataMin=194;dataMax=96846$map_y;scale=lin;dataMin=23;dataMax=86$map_s;sma=49;smi=2.65$cd;bd=0$inds=;modified=60). It is originally based on a TED Talk by [Hans Rosling](http://www.ted.com/talks/hans_rosling_shows_the_best_stats_you_ve_ever_seen)." 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Import required modules" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": { 21 | "collapsed": true 22 | }, 23 | "outputs": [], 24 | "source": [ 25 | "import pandas as pd\n", 26 | "import numpy as np\n", 27 | "import os\n", 28 | "\n", 29 | "from bqplot import (\n", 30 | " LogScale, LinearScale, OrdinalColorScale, ColorAxis,\n", 31 | " Axis, Scatter, Lines, CATEGORY10, Label, Figure, Tooltip\n", 32 | ")\n", 33 | "\n", 34 | "from ipywidgets import HBox, VBox, IntSlider, Play, jslink" 35 | ] 36 | }, 37 | { 38 | "cell_type": "markdown", 39 | "metadata": {}, 40 | "source": [ 41 | "### Read in the data" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 2, 47 | "metadata": { 48 | "collapsed": true, 49 | "scrolled": false 50 | }, 51 | "outputs": [], 52 | "source": [ 53 | "data = pd.read_json(os.path.abspath('nations.json'))" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": 95, 59 | "metadata": {}, 60 | "outputs": [ 61 | { 62 | "name": "stdout", 63 | "output_type": "stream", 64 | "text": [ 65 | "\n", 66 | "Int64Index: 180 entries, 0 to 179\n", 67 | "Data columns (total 5 columns):\n", 68 | "income 180 non-null object\n", 69 | "lifeExpectancy 180 non-null object\n", 70 | "name 180 non-null object\n", 71 | "population 180 non-null object\n", 72 | "region 180 non-null object\n", 73 | "dtypes: object(5)\n", 74 | "memory usage: 8.4+ KB\n" 75 | ] 76 | } 77 | ], 78 | "source": [ 79 | "data.info()" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 96, 85 | "metadata": {}, 86 | "outputs": [ 87 | { 88 | "data": { 89 | "text/html": [ 90 | "
\n", 91 | "\n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | "
incomelifeExpectancynamepopulationregion
0[[1800, 359.93], [1820, 359.93], [1913, 556.12...[[1800, 26.98], [1940, 26.98], [1950, 29.22], ...Angola[[1800, 1567028], [1820, 1567028], [1940, 3738...Sub-Saharan Africa
1[[1800, 553.72], [1820, 553.72], [1913, 855.53...[[1800, 31], [1944, 31], [1950, 36.53], [1951,...Benin[[1800, 636559], [1820, 636559], [1950, 167266...Sub-Saharan Africa
2[[1800, 407.36], [1820, 407.36], [1913, 629.4]...[[1800, 33.6], [1945, 33.6], [1950, 46.82], [1...Botswana[[1800, 121000], [1904, 121000], [1911, 125000...Sub-Saharan Africa
3[[1800, 454.33], [1820, 454.33], [1913, 497.44...[[1800, 29.2], [1945, 29.2], [1950, 32.89], [1...Burkina Faso[[1800, 1665421], [1820, 1665421], [1950, 4376...Sub-Saharan Africa
4[[1800, 447.59], [1820, 447.59], [1913, 353.82...[[1800, 31.5], [1945, 31.5], [1950, 38.42], [1...Burundi[[1800, 899097], [1820, 899097], [1950, 236252...Sub-Saharan Africa
\n", 145 | "
" 146 | ], 147 | "text/plain": [ 148 | " income \\\n", 149 | "0 [[1800, 359.93], [1820, 359.93], [1913, 556.12... \n", 150 | "1 [[1800, 553.72], [1820, 553.72], [1913, 855.53... \n", 151 | "2 [[1800, 407.36], [1820, 407.36], [1913, 629.4]... \n", 152 | "3 [[1800, 454.33], [1820, 454.33], [1913, 497.44... \n", 153 | "4 [[1800, 447.59], [1820, 447.59], [1913, 353.82... \n", 154 | "\n", 155 | " lifeExpectancy name \\\n", 156 | "0 [[1800, 26.98], [1940, 26.98], [1950, 29.22], ... Angola \n", 157 | "1 [[1800, 31], [1944, 31], [1950, 36.53], [1951,... Benin \n", 158 | "2 [[1800, 33.6], [1945, 33.6], [1950, 46.82], [1... Botswana \n", 159 | "3 [[1800, 29.2], [1945, 29.2], [1950, 32.89], [1... Burkina Faso \n", 160 | "4 [[1800, 31.5], [1945, 31.5], [1950, 38.42], [1... Burundi \n", 161 | "\n", 162 | " population region \n", 163 | "0 [[1800, 1567028], [1820, 1567028], [1940, 3738... Sub-Saharan Africa \n", 164 | "1 [[1800, 636559], [1820, 636559], [1950, 167266... Sub-Saharan Africa \n", 165 | "2 [[1800, 121000], [1904, 121000], [1911, 125000... Sub-Saharan Africa \n", 166 | "3 [[1800, 1665421], [1820, 1665421], [1950, 4376... Sub-Saharan Africa \n", 167 | "4 [[1800, 899097], [1820, 899097], [1950, 236252... Sub-Saharan Africa " 168 | ] 169 | }, 170 | "execution_count": 96, 171 | "metadata": {}, 172 | "output_type": "execute_result" 173 | } 174 | ], 175 | "source": [ 176 | "data.head()" 177 | ] 178 | }, 179 | { 180 | "cell_type": "markdown", 181 | "metadata": {}, 182 | "source": [ 183 | "### Clean data" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 97, 189 | "metadata": { 190 | "collapsed": true 191 | }, 192 | "outputs": [], 193 | "source": [ 194 | "def clean_data(data):\n", 195 | " for column in ['income', 'lifeExpectancy', 'population']:\n", 196 | " data = data.drop(data[data[column].apply(len) <= 4].index)\n", 197 | " return data\n", 198 | "\n", 199 | "def extrap_interp(data):\n", 200 | " data = np.array(data)\n", 201 | " x_range = np.arange(1800, 2009, 1.)\n", 202 | " y_range = np.interp(x_range, data[:, 0], data[:, 1])\n", 203 | " return y_range\n", 204 | "\n", 205 | "def extrap_data(data):\n", 206 | " for column in ['income', 'lifeExpectancy', 'population']:\n", 207 | " data[column] = data[column].apply(extrap_interp)\n", 208 | " return data" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": 98, 214 | "metadata": { 215 | "collapsed": true 216 | }, 217 | "outputs": [], 218 | "source": [ 219 | "data = clean_data(data)\n", 220 | "data = extrap_data(data)" 221 | ] 222 | }, 223 | { 224 | "cell_type": "markdown", 225 | "metadata": {}, 226 | "source": [ 227 | "### Prep Data for visualizations" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": 99, 233 | "metadata": { 234 | "collapsed": true, 235 | "scrolled": true 236 | }, 237 | "outputs": [], 238 | "source": [ 239 | "income_min, income_max = np.min(data['income'].apply(np.min)), np.max(data['income'].apply(np.max))\n", 240 | "life_exp_min, life_exp_max = np.min(data['lifeExpectancy'].apply(np.min)), np.max(data['lifeExpectancy'].apply(np.max))\n", 241 | "pop_min, pop_max = np.min(data['population'].apply(np.min)), np.max(data['population'].apply(np.max))" 242 | ] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": 100, 247 | "metadata": { 248 | "collapsed": true 249 | }, 250 | "outputs": [], 251 | "source": [ 252 | "def get_data(year):\n", 253 | " year_index = year - 1800\n", 254 | " income = data['income'].apply(lambda x: x[year_index])\n", 255 | " life_exp = data['lifeExpectancy'].apply(lambda x: x[year_index])\n", 256 | " pop = data['population'].apply(lambda x: x[year_index])\n", 257 | " return income, life_exp, pop" 258 | ] 259 | }, 260 | { 261 | "cell_type": "code", 262 | "execution_count": 101, 263 | "metadata": {}, 264 | "outputs": [ 265 | { 266 | "data": { 267 | "text/plain": [ 268 | "(0 2446.65\n", 269 | " 1 1307.57\n", 270 | " 2 10107.99\n", 271 | " 3 1001.48\n", 272 | " 4 443.76\n", 273 | " 5 1803.44\n", 274 | " 6 2291.29\n", 275 | " 7 1017.03\n", 276 | " 8 1090.79\n", 277 | " 9 292.45\n", 278 | " 10 3423.52\n", 279 | " 11 1746.31\n", 280 | " 12 5240.45\n", 281 | " 13 741.57\n", 282 | " 14 512.36\n", 283 | " 15 12764.05\n", 284 | " 16 1067.60\n", 285 | " 17 906.62\n", 286 | " 18 632.08\n", 287 | " 19 1318.49\n", 288 | " 20 1186.64\n", 289 | " 21 519.49\n", 290 | " 22 1027.09\n", 291 | " 23 713.78\n", 292 | " 24 854.73\n", 293 | " 25 1540.84\n", 294 | " 26 8290.95\n", 295 | " 28 542.81\n", 296 | " 29 4022.88\n", 297 | " 30 577.19\n", 298 | " ... \n", 299 | " 149 1635.22\n", 300 | " 150 29241.51\n", 301 | " 151 48020.35\n", 302 | " 152 833.36\n", 303 | " 153 3012.12\n", 304 | " 154 3856.32\n", 305 | " 155 24659.01\n", 306 | " 156 29972.38\n", 307 | " 157 2714.94\n", 308 | " 158 28559.60\n", 309 | " 159 1690.00\n", 310 | " 160 16996.00\n", 311 | " 161 22512.56\n", 312 | " 162 10161.49\n", 313 | " 163 5530.16\n", 314 | " 164 2017.51\n", 315 | " 165 1034.45\n", 316 | " 166 33884.50\n", 317 | " 167 21895.16\n", 318 | " 168 1821.68\n", 319 | " 169 2598.89\n", 320 | " 170 4090.83\n", 321 | " 171 36834.85\n", 322 | " 172 1802.02\n", 323 | " 173 23525.00\n", 324 | " 174 5578.40\n", 325 | " 175 2743.19\n", 326 | " 177 4886.27\n", 327 | " 178 1577.53\n", 328 | " 179 3762.19\n", 329 | " Name: income, dtype: float64, 0 43.56\n", 330 | " 1 58.34\n", 331 | " 2 50.65\n", 332 | " 3 50.37\n", 333 | " 4 46.90\n", 334 | " 5 51.52\n", 335 | " 6 68.98\n", 336 | " 7 49.30\n", 337 | " 8 61.85\n", 338 | " 9 46.34\n", 339 | " 10 53.58\n", 340 | " 11 55.45\n", 341 | " 12 48.74\n", 342 | " 13 55.94\n", 343 | " 14 51.40\n", 344 | " 15 59.90\n", 345 | " 16 57.91\n", 346 | " 17 53.27\n", 347 | " 18 45.84\n", 348 | " 19 52.82\n", 349 | " 20 50.48\n", 350 | " 21 54.44\n", 351 | " 22 56.51\n", 352 | " 23 50.99\n", 353 | " 24 45.64\n", 354 | " 25 56.50\n", 355 | " 26 71.32\n", 356 | " 28 47.65\n", 357 | " 29 58.78\n", 358 | " 30 46.41\n", 359 | " ... \n", 360 | " 149 66.99\n", 361 | " 150 79.93\n", 362 | " 151 75.93\n", 363 | " 152 57.08\n", 364 | " 153 71.29\n", 365 | " 154 67.28\n", 366 | " 155 72.24\n", 367 | " 156 80.83\n", 368 | " 157 67.41\n", 369 | " 158 81.35\n", 370 | " 159 66.96\n", 371 | " 160 75.92\n", 372 | " 161 79.04\n", 373 | " 162 72.50\n", 374 | " 163 67.29\n", 375 | " 164 64.19\n", 376 | " 165 59.94\n", 377 | " 166 73.92\n", 378 | " 167 78.90\n", 379 | " 168 57.74\n", 380 | " 169 69.49\n", 381 | " 170 69.28\n", 382 | " 171 77.93\n", 383 | " 172 62.15\n", 384 | " 173 76.07\n", 385 | " 174 68.09\n", 386 | " 175 56.23\n", 387 | " 177 70.75\n", 388 | " 178 72.08\n", 389 | " 179 67.42\n", 390 | " Name: lifeExpectancy, dtype: float64, 0 1.044281e+07\n", 391 | " 1 6.627964e+06\n", 392 | " 2 1.607069e+06\n", 393 | " 3 1.130855e+07\n", 394 | " 4 6.621126e+06\n", 395 | " 5 1.523367e+07\n", 396 | " 6 4.013430e+05\n", 397 | " 7 8.316481e+06\n", 398 | " 8 5.784000e+05\n", 399 | " 9 5.202183e+07\n", 400 | " 10 3.102404e+06\n", 401 | " 11 1.556339e+07\n", 402 | " 12 4.732160e+05\n", 403 | " 13 4.356581e+06\n", 404 | " 14 6.469005e+07\n", 405 | " 15 1.235484e+06\n", 406 | " 16 1.965772e+07\n", 407 | " 17 8.638858e+06\n", 408 | " 18 1.278273e+06\n", 409 | " 19 2.998584e+07\n", 410 | " 20 2.037961e+06\n", 411 | " 21 2.693780e+06\n", 412 | " 22 1.550647e+07\n", 413 | " 23 1.125816e+07\n", 414 | " 24 1.007227e+07\n", 415 | " 25 2.667859e+06\n", 416 | " 26 1.179368e+06\n", 417 | " 28 1.776846e+07\n", 418 | " 29 1.905659e+06\n", 419 | " 30 1.051611e+07\n", 420 | " ... \n", 421 | " 149 2.475552e+07\n", 422 | " 150 1.916462e+07\n", 423 | " 151 3.363760e+05\n", 424 | " 152 1.246626e+07\n", 425 | " 153 1.262645e+09\n", 426 | " 154 8.324940e+05\n", 427 | " 155 2.491100e+05\n", 428 | " 156 6.658720e+06\n", 429 | " 157 2.062650e+08\n", 430 | " 158 1.266998e+08\n", 431 | " 159 2.164768e+07\n", 432 | " 160 4.735108e+07\n", 433 | " 161 4.313380e+05\n", 434 | " 162 2.179329e+07\n", 435 | " 163 1.077540e+05\n", 436 | " 164 2.600835e+06\n", 437 | " 165 4.470224e+07\n", 438 | " 166 2.018160e+05\n", 439 | " 167 3.819762e+06\n", 440 | " 168 4.926984e+06\n", 441 | " 169 7.973982e+07\n", 442 | " 170 1.794660e+05\n", 443 | " 171 4.036753e+06\n", 444 | " 172 4.661940e+05\n", 445 | " 173 2.215124e+07\n", 446 | " 174 6.186293e+07\n", 447 | " 175 8.465990e+05\n", 448 | " 177 1.023210e+05\n", 449 | " 178 7.906041e+07\n", 450 | " 179 1.896180e+05\n", 451 | " Name: population, dtype: float64)" 452 | ] 453 | }, 454 | "execution_count": 101, 455 | "metadata": {}, 456 | "output_type": "execute_result" 457 | } 458 | ], 459 | "source": [ 460 | "get_data(2000)" 461 | ] 462 | }, 463 | { 464 | "cell_type": "markdown", 465 | "metadata": {}, 466 | "source": [ 467 | "### Setting up the visualization elements" 468 | ] 469 | }, 470 | { 471 | "cell_type": "markdown", 472 | "metadata": {}, 473 | "source": [ 474 | "#### Tooltip" 475 | ] 476 | }, 477 | { 478 | "cell_type": "code", 479 | "execution_count": 102, 480 | "metadata": { 481 | "collapsed": true 482 | }, 483 | "outputs": [], 484 | "source": [ 485 | "tt = Tooltip(fields=['name', 'x', 'y'], labels=['Country Name', 'Income per Capita', 'Life Expectancy'])" 486 | ] 487 | }, 488 | { 489 | "cell_type": "markdown", 490 | "metadata": {}, 491 | "source": [ 492 | "#### Labels" 493 | ] 494 | }, 495 | { 496 | "cell_type": "code", 497 | "execution_count": 103, 498 | "metadata": { 499 | "collapsed": true 500 | }, 501 | "outputs": [], 502 | "source": [ 503 | "initial_year = 1800\n", 504 | "year_label = Label(x=[0.75], y=[0.10], default_size=46, font_weight='bolder', colors=['orange'],\n", 505 | " text=[str(initial_year)], enable_move=True)" 506 | ] 507 | }, 508 | { 509 | "cell_type": "markdown", 510 | "metadata": {}, 511 | "source": [ 512 | "#### Axes and Scales" 513 | ] 514 | }, 515 | { 516 | "cell_type": "code", 517 | "execution_count": 104, 518 | "metadata": { 519 | "collapsed": true 520 | }, 521 | "outputs": [], 522 | "source": [ 523 | "x_sc = LogScale(min=income_min, max=income_max)\n", 524 | "y_sc = LinearScale(min=life_exp_min, max=life_exp_max)\n", 525 | "c_sc = OrdinalColorScale(domain=data['region'].unique().tolist(), colors=CATEGORY10[:6])\n", 526 | "size_sc = LinearScale(min=pop_min, max=pop_max)" 527 | ] 528 | }, 529 | { 530 | "cell_type": "code", 531 | "execution_count": 105, 532 | "metadata": { 533 | "collapsed": true 534 | }, 535 | "outputs": [], 536 | "source": [ 537 | "ax_y = Axis(label='Life Expectancy', scale=y_sc, orientation='vertical', side='left', grid_lines='solid')\n", 538 | "ax_x = Axis(label='Income per Capita', scale=x_sc, grid_lines='solid')" 539 | ] 540 | }, 541 | { 542 | "cell_type": "markdown", 543 | "metadata": {}, 544 | "source": [ 545 | "#### Scatter mark size and color" 546 | ] 547 | }, 548 | { 549 | "cell_type": "code", 550 | "execution_count": 106, 551 | "metadata": { 552 | "collapsed": true 553 | }, 554 | "outputs": [], 555 | "source": [ 556 | "# Start with the first year's data\n", 557 | "cap_income, life_exp, pop = get_data(initial_year)" 558 | ] 559 | }, 560 | { 561 | "cell_type": "code", 562 | "execution_count": 107, 563 | "metadata": { 564 | "collapsed": true 565 | }, 566 | "outputs": [], 567 | "source": [ 568 | "wealth_scat = Scatter(x=cap_income, y=life_exp, color=data['region'], size=pop,\n", 569 | " names=data['name'], display_names=False,\n", 570 | " scales={'x': x_sc, 'y': y_sc, 'color': c_sc, 'size': size_sc},\n", 571 | " default_size=4112, tooltip=tt, animate=True, stroke='Black',\n", 572 | " unhovered_style={'opacity': 0.5})" 573 | ] 574 | }, 575 | { 576 | "cell_type": "code", 577 | "execution_count": 108, 578 | "metadata": { 579 | "collapsed": true 580 | }, 581 | "outputs": [], 582 | "source": [ 583 | "nation_line = Lines(x=data['income'][0], y=data['lifeExpectancy'][0], colors=['Gray'],\n", 584 | " scales={'x': x_sc, 'y': y_sc}, visible=False)" 585 | ] 586 | }, 587 | { 588 | "cell_type": "markdown", 589 | "metadata": {}, 590 | "source": [ 591 | "#### Creating the Figure" 592 | ] 593 | }, 594 | { 595 | "cell_type": "code", 596 | "execution_count": 109, 597 | "metadata": { 598 | "collapsed": true 599 | }, 600 | "outputs": [], 601 | "source": [ 602 | "time_interval = 10" 603 | ] 604 | }, 605 | { 606 | "cell_type": "code", 607 | "execution_count": 110, 608 | "metadata": { 609 | "collapsed": true 610 | }, 611 | "outputs": [], 612 | "source": [ 613 | "fig = Figure(marks=[wealth_scat, year_label, nation_line], axes=[ax_x, ax_y],\n", 614 | " title='Health and Wealth of Nations', animation_duration=time_interval)" 615 | ] 616 | }, 617 | { 618 | "cell_type": "markdown", 619 | "metadata": {}, 620 | "source": [ 621 | "### Animations" 622 | ] 623 | }, 624 | { 625 | "cell_type": "code", 626 | "execution_count": 111, 627 | "metadata": { 628 | "collapsed": true 629 | }, 630 | "outputs": [], 631 | "source": [ 632 | "year_slider = IntSlider(min=1800, max=2008, step=1, description='Year', value=initial_year)" 633 | ] 634 | }, 635 | { 636 | "cell_type": "code", 637 | "execution_count": 112, 638 | "metadata": { 639 | "collapsed": true 640 | }, 641 | "outputs": [], 642 | "source": [ 643 | "def hover_changed(change):\n", 644 | " if change.new is not None:\n", 645 | " nation_line.x = data[data['name'] == wealth_scat.names[change.new]]['income'].values[0]\n", 646 | " nation_line.y = data[data['name'] == wealth_scat.names[change.new]]['lifeExpectancy'].values[0]\n", 647 | " nation_line.visible = True\n", 648 | " else:\n", 649 | " nation_line.visible = False\n", 650 | " \n", 651 | "wealth_scat.observe(hover_changed, 'hovered_point')" 652 | ] 653 | }, 654 | { 655 | "cell_type": "code", 656 | "execution_count": 113, 657 | "metadata": { 658 | "collapsed": true 659 | }, 660 | "outputs": [], 661 | "source": [ 662 | "def year_changed(change):\n", 663 | " wealth_scat.x, wealth_scat.y, wealth_scat.size = get_data(year_slider.value)\n", 664 | " year_label.text = [str(year_slider.value)]\n", 665 | "\n", 666 | "year_slider.observe(year_changed, 'value')" 667 | ] 668 | }, 669 | { 670 | "cell_type": "markdown", 671 | "metadata": {}, 672 | "source": [ 673 | "#### Add an animation button" 674 | ] 675 | }, 676 | { 677 | "cell_type": "code", 678 | "execution_count": 114, 679 | "metadata": { 680 | "collapsed": true 681 | }, 682 | "outputs": [], 683 | "source": [ 684 | "play_button = Play(min=1800, max=2008, interval=time_interval)\n", 685 | "jslink((play_button, 'value'), (year_slider, 'value'))" 686 | ] 687 | }, 688 | { 689 | "cell_type": "markdown", 690 | "metadata": {}, 691 | "source": [ 692 | "### Displaying the visuslization" 693 | ] 694 | }, 695 | { 696 | "cell_type": "code", 697 | "execution_count": 116, 698 | "metadata": { 699 | "scrolled": false 700 | }, 701 | "outputs": [ 702 | { 703 | "data": { 704 | "application/vnd.jupyter.widget-view+json": { 705 | "model_id": "1a255afeafaf4d1aa28f9b3bd4ebbafe", 706 | "version_major": 2, 707 | "version_minor": 0 708 | }, 709 | "text/plain": [ 710 | "A Jupyter Widget" 711 | ] 712 | }, 713 | "metadata": {}, 714 | "output_type": "display_data" 715 | } 716 | ], 717 | "source": [ 718 | "VBox([HBox([play_button, year_slider]), fig])" 719 | ] 720 | }, 721 | { 722 | "cell_type": "code", 723 | "execution_count": null, 724 | "metadata": { 725 | "collapsed": true 726 | }, 727 | "outputs": [], 728 | "source": [] 729 | } 730 | ], 731 | "metadata": { 732 | "kernelspec": { 733 | "display_name": "Python 3", 734 | "language": "python", 735 | "name": "python3" 736 | }, 737 | "language_info": { 738 | "codemirror_mode": { 739 | "name": "ipython", 740 | "version": 3 741 | }, 742 | "file_extension": ".py", 743 | "mimetype": "text/x-python", 744 | "name": "python", 745 | "nbconvert_exporter": "python", 746 | "pygments_lexer": "ipython3", 747 | "version": "3.5.4" 748 | } 749 | }, 750 | "nbformat": 4, 751 | "nbformat_minor": 1 752 | } 753 | -------------------------------------------------------------------------------- /Section 1/state_codes.csv: -------------------------------------------------------------------------------- 1 | Name,FIPS,USPS 2 | Alabama,1,AL 3 | Alaska,2,AK 4 | Arizona,4,AZ 5 | Arkansas,5,AR 6 | California,6,CA 7 | Colorado,8,CO 8 | Connecticut,9,CT 9 | Delaware,10,DE 10 | District of Columbia,11,DC 11 | Florida,12,FL 12 | Georgia,13,GA 13 | Hawaii,15,HI 14 | Idaho,16,ID 15 | Illinois,17,IL 16 | Indiana,18,IN 17 | Iowa,19,IA 18 | Kansas,20,KS 19 | Kentucky,21,KY 20 | Louisiana,22,LA 21 | Maine,23,ME 22 | Maryland,24,MD 23 | Massachusetts,25,MA 24 | Michigan,26,MI 25 | Minnesota,27,MN 26 | Mississippi,28,MS 27 | Missouri,29,MO 28 | Montana,30,MT 29 | Nebraska,31,NE 30 | Nevada,32,NV 31 | New Hampshire,33,NH 32 | New Jersey,34,NJ 33 | New Mexico,35,NM 34 | New York,36,NY 35 | North Carolina,37,NC 36 | North Dakota,38,ND 37 | Ohio,39,OH 38 | Oklahoma,40,OK 39 | Oregon,41,OR 40 | Pennsylvania,42,PA 41 | Rhode Island,44,RI 42 | South Carolina,45,SC 43 | South Dakota,46,SD 44 | Tennessee,47,TN 45 | Texas,48,TX 46 | Utah,49,UT 47 | Vermont,50,VT 48 | Virginia,51,VA 49 | Washington,53,WA 50 | West Virginia,54,WV 51 | Wisconsin,55,WI 52 | Wyoming,56,WY 53 | -------------------------------------------------------------------------------- /Section 2/README.md: -------------------------------------------------------------------------------- 1 | Section 2 Code Examples -------------------------------------------------------------------------------- /Section 3/Bokeh - NASA Moon Missions.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from bokeh.plotting import figure \n", 12 | "from bokeh.io import output_notebook, show\n", 13 | "from bokeh.models import ColumnDataSource\n", 14 | "import pandas as pd" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 13, 20 | "metadata": {}, 21 | "outputs": [ 22 | { 23 | "data": { 24 | "text/html": [ 25 | "\n", 26 | "
\n", 27 | " \n", 28 | " Loading BokehJS ...\n", 29 | "
" 30 | ] 31 | }, 32 | "metadata": {}, 33 | "output_type": "display_data" 34 | }, 35 | { 36 | "data": { 37 | "application/javascript": [ 38 | "\n", 39 | "(function(root) {\n", 40 | " function now() {\n", 41 | " return new Date();\n", 42 | " }\n", 43 | "\n", 44 | " var force = true;\n", 45 | "\n", 46 | " if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n", 47 | " root._bokeh_onload_callbacks = [];\n", 48 | " root._bokeh_is_loading = undefined;\n", 49 | " }\n", 50 | "\n", 51 | " var JS_MIME_TYPE = 'application/javascript';\n", 52 | " var HTML_MIME_TYPE = 'text/html';\n", 53 | " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", 54 | " var CLASS_NAME = 'output_bokeh rendered_html';\n", 55 | "\n", 56 | " /**\n", 57 | " * Render data to the DOM node\n", 58 | " */\n", 59 | " function render(props, node) {\n", 60 | " var script = document.createElement(\"script\");\n", 61 | " node.appendChild(script);\n", 62 | " }\n", 63 | "\n", 64 | " /**\n", 65 | " * Handle when an output is cleared or removed\n", 66 | " */\n", 67 | " function handleClearOutput(event, handle) {\n", 68 | " var cell = handle.cell;\n", 69 | "\n", 70 | " var id = cell.output_area._bokeh_element_id;\n", 71 | " var server_id = cell.output_area._bokeh_server_id;\n", 72 | " // Clean up Bokeh references\n", 73 | " if (id !== undefined) {\n", 74 | " Bokeh.index[id].model.document.clear();\n", 75 | " delete Bokeh.index[id];\n", 76 | " }\n", 77 | "\n", 78 | " if (server_id !== undefined) {\n", 79 | " // Clean up Bokeh references\n", 80 | " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", 81 | " cell.notebook.kernel.execute(cmd, {\n", 82 | " iopub: {\n", 83 | " output: function(msg) {\n", 84 | " var element_id = msg.content.text.trim();\n", 85 | " Bokeh.index[element_id].model.document.clear();\n", 86 | " delete Bokeh.index[element_id];\n", 87 | " }\n", 88 | " }\n", 89 | " });\n", 90 | " // Destroy server and session\n", 91 | " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", 92 | " cell.notebook.kernel.execute(cmd);\n", 93 | " }\n", 94 | " }\n", 95 | "\n", 96 | " /**\n", 97 | " * Handle when a new output is added\n", 98 | " */\n", 99 | " function handleAddOutput(event, handle) {\n", 100 | " var output_area = handle.output_area;\n", 101 | " var output = handle.output;\n", 102 | "\n", 103 | " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", 104 | " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", 105 | " return\n", 106 | " }\n", 107 | "\n", 108 | " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", 109 | "\n", 110 | " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", 111 | " toinsert[0].firstChild.textContent = output.data[JS_MIME_TYPE];\n", 112 | " // store reference to embed id on output_area\n", 113 | " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", 114 | " }\n", 115 | " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", 116 | " var bk_div = document.createElement(\"div\");\n", 117 | " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", 118 | " var script_attrs = bk_div.children[0].attributes;\n", 119 | " for (var i = 0; i < script_attrs.length; i++) {\n", 120 | " toinsert[0].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", 121 | " }\n", 122 | " // store reference to server id on output_area\n", 123 | " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", 124 | " }\n", 125 | " }\n", 126 | "\n", 127 | " function register_renderer(events, OutputArea) {\n", 128 | "\n", 129 | " function append_mime(data, metadata, element) {\n", 130 | " // create a DOM node to render to\n", 131 | " var toinsert = this.create_output_subarea(\n", 132 | " metadata,\n", 133 | " CLASS_NAME,\n", 134 | " EXEC_MIME_TYPE\n", 135 | " );\n", 136 | " this.keyboard_manager.register_events(toinsert);\n", 137 | " // Render to node\n", 138 | " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", 139 | " render(props, toinsert[0]);\n", 140 | " element.append(toinsert);\n", 141 | " return toinsert\n", 142 | " }\n", 143 | "\n", 144 | " /* Handle when an output is cleared or removed */\n", 145 | " events.on('clear_output.CodeCell', handleClearOutput);\n", 146 | " events.on('delete.Cell', handleClearOutput);\n", 147 | "\n", 148 | " /* Handle when a new output is added */\n", 149 | " events.on('output_added.OutputArea', handleAddOutput);\n", 150 | "\n", 151 | " /**\n", 152 | " * Register the mime type and append_mime function with output_area\n", 153 | " */\n", 154 | " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", 155 | " /* Is output safe? */\n", 156 | " safe: true,\n", 157 | " /* Index of renderer in `output_area.display_order` */\n", 158 | " index: 0\n", 159 | " });\n", 160 | " }\n", 161 | "\n", 162 | " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", 163 | " if (root.Jupyter !== undefined) {\n", 164 | " var events = require('base/js/events');\n", 165 | " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", 166 | "\n", 167 | " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", 168 | " register_renderer(events, OutputArea);\n", 169 | " }\n", 170 | " }\n", 171 | "\n", 172 | " \n", 173 | " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", 174 | " root._bokeh_timeout = Date.now() + 5000;\n", 175 | " root._bokeh_failed_load = false;\n", 176 | " }\n", 177 | "\n", 178 | " var NB_LOAD_WARNING = {'data': {'text/html':\n", 179 | " \"
\\n\"+\n", 180 | " \"

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

\\n\"+\n", 184 | " \"\\n\"+\n", 188 | " \"\\n\"+\n", 189 | " \"from bokeh.resources import INLINE\\n\"+\n", 190 | " \"output_notebook(resources=INLINE)\\n\"+\n", 191 | " \"\\n\"+\n", 192 | " \"
\"}};\n", 193 | "\n", 194 | " function display_loaded() {\n", 195 | " var el = document.getElementById(\"11dbdcc8-9e5c-4713-8907-54eed6db732b\");\n", 196 | " if (el != null) {\n", 197 | " el.textContent = \"BokehJS is loading...\";\n", 198 | " }\n", 199 | " if (root.Bokeh !== undefined) {\n", 200 | " if (el != null) {\n", 201 | " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", 202 | " }\n", 203 | " } else if (Date.now() < root._bokeh_timeout) {\n", 204 | " setTimeout(display_loaded, 100)\n", 205 | " }\n", 206 | " }\n", 207 | "\n", 208 | "\n", 209 | " function run_callbacks() {\n", 210 | " try {\n", 211 | " root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", 212 | " }\n", 213 | " finally {\n", 214 | " delete root._bokeh_onload_callbacks\n", 215 | " }\n", 216 | " console.info(\"Bokeh: all callbacks have finished\");\n", 217 | " }\n", 218 | "\n", 219 | " function load_libs(js_urls, callback) {\n", 220 | " root._bokeh_onload_callbacks.push(callback);\n", 221 | " if (root._bokeh_is_loading > 0) {\n", 222 | " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", 223 | " return null;\n", 224 | " }\n", 225 | " if (js_urls == null || js_urls.length === 0) {\n", 226 | " run_callbacks();\n", 227 | " return null;\n", 228 | " }\n", 229 | " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", 230 | " root._bokeh_is_loading = js_urls.length;\n", 231 | " for (var i = 0; i < js_urls.length; i++) {\n", 232 | " var url = js_urls[i];\n", 233 | " var s = document.createElement('script');\n", 234 | " s.src = url;\n", 235 | " s.async = false;\n", 236 | " s.onreadystatechange = s.onload = function() {\n", 237 | " root._bokeh_is_loading--;\n", 238 | " if (root._bokeh_is_loading === 0) {\n", 239 | " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", 240 | " run_callbacks()\n", 241 | " }\n", 242 | " };\n", 243 | " s.onerror = function() {\n", 244 | " console.warn(\"failed to load library \" + url);\n", 245 | " };\n", 246 | " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", 247 | " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", 248 | " }\n", 249 | " };var element = document.getElementById(\"11dbdcc8-9e5c-4713-8907-54eed6db732b\");\n", 250 | " if (element == null) {\n", 251 | " console.log(\"Bokeh: ERROR: autoload.js configured with elementid '11dbdcc8-9e5c-4713-8907-54eed6db732b' but no matching script tag was found. \")\n", 252 | " return false;\n", 253 | " }\n", 254 | "\n", 255 | " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.14.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.14.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.14.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.14.min.js\"];\n", 256 | "\n", 257 | " var inline_js = [\n", 258 | " function(Bokeh) {\n", 259 | " Bokeh.set_log_level(\"info\");\n", 260 | " },\n", 261 | " \n", 262 | " function(Bokeh) {\n", 263 | " \n", 264 | " },\n", 265 | " function(Bokeh) {\n", 266 | " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.14.min.css\");\n", 267 | " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.14.min.css\");\n", 268 | " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.14.min.css\");\n", 269 | " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.14.min.css\");\n", 270 | " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.14.min.css\");\n", 271 | " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.14.min.css\");\n", 272 | " }\n", 273 | " ];\n", 274 | "\n", 275 | " function run_inline_js() {\n", 276 | " \n", 277 | " if ((root.Bokeh !== undefined) || (force === true)) {\n", 278 | " for (var i = 0; i < inline_js.length; i++) {\n", 279 | " inline_js[i].call(root, root.Bokeh);\n", 280 | " }if (force === true) {\n", 281 | " display_loaded();\n", 282 | " }} else if (Date.now() < root._bokeh_timeout) {\n", 283 | " setTimeout(run_inline_js, 100);\n", 284 | " } else if (!root._bokeh_failed_load) {\n", 285 | " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", 286 | " root._bokeh_failed_load = true;\n", 287 | " } else if (force !== true) {\n", 288 | " var cell = $(document.getElementById(\"11dbdcc8-9e5c-4713-8907-54eed6db732b\")).parents('.cell').data().cell;\n", 289 | " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", 290 | " }\n", 291 | "\n", 292 | " }\n", 293 | "\n", 294 | " if (root._bokeh_is_loading === 0) {\n", 295 | " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", 296 | " run_inline_js();\n", 297 | " } else {\n", 298 | " load_libs(js_urls, function() {\n", 299 | " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", 300 | " run_inline_js();\n", 301 | " });\n", 302 | " }\n", 303 | "}(window));" 304 | ], 305 | "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var 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\n \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 var 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() {\n var el = document.getElementById(\"11dbdcc8-9e5c-4713-8907-54eed6db732b\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n }\n finally {\n delete root._bokeh_onload_callbacks\n }\n console.info(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(js_urls, callback) {\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.log(\"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.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = js_urls.length;\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var s = document.createElement('script');\n s.src = url;\n s.async = false;\n s.onreadystatechange = s.onload = function() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: all BokehJS libraries loaded\");\n run_callbacks()\n }\n };\n s.onerror = function() {\n console.warn(\"failed to load library \" + url);\n };\n console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.getElementsByTagName(\"head\")[0].appendChild(s);\n }\n };var element = document.getElementById(\"11dbdcc8-9e5c-4713-8907-54eed6db732b\");\n if (element == null) {\n console.log(\"Bokeh: ERROR: autoload.js configured with elementid '11dbdcc8-9e5c-4713-8907-54eed6db732b' but no matching script tag was found. \")\n return false;\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.14.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.14.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.14.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.14.min.js\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.14.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.14.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.14.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.14.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.14.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.14.min.css\");\n }\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\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 var cell = $(document.getElementById(\"11dbdcc8-9e5c-4713-8907-54eed6db732b\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(js_urls, function() {\n console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" 306 | }, 307 | "metadata": {}, 308 | "output_type": "display_data" 309 | } 310 | ], 311 | "source": [ 312 | "output_notebook()" 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 14, 318 | "metadata": { 319 | "collapsed": true 320 | }, 321 | "outputs": [], 322 | "source": [ 323 | "manned_data = pd.read_csv(\"manned.csv\")" 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "execution_count": 15, 329 | "metadata": {}, 330 | "outputs": [ 331 | { 332 | "data": { 333 | "text/html": [ 334 | "
\n", 335 | "\n", 348 | "\n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | "
MissionDateLandingCrew Safety
0Apollo 121-Feb-6700
1Apollo 711-Oct-6801
2Apollo 821-Dec-6801
3Apollo 903-Mar-6901
4Apollo 1018-May-6901
5Apollo 1116-Jul-6911
6Apollo 1214-Nov-6911
7Apollo 1311-Apr-7001
8Apollo 1431-Jan-7111
9Apollo 1526-Jul-7111
10Apollo 1616-Apr-7211
11Apollo 1707-Dec-7211
\n", 445 | "
" 446 | ], 447 | "text/plain": [ 448 | " Mission Date Landing Crew Safety\n", 449 | "0 Apollo 1 21-Feb-67 0 0\n", 450 | "1 Apollo 7 11-Oct-68 0 1\n", 451 | "2 Apollo 8 21-Dec-68 0 1\n", 452 | "3 Apollo 9 03-Mar-69 0 1\n", 453 | "4 Apollo 10 18-May-69 0 1\n", 454 | "5 Apollo 11 16-Jul-69 1 1\n", 455 | "6 Apollo 12 14-Nov-69 1 1\n", 456 | "7 Apollo 13 11-Apr-70 0 1\n", 457 | "8 Apollo 14 31-Jan-71 1 1\n", 458 | "9 Apollo 15 26-Jul-71 1 1\n", 459 | "10 Apollo 16 16-Apr-72 1 1\n", 460 | "11 Apollo 17 07-Dec-72 1 1" 461 | ] 462 | }, 463 | "execution_count": 15, 464 | "metadata": {}, 465 | "output_type": "execute_result" 466 | } 467 | ], 468 | "source": [ 469 | "manned_data" 470 | ] 471 | }, 472 | { 473 | "cell_type": "code", 474 | "execution_count": 16, 475 | "metadata": { 476 | "collapsed": true 477 | }, 478 | "outputs": [], 479 | "source": [ 480 | "source = ColumnDataSource(manned_data)" 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": 6, 486 | "metadata": {}, 487 | "outputs": [ 488 | { 489 | "data": { 490 | "text/html": [ 491 | "\n", 492 | "
\n", 493 | "
\n", 494 | "
" 495 | ] 496 | }, 497 | "metadata": {}, 498 | "output_type": "display_data" 499 | }, 500 | { 501 | "data": { 502 | "application/javascript": [ 503 | "(function(root) {\n", 504 | " function embed_document(root) {\n", 505 | " \n", 506 | " var docs_json = {\"00d814c7-a6f3-4a79-8f02-d34ca6aa7646\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"22a8d90d-d410-4e4c-9ca9-932ebe6445c0\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"57bf78c9-683e-41b0-bdb7-7b1337c2c76d\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"formatter\":{\"id\":\"57bf78c9-683e-41b0-bdb7-7b1337c2c76d\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"4529d39d-09b7-4a87-a905-0d57a2bd6b44\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"3560609d-639f-4a34-804f-6d47ea39a421\",\"type\":\"BasicTicker\"}},\"id\":\"b7460ba2-e1d8-4ad3-a4de-e006a89c2dbe\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"Crew Safety\"},\"y\":{\"field\":\"Landing\"}},\"id\":\"d4db77df-59f5-43f5-840b-92b135a56533\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"3560609d-639f-4a34-804f-6d47ea39a421\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null},\"id\":\"c21f73f5-fa2f-4b3a-97e8-8f1b9650ab54\",\"type\":\"DataRange1d\"},{\"attributes\":{\"plot\":{\"id\":\"4529d39d-09b7-4a87-a905-0d57a2bd6b44\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"3560609d-639f-4a34-804f-6d47ea39a421\",\"type\":\"BasicTicker\"}},\"id\":\"d8266439-9d95-4fc3-a57f-50d25f1eb5c8\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"55d1222e-c1a4-4a83-86af-d33af5769e71\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"4529d39d-09b7-4a87-a905-0d57a2bd6b44\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"b59e4593-56b2-4692-8e7a-8dc81bfcb83c\",\"type\":\"BasicTicker\"}},\"id\":\"39444a33-50dc-4ff6-acbf-c3e9a106187e\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"b59e4593-56b2-4692-8e7a-8dc81bfcb83c\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"4529d39d-09b7-4a87-a905-0d57a2bd6b44\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"b59e4593-56b2-4692-8e7a-8dc81bfcb83c\",\"type\":\"BasicTicker\"}},\"id\":\"b77ab58b-44db-47f8-9c3a-271f97816aed\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"77a59e4a-a4cb-4702-811b-75246a8c48ae\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"a0320ba1-1a9d-439c-8f89-7ddb772fbaa6\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"48063221-cc2b-43f3-86fd-85840d3f990f\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"77a59e4a-a4cb-4702-811b-75246a8c48ae\",\"type\":\"BoxAnnotation\"}},\"id\":\"6240ea19-13c6-4221-ba4d-6ca7fbe176b4\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null},\"id\":\"040013e5-d4ee-4fc2-8a06-524e7f00dffc\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"e43ea212-0324-4c51-b79c-7868eb4673e3\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2323e3a7-264f-4b91-8005-1dc1be8ea923\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"d680ad3b-32c0-4791-87bc-499cea599729\",\"type\":\"HelpTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"a0320ba1-1a9d-439c-8f89-7ddb772fbaa6\",\"type\":\"PanTool\"},{\"id\":\"48063221-cc2b-43f3-86fd-85840d3f990f\",\"type\":\"WheelZoomTool\"},{\"id\":\"6240ea19-13c6-4221-ba4d-6ca7fbe176b4\",\"type\":\"BoxZoomTool\"},{\"id\":\"e43ea212-0324-4c51-b79c-7868eb4673e3\",\"type\":\"SaveTool\"},{\"id\":\"2323e3a7-264f-4b91-8005-1dc1be8ea923\",\"type\":\"ResetTool\"},{\"id\":\"d680ad3b-32c0-4791-87bc-499cea599729\",\"type\":\"HelpTool\"}]},\"id\":\"eca00644-bd1d-446a-a69e-52bbab301049\",\"type\":\"Toolbar\"},{\"attributes\":{\"below\":[{\"id\":\"b7460ba2-e1d8-4ad3-a4de-e006a89c2dbe\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"39444a33-50dc-4ff6-acbf-c3e9a106187e\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"b7460ba2-e1d8-4ad3-a4de-e006a89c2dbe\",\"type\":\"LinearAxis\"},{\"id\":\"d8266439-9d95-4fc3-a57f-50d25f1eb5c8\",\"type\":\"Grid\"},{\"id\":\"39444a33-50dc-4ff6-acbf-c3e9a106187e\",\"type\":\"LinearAxis\"},{\"id\":\"b77ab58b-44db-47f8-9c3a-271f97816aed\",\"type\":\"Grid\"},{\"id\":\"77a59e4a-a4cb-4702-811b-75246a8c48ae\",\"type\":\"BoxAnnotation\"},{\"id\":\"2d9cd1d6-d3c3-4a25-9975-f27d603326ed\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"9828fa99-5d5c-44e6-840b-4e3a7fa8e0d6\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"eca00644-bd1d-446a-a69e-52bbab301049\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"c21f73f5-fa2f-4b3a-97e8-8f1b9650ab54\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"e473554b-1f33-4dc9-8deb-8a502828f54e\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"040013e5-d4ee-4fc2-8a06-524e7f00dffc\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"22a8d90d-d410-4e4c-9ca9-932ebe6445c0\",\"type\":\"LinearScale\"}},\"id\":\"4529d39d-09b7-4a87-a905-0d57a2bd6b44\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"9828fa99-5d5c-44e6-840b-4e3a7fa8e0d6\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"55d1222e-c1a4-4a83-86af-d33af5769e71\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"Crew Safety\"},\"y\":{\"field\":\"Landing\"}},\"id\":\"176089bf-6233-47dc-9166-df45b9bbc11a\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"Mission\",\"Date\",\"Landing\",\"Crew Safety\",\"index\"],\"data\":{\"Crew Safety\":[0,1,1,1,1,1,1,1,1,1,1,1],\"Date\":[\"21-Feb-67\",\"11-Oct-68\",\"21-Dec-68\",\"03-Mar-69\",\"18-May-69\",\"16-Jul-69\",\"14-Nov-69\",\"11-Apr-70\",\"31-Jan-71\",\"26-Jul-71\",\"16-Apr-72\",\"07-Dec-72\"],\"Landing\":[0,0,0,0,0,1,1,0,1,1,1,1],\"Mission\":[\"Apollo 1\",\"Apollo 7\",\"Apollo 8\",\"Apollo 9\",\"Apollo 10\",\"Apollo 11\",\"Apollo 12\",\"Apollo 13\",\"Apollo 14\",\"Apollo 15\",\"Apollo 16\",\"Apollo 17\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11]}},\"id\":\"9f151c5f-e9e2-4bbf-af2c-9a245b238f86\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"e473554b-1f33-4dc9-8deb-8a502828f54e\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"9f151c5f-e9e2-4bbf-af2c-9a245b238f86\",\"type\":\"ColumnDataSource\"}},\"id\":\"33280ea8-adb1-4e81-9adb-a207a7ae2bcf\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"9f151c5f-e9e2-4bbf-af2c-9a245b238f86\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"176089bf-6233-47dc-9166-df45b9bbc11a\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"d4db77df-59f5-43f5-840b-92b135a56533\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"33280ea8-adb1-4e81-9adb-a207a7ae2bcf\",\"type\":\"CDSView\"}},\"id\":\"2d9cd1d6-d3c3-4a25-9975-f27d603326ed\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"4529d39d-09b7-4a87-a905-0d57a2bd6b44\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.14\"}};\n", 507 | " var render_items = [{\"docid\":\"00d814c7-a6f3-4a79-8f02-d34ca6aa7646\",\"elementid\":\"aa803cfb-fb51-4643-861e-67b1c7413696\",\"modelid\":\"4529d39d-09b7-4a87-a905-0d57a2bd6b44\"}];\n", 508 | " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", 509 | "\n", 510 | " }\n", 511 | " if (root.Bokeh !== undefined) {\n", 512 | " embed_document(root);\n", 513 | " } else {\n", 514 | " var attempts = 0;\n", 515 | " var timer = setInterval(function(root) {\n", 516 | " if (root.Bokeh !== undefined) {\n", 517 | " embed_document(root);\n", 518 | " clearInterval(timer);\n", 519 | " }\n", 520 | " attempts++;\n", 521 | " if (attempts > 100) {\n", 522 | " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", 523 | " clearInterval(timer);\n", 524 | " }\n", 525 | " }, 10, root)\n", 526 | " }\n", 527 | "})(window);" 528 | ], 529 | "application/vnd.bokehjs_exec.v0+json": "" 530 | }, 531 | "metadata": { 532 | "application/vnd.bokehjs_exec.v0+json": { 533 | "id": "4529d39d-09b7-4a87-a905-0d57a2bd6b44" 534 | } 535 | }, 536 | "output_type": "display_data" 537 | } 538 | ], 539 | "source": [ 540 | "p = figure()\n", 541 | "p.circle(x='Crew Safety', y='Landing', source=source)\n", 542 | "show(p)" 543 | ] 544 | }, 545 | { 546 | "cell_type": "code", 547 | "execution_count": 17, 548 | "metadata": {}, 549 | "outputs": [ 550 | { 551 | "data": { 552 | "text/html": [ 553 | "\n", 554 | "
\n", 555 | "
\n", 556 | "
" 557 | ] 558 | }, 559 | "metadata": {}, 560 | "output_type": "display_data" 561 | }, 562 | { 563 | "data": { 564 | "application/javascript": [ 565 | "(function(root) {\n", 566 | " function embed_document(root) {\n", 567 | " \n", 568 | " var docs_json = {\"360d4179-25e1-44b5-bd92-edabde27b14b\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"4a23fe1f-e3e1-4003-88e8-b40e56761cb8\",\"type\":\"CategoricalScale\"},{\"attributes\":{},\"id\":\"6d2c27aa-4f32-416f-b6fb-02dd7c846312\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"top\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"9e0fbbaa-c6dd-4ed4-9851-e3ef6498fa79\",\"type\":\"VBar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"top\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"c5b55ed0-181d-48fc-a79f-2a6e363802e7\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"3fd49114-8c6e-43b5-af24-65eabe9e15e7\",\"type\":\"CategoricalTicker\"},{\"attributes\":{},\"id\":\"7447e214-3e7c-4a3e-bd47-e2c2321cf0d5\",\"type\":\"LinearScale\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\"},\"id\":\"c5338a10-1de9-47b4-8aef-c6969a8c613c\",\"type\":\"Toolbar\"},{\"attributes\":{\"formatter\":{\"id\":\"486e51ff-495c-4ae0-8648-9889d3c2690c\",\"type\":\"CategoricalTickFormatter\"},\"plot\":{\"id\":\"b0a68410-2732-4bdc-b32f-e4696f8860ec\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"3fd49114-8c6e-43b5-af24-65eabe9e15e7\",\"type\":\"CategoricalTicker\"}},\"id\":\"6ad1460c-c066-4090-8e62-c6d3a0219b44\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"top\"],\"data\":{\"top\":[6,6],\"x\":[\"Landed\",\"Didnot Land\"]}},\"id\":\"46d30202-193b-4320-965e-012bef5ff5fb\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"b0a68410-2732-4bdc-b32f-e4696f8860ec\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"3fd49114-8c6e-43b5-af24-65eabe9e15e7\",\"type\":\"CategoricalTicker\"}},\"id\":\"d65959b0-7810-4868-9c55-a3a6a97e7e03\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"factors\":[\"Landed\",\"Didnot Land\"]},\"id\":\"1b3ff668-0bc6-4e52-85ca-9da5075a665d\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"486e51ff-495c-4ae0-8648-9889d3c2690c\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{},\"id\":\"77333a78-e514-468a-bf93-83e40532ffac\",\"type\":\"BasicTicker\"},{\"attributes\":{\"plot\":null,\"text\":\"Manned Moon Missions\"},\"id\":\"9821cd34-957d-498c-8c2a-a834c0383d32\",\"type\":\"Title\"},{\"attributes\":{\"formatter\":{\"id\":\"6d2c27aa-4f32-416f-b6fb-02dd7c846312\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"b0a68410-2732-4bdc-b32f-e4696f8860ec\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"77333a78-e514-468a-bf93-83e40532ffac\",\"type\":\"BasicTicker\"}},\"id\":\"58f1ee6e-61f7-497d-ad5d-b3752c7d480d\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null,\"start\":0},\"id\":\"d109730c-7bea-4f5f-bde9-7f15f3870c1e\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data_source\":{\"id\":\"46d30202-193b-4320-965e-012bef5ff5fb\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"9e0fbbaa-c6dd-4ed4-9851-e3ef6498fa79\",\"type\":\"VBar\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"c5b55ed0-181d-48fc-a79f-2a6e363802e7\",\"type\":\"VBar\"},\"selection_glyph\":null,\"view\":{\"id\":\"6763b5b8-bdef-46e6-ba1d-47f273afca2d\",\"type\":\"CDSView\"}},\"id\":\"28e83379-67d3-4114-9bda-b9de940503f8\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"b0a68410-2732-4bdc-b32f-e4696f8860ec\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"77333a78-e514-468a-bf93-83e40532ffac\",\"type\":\"BasicTicker\"}},\"id\":\"16ea0698-6100-4949-ab99-9382b5d59f70\",\"type\":\"Grid\"},{\"attributes\":{\"below\":[{\"id\":\"6ad1460c-c066-4090-8e62-c6d3a0219b44\",\"type\":\"CategoricalAxis\"}],\"left\":[{\"id\":\"58f1ee6e-61f7-497d-ad5d-b3752c7d480d\",\"type\":\"LinearAxis\"}],\"plot_height\":250,\"renderers\":[{\"id\":\"6ad1460c-c066-4090-8e62-c6d3a0219b44\",\"type\":\"CategoricalAxis\"},{\"id\":\"d65959b0-7810-4868-9c55-a3a6a97e7e03\",\"type\":\"Grid\"},{\"id\":\"58f1ee6e-61f7-497d-ad5d-b3752c7d480d\",\"type\":\"LinearAxis\"},{\"id\":\"16ea0698-6100-4949-ab99-9382b5d59f70\",\"type\":\"Grid\"},{\"id\":\"28e83379-67d3-4114-9bda-b9de940503f8\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"9821cd34-957d-498c-8c2a-a834c0383d32\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"c5338a10-1de9-47b4-8aef-c6969a8c613c\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1b3ff668-0bc6-4e52-85ca-9da5075a665d\",\"type\":\"FactorRange\"},\"x_scale\":{\"id\":\"4a23fe1f-e3e1-4003-88e8-b40e56761cb8\",\"type\":\"CategoricalScale\"},\"y_range\":{\"id\":\"d109730c-7bea-4f5f-bde9-7f15f3870c1e\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"7447e214-3e7c-4a3e-bd47-e2c2321cf0d5\",\"type\":\"LinearScale\"}},\"id\":\"b0a68410-2732-4bdc-b32f-e4696f8860ec\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"46d30202-193b-4320-965e-012bef5ff5fb\",\"type\":\"ColumnDataSource\"}},\"id\":\"6763b5b8-bdef-46e6-ba1d-47f273afca2d\",\"type\":\"CDSView\"}],\"root_ids\":[\"b0a68410-2732-4bdc-b32f-e4696f8860ec\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.14\"}};\n", 569 | " var render_items = [{\"docid\":\"360d4179-25e1-44b5-bd92-edabde27b14b\",\"elementid\":\"ce46d15b-f92f-4436-a2fa-ca188bc8abd3\",\"modelid\":\"b0a68410-2732-4bdc-b32f-e4696f8860ec\"}];\n", 570 | " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", 571 | "\n", 572 | " }\n", 573 | " if (root.Bokeh !== undefined) {\n", 574 | " embed_document(root);\n", 575 | " } else {\n", 576 | " var attempts = 0;\n", 577 | " var timer = setInterval(function(root) {\n", 578 | " if (root.Bokeh !== undefined) {\n", 579 | " embed_document(root);\n", 580 | " clearInterval(timer);\n", 581 | " }\n", 582 | " attempts++;\n", 583 | " if (attempts > 100) {\n", 584 | " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", 585 | " clearInterval(timer);\n", 586 | " }\n", 587 | " }, 10, root)\n", 588 | " }\n", 589 | "})(window);" 590 | ], 591 | "application/vnd.bokehjs_exec.v0+json": "" 592 | }, 593 | "metadata": { 594 | "application/vnd.bokehjs_exec.v0+json": { 595 | "id": "b0a68410-2732-4bdc-b32f-e4696f8860ec" 596 | } 597 | }, 598 | "output_type": "display_data" 599 | } 600 | ], 601 | "source": [ 602 | "missions = ['Landed', 'Didnot Land']\n", 603 | "\n", 604 | "p = figure(x_range=missions, plot_height=250, title=\"Manned Moon Missions\",\n", 605 | " toolbar_location=None, tools=\"\")\n", 606 | "\n", 607 | "p.vbar(x=missions, top=[6, 6], width=0.9)\n", 608 | "\n", 609 | "p.xgrid.grid_line_color = None\n", 610 | "p.y_range.start = 0\n", 611 | "\n", 612 | "show(p)" 613 | ] 614 | }, 615 | { 616 | "cell_type": "code", 617 | "execution_count": 8, 618 | "metadata": {}, 619 | "outputs": [ 620 | { 621 | "name": "stderr", 622 | "output_type": "stream", 623 | "text": [ 624 | "C:\\ProgramData\\Miniconda3\\lib\\site-packages\\bokeh\\models\\sources.py:138: BokehUserWarning: ColumnDataSource's columns must be of the same length. Current lengths: ('color', 6), ('counts', 2), ('missions', 2)\n", 625 | " \"Current lengths: %s\" % \", \".join(sorted(str((k, len(v))) for k, v in data.items())), BokehUserWarning))\n" 626 | ] 627 | }, 628 | { 629 | "data": { 630 | "text/html": [ 631 | "\n", 632 | "
\n", 633 | "
\n", 634 | "
" 635 | ] 636 | }, 637 | "metadata": {}, 638 | "output_type": "display_data" 639 | }, 640 | { 641 | "data": { 642 | "application/javascript": [ 643 | "(function(root) {\n", 644 | " function embed_document(root) {\n", 645 | " \n", 646 | " var docs_json = {\"d4a1c431-d87b-49db-9753-5cb4efb04633\":{\"roots\":{\"references\":[{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\"},\"id\":\"d2eec5e9-34e8-4f37-ad0d-60b432af601f\",\"type\":\"Toolbar\"},{\"attributes\":{\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"13d6484a-bdee-4343-9d91-02421f98b3ad\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8c526c39-6a0c-497b-8afc-16f5448555f3\",\"type\":\"CategoricalTicker\"}},\"id\":\"ebdbafde-bd13-422c-886a-f0e109d482b3\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"factors\":[\"No crew Fatalities\",\"Crew Fatalities\"]},\"id\":\"1e6f546a-f35c-4c5a-8364-23ebef4e34fb\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"9260f62e-b47b-46aa-98a4-7af62fdfc0d4\",\"type\":\"CategoricalScale\"},{\"attributes\":{\"callback\":null,\"end\":2},\"id\":\"5076e21b-2fa0-453b-8db4-742f7d80c28b\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"78052152-348e-400b-9c44-c6c9081a27e5\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"cd8b3e7a-9dd1-4592-8903-eb65ce61a089\",\"type\":\"CategoricalAxis\"}],\"left\":[{\"id\":\"f53e21aa-38c5-4143-89a7-bbf05e4276de\",\"type\":\"LinearAxis\"}],\"plot_height\":250,\"renderers\":[{\"id\":\"cd8b3e7a-9dd1-4592-8903-eb65ce61a089\",\"type\":\"CategoricalAxis\"},{\"id\":\"ebdbafde-bd13-422c-886a-f0e109d482b3\",\"type\":\"Grid\"},{\"id\":\"f53e21aa-38c5-4143-89a7-bbf05e4276de\",\"type\":\"LinearAxis\"},{\"id\":\"0bb96623-9a2a-47a2-948f-cbac58160f2a\",\"type\":\"Grid\"},{\"id\":\"ea64171e-688f-45fb-b5ce-efb66f858ac2\",\"type\":\"Legend\"},{\"id\":\"88f0a593-b720-42df-9276-5a50d051d4ba\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"d8ccb6ce-2c52-42c2-8734-a41fc472c3ad\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"d2eec5e9-34e8-4f37-ad0d-60b432af601f\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1e6f546a-f35c-4c5a-8364-23ebef4e34fb\",\"type\":\"FactorRange\"},\"x_scale\":{\"id\":\"9260f62e-b47b-46aa-98a4-7af62fdfc0d4\",\"type\":\"CategoricalScale\"},\"y_range\":{\"id\":\"5076e21b-2fa0-453b-8db4-742f7d80c28b\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"095e29aa-c4a8-4bbe-8cdc-f842e5460ef3\",\"type\":\"LinearScale\"}},\"id\":\"13d6484a-bdee-4343-9d91-02421f98b3ad\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"missions\",\"counts\",\"color\"],\"data\":{\"color\":[\"#3288bd\",\"#99d594\",\"#e6f598\",\"#fee08b\",\"#fc8d59\",\"#d53e4f\"],\"counts\":[11,1],\"missions\":[\"No crew Fatalities\",\"Crew Fatalities\"]}},\"id\":\"eb7201ca-2784-47cd-8829-fd0a9696d79c\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"plot\":null,\"text\":\"Missions Counts\"},\"id\":\"d8ccb6ce-2c52-42c2-8734-a41fc472c3ad\",\"type\":\"Title\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"13d6484a-bdee-4343-9d91-02421f98b3ad\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"2f12c91d-38fa-456b-b61a-60fce2ae3b1c\",\"type\":\"BasicTicker\"}},\"id\":\"0bb96623-9a2a-47a2-948f-cbac58160f2a\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2f12c91d-38fa-456b-b61a-60fce2ae3b1c\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"field\":\"color\"},\"line_color\":{\"field\":\"color\"},\"top\":{\"field\":\"counts\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"missions\"}},\"id\":\"ed06657f-8b23-4af4-9c29-10f1dc8fd96b\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"8c526c39-6a0c-497b-8afc-16f5448555f3\",\"type\":\"CategoricalTicker\"},{\"attributes\":{\"formatter\":{\"id\":\"78052152-348e-400b-9c44-c6c9081a27e5\",\"type\":\"CategoricalTickFormatter\"},\"plot\":{\"id\":\"13d6484a-bdee-4343-9d91-02421f98b3ad\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8c526c39-6a0c-497b-8afc-16f5448555f3\",\"type\":\"CategoricalTicker\"}},\"id\":\"cd8b3e7a-9dd1-4592-8903-eb65ce61a089\",\"type\":\"CategoricalAxis\"},{\"attributes\":{},\"id\":\"8507adf6-fa81-4d16-9ca4-4354b899f7e7\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"counts\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"missions\"}},\"id\":\"92a59455-bfa0-423e-bf61-8eb57ec2b716\",\"type\":\"VBar\"},{\"attributes\":{\"formatter\":{\"id\":\"8507adf6-fa81-4d16-9ca4-4354b899f7e7\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"13d6484a-bdee-4343-9d91-02421f98b3ad\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"2f12c91d-38fa-456b-b61a-60fce2ae3b1c\",\"type\":\"BasicTicker\"}},\"id\":\"f53e21aa-38c5-4143-89a7-bbf05e4276de\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data_source\":{\"id\":\"eb7201ca-2784-47cd-8829-fd0a9696d79c\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ed06657f-8b23-4af4-9c29-10f1dc8fd96b\",\"type\":\"VBar\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"92a59455-bfa0-423e-bf61-8eb57ec2b716\",\"type\":\"VBar\"},\"selection_glyph\":null,\"view\":{\"id\":\"71faa0fe-5d8c-4b60-8694-2be615188cf6\",\"type\":\"CDSView\"}},\"id\":\"88f0a593-b720-42df-9276-5a50d051d4ba\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"eb7201ca-2784-47cd-8829-fd0a9696d79c\",\"type\":\"ColumnDataSource\"}},\"id\":\"71faa0fe-5d8c-4b60-8694-2be615188cf6\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"field\":\"missions\"},\"renderers\":[{\"id\":\"88f0a593-b720-42df-9276-5a50d051d4ba\",\"type\":\"GlyphRenderer\"}]},\"id\":\"0a8fd78f-e571-443e-ac14-49ff204d2df5\",\"type\":\"LegendItem\"},{\"attributes\":{\"items\":[{\"id\":\"0a8fd78f-e571-443e-ac14-49ff204d2df5\",\"type\":\"LegendItem\"}],\"orientation\":\"horizontal\",\"plot\":{\"id\":\"13d6484a-bdee-4343-9d91-02421f98b3ad\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"ea64171e-688f-45fb-b5ce-efb66f858ac2\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"095e29aa-c4a8-4bbe-8cdc-f842e5460ef3\",\"type\":\"LinearScale\"}],\"root_ids\":[\"13d6484a-bdee-4343-9d91-02421f98b3ad\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.14\"}};\n", 647 | " var render_items = [{\"docid\":\"d4a1c431-d87b-49db-9753-5cb4efb04633\",\"elementid\":\"918c1778-442d-4466-81f8-056fbd649f52\",\"modelid\":\"13d6484a-bdee-4343-9d91-02421f98b3ad\"}];\n", 648 | " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", 649 | "\n", 650 | " }\n", 651 | " if (root.Bokeh !== undefined) {\n", 652 | " embed_document(root);\n", 653 | " } else {\n", 654 | " var attempts = 0;\n", 655 | " var timer = setInterval(function(root) {\n", 656 | " if (root.Bokeh !== undefined) {\n", 657 | " embed_document(root);\n", 658 | " clearInterval(timer);\n", 659 | " }\n", 660 | " attempts++;\n", 661 | " if (attempts > 100) {\n", 662 | " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", 663 | " clearInterval(timer);\n", 664 | " }\n", 665 | " }, 10, root)\n", 666 | " }\n", 667 | "})(window);" 668 | ], 669 | "application/vnd.bokehjs_exec.v0+json": "" 670 | }, 671 | "metadata": { 672 | "application/vnd.bokehjs_exec.v0+json": { 673 | "id": "13d6484a-bdee-4343-9d91-02421f98b3ad" 674 | } 675 | }, 676 | "output_type": "display_data" 677 | } 678 | ], 679 | "source": [ 680 | "from bokeh.palettes import Spectral6\n", 681 | "\n", 682 | "missions = ['No crew Fatalities', 'Crew Fatalities']\n", 683 | "counts = [11,1]\n", 684 | "\n", 685 | "source = ColumnDataSource(data=dict(missions=missions, counts=counts, color=Spectral6))\n", 686 | "\n", 687 | "p = figure(x_range=missions, y_range=(0,2), plot_height=250, title=\"Missions Counts\",\n", 688 | " toolbar_location=None, tools=\"\")\n", 689 | "\n", 690 | "p.vbar(x='missions', top='counts', width=0.9, color='color', legend=\"missions\", source=source)\n", 691 | "\n", 692 | "p.xgrid.grid_line_color = None\n", 693 | "p.legend.orientation = \"horizontal\"\n", 694 | "p.legend.location = \"top_right\"\n", 695 | "\n", 696 | "show(p)" 697 | ] 698 | }, 699 | { 700 | "cell_type": "code", 701 | "execution_count": 9, 702 | "metadata": {}, 703 | "outputs": [ 704 | { 705 | "data": { 706 | "text/html": [ 707 | "\n", 708 | "
\n", 709 | "
\n", 710 | "
" 711 | ] 712 | }, 713 | "metadata": {}, 714 | "output_type": "display_data" 715 | }, 716 | { 717 | "data": { 718 | "application/javascript": [ 719 | "(function(root) {\n", 720 | " function embed_document(root) {\n", 721 | " \n", 722 | " var docs_json = {\"90c6632c-9c40-473f-8d2c-56a6b8b7d345\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"2ac6c7aa-2f4d-47a6-bc6c-256db7046a81\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"a60984dc-0c72-4740-86f5-06b8d0c523da\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"dff097a8-0673-4b38-aed4-c48ccd8659b3\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"a60984dc-0c72-4740-86f5-06b8d0c523da\",\"type\":\"BasicTicker\"}},\"id\":\"4368d364-49a6-4943-8e07-0c2a52d8f8e8\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"counts\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"77b7946e-ea61-4954-b2c7-92a922e99d0d\",\"type\":\"VBar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"counts\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"4a402c15-690e-4c6e-a365-096db77d9823\",\"type\":\"VBar\"},{\"attributes\":{\"data_source\":{\"id\":\"28c8b65c-fe33-4955-b4c0-912b12c8c495\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"77b7946e-ea61-4954-b2c7-92a922e99d0d\",\"type\":\"VBar\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"4a402c15-690e-4c6e-a365-096db77d9823\",\"type\":\"VBar\"},\"selection_glyph\":null,\"view\":{\"id\":\"f7134c8d-33fd-4414-9e58-33de679c7660\",\"type\":\"CDSView\"}},\"id\":\"3e9fc4d2-3aa3-4893-99ca-1bb103dacda9\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"28c8b65c-fe33-4955-b4c0-912b12c8c495\",\"type\":\"ColumnDataSource\"}},\"id\":\"f7134c8d-33fd-4414-9e58-33de679c7660\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2a5b8f49-0545-4051-9ac5-4df49989bce0\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"callback\":null,\"factors\":[[\"India\",\"2018\"],[\"India\",\"2019\"],[\"India\",\"2021\"],[\"India\",\"2022\"],[\"India\",\"2023\"],[\"USA\",\"2018\"],[\"USA\",\"2019\"],[\"USA\",\"2021\"],[\"USA\",\"2022\"],[\"USA\",\"2023\"],[\"China\",\"2018\"],[\"China\",\"2019\"],[\"China\",\"2021\"],[\"China\",\"2022\"],[\"China\",\"2023\"],[\"Private\",\"2018\"],[\"Private\",\"2019\"],[\"Private\",\"2021\"],[\"Private\",\"2022\"],[\"Private\",\"2023\"],[\"Japan\",\"2018\"],[\"Japan\",\"2019\"],[\"Japan\",\"2021\"],[\"Japan\",\"2022\"],[\"Japan\",\"2023\"]],\"range_padding\":0.1},\"id\":\"3baf40a2-60b5-430e-ad55-6502e8acccde\",\"type\":\"FactorRange\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"counts\"],\"data\":{\"counts\":[1,0,0,0,0,1,10,0,0,1,1,1,0,0,0,1,2,0,0,0,0,2,1,1,0],\"x\":[[\"India\",\"2018\"],[\"India\",\"2019\"],[\"India\",\"2021\"],[\"India\",\"2022\"],[\"India\",\"2023\"],[\"USA\",\"2018\"],[\"USA\",\"2019\"],[\"USA\",\"2021\"],[\"USA\",\"2022\"],[\"USA\",\"2023\"],[\"China\",\"2018\"],[\"China\",\"2019\"],[\"China\",\"2021\"],[\"China\",\"2022\"],[\"China\",\"2023\"],[\"Private\",\"2018\"],[\"Private\",\"2019\"],[\"Private\",\"2021\"],[\"Private\",\"2022\"],[\"Private\",\"2023\"],[\"Japan\",\"2018\"],[\"Japan\",\"2019\"],[\"Japan\",\"2021\"],[\"Japan\",\"2022\"],[\"Japan\",\"2023\"]]}},\"id\":\"28c8b65c-fe33-4955-b4c0-912b12c8c495\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"55bf4f91-1bc0-4a59-9f3d-b307ab2814c5\",\"type\":\"CategoricalAxis\"}],\"left\":[{\"id\":\"1b434cc6-c090-476e-802c-8b254a551569\",\"type\":\"LinearAxis\"}],\"plot_height\":250,\"renderers\":[{\"id\":\"55bf4f91-1bc0-4a59-9f3d-b307ab2814c5\",\"type\":\"CategoricalAxis\"},{\"id\":\"4931ed3f-4e1e-4c22-bcd0-a53777f02494\",\"type\":\"Grid\"},{\"id\":\"1b434cc6-c090-476e-802c-8b254a551569\",\"type\":\"LinearAxis\"},{\"id\":\"4368d364-49a6-4943-8e07-0c2a52d8f8e8\",\"type\":\"Grid\"},{\"id\":\"3e9fc4d2-3aa3-4893-99ca-1bb103dacda9\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"53978f9b-4515-4a49-adba-1839ae9feae8\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"fdaab5f4-937e-441b-9e14-bb9745f11e1e\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"3baf40a2-60b5-430e-ad55-6502e8acccde\",\"type\":\"FactorRange\"},\"x_scale\":{\"id\":\"1f94e4f4-8ca7-4c1b-8f8d-0b1e83b7f210\",\"type\":\"CategoricalScale\"},\"y_range\":{\"id\":\"12be2d8b-239f-484e-9948-d34db5f01823\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"6c8cec45-9aec-40c4-816e-ea573373a7bd\",\"type\":\"LinearScale\"}},\"id\":\"dff097a8-0673-4b38-aed4-c48ccd8659b3\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"start\":0},\"id\":\"12be2d8b-239f-484e-9948-d34db5f01823\",\"type\":\"DataRange1d\"},{\"attributes\":{\"plot\":null,\"text\":\"Mission Counts by Year\"},\"id\":\"53978f9b-4515-4a49-adba-1839ae9feae8\",\"type\":\"Title\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\"},\"id\":\"fdaab5f4-937e-441b-9e14-bb9745f11e1e\",\"type\":\"Toolbar\"},{\"attributes\":{\"formatter\":{\"id\":\"2ac6c7aa-2f4d-47a6-bc6c-256db7046a81\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"dff097a8-0673-4b38-aed4-c48ccd8659b3\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"a60984dc-0c72-4740-86f5-06b8d0c523da\",\"type\":\"BasicTicker\"}},\"id\":\"1b434cc6-c090-476e-802c-8b254a551569\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"6c8cec45-9aec-40c4-816e-ea573373a7bd\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1f94e4f4-8ca7-4c1b-8f8d-0b1e83b7f210\",\"type\":\"CategoricalScale\"},{\"attributes\":{\"grid_line_color\":{\"value\":null},\"plot\":{\"id\":\"dff097a8-0673-4b38-aed4-c48ccd8659b3\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"fa7d1e2c-fa77-4551-b86b-e1eaa086123a\",\"type\":\"CategoricalTicker\"}},\"id\":\"4931ed3f-4e1e-4c22-bcd0-a53777f02494\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"2a5b8f49-0545-4051-9ac5-4df49989bce0\",\"type\":\"CategoricalTickFormatter\"},\"major_label_orientation\":1,\"plot\":{\"id\":\"dff097a8-0673-4b38-aed4-c48ccd8659b3\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"fa7d1e2c-fa77-4551-b86b-e1eaa086123a\",\"type\":\"CategoricalTicker\"}},\"id\":\"55bf4f91-1bc0-4a59-9f3d-b307ab2814c5\",\"type\":\"CategoricalAxis\"},{\"attributes\":{},\"id\":\"fa7d1e2c-fa77-4551-b86b-e1eaa086123a\",\"type\":\"CategoricalTicker\"}],\"root_ids\":[\"dff097a8-0673-4b38-aed4-c48ccd8659b3\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.14\"}};\n", 723 | " var render_items = [{\"docid\":\"90c6632c-9c40-473f-8d2c-56a6b8b7d345\",\"elementid\":\"65d8c81f-26e2-49e3-bf54-f709fdad8af9\",\"modelid\":\"dff097a8-0673-4b38-aed4-c48ccd8659b3\"}];\n", 724 | " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", 725 | "\n", 726 | " }\n", 727 | " if (root.Bokeh !== undefined) {\n", 728 | " embed_document(root);\n", 729 | " } else {\n", 730 | " var attempts = 0;\n", 731 | " var timer = setInterval(function(root) {\n", 732 | " if (root.Bokeh !== undefined) {\n", 733 | " embed_document(root);\n", 734 | " clearInterval(timer);\n", 735 | " }\n", 736 | " attempts++;\n", 737 | " if (attempts > 100) {\n", 738 | " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", 739 | " clearInterval(timer);\n", 740 | " }\n", 741 | " }, 10, root)\n", 742 | " }\n", 743 | "})(window);" 744 | ], 745 | "application/vnd.bokehjs_exec.v0+json": "" 746 | }, 747 | "metadata": { 748 | "application/vnd.bokehjs_exec.v0+json": { 749 | "id": "dff097a8-0673-4b38-aed4-c48ccd8659b3" 750 | } 751 | }, 752 | "output_type": "display_data" 753 | } 754 | ], 755 | "source": [ 756 | "from bokeh.models import FactorRange\n", 757 | "\n", 758 | "countries = ['India', 'USA', 'China', 'Private', 'Japan']\n", 759 | "years = ['2018', '2019', '2021', '2022', '2023']\n", 760 | "\n", 761 | "data = {'countries' : countries,\n", 762 | " '2018' : [1, 1, 1, 1, 0],\n", 763 | " '2019' : [0, 10, 1, 2, 2],\n", 764 | " '2021' : [0, 0, 0, 0, 1],\n", 765 | " '2022' : [0, 0, 0, 0, 1],\n", 766 | " '2023' : [0, 1, 0, 0, 0]}\n", 767 | "\n", 768 | "\n", 769 | "x = [ (country, year) for country in countries for year in years ]\n", 770 | "counts = sum(zip(data['2018'], data['2019'], data['2021'], data['2022'], data['2023']), ()) # like an hstack\n", 771 | "\n", 772 | "source = ColumnDataSource(data=dict(x=x, counts=counts))\n", 773 | "\n", 774 | "p = figure(x_range=FactorRange(*x), plot_height=250, title=\"Mission Counts by Year\",\n", 775 | " toolbar_location=None, tools=\"\")\n", 776 | "\n", 777 | "p.vbar(x='x', top='counts', width=0.9, source=source)\n", 778 | "\n", 779 | "p.y_range.start = 0\n", 780 | "p.x_range.range_padding = 0.1\n", 781 | "p.xaxis.major_label_orientation = 1\n", 782 | "p.xgrid.grid_line_color = None\n", 783 | "\n", 784 | "show(p)" 785 | ] 786 | }, 787 | { 788 | "cell_type": "code", 789 | "execution_count": null, 790 | "metadata": { 791 | "collapsed": true 792 | }, 793 | "outputs": [], 794 | "source": [] 795 | } 796 | ], 797 | "metadata": { 798 | "kernelspec": { 799 | "display_name": "Python 3", 800 | "language": "python", 801 | "name": "python3" 802 | }, 803 | "language_info": { 804 | "codemirror_mode": { 805 | "name": "ipython", 806 | "version": 3 807 | }, 808 | "file_extension": ".py", 809 | "mimetype": "text/x-python", 810 | "name": "python", 811 | "nbconvert_exporter": "python", 812 | "pygments_lexer": "ipython3", 813 | "version": "3.6.0" 814 | } 815 | }, 816 | "nbformat": 4, 817 | "nbformat_minor": 1 818 | } 819 | -------------------------------------------------------------------------------- /Section 3/README.md: -------------------------------------------------------------------------------- 1 | Section 3 Code Examples -------------------------------------------------------------------------------- /Section 3/manned.csv: -------------------------------------------------------------------------------- 1 | Mission,Date,Landing,Crew Safety 2 | Apollo 1,21-Feb-67,0,0 3 | Apollo 7,11-Oct-68,0,1 4 | Apollo 8,21-Dec-68,0,1 5 | Apollo 9,03-Mar-69,0,1 6 | Apollo 10,18-May-69,0,1 7 | Apollo 11,16-Jul-69,1,1 8 | Apollo 12,14-Nov-69,1,1 9 | Apollo 13,11-Apr-70,0,1 10 | Apollo 14,31-Jan-71,1,1 11 | Apollo 15,26-Jul-71,1,1 12 | Apollo 16,16-Apr-72,1,1 13 | Apollo 17,07-Dec-72,1,1 14 | -------------------------------------------------------------------------------- /Section 3/weather/data/2015_weather.csv: -------------------------------------------------------------------------------- 1 | airport,date,actual_max_temp,average_max_temp,record_max_temp,actual_min_temp,average_min_temp,record_min_temp 2 | BOS,2015-06-10,82,74,96,62,58,45 3 | BOS,2015-04-28,64,60,93,42,45,30 4 | SEA,2015-02-03,50,49,63,42,37,8 5 | SEA,2015-11-28,45,48,59,27,37,17 6 | SEA,2015-11-27,49,48,58,29,38,19 7 | AUS,2015-06-26,92,94,106,74,71,62 8 | BOS,2015-11-15,54,52,78,37,38,17 9 | BOS,2015-11-26,59,48,67,38,35,12 10 | SEA,2015-03-23,52,55,68,42,40,28 11 | BOS,2015-02-08,29,38,66,13,24,-12 12 | SEA,2015-06-15,86,70,88,61,52,43 13 | BOS,2015-05-23,65,68,93,44,52,40 14 | AUS,2015-06-17,87,93,104,67,70,62 15 | BOS,2015-02-19,30,40,65,10,25,4 16 | BOS,2015-11-04,60,55,78,49,41,21 17 | SEA,2015-08-27,85,75,88,58,55,44 18 | BOS,2015-05-14,69,65,86,49,49,37 19 | AUS,2015-04-17,74,80,100,65,55,31 20 | BOS,2015-02-22,39,40,66,28,26,2 21 | AUS,2015-04-02,83,77,91,67,51,38 22 | SEA,2015-08-05,74,77,93,54,57,49 23 | BOS,2015-07-15,82,82,98,67,66,54 24 | BOS,2015-03-14,39,45,76,31,30,12 25 | SEA,2015-05-05,58,63,86,45,45,36 26 | AUS,2015-07-28,99,96,104,73,72,68 27 | AUS,2015-02-28,37,68,87,31,42,24 28 | BOS,2015-07-04,72,81,104,62,64,53 29 | BOS,2015-03-05,39,42,72,18,28,-4 30 | SEA,2015-12-24,42,45,62,36,35,16 31 | AUS,2015-02-17,54,65,92,30,40,22 32 | AUS,2015-05-29,87,90,98,64,67,54 33 | BOS,2015-10-16,61,61,88,50,46,30 34 | AUS,2015-02-02,47,63,85,33,37,8 35 | SEA,2015-12-22,46,45,57,37,35,14 36 | BOS,2015-08-05,85,81,100,65,66,54 37 | SEA,2015-06-18,76,70,94,57,52,43 38 | BOS,2015-06-17,69,77,95,59,60,48 39 | AUS,2015-12-19,67,63,84,28,36,24 40 | AUS,2015-06-04,89,91,99,63,69,58 41 | BOS,2015-06-20,75,78,98,58,61,47 42 | SEA,2015-05-14,64,65,87,49,47,36 43 | SEA,2015-11-15,48,51,62,36,40,6 44 | SEA,2015-05-23,61,66,90,53,49,37 45 | AUS,2015-08-26,95,95,103,69,70,60 46 | SEA,2015-09-03,65,74,92,51,54,45 47 | SEA,2015-01-27,52,48,58,47,37,11 48 | SEA,2015-09-16,68,71,91,50,52,44 49 | SEA,2015-04-14,53,58,83,37,42,33 50 | BOS,2015-10-15,62,62,86,47,47,31 51 | AUS,2015-06-10,92,92,100,68,70,57 52 | BOS,2015-10-04,56,66,86,51,51,34 53 | AUS,2015-06-01,87,90,100,60,68,56 54 | AUS,2015-10-23,80,80,92,70,54,38 55 | SEA,2015-08-15,71,77,96,57,56,47 56 | SEA,2015-10-28,57,56,66,52,44,30 57 | AUS,2015-09-09,93,92,100,73,67,54 58 | AUS,2015-08-23,99,96,105,72,71,63 59 | SEA,2015-07-23,79,77,99,58,56,47 60 | SEA,2015-01-11,49,47,59,45,37,12 61 | AUS,2015-07-21,95,96,102,71,72,66 62 | AUS,2015-02-23,37,66,94,30,41,24 63 | SEA,2015-09-25,60,68,85,55,50,36 64 | BOS,2015-07-03,76,81,102,63,64,51 65 | AUS,2015-02-18,64,65,89,25,40,25 66 | SEA,2015-03-06,59,52,68,38,38,26 67 | AUS,2015-01-19,72,62,86,29,36,14 68 | AUS,2015-07-07,92,94,104,77,71,64 69 | AUS,2015-02-09,81,64,87,45,38,23 70 | SEA,2015-03-13,63,53,70,46,39,28 71 | BOS,2015-03-22,39,47,83,21,33,8 72 | BOS,2015-09-14,72,73,92,57,58,40 73 | AUS,2015-07-12,93,95,106,69,72,64 74 | BOS,2015-08-02,88,81,102,68,66,54 75 | BOS,2015-09-05,73,76,93,58,61,48 76 | BOS,2015-04-01,47,50,76,30,36,13 77 | AUS,2015-12-10,79,64,83,45,38,18 78 | SEA,2015-11-29,35,48,59,28,37,18 79 | SEA,2015-10-06,65,63,78,50,48,37 80 | AUS,2015-01-28,80,62,80,36,37,18 81 | SEA,2015-12-09,54,46,61,46,36,18 82 | BOS,2015-06-30,75,80,95,60,64,52 83 | SEA,2015-05-24,64,66,89,52,49,37 84 | BOS,2015-09-27,64,68,86,48,53,37 85 | SEA,2015-01-20,50,48,64,38,37,16 86 | AUS,2015-06-20,84,93,103,71,71,63 87 | BOS,2015-01-25,38,36,59,19,22,-5 88 | SEA,2015-10-16,68,60,70,48,46,35 89 | SEA,2015-01-31,45,49,61,38,37,0 90 | BOS,2015-10-21,61,60,82,53,45,30 91 | SEA,2015-10-09,67,62,79,54,47,35 92 | AUS,2015-11-23,64,69,87,27,43,27 93 | SEA,2015-04-04,55,57,75,39,41,31 94 | AUS,2015-08-07,99,97,106,74,72,70 95 | BOS,2015-12-22,60,39,62,48,26,1 96 | BOS,2015-10-03,54,66,85,49,51,35 97 | AUS,2015-03-29,82,75,95,53,50,30 98 | AUS,2015-10-28,81,78,89,51,52,33 99 | BOS,2015-02-04,38,37,64,14,23,-2 100 | BOS,2015-12-15,61,41,66,48,28,-2 101 | BOS,2015-05-07,79,63,95,53,47,37 102 | AUS,2015-03-30,80,76,91,61,50,31 103 | AUS,2015-10-31,73,77,90,63,51,36 104 | SEA,2015-01-09,50,46,56,38,37,13 105 | BOS,2015-02-15,20,39,61,-2,25,-14 106 | BOS,2015-11-06,73,55,73,62,41,21 107 | AUS,2015-03-07,60,69,90,34,44,25 108 | SEA,2015-01-18,57,48,60,45,37,9 109 | AUS,2015-07-26,96,96,106,70,72,69 110 | SEA,2015-02-24,52,51,62,36,37,24 111 | BOS,2015-01-12,38,36,61,33,22,-10 112 | AUS,2015-10-29,82,78,88,47,52,33 113 | BOS,2015-08-25,81,78,96,67,64,46 114 | BOS,2015-01-07,26,36,63,4,23,-2 115 | AUS,2015-08-29,94,95,108,65,70,62 116 | AUS,2015-07-08,90,95,105,76,72,68 117 | SEA,2015-05-09,80,63,81,49,46,38 118 | BOS,2015-07-24,81,82,98,66,66,54 119 | BOS,2015-03-25,49,48,78,28,34,10 120 | AUS,2015-05-16,88,87,97,66,64,48 121 | AUS,2015-07-19,96,96,106,74,72,64 122 | AUS,2015-12-06,69,65,83,38,39,19 123 | AUS,2015-04-25,91,82,93,66,57,42 124 | AUS,2015-05-25,84,89,100,66,66,58 125 | BOS,2015-04-06,42,52,82,36,38,20 126 | BOS,2015-08-16,90,80,97,67,65,47 127 | BOS,2015-04-13,69,55,86,41,40,20 128 | AUS,2015-01-21,56,62,81,48,37,17 129 | AUS,2015-12-20,68,63,84,46,36,24 130 | SEA,2015-02-13,60,50,60,44,37,18 131 | SEA,2015-10-12,65,61,72,51,47,40 132 | AUS,2015-01-30,58,63,88,44,37,0 133 | AUS,2015-12-31,55,62,82,36,36,18 134 | SEA,2015-02-06,58,49,64,50,37,18 135 | BOS,2015-10-01,59,67,90,54,52,36 136 | BOS,2015-11-10,53,53,78,44,40,25 137 | SEA,2015-06-07,88,68,90,60,51,44 138 | AUS,2015-08-13,102,97,103,75,72,59 139 | AUS,2015-08-24,98,96,107,72,71,61 140 | BOS,2015-04-22,67,58,88,43,43,26 141 | SEA,2015-10-30,63,55,66,53,43,30 142 | SEA,2015-11-03,51,54,74,41,43,29 143 | AUS,2015-11-11,87,73,86,64,47,26 144 | AUS,2015-03-26,69,75,91,47,49,26 145 | BOS,2015-12-12,61,42,68,49,29,2 146 | SEA,2015-06-12,68,69,85,53,51,38 147 | AUS,2015-09-07,99,93,102,70,68,50 148 | BOS,2015-04-09,37,53,85,33,39,24 149 | SEA,2015-08-22,80,76,86,54,56,45 150 | AUS,2015-09-12,90,91,102,63,67,56 151 | AUS,2015-04-10,71,79,93,55,53,34 152 | SEA,2015-07-01,90,73,94,63,54,45 153 | SEA,2015-08-19,89,76,89,61,56,48 154 | AUS,2015-03-11,59,70,92,54,45,20 155 | AUS,2015-09-29,93,87,99,65,61,45 156 | SEA,2015-07-10,70,75,90,62,55,46 157 | BOS,2015-03-11,57,44,67,37,30,9 158 | AUS,2015-07-27,97,96,104,73,72,67 159 | AUS,2015-05-19,87,87,97,73,65,46 160 | SEA,2015-11-30,42,48,59,25,37,21 161 | AUS,2015-01-04,51,62,80,29,36,15 162 | SEA,2015-12-21,42,45,56,37,35,12 163 | AUS,2015-10-11,95,84,95,59,58,43 164 | SEA,2015-04-22,60,60,78,41,43,35 165 | AUS,2015-01-15,58,62,78,35,36,17 166 | AUS,2015-08-28,96,95,110,64,70,61 167 | BOS,2015-06-07,67,73,97,53,57,45 168 | SEA,2015-05-31,77,67,90,53,50,35 169 | BOS,2015-07-09,69,81,99,63,65,53 170 | AUS,2015-08-19,97,96,106,76,71,65 171 | BOS,2015-06-12,79,75,96,65,59,46 172 | AUS,2015-09-21,94,89,102,69,64,54 173 | SEA,2015-11-25,45,49,59,32,38,18 174 | BOS,2015-06-25,81,79,97,64,62,48 175 | BOS,2015-11-17,45,51,76,33,38,14 176 | SEA,2015-06-20,77,71,88,55,53,43 177 | SEA,2015-11-12,52,52,60,41,41,13 178 | BOS,2015-11-20,61,50,74,44,37,15 179 | SEA,2015-09-19,70,70,82,58,52,40 180 | AUS,2015-12-29,50,62,80,35,36,20 181 | SEA,2015-09-04,65,74,87,50,54,42 182 | AUS,2015-06-22,87,93,103,71,71,64 183 | BOS,2015-06-22,77,78,97,61,62,46 184 | SEA,2015-03-25,58,55,64,45,40,31 185 | BOS,2015-10-22,73,59,83,52,45,28 186 | BOS,2015-05-25,81,69,92,58,53,40 187 | AUS,2015-06-15,89,92,105,70,70,62 188 | BOS,2015-12-06,59,44,72,36,32,8 189 | SEA,2015-08-29,72,75,91,56,55,44 190 | AUS,2015-03-09,54,70,86,48,45,29 191 | BOS,2015-05-16,71,66,93,55,50,34 192 | AUS,2015-04-19,89,81,99,55,56,40 193 | BOS,2015-02-24,19,41,70,2,26,-7 194 | AUS,2015-03-18,78,72,90,60,47,31 195 | SEA,2015-01-05,54,46,55,49,36,15 196 | SEA,2015-08-03,83,77,90,63,57,46 197 | BOS,2015-01-09,30,36,64,19,22,-4 198 | BOS,2015-07-13,77,82,97,67,66,56 199 | SEA,2015-07-24,73,77,95,56,56,43 200 | SEA,2015-05-07,69,63,81,43,46,33 201 | AUS,2015-02-26,52,67,88,26,42,23 202 | SEA,2015-02-28,54,51,68,38,38,24 203 | BOS,2015-03-07,38,43,69,17,29,2 204 | AUS,2015-06-19,84,93,103,71,70,58 205 | AUS,2015-02-15,67,65,83,50,39,23 206 | SEA,2015-03-03,51,52,69,32,38,20 207 | BOS,2015-03-30,45,50,81,30,35,10 208 | AUS,2015-02-04,57,63,84,42,38,20 209 | BOS,2015-07-27,86,82,98,68,66,52 210 | BOS,2015-03-29,42,49,86,26,35,4 211 | BOS,2015-09-11,73,74,99,63,59,40 212 | BOS,2015-08-07,73,81,98,64,66,55 213 | AUS,2015-10-16,90,82,92,52,56,41 214 | AUS,2015-04-29,75,83,93,49,59,42 215 | BOS,2015-09-08,96,75,96,72,60,48 216 | SEA,2015-10-18,59,59,70,55,45,32 217 | AUS,2015-10-08,88,85,96,63,58,44 218 | SEA,2015-04-30,63,61,85,46,44,32 219 | SEA,2015-05-12,60,64,81,51,47,38 220 | SEA,2015-12-02,51,47,57,40,37,25 221 | AUS,2015-10-03,85,86,96,51,60,49 222 | SEA,2015-05-21,78,66,93,53,48,39 223 | BOS,2015-11-29,44,47,69,32,34,8 224 | SEA,2015-06-26,89,72,90,64,53,46 225 | AUS,2015-06-08,92,91,99,64,69,58 226 | AUS,2015-06-30,91,94,100,71,71,63 227 | SEA,2015-01-25,63,48,63,45,37,7 228 | BOS,2015-01-28,24,36,63,13,22,-5 229 | SEA,2015-09-14,62,71,93,51,53,46 230 | SEA,2015-04-16,64,59,81,39,42,34 231 | SEA,2015-11-02,52,54,72,45,43,31 232 | BOS,2015-10-13,72,62,87,55,47,30 233 | SEA,2015-04-03,52,56,71,41,41,32 234 | BOS,2015-12-09,46,43,70,37,31,-8 235 | AUS,2015-08-02,98,97,106,67,72,64 236 | BOS,2015-10-06,64,65,86,48,50,31 237 | AUS,2015-06-03,89,90,98,62,68,58 238 | AUS,2015-10-25,65,80,92,58,53,32 239 | SEA,2015-08-17,81,76,96,57,56,45 240 | BOS,2015-05-02,50,62,91,39,46,33 241 | AUS,2015-08-12,103,97,104,74,72,64 242 | SEA,2015-01-02,42,46,56,32,36,6 243 | BOS,2015-10-17,56,61,89,40,46,27 244 | SEA,2015-01-17,56,47,56,38,37,15 245 | AUS,2015-07-23,98,96,103,74,72,62 246 | AUS,2015-02-21,78,66,101,55,41,30 247 | SEA,2015-09-23,69,68,83,47,51,40 248 | SEA,2015-02-23,55,51,61,33,37,27 249 | SEA,2015-03-04,55,52,68,31,38,11 250 | BOS,2016-01-01,41,37,70,33,24,-3 251 | AUS,2015-07-05,91,94,105,73,71,64 252 | SEA,2015-03-15,51,54,65,43,39,30 253 | BOS,2015-03-20,32,46,79,23,32,10 254 | BOS,2015-09-16,81,72,96,65,57,42 255 | AUS,2015-07-14,95,95,105,73,72,67 256 | AUS,2015-04-20,72,81,93,53,56,33 257 | BOS,2015-09-03,82,76,97,70,62,47 258 | BOS,2015-04-03,59,51,77,45,37,21 259 | BOS,2015-06-03,56,72,98,47,56,44 260 | AUS,2015-12-16,65,63,80,37,37,18 261 | SEA,2015-10-04,73,64,76,50,48,38 262 | BOS,2015-04-16,60,56,87,41,41,28 263 | AUS,2015-12-25,73,63,91,51,36,11 264 | SEA,2015-10-15,70,60,77,49,46,35 265 | AUS,2015-09-23,93,89,101,62,63,45 266 | SEA,2015-07-28,82,77,97,57,57,47 267 | BOS,2015-01-27,19,36,63,14,22,-6 268 | BOS,2015-04-30,55,61,86,44,45,31 269 | SEA,2015-06-02,64,68,94,55,50,40 270 | SEA,2015-10-29,59,55,65,54,43,31 271 | AUS,2015-08-14,99,97,104,74,72,62 272 | AUS,2015-08-22,97,96,103,74,71,65 273 | BOS,2015-04-27,57,60,92,45,44,33 274 | AUS,2015-08-05,99,97,105,77,72,64 275 | SEA,2015-10-24,59,57,72,48,44,33 276 | AUS,2015-11-16,76,71,84,66,45,26 277 | SEA,2015-06-28,83,72,91,65,54,45 278 | SEA,2015-03-29,60,56,78,48,41,24 279 | BOS,2015-02-02,31,37,55,10,23,-5 280 | BOS,2015-12-17,52,41,64,39,28,-4 281 | BOS,2015-05-05,70,63,89,54,47,35 282 | BOS,2015-10-24,49,59,80,38,44,30 283 | BOS,2015-02-17,23,39,61,10,25,-11 284 | AUS,2015-03-05,46,69,93,26,44,17 285 | AUS,2015-09-19,93,90,101,67,64,47 286 | BOS,2015-02-28,31,41,63,12,27,2 287 | AUS,2015-03-14,77,71,93,48,46,29 288 | BOS,2015-01-14,25,35,69,14,22,-8 289 | AUS,2015-07-31,101,97,103,77,72,64 290 | BOS,2015-11-02,64,56,83,51,42,26 291 | BOS,2015-01-05,50,36,63,17,23,-4 292 | AUS,2015-05-05,83,84,101,61,60,44 293 | SEA,2015-12-19,47,45,56,37,35,17 294 | BOS,2015-07-22,84,82,103,69,66,55 295 | AUS,2015-05-14,86,86,96,66,63,45 296 | AUS,2015-01-01,39,62,84,35,36,24 297 | AUS,2015-04-27,84,83,94,60,58,45 298 | AUS,2015-05-23,86,88,99,64,66,50 299 | BOS,2015-04-08,42,53,85,34,38,21 300 | BOS,2015-08-14,86,80,101,63,65,52 301 | BOS,2015-07-29,92,82,97,71,66,55 302 | BOS,2015-04-11,57,54,78,42,39,25 303 | AUS,2015-01-27,80,62,84,35,37,21 304 | SEA,2015-02-11,55,50,62,42,37,23 305 | BOS,2015-10-20,66,60,79,45,45,32 306 | BOS,2015-11-07,69,54,77,50,40,25 307 | BOS,2015-11-12,57,53,76,46,39,25 308 | BOS,2015-09-22,68,70,94,56,55,35 309 | BOS,2015-11-25,44,48,70,30,35,13 310 | AUS,2015-11-28,45,67,88,40,41,25 311 | BOS,2015-04-20,51,57,89,41,42,21 312 | SEA,2015-09-09,76,73,89,57,53,40 313 | AUS,2015-03-20,73,73,92,59,48,24 314 | BOS,2015-05-31,77,71,96,48,55,39 315 | AUS,2015-11-02,81,77,87,57,50,29 316 | SEA,2015-06-10,78,69,83,52,51,44 317 | BOS,2015-05-20,66,67,91,51,51,40 318 | SEA,2015-08-24,75,76,88,54,55,45 319 | AUS,2015-09-10,96,92,100,73,67,52 320 | AUS,2015-04-12,82,79,92,65,54,38 321 | BOS,2015-02-21,34,40,63,4,26,-1 322 | BOS,2015-06-04,58,72,96,49,56,44 323 | AUS,2015-03-13,76,71,91,50,46,25 324 | AUS,2015-04-07,86,78,95,65,52,28 325 | SEA,2015-07-12,79,75,97,62,55,47 326 | BOS,2015-04-05,49,52,84,32,37,11 327 | AUS,2015-05-02,81,84,96,50,60,47 328 | BOS,2015-03-17,51,46,70,28,31,10 329 | SEA,2015-12-10,53,46,66,43,36,16 330 | AUS,2015-10-06,88,85,95,57,59,42 331 | BOS,2015-03-02,37,42,66,26,28,0 332 | AUS,2015-01-06,68,62,84,31,36,20 333 | AUS,2015-12-09,75,64,81,43,38,23 334 | AUS,2015-02-12,60,64,83,40,39,16 335 | AUS,2015-10-13,93,83,98,55,57,39 336 | AUS,2015-01-13,42,62,78,36,36,18 337 | BOS,2015-04-18,60,57,94,43,42,26 338 | AUS,2015-12-30,56,62,82,38,36,19 339 | SEA,2015-12-26,40,45,62,32,36,22 340 | BOS,2015-06-14,74,76,96,62,59,46 341 | BOS,2015-10-30,61,57,78,42,42,28 342 | BOS,2015-11-08,56,54,74,44,40,25 343 | SEA,2015-11-23,44,49,58,32,38,10 344 | BOS,2015-06-27,68,79,96,57,63,52 345 | SEA,2015-12-29,45,45,54,33,36,8 346 | BOS,2015-06-09,78,74,96,64,58,47 347 | BOS,2015-11-19,55,50,75,43,37,14 348 | SEA,2015-11-10,52,52,63,39,41,30 349 | BOS,2015-11-22,49,49,74,36,36,9 350 | SEA,2015-09-06,61,73,90,53,54,45 351 | AUS,2015-11-18,72,70,83,38,45,26 352 | SEA,2015-06-24,78,72,92,61,53,45 353 | SEA,2015-09-13,69,72,87,55,53,39 354 | SEA,2015-03-27,65,55,71,48,41,26 355 | AUS,2015-11-09,75,74,88,50,48,26 356 | SEA,2016-01-01,46,46,58,28,36,10 357 | BOS,2015-05-27,85,70,96,65,53,39 358 | AUS,2015-06-13,94,92,102,73,70,57 359 | AUS,2015-10-19,85,82,93,44,55,42 360 | BOS,2015-12-04,48,45,70,38,32,2 361 | BOS,2015-12-28,38,38,63,29,24,-2 362 | BOS,2015-05-10,89,64,94,59,48,34 363 | AUS,2015-06-06,90,91,103,66,69,59 364 | BOS,2015-02-26,22,41,68,17,27,-1 365 | SEA,2015-08-10,84,77,98,61,56,46 366 | SEA,2015-11-09,50,52,64,41,41,27 367 | BOS,2015-05-09,71,64,95,46,48,35 368 | BOS,2015-10-26,52,58,84,43,43,25 369 | SEA,2015-07-19,95,77,95,63,56,48 370 | SEA,2015-01-07,46,46,59,42,37,19 371 | SEA,2015-08-01,92,77,92,60,57,50 372 | BOS,2015-07-11,83,82,100,68,65,54 373 | BOS,2015-03-18,30,46,74,22,32,5 374 | SEA,2015-01-12,52,47,59,40,37,13 375 | AUS,2015-02-24,37,67,86,30,41,24 376 | SEA,2015-10-31,60,55,71,53,43,30 377 | BOS,2015-03-09,48,43,72,26,29,5 378 | SEA,2015-03-01,52,52,62,34,38,23 379 | BOS,2015-09-28,78,68,90,56,53,37 380 | AUS,2015-07-02,89,94,104,69,71,63 381 | AUS,2015-02-06,58,63,79,37,38,21 382 | SEA,2015-03-10,56,53,68,41,39,20 383 | SEA,2015-07-27,74,77,95,54,57,46 384 | BOS,2015-09-13,66,74,93,63,59,45 385 | BOS,2015-08-01,90,81,98,68,66,54 386 | BOS,2015-08-23,71,79,96,67,64,49 387 | BOS,2015-08-18,87,80,95,71,65,53 388 | BOS,2015-12-07,56,44,76,37,31,4 389 | SEA,2015-05-10,67,64,80,52,46,38 390 | SEA,2015-12-04,51,47,57,43,36,21 391 | SEA,2015-11-19,48,50,60,37,39,25 392 | SEA,2015-05-27,76,67,89,53,49,37 393 | SEA,2015-12-31,42,46,56,28,36,13 394 | SEA,2015-01-23,54,48,56,47,37,16 395 | SEA,2015-06-30,87,73,96,59,54,43 396 | BOS,2015-09-20,75,71,97,57,56,42 397 | SEA,2015-04-10,57,57,74,46,42,30 398 | SEA,2015-11-11,52,52,65,43,41,15 399 | SEA,2015-05-29,79,67,85,55,50,35 400 | BOS,2015-10-11,68,63,82,48,48,32 401 | SEA,2015-04-01,55,56,82,42,41,29 402 | BOS,2015-05-19,65,67,90,52,51,38 403 | AUS,2015-10-27,85,79,94,53,52,37 404 | BOS,2015-11-03,73,56,76,47,41,27 405 | BOS,2015-02-07,29,37,56,16,23,-5 406 | BOS,2015-12-18,52,40,61,39,27,-6 407 | AUS,2015-04-09,86,78,95,65,53,33 408 | SEA,2015-08-08,77,77,98,60,56,47 409 | SEA,2015-01-15,46,47,58,34,37,15 410 | AUS,2015-07-25,96,96,103,68,72,67 411 | SEA,2015-09-21,65,69,88,49,51,39 412 | SEA,2015-02-21,54,51,67,42,37,25 413 | BOS,2015-01-11,33,36,62,15,22,-4 414 | SEA,2015-11-07,54,53,62,49,42,31 415 | SEA,2015-09-30,65,66,82,50,49,36 416 | BOS,2015-07-30,91,82,98,74,66,52 417 | SEA,2015-03-17,56,54,65,40,40,27 418 | BOS,2015-03-26,56,48,79,38,34,13 419 | AUS,2015-05-13,71,86,94,63,63,48 420 | AUS,2015-07-16,94,95,106,69,72,62 421 | AUS,2015-12-05,66,65,86,30,39,19 422 | AUS,2015-04-22,79,81,94,66,56,39 423 | BOS,2015-09-01,79,77,96,69,62,50 424 | SEA,2015-04-28,60,61,76,48,44,31 425 | BOS,2015-08-13,82,80,100,66,65,53 426 | AUS,2015-12-14,74,64,83,40,37,22 427 | SEA,2015-10-02,60,65,79,50,49,35 428 | BOS,2015-04-14,65,55,81,52,40,26 429 | AUS,2015-12-23,82,63,82,46,36,6 430 | SEA,2015-02-16,59,50,59,42,37,13 431 | SEA,2015-05-28,82,67,92,54,50,38 432 | BOS,2015-06-18,76,77,94,57,60,47 433 | BOS,2015-01-30,34,36,63,19,22,-5 434 | BOS,2015-01-21,34,35,68,22,22,0 435 | SEA,2015-04-19,70,59,74,47,42,33 436 | AUS,2015-08-16,97,97,104,70,72,59 437 | AUS,2015-11-27,77,67,87,42,41,22 438 | SEA,2015-04-08,63,57,70,43,41,29 439 | BOS,2015-12-26,55,38,61,41,25,-4 440 | AUS,2015-11-14,67,72,88,55,46,25 441 | AUS,2015-03-25,80,74,88,61,49,28 442 | AUS,2015-06-28,90,94,105,73,71,61 443 | AUS,2015-08-30,92,95,104,70,70,62 444 | BOS,2015-12-11,58,43,68,43,30,-2 445 | AUS,2015-11-05,87,75,90,73,49,27 446 | AUS,2015-09-02,93,94,106,65,69,63 447 | SEA,2015-11-22,50,49,58,35,39,14 448 | BOS,2015-02-11,25,38,62,14,24,-4 449 | BOS,2015-08-28,75,78,99,64,63,47 450 | AUS,2015-03-03,59,68,85,41,43,19 451 | AUS,2015-09-17,94,90,105,73,65,50 452 | SEA,2015-07-04,92,74,91,59,54,43 453 | AUS,2015-03-16,75,72,85,47,47,32 454 | BOS,2015-01-16,38,35,64,15,22,-7 455 | SEA,2015-07-15,79,76,92,58,56,49 456 | BOS,2015-01-03,37,37,64,22,23,-1 457 | AUS,2015-05-07,84,85,102,72,61,44 458 | AUS,2015-10-01,93,86,98,65,61,45 459 | SEA,2015-12-17,44,45,57,39,35,11 460 | BOS,2015-07-20,92,82,99,70,66,54 461 | BOS,2015-06-19,86,77,96,63,61,47 462 | AUS,2015-01-03,60,62,86,34,36,17 463 | AUS,2015-12-02,68,66,85,40,40,25 464 | SEA,2015-10-23,55,57,73,45,45,32 465 | AUS,2015-05-21,75,88,97,62,65,46 466 | SEA,2015-04-27,77,61,81,51,44,31 467 | AUS,2015-01-16,63,62,82,27,36,19 468 | AUS,2015-05-30,87,90,100,68,68,53 469 | BOS,2015-06-02,49,72,96,46,55,42 470 | AUS,2015-01-25,72,62,89,32,37,19 471 | AUS,2015-08-21,90,96,104,70,71,66 472 | SEA,2015-02-02,52,49,64,41,37,8 473 | SEA,2015-11-26,49,48,61,30,38,25 474 | BOS,2015-06-28,59,80,97,52,63,52 475 | BOS,2015-11-14,47,52,71,37,39,16 476 | BOS,2015-08-26,85,78,99,69,63,50 477 | BOS,2015-11-27,64,48,72,48,35,8 478 | BOS,2015-12-05,53,45,66,39,32,4 479 | AUS,2015-03-22,77,74,98,52,48,30 480 | BOS,2015-09-26,63,69,95,50,54,34 481 | SEA,2015-03-20,57,54,69,48,40,26 482 | BOS,2015-02-09,25,38,61,14,24,-18 483 | SEA,2015-06-16,73,70,88,52,52,42 484 | BOS,2015-05-22,76,68,93,52,52,39 485 | SEA,2015-03-31,55,56,75,43,41,30 486 | BOS,2015-02-18,29,39,66,17,25,-4 487 | BOS,2015-12-03,52,46,69,41,33,0 488 | SEA,2015-08-26,83,75,91,57,55,46 489 | BOS,2015-05-15,67,66,93,48,50,36 490 | AUS,2015-04-14,77,80,95,55,54,30 491 | BOS,2015-02-23,33,40,65,4,26,-3 492 | AUS,2015-04-05,66,77,89,58,52,36 493 | SEA,2015-08-04,79,77,95,58,57,44 494 | BOS,2015-07-16,68,82,99,59,66,54 495 | BOS,2015-03-15,41,45,72,27,31,12 496 | SEA,2015-05-02,65,62,74,46,45,33 497 | AUS,2015-07-29,99,96,105,71,72,68 498 | AUS,2015-10-04,86,86,95,53,60,45 499 | BOS,2015-03-04,43,42,70,33,28,2 500 | AUS,2015-01-08,37,62,81,21,36,13 501 | SEA,2015-12-25,41,45,60,36,35,24 502 | AUS,2015-02-10,80,64,89,38,38,19 503 | BOS,2015-09-19,79,71,92,62,56,42 504 | AUS,2015-10-15,93,83,93,54,56,38 505 | AUS,2015-09-24,92,88,101,62,63,50 506 | AUS,2015-01-11,49,62,85,35,36,14 507 | AUS,2015-11-19,77,70,87,41,44,26 508 | AUS,2015-02-01,73,63,83,44,37,13 509 | AUS,2015-11-21,65,69,86,38,43,28 510 | SEA,2015-02-18,54,50,62,40,37,20 511 | BOS,2015-06-16,71,76,96,56,60,48 512 | SEA,2015-02-09,56,49,62,47,37,26 513 | AUS,2015-12-18,57,63,81,30,37,25 514 | SEA,2015-11-21,48,50,62,33,39,21 515 | BOS,2015-06-21,76,78,96,60,61,48 516 | SEA,2015-05-17,67,65,90,51,48,39 517 | AUS,2015-06-27,90,94,104,75,71,60 518 | SEA,2015-12-01,50,47,57,39,37,20 519 | SEA,2015-11-16,48,51,68,35,40,21 520 | AUS,2015-09-26,93,88,107,64,62,47 521 | BOS,2015-10-28,65,57,81,42,43,28 522 | SEA,2015-06-22,77,71,92,55,53,45 523 | SEA,2015-01-28,54,48,57,41,37,7 524 | SEA,2015-09-11,81,72,93,59,53,40 525 | SEA,2015-04-15,57,58,74,38,42,33 526 | BOS,2015-05-29,72,70,94,55,54,39 527 | AUS,2015-06-11,92,92,99,70,70,58 528 | AUS,2015-12-27,75,62,80,38,36,20 529 | BOS,2015-05-12,87,65,88,48,49,33 530 | BOS,2015-10-19,48,60,84,31,45,28 531 | AUS,2015-10-20,87,81,92,48,55,36 532 | SEA,2015-08-12,83,77,96,62,56,49 533 | SEA,2015-01-01,42,46,58,26,36,10 534 | SEA,2015-07-20,80,77,100,62,56,50 535 | SEA,2015-01-10,46,47,59,43,37,12 536 | AUS,2015-02-22,56,66,98,37,41,25 537 | SEA,2015-09-26,65,67,78,50,50,39 538 | BOS,2015-07-02,80,80,98,64,64,51 539 | SEA,2015-07-31,94,77,94,64,57,47 540 | SEA,2015-12-27,40,45,58,35,36,20 541 | AUS,2015-02-19,70,66,92,29,40,23 542 | SEA,2015-03-07,62,52,66,39,38,26 543 | AUS,2015-01-18,70,62,83,32,36,19 544 | SEA,2015-11-01,54,55,67,48,43,30 545 | AUS,2015-02-08,75,64,85,50,38,21 546 | SEA,2015-03-12,64,53,68,49,39,25 547 | BOS,2015-09-15,84,73,94,62,58,41 548 | AUS,2015-07-11,93,95,104,65,72,64 549 | BOS,2015-08-03,90,81,98,68,66,55 550 | SEA,2015-10-21,61,58,72,47,45,32 551 | BOS,2015-09-04,72,76,94,62,61,43 552 | AUS,2015-12-13,77,64,81,48,37,12 553 | AUS,2015-06-05,88,91,98,62,69,56 554 | SEA,2015-10-07,61,63,75,57,48,37 555 | AUS,2015-01-29,76,63,85,44,37,17 556 | SEA,2015-12-06,55,46,57,45,36,19 557 | SEA,2015-07-09,84,75,93,58,55,48 558 | SEA,2015-05-25,60,66,84,52,49,37 559 | AUS,2015-08-27,96,95,108,67,70,64 560 | SEA,2015-01-21,45,48,62,31,37,13 561 | BOS,2015-01-24,34,36,62,31,22,-13 562 | SEA,2015-04-12,56,58,79,42,42,33 563 | SEA,2015-01-30,47,49,59,34,37,7 564 | BOS,2015-12-30,37,37,63,25,24,-15 565 | AUS,2015-11-22,56,69,87,31,43,31 566 | SEA,2015-04-07,58,57,78,44,41,29 567 | AUS,2015-08-06,100,97,104,73,72,68 568 | BOS,2015-12-21,53,39,62,32,26,-5 569 | BOS,2015-10-02,54,66,88,50,51,34 570 | BOS,2015-09-24,74,70,90,58,54,39 571 | BOS,2015-02-05,36,37,65,7,23,-10 572 | BOS,2015-05-06,73,63,90,52,47,33 573 | AUS,2015-10-30,75,78,88,66,51,32 574 | BOS,2015-02-14,30,39,59,3,25,-3 575 | BOS,2015-07-18,78,82,98,64,66,54 576 | SEA,2015-07-06,85,74,94,60,55,45 577 | SEA,2015-02-27,50,51,70,44,37,20 578 | BOS,2015-01-13,35,36,63,15,22,-9 579 | SEA,2015-03-08,63,53,67,39,38,28 580 | BOS,2015-01-06,18,36,69,15,23,-10 581 | AUS,2015-05-08,83,85,97,70,61,48 582 | AUS,2015-07-09,93,95,104,68,72,67 583 | SEA,2015-03-19,60,54,63,47,40,27 584 | BOS,2015-03-24,35,48,72,20,33,6 585 | AUS,2015-05-11,77,86,98,67,62,44 586 | AUS,2015-07-18,96,95,103,74,72,67 587 | BOS,2015-08-08,76,81,96,61,66,52 588 | AUS,2015-12-07,69,65,81,35,39,17 589 | AUS,2015-04-24,84,82,94,68,57,41 590 | AUS,2015-05-26,88,89,96,64,67,58 591 | BOS,2015-04-07,42,53,90,36,38,16 592 | BOS,2015-08-11,72,80,99,64,65,54 593 | SEA,2015-05-19,71,65,88,53,48,38 594 | BOS,2015-04-12,68,54,85,39,40,20 595 | AUS,2015-01-22,53,62,83,40,37,20 596 | AUS,2015-12-21,74,63,81,50,36,22 597 | SEA,2015-02-14,58,50,63,44,37,22 598 | SEA,2015-10-11,64,61,83,51,47,37 599 | BOS,2015-04-29,54,61,85,48,45,31 600 | SEA,2015-02-05,56,49,62,47,37,14 601 | AUS,2015-06-21,87,93,102,71,71,58 602 | BOS,2015-01-23,37,36,68,24,22,-6 603 | SEA,2015-06-06,85,68,90,56,51,42 604 | AUS,2015-08-10,103,97,107,71,72,63 605 | SEA,2015-10-08,66,63,80,56,47,39 606 | AUS,2015-11-25,77,68,85,59,42,23 607 | BOS,2015-04-23,51,58,86,38,43,29 608 | AUS,2015-08-09,101,97,106,74,72,66 609 | AUS,2015-11-12,71,73,87,56,47,26 610 | AUS,2015-03-27,80,75,96,49,50,30 611 | BOS,2015-04-24,50,59,84,37,43,28 612 | BOS,2015-12-13,53,42,63,46,29,4 613 | SEA,2015-08-30,68,75,88,55,55,45 614 | SEA,2015-06-13,75,69,94,49,52,42 615 | AUS,2015-09-04,96,93,110,73,69,58 616 | BOS,2015-02-13,22,38,66,7,24,-3 617 | BOS,2015-11-05,76,55,79,50,41,17 618 | SEA,2015-08-21,72,76,88,58,56,46 619 | AUS,2015-03-01,43,68,88,35,43,25 620 | AUS,2015-09-15,92,91,99,69,66,56 621 | AUS,2015-04-11,70,79,92,59,53,42 622 | SEA,2015-07-02,93,73,92,64,54,43 623 | SEA,2015-09-28,70,67,84,49,50,38 624 | AUS,2015-03-10,64,70,93,47,45,28 625 | BOS,2015-01-18,51,35,63,20,22,-3 626 | SEA,2015-07-17,82,76,96,57,56,48 627 | BOS,2015-08-24,75,79,96,68,64,50 628 | BOS,2015-01-01,33,37,70,22,24,-3 629 | AUS,2015-05-01,83,83,95,48,59,42 630 | BOS,2015-03-12,43,44,71,25,30,7 631 | SEA,2015-10-19,63,58,72,54,45,28 632 | SEA,2015-12-15,44,45,63,34,35,19 633 | AUS,2015-05-18,88,87,95,71,64,51 634 | AUS,2015-01-05,51,62,78,24,36,14 635 | SEA,2015-06-27,92,72,92,63,53,45 636 | AUS,2015-10-10,89,84,93,65,58,43 637 | SEA,2015-04-21,63,59,76,44,43,29 638 | AUS,2015-01-14,41,62,79,38,36,11 639 | SEA,2015-05-30,73,67,87,50,50,36 640 | SEA,2015-06-19,75,70,92,56,52,43 641 | BOS,2015-06-11,88,75,98,64,58,46 642 | BOS,2015-10-09,72,64,87,52,49,32 643 | SEA,2015-11-24,44,49,59,37,38,14 644 | SEA,2015-11-06,60,53,65,47,42,30 645 | BOS,2015-11-16,61,51,76,39,38,12 646 | SEA,2015-11-13,56,51,62,49,41,14 647 | AUS,2015-09-30,93,87,97,66,61,46 648 | BOS,2015-11-21,48,50,74,38,37,10 649 | AUS,2015-08-25,99,95,104,71,71,61 650 | SEA,2015-09-05,69,74,88,48,54,44 651 | BOS,2015-11-30,38,47,69,28,34,-2 652 | SEA,2015-03-22,53,55,68,43,40,28 653 | SEA,2015-06-14,82,70,86,53,52,43 654 | BOS,2015-05-24,83,69,93,51,52,36 655 | AUS,2015-06-16,81,92,102,72,70,57 656 | SEA,2015-04-25,56,60,77,42,43,34 657 | BOS,2015-12-01,45,46,71,32,33,0 658 | SEA,2015-08-28,74,75,95,60,55,46 659 | BOS,2015-05-17,67,66,92,52,50,39 660 | AUS,2015-04-16,79,80,95,63,55,32 661 | BOS,2015-02-25,35,41,65,14,27,-6 662 | AUS,2015-09-25,92,88,108,67,63,50 663 | AUS,2015-04-03,85,77,89,66,51,35 664 | BOS,2015-10-27,54,58,85,38,43,25 665 | SEA,2015-08-02,87,77,89,61,57,46 666 | BOS,2015-01-08,19,36,67,-1,22,-6 667 | BOS,2015-07-14,82,82,100,65,66,55 668 | SEA,2015-07-25,70,77,94,58,56,47 669 | SEA,2015-05-04,63,62,85,45,45,33 670 | BOS,2015-07-05,83,81,101,61,65,52 671 | BOS,2015-03-06,24,43,70,9,28,-8 672 | AUS,2015-02-16,66,65,83,37,40,20 673 | AUS,2015-05-28,88,89,100,73,67,56 674 | BOS,2015-03-31,50,50,89,37,36,15 675 | AUS,2015-02-03,43,63,80,38,38,16 676 | BOS,2015-03-28,40,49,85,30,35,11 677 | BOS,2015-08-04,89,81,96,66,66,52 678 | BOS,2015-08-27,82,78,100,65,63,47 679 | AUS,2015-04-28,64,83,93,51,58,43 680 | AUS,2015-09-20,94,89,103,62,64,52 681 | BOS,2015-06-23,88,78,96,60,62,47 682 | SEA,2015-05-15,68,65,85,49,47,38 683 | SEA,2015-06-21,78,71,89,57,53,45 684 | SEA,2015-11-14,49,51,65,43,40,9 685 | SEA,2015-05-22,62,66,86,53,49,37 686 | SEA,2015-09-02,67,74,98,52,55,41 687 | SEA,2015-01-26,61,48,61,43,37,9 688 | AUS,2015-06-23,91,93,103,71,71,63 689 | SEA,2015-09-17,65,70,85,55,52,42 690 | SEA,2015-04-17,66,59,74,43,42,33 691 | BOS,2015-10-23,59,59,84,40,44,29 692 | BOS,2015-10-14,68,62,81,51,47,31 693 | SEA,2015-04-02,56,56,76,42,41,30 694 | BOS,2015-10-29,75,57,79,57,43,26 695 | BOS,2015-12-08,44,44,65,37,31,-4 696 | BOS,2015-10-05,61,65,87,48,50,28 697 | AUS,2015-06-02,88,90,100,64,68,56 698 | AUS,2015-10-22,85,81,92,70,54,41 699 | BOS,2015-12-20,41,40,63,31,27,-11 700 | SEA,2015-08-14,65,77,95,59,56,44 701 | AUS,2015-09-08,97,92,103,74,68,56 702 | SEA,2015-01-03,41,46,58,35,36,6 703 | SEA,2015-07-22,75,77,96,57,56,49 704 | SEA,2015-01-16,53,47,55,42,37,13 705 | AUS,2015-07-20,96,96,103,68,72,66 706 | AUS,2015-02-20,73,66,94,52,40,29 707 | SEA,2015-09-24,72,68,89,52,50,38 708 | SEA,2015-02-22,53,51,64,38,37,30 709 | AUS,2015-06-18,88,93,105,72,70,63 710 | SEA,2015-03-05,56,52,66,37,38,13 711 | AUS,2015-06-25,91,93,107,68,71,62 712 | AUS,2015-07-06,92,94,103,76,71,63 713 | SEA,2015-03-14,57,53,64,49,39,26 714 | BOS,2015-03-23,33,47,78,18,33,6 715 | BOS,2015-09-17,89,72,91,64,57,44 716 | AUS,2015-07-13,95,95,104,72,72,68 717 | AUS,2015-10-17,87,82,96,54,56,35 718 | BOS,2015-09-02,91,77,100,66,62,49 719 | AUS,2015-12-11,81,64,83,47,38,24 720 | SEA,2015-10-05,74,64,82,49,48,38 721 | SEA,2015-12-08,60,46,59,50,36,13 722 | SEA,2015-10-14,59,60,80,50,46,36 723 | AUS,2015-11-07,63,75,88,57,49,30 724 | AUS,2015-06-09,94,92,99,68,69,64 725 | BOS,2015-01-26,29,36,72,11,22,0 726 | SEA,2015-06-01,61,67,94,53,50,40 727 | AUS,2015-08-15,97,97,104,74,72,62 728 | AUS,2015-11-20,77,70,85,42,44,30 729 | SEA,2015-04-05,62,57,73,37,41,29 730 | AUS,2015-08-04,98,97,105,71,72,66 731 | BOS,2015-12-23,56,39,67,45,26,-12 732 | AUS,2015-11-17,76,71,89,42,45,26 733 | AUS,2015-03-28,81,75,97,39,50,28 734 | BOS,2015-02-03,22,37,59,6,23,-5 735 | BOS,2015-12-14,58,42,66,46,29,0 736 | BOS,2015-05-04,84,62,90,49,46,33 737 | AUS,2015-03-31,79,76,89,66,51,33 738 | AUS,2015-09-01,93,94,107,69,69,63 739 | SEA,2015-01-08,46,46,54,35,37,18 740 | BOS,2015-02-16,19,39,60,-3,25,-9 741 | AUS,2015-03-06,54,69,98,21,44,21 742 | AUS,2015-09-18,95,90,99,72,65,48 743 | SEA,2015-01-19,50,48,62,43,37,18 744 | SEA,2015-07-07,81,74,90,57,55,47 745 | SEA,2015-02-25,50,51,64,44,37,20 746 | BOS,2015-01-15,31,35,66,25,22,-12 747 | AUS,2015-07-30,100,96,105,69,72,67 748 | BOS,2015-01-04,52,36,64,35,23,-4 749 | SEA,2015-05-08,75,63,84,47,46,36 750 | SEA,2015-12-18,48,45,54,40,35,18 751 | BOS,2015-07-25,69,82,96,62,66,53 752 | AUS,2015-05-17,83,87,93,65,64,50 753 | AUS,2015-12-01,57,66,84,47,40,23 754 | AUS,2015-04-26,84,82,96,69,58,44 755 | AUS,2015-05-24,82,89,99,62,66,58 756 | SEA,2015-04-24,54,60,76,43,43,30 757 | BOS,2015-08-17,91,80,97,71,65,51 758 | BOS,2015-12-02,51,46,65,39,33,4 759 | BOS,2015-04-10,55,54,85,36,39,26 760 | AUS,2015-01-20,80,62,82,33,36,15 761 | BOS,2015-07-08,88,81,99,69,65,55 762 | SEA,2015-02-12,62,50,66,49,37,21 763 | SEA,2015-10-13,62,61,75,49,46,35 764 | AUS,2015-01-31,62,63,82,43,37,-5 765 | AUS,2015-09-22,94,89,103,65,63,47 766 | SEA,2015-02-07,54,49,66,49,37,20 767 | BOS,2015-11-11,50,53,69,46,39,24 768 | SEA,2015-06-23,79,71,92,53,53,40 769 | AUS,2015-08-31,96,94,106,67,70,62 770 | SEA,2015-07-08,86,75,95,58,55,47 771 | SEA,2015-09-18,67,70,85,55,52,41 772 | BOS,2015-04-21,65,58,88,46,42,21 773 | SEA,2015-10-17,67,59,74,53,46,34 774 | AUS,2015-11-10,75,73,90,54,48,31 775 | AUS,2015-03-21,61,73,90,56,48,26 776 | AUS,2015-11-01,75,77,88,59,51,36 777 | SEA,2015-06-11,76,69,84,52,51,40 778 | AUS,2015-09-06,98,93,101,72,68,52 779 | BOS,2015-12-24,69,39,69,48,26,0 780 | SEA,2015-08-23,82,76,91,57,56,46 781 | AUS,2015-09-13,90,91,102,59,66,59 782 | AUS,2015-04-13,84,79,94,62,54,31 783 | SEA,2015-08-18,86,76,88,59,56,47 784 | AUS,2015-03-12,70,71,89,52,46,19 785 | AUS,2015-09-28,87,87,105,65,62,46 786 | AUS,2015-04-06,84,78,91,63,52,38 787 | SEA,2015-07-11,72,75,98,62,55,49 788 | AUS,2016-01-01,50,62,84,44,36,24 789 | BOS,2015-11-01,62,56,77,48,42,26 790 | AUS,2015-05-03,83,84,94,48,60,42 791 | BOS,2015-03-10,48,44,71,31,29,6 792 | SEA,2015-05-01,65,62,85,48,44,28 793 | SEA,2015-12-13,46,46,59,43,35,19 794 | AUS,2015-10-07,91,85,96,58,59,42 795 | BOS,2015-03-01,30,42,63,12,27,-1 796 | AUS,2015-01-07,51,62,80,30,36,12 797 | SEA,2015-12-20,46,45,57,40,35,14 798 | AUS,2015-02-13,67,64,83,35,39,23 799 | BOS,2015-08-20,78,79,98,68,64,52 800 | SEA,2015-04-23,54,60,72,44,43,31 801 | AUS,2015-01-12,47,62,80,42,36,12 802 | BOS,2015-07-26,79,82,96,63,66,56 803 | BOS,2015-06-06,67,73,100,52,57,45 804 | BOS,2015-06-13,85,75,98,64,59,46 805 | BOS,2015-10-31,52,57,81,38,42,27 806 | BOS,2015-11-09,60,54,74,41,40,24 807 | AUS,2015-10-09,87,84,93,67,58,39 808 | BOS,2015-06-24,84,79,95,67,62,46 809 | BOS,2015-11-18,48,51,73,31,37,14 810 | BOS,2015-04-25,56,59,83,36,44,27 811 | BOS,2015-11-23,42,49,77,30,36,11 812 | SEA,2015-09-07,70,73,94,56,54,45 813 | BOS,2015-08-31,90,77,97,71,62,47 814 | SEA,2015-09-12,80,72,85,58,53,44 815 | SEA,2015-03-24,55,55,68,43,40,30 816 | AUS,2015-11-08,69,74,90,53,48,33 817 | BOS,2015-05-26,87,69,97,64,53,39 818 | AUS,2015-06-14,88,92,109,71,70,60 819 | SEA,2015-06-05,80,68,92,55,51,41 820 | AUS,2015-03-08,53,70,88,48,44,26 821 | BOS,2015-05-11,80,64,91,50,48,33 822 | AUS,2015-04-18,76,80,99,56,55,35 823 | BOS,2015-02-27,27,41,64,15,27,-4 824 | SEA,2015-08-11,86,77,96,62,56,46 825 | AUS,2015-03-19,80,73,90,57,48,29 826 | BOS,2015-05-08,71,64,87,46,48,34 827 | AUS,2015-04-01,81,76,92,66,51,36 828 | SEA,2015-07-18,92,76,93,64,56,47 829 | SEA,2015-01-04,51,46,61,38,36,14 830 | SEA,2015-04-29,61,61,80,45,44,31 831 | BOS,2015-07-12,89,82,97,72,65,54 832 | BOS,2015-03-19,34,46,74,19,32,5 833 | SEA,2015-05-06,62,63,87,45,45,36 834 | AUS,2015-02-27,37,67,89,31,42,13 835 | BOS,2015-07-07,84,81,99,65,65,52 836 | BOS,2015-03-08,42,43,68,24,29,7 837 | AUS,2015-02-14,77,65,84,40,39,24 838 | BOS,2015-10-08,62,64,88,51,49,35 839 | SEA,2015-03-02,52,52,64,40,38,22 840 | AUS,2015-07-03,90,94,102,73,71,60 841 | AUS,2015-02-05,52,63,83,39,38,17 842 | SEA,2015-11-05,53,53,65,46,42,31 843 | BOS,2015-09-23,68,70,96,54,55,35 844 | SEA,2015-07-26,72,77,92,57,56,49 845 | BOS,2015-09-10,77,74,95,64,60,41 846 | BOS,2015-08-06,82,81,97,65,66,52 847 | SEA,2015-08-06,77,77,91,59,57,50 848 | BOS,2015-09-09,93,75,93,72,60,45 849 | SEA,2015-10-01,70,65,89,49,49,35 850 | SEA,2015-05-13,54,64,84,50,47,37 851 | BOS,2015-06-08,76,74,97,53,57,42 852 | SEA,2015-12-05,50,47,55,43,36,23 853 | SEA,2015-05-20,74,66,92,51,48,40 854 | SEA,2015-12-30,42,45,56,30,36,6 855 | BOS,2015-11-28,60,47,74,41,34,11 856 | SEA,2015-01-24,58,48,58,52,37,10 857 | SEA,2015-07-29,90,77,103,58,57,45 858 | BOS,2015-01-29,32,36,65,10,22,-6 859 | SEA,2015-06-25,87,72,88,60,53,45 860 | SEA,2015-09-15,64,71,93,50,52,42 861 | SEA,2015-04-11,53,58,80,42,42,35 862 | BOS,2015-10-12,76,63,90,51,48,31 863 | AUS,2015-08-03,97,97,105,68,72,65 864 | BOS,2015-10-07,72,65,90,52,49,30 865 | AUS,2015-10-24,77,80,93,60,53,37 866 | SEA,2015-08-16,77,77,98,58,56,50 867 | BOS,2015-12-19,40,40,64,33,27,-10 868 | BOS,2015-05-03,67,62,92,45,46,31 869 | AUS,2015-04-08,78,78,92,68,53,34 870 | SEA,2015-01-14,43,47,59,33,37,8 871 | AUS,2015-07-22,96,96,102,75,72,66 872 | SEA,2015-09-22,66,69,92,46,51,37 873 | SEA,2015-02-20,52,50,62,45,37,25 874 | BOS,2015-07-31,89,81,98,73,66,54 875 | BOS,2015-09-30,78,67,87,57,52,36 876 | AUS,2015-07-04,91,94,103,73,71,63 877 | SEA,2015-03-16,57,54,66,43,39,29 878 | BOS,2015-03-21,41,47,83,28,32,7 879 | AUS,2015-05-12,68,86,97,66,63,48 880 | AUS,2015-07-15,95,95,105,70,72,66 881 | AUS,2015-04-21,79,81,92,47,56,44 882 | BOS,2015-08-22,73,79,93,67,64,47 883 | BOS,2015-04-02,61,51,75,30,36,19 884 | BOS,2015-08-12,85,80,101,68,65,53 885 | AUS,2015-12-17,66,63,85,33,37,21 886 | BOS,2015-07-28,86,82,99,70,66,54 887 | BOS,2015-04-17,65,56,93,47,41,26 888 | AUS,2015-12-24,73,63,82,44,36,14 889 | SEA,2015-02-17,61,50,58,40,37,23 890 | AUS,2015-04-30,80,83,93,44,59,44 891 | BOS,2015-10-25,63,58,80,48,44,26 892 | BOS,2015-01-31,21,36,62,11,23,-8 893 | BOS,2015-01-20,39,35,60,27,22,-3 894 | BOS,2015-09-21,66,71,94,53,56,40 895 | SEA,2015-06-03,68,68,89,53,50,42 896 | AUS,2015-08-17,95,96,105,69,72,61 897 | AUS,2015-11-26,75,68,85,69,42,27 898 | BOS,2015-04-26,56,59,87,43,44,28 899 | BOS,2015-12-25,62,38,65,49,25,-8 900 | AUS,2015-11-15,73,71,89,51,46,28 901 | SEA,2015-06-29,84,73,93,63,54,45 902 | SEA,2015-03-28,60,56,73,49,41,26 903 | BOS,2015-02-01,30,36,66,12,23,-7 904 | BOS,2015-12-16,48,41,64,38,28,1 905 | AUS,2015-11-04,80,76,89,55,50,26 906 | AUS,2015-09-03,92,94,107,68,69,61 907 | BOS,2015-02-10,30,38,60,14,24,-5 908 | AUS,2015-03-04,70,69,91,35,43,17 909 | AUS,2015-09-16,93,90,99,73,65,54 910 | SEA,2015-07-05,91,74,91,62,55,47 911 | BOS,2015-06-05,59,73,96,50,56,45 912 | AUS,2015-03-15,68,72,87,44,46,30 913 | BOS,2015-01-17,22,35,59,9,22,-4 914 | SEA,2015-07-14,82,76,91,61,56,50 915 | BOS,2015-01-02,41,37,66,31,23,-3 916 | AUS,2015-05-04,84,84,98,59,60,37 917 | SEA,2015-12-16,43,45,57,37,35,10 918 | BOS,2015-07-23,82,82,100,67,66,54 919 | AUS,2015-05-15,76,87,96,64,64,42 920 | AUS,2015-11-24,66,68,87,44,42,26 921 | AUS,2015-12-03,63,66,86,34,40,27 922 | AUS,2015-05-22,78,88,97,62,66,47 923 | SEA,2015-04-26,60,61,78,40,44,32 924 | BOS,2015-08-15,91,80,98,68,65,52 925 | SEA,2015-06-08,87,69,87,58,51,42 926 | AUS,2015-01-26,74,62,86,34,37,24 927 | SEA,2015-02-10,55,49,65,47,37,24 928 | SEA,2015-10-03,67,65,80,52,48,39 929 | SEA,2015-02-01,49,49,63,40,37,1 930 | BOS,2015-06-29,75,80,99,53,63,49 931 | BOS,2015-11-13,59,52,69,46,39,14 932 | AUS,2015-11-30,55,66,83,45,40,20 933 | BOS,2015-11-24,44,49,72,29,36,11 934 | AUS,2015-11-29,47,67,85,43,41,20 935 | SEA,2015-09-08,73,73,85,56,54,43 936 | AUS,2015-03-23,79,74,90,46,49,30 937 | BOS,2015-05-30,88,71,96,58,54,35 938 | SEA,2015-03-21,56,55,69,47,40,29 939 | AUS,2015-09-27,93,87,105,63,62,45 940 | AUS,2015-11-03,82,76,87,58,50,26 941 | SEA,2015-06-17,77,70,91,52,52,43 942 | BOS,2015-05-21,67,68,93,45,51,41 943 | SEA,2015-03-30,64,56,72,51,41,27 944 | SEA,2015-12-12,48,46,60,42,35,22 945 | SEA,2015-08-25,78,75,87,54,55,45 946 | AUS,2015-09-11,91,92,102,72,67,56 947 | AUS,2015-04-15,80,80,92,49,55,34 948 | BOS,2015-02-20,20,40,68,5,26,0 949 | AUS,2015-04-04,68,77,92,56,52,36 950 | SEA,2015-07-13,78,76,93,61,56,50 951 | SEA,2015-08-07,83,77,95,60,56,48 952 | BOS,2015-12-10,58,43,64,43,30,-1 953 | BOS,2015-07-17,75,82,98,60,66,54 954 | BOS,2015-03-16,45,45,71,26,31,10 955 | SEA,2015-05-03,69,62,77,46,45,35 956 | SEA,2015-12-11,49,46,58,40,35,21 957 | AUS,2015-11-06,75,75,89,61,49,31 958 | AUS,2015-10-05,85,85,96,62,59,43 959 | BOS,2015-03-03,33,42,61,20,28,4 960 | AUS,2015-01-09,39,62,84,34,36,10 961 | AUS,2015-12-08,75,65,83,33,38,23 962 | AUS,2015-02-11,76,64,81,37,39,16 963 | AUS,2015-10-14,95,83,95,52,57,43 964 | AUS,2015-01-10,37,62,86,32,36,13 965 | BOS,2015-08-30,88,77,99,69,63,48 966 | SEA,2015-10-26,54,56,65,50,44,29 967 | BOS,2015-04-19,50,57,87,41,42,22 968 | SEA,2015-02-19,51,50,67,47,37,22 969 | BOS,2015-06-15,63,76,98,54,60,42 970 | SEA,2015-02-08,59,49,68,47,37,22 971 | SEA,2015-11-20,47,50,64,33,39,25 972 | BOS,2015-06-26,72,79,100,59,63,51 973 | SEA,2015-05-16,60,65,84,52,47,40 974 | SEA,2015-11-17,56,51,61,44,40,23 975 | SEA,2015-10-25,67,57,67,48,44,31 976 | SEA,2015-12-28,41,45,56,35,36,12 977 | SEA,2015-09-01,67,74,91,57,55,46 978 | SEA,2015-01-29,54,49,60,38,37,6 979 | SEA,2015-09-10,77,72,85,58,53,39 980 | SEA,2015-03-26,69,55,70,50,40,32 981 | AUS,2015-10-18,84,82,93,47,55,42 982 | BOS,2015-05-28,86,70,92,64,54,43 983 | AUS,2015-06-12,93,92,101,72,70,57 984 | BOS,2015-09-06,82,76,94,61,61,43 985 | BOS,2015-12-29,40,37,73,24,24,-17 986 | BOS,2015-05-13,69,65,87,53,49,38 987 | AUS,2015-06-07,89,91,98,64,69,59 988 | AUS,2015-10-21,88,81,92,71,54,36 989 | SEA,2015-08-13,83,77,92,60,56,44 990 | AUS,2015-08-20,82,96,105,70,71,67 991 | SEA,2015-01-06,54,46,57,43,37,14 992 | BOS,2015-07-10,77,81,101,60,65,53 993 | SEA,2015-07-21,75,77,97,59,56,48 994 | SEA,2015-01-13,49,47,56,37,37,11 995 | AUS,2015-02-25,62,67,89,33,42,23 996 | SEA,2015-09-27,64,67,89,45,50,35 997 | BOS,2015-07-01,82,80,98,62,64,50 998 | SEA,2015-07-30,94,77,96,63,57,48 999 | BOS,2015-09-18,85,72,90,65,57,43 1000 | BOS,2015-09-29,84,68,88,65,52,34 1001 | AUS,2015-07-01,89,94,103,66,71,66 1002 | AUS,2015-02-07,68,64,84,38,38,19 1003 | SEA,2015-03-11,58,53,65,48,39,23 1004 | BOS,2015-09-12,71,74,93,60,59,43 1005 | AUS,2015-07-10,93,95,103,66,72,65 1006 | BOS,2015-09-07,93,75,102,66,60,43 1007 | BOS,2015-08-19,88,79,92,71,65,51 1008 | AUS,2015-12-12,75,64,88,71,37,22 1009 | SEA,2015-05-11,57,64,87,50,46,35 1010 | AUS,2015-06-24,91,93,104,70,71,65 1011 | SEA,2015-12-07,52,46,58,47,36,18 1012 | SEA,2015-11-18,48,50,59,38,40,29 1013 | SEA,2015-05-26,71,67,89,53,49,40 1014 | SEA,2015-06-04,73,68,91,53,50,41 1015 | SEA,2015-01-22,49,48,60,43,37,19 1016 | SEA,2015-04-13,53,58,75,39,42,33 1017 | AUS,2015-08-18,98,96,104,73,71,64 1018 | BOS,2015-12-31,47,37,65,33,24,-8 1019 | BOS,2015-10-10,61,63,87,48,48,32 1020 | SEA,2015-04-06,57,57,78,44,41,31 1021 | AUS,2015-12-26,78,62,81,73,36,18 1022 | AUS,2015-08-01,97,97,105,68,72,65 1023 | SEA,2015-10-27,61,56,67,46,44,31 1024 | BOS,2015-05-18,58,67,91,49,50,37 1025 | BOS,2015-10-18,47,61,82,33,46,31 1026 | AUS,2015-10-26,79,79,98,58,53,33 1027 | BOS,2015-02-06,21,37,57,5,23,-6 1028 | BOS,2015-05-01,49,61,89,39,46,33 1029 | SEA,2015-08-09,83,77,99,59,56,47 1030 | BOS,2015-08-29,82,78,96,63,63,47 1031 | BOS,2015-07-19,90,82,99,71,66,54 1032 | SEA,2015-11-04,50,54,74,38,42,30 1033 | AUS,2015-07-24,98,96,103,73,72,68 1034 | BOS,2015-07-06,80,81,101,68,65,50 1035 | SEA,2015-09-20,73,69,88,54,51,40 1036 | SEA,2015-02-26,53,51,67,46,37,18 1037 | BOS,2015-01-10,24,36,56,17,22,-3 1038 | SEA,2015-03-09,58,53,67,40,39,28 1039 | AUS,2015-10-12,97,84,97,70,57,41 1040 | AUS,2015-05-09,86,85,98,69,62,47 1041 | SEA,2015-03-18,60,54,70,45,40,29 1042 | BOS,2015-03-27,44,49,79,37,34,16 1043 | AUS,2015-05-10,87,85,94,75,62,49 1044 | AUS,2015-07-17,96,95,105,75,72,66 1045 | BOS,2015-08-09,73,81,99,62,66,53 1046 | AUS,2015-12-04,63,65,84,32,39,23 1047 | SEA,2015-10-20,64,58,69,51,45,29 1048 | AUS,2015-04-23,83,82,97,67,57,42 1049 | AUS,2015-05-27,87,89,100,67,67,59 1050 | BOS,2015-04-04,52,51,77,36,37,17 1051 | BOS,2015-08-10,83,81,101,63,65,53 1052 | AUS,2015-12-15,76,63,81,46,37,19 1053 | SEA,2015-05-18,78,65,89,54,48,37 1054 | BOS,2015-04-15,67,55,82,50,41,28 1055 | AUS,2015-01-23,50,62,89,34,37,18 1056 | AUS,2015-12-22,78,63,80,39,36,16 1057 | SEA,2015-02-15,54,50,65,39,37,13 1058 | SEA,2015-10-10,70,62,77,56,47,40 1059 | SEA,2015-06-09,84,69,96,58,51,44 1060 | SEA,2015-02-04,51,49,63,40,37,7 1061 | BOS,2015-01-22,37,36,66,29,22,-3 1062 | SEA,2015-12-03,60,47,60,46,36,27 1063 | SEA,2015-04-18,66,59,77,47,42,34 1064 | AUS,2015-08-11,103,97,105,68,72,67 1065 | SEA,2015-10-22,61,57,70,48,45,34 1066 | SEA,2015-04-09,63,57,73,43,41,34 1067 | AUS,2015-08-08,100,97,108,74,72,68 1068 | BOS,2015-12-27,50,38,61,38,25,0 1069 | AUS,2015-11-13,65,72,90,57,46,28 1070 | AUS,2015-03-24,80,74,88,51,49,30 1071 | BOS,2015-09-25,66,69,89,55,54,38 1072 | AUS,2015-06-29,92,94,107,71,71,63 1073 | SEA,2015-11-08,52,53,64,46,42,27 1074 | BOS,2015-08-21,83,79,97,67,64,52 1075 | SEA,2015-08-31,66,74,92,61,55,46 1076 | AUS,2015-09-05,99,93,112,74,68,55 1077 | BOS,2015-02-12,30,38,58,16,24,-11 1078 | AUS,2015-12-28,48,62,77,35,36,25 1079 | SEA,2015-08-20,73,76,87,58,56,47 1080 | AUS,2015-03-02,45,68,86,38,43,19 1081 | AUS,2015-09-14,89,91,101,58,66,54 1082 | SEA,2015-07-03,92,74,92,64,54,44 1083 | SEA,2015-09-29,71,66,81,48,49,37 1084 | AUS,2015-03-17,76,72,89,63,47,30 1085 | BOS,2015-01-19,46,35,61,32,22,-6 1086 | SEA,2015-07-16,79,76,98,59,56,50 1087 | AUS,2015-05-06,87,85,98,71,61,45 1088 | BOS,2015-03-13,40,44,73,24,30,3 1089 | SEA,2015-12-14,46,45,59,35,35,22 1090 | BOS,2015-07-21,81,82,102,70,66,52 1091 | AUS,2015-10-02,87,86,97,57,60,47 1092 | AUS,2015-01-02,42,62,81,38,36,16 1093 | SEA,2015-12-23,41,45,58,37,35,9 1094 | AUS,2015-05-20,88,88,99,70,65,45 1095 | SEA,2015-04-20,73,59,74,46,43,30 1096 | AUS,2015-01-17,71,62,80,33,36,21 1097 | AUS,2015-05-31,84,90,100,64,68,51 1098 | BOS,2015-06-01,49,71,96,47,55,41 1099 | AUS,2015-01-24,62,62,82,26,37,14 1100 | -------------------------------------------------------------------------------- /Section 3/weather/data/london.csv: -------------------------------------------------------------------------------- 1 | airport date max_temp min_temp 2 | Heathrow 1948-1-01 8.9 3.3 3 | Heathrow 1948-2-01 7.9 2.2 4 | Heathrow 1948-3-01 14.2 3.8 5 | Heathrow 1948-4-01 15.4 5.1 6 | Heathrow 1948-5-01 18.1 6.9 7 | Heathrow 1948-6-01 19.1 10.3 8 | Heathrow 1948-7-01 21.7 12 9 | Heathrow 1948-8-01 20.8 11.7 10 | Heathrow 1948-9-01 19.6 10.2 11 | Heathrow 1948-10-01 14.9 6 12 | Heathrow 1948-11-01 10.8 4.6 13 | Heathrow 1948-12-01 8.8 3.8 14 | Heathrow 1949-1-01 8.5 1.8 15 | Heathrow 1949-2-01 10.4 0.6 16 | Heathrow 1949-3-01 9.3 1.2 17 | Heathrow 1949-4-01 16.2 6 18 | Heathrow 1949-5-01 17.1 6.8 19 | Heathrow 1949-6-01 22 10.5 20 | Heathrow 1949-7-01 25.1 12.9 21 | Heathrow 1949-8-01 23.9 12.5 22 | Heathrow 1949-9-01 22.8 13.3 23 | Heathrow 1949-10-01 17 8.6 24 | Heathrow 1949-11-01 10.2 2.9 25 | Heathrow 1949-12-01 9.2 2.9 26 | Heathrow 1950-1-01 7.1 1.7 27 | Heathrow 1950-2-01 9.9 2.4 28 | Heathrow 1950-3-01 12.3 3.5 29 | Heathrow 1950-4-01 12.9 4.2 30 | Heathrow 1950-5-01 17.2 7.6 31 | Heathrow 1950-6-01 23.6 12.3 32 | Heathrow 1950-7-01 21.6 12.9 33 | Heathrow 1950-8-01 21.9 12.1 34 | Heathrow 1950-9-01 17.6 10.2 35 | Heathrow 1950-10-01 14 6.1 36 | Heathrow 1950-11-01 9.3 3.3 37 | Heathrow 1950-12-01 3.8 -1 38 | Heathrow 1951-1-01 7.3 1.5 39 | Heathrow 1951-2-01 7 0.8 40 | Heathrow 1951-3-01 8.4 1.7 41 | Heathrow 1951-4-01 12.3 3 42 | Heathrow 1951-5-01 15 7 43 | Heathrow 1951-6-01 20.5 10 44 | Heathrow 1951-7-01 23 12.9 45 | Heathrow 1951-8-01 20.2 12.3 46 | Heathrow 1951-9-01 19.2 11.3 47 | Heathrow 1951-10-01 14.6 6 48 | Heathrow 1951-11-01 11.8 6.2 49 | Heathrow 1951-12-01 8.9 3.1 50 | Heathrow 1952-1-01 6.2 0.4 51 | Heathrow 1952-2-01 6.7 -0.3 52 | Heathrow 1952-3-01 10.6 3.8 53 | Heathrow 1952-4-01 15.6 5.8 54 | Heathrow 1952-5-01 19.6 9.4 55 | Heathrow 1952-6-01 20.9 10.9 56 | Heathrow 1952-7-01 23.3 13.4 57 | Heathrow 1952-8-01 21.6 13.3 58 | Heathrow 1952-9-01 16.4 7.6 59 | Heathrow 1952-10-01 13.2 5.7 60 | Heathrow 1952-11-01 7.5 1.6 61 | Heathrow 1952-12-01 5.8 -0.2 62 | Heathrow 1953-1-01 5.6 0.6 63 | Heathrow 1953-2-01 7.5 1 64 | Heathrow 1953-3-01 11.1 1 65 | Heathrow 1953-4-01 13.1 4.3 66 | Heathrow 1953-5-01 18.7 8.9 67 | Heathrow 1953-6-01 19.8 10.8 68 | Heathrow 1953-7-01 21 12.1 69 | Heathrow 1953-8-01 22.6 12.6 70 | Heathrow 1953-9-01 19.5 9.8 71 | Heathrow 1953-10-01 14.7 7.1 72 | Heathrow 1953-11-01 11.3 5.2 73 | Heathrow 1953-12-01 10 5.1 74 | Heathrow 1954-1-01 5.9 0.3 75 | Heathrow 1954-2-01 6.1 0.4 76 | Heathrow 1954-3-01 10.4 3 77 | Heathrow 1954-4-01 13.2 2.8 78 | Heathrow 1954-5-01 16.8 7.6 79 | Heathrow 1954-6-01 18.6 10.7 80 | Heathrow 1954-7-01 19.2 11.7 81 | Heathrow 1954-8-01 19.8 11.5 82 | Heathrow 1954-9-01 18 9.6 83 | Heathrow 1954-10-01 16.2 8.9 84 | Heathrow 1954-11-01 11.2 3.6 85 | Heathrow 1954-12-01 9.7 3.4 86 | Heathrow 1955-1-01 5.6 0.4 87 | Heathrow 1955-2-01 5 -0.8 88 | Heathrow 1955-3-01 7.9 0.2 89 | Heathrow 1955-4-01 15.2 5.1 90 | Heathrow 1955-5-01 15.5 6.4 91 | Heathrow 1955-6-01 20 11.1 92 | Heathrow 1955-7-01 24.4 13.1 93 | Heathrow 1955-8-01 24.3 13.6 94 | Heathrow 1955-9-01 19.9 9.9 95 | Heathrow 1955-10-01 13.5 5.3 96 | Heathrow 1955-11-01 10.7 4.2 97 | Heathrow 1955-12-01 9.5 2.3 98 | Heathrow 1956-1-01 7 0.5 99 | Heathrow 1956-2-01 2.9 -3.6 100 | Heathrow 1956-3-01 11 2.7 101 | Heathrow 1956-4-01 12.1 2.4 102 | Heathrow 1956-5-01 19.1 7.1 103 | Heathrow 1956-6-01 18.5 9.6 104 | Heathrow 1956-7-01 20.9 12.8 105 | Heathrow 1956-8-01 18.8 10.9 106 | Heathrow 1956-9-01 19.2 11.7 107 | Heathrow 1956-10-01 13.8 6 108 | Heathrow 1956-11-01 9.3 2.5 109 | Heathrow 1956-12-01 8.2 3.5 110 | Heathrow 1957-1-01 8.7 2.7 111 | Heathrow 1957-2-01 9 2.9 112 | Heathrow 1957-3-01 13.9 5.7 113 | Heathrow 1957-4-01 14.2 5.2 114 | Heathrow 1957-5-01 16.2 6.5 115 | Heathrow 1957-6-01 23.6 10.7 116 | Heathrow 1957-7-01 22.5 13.8 117 | Heathrow 1957-8-01 21.1 12.5 118 | Heathrow 1957-9-01 17.6 10.1 119 | Heathrow 1957-10-01 15.5 7.7 120 | Heathrow 1957-11-01 9.4 4.3 121 | Heathrow 1957-12-01 7.6 1 122 | Heathrow 1958-1-01 6.8 0.9 123 | Heathrow 1958-2-01 8.9 1.9 124 | Heathrow 1958-3-01 8.1 1.1 125 | Heathrow 1958-4-01 12.3 3.8 126 | Heathrow 1958-5-01 17.3 7.8 127 | Heathrow 1958-6-01 19.4 10.7 128 | Heathrow 1958-7-01 21.7 12.9 129 | Heathrow 1958-8-01 20.8 13.1 130 | Heathrow 1958-9-01 20 12.1 131 | Heathrow 1958-10-01 14.9 8.3 132 | Heathrow 1958-11-01 9.7 4.4 133 | Heathrow 1958-12-01 8 2.7 134 | Heathrow 1959-1-01 5.7 -1.1 135 | Heathrow 1959-2-01 7.4 1.2 136 | Heathrow 1959-3-01 11.9 4.4 137 | Heathrow 1959-4-01 14.2 6.3 138 | Heathrow 1959-5-01 18.7 8 139 | Heathrow 1959-6-01 22.1 11.1 140 | Heathrow 1959-7-01 24.7 13.3 141 | Heathrow 1959-8-01 24.2 13.7 142 | Heathrow 1959-9-01 22.7 10.6 143 | Heathrow 1959-10-01 17.8 8.5 144 | Heathrow 1959-11-01 10.8 3.5 145 | Heathrow 1959-12-01 9.3 3 146 | Heathrow 1960-1-01 6.9 1.8 147 | Heathrow 1960-2-01 7.9 1.6 148 | Heathrow 1960-3-01 10.2 4.5 149 | Heathrow 1960-4-01 14.3 4.6 150 | Heathrow 1960-5-01 18.4 9.3 151 | Heathrow 1960-6-01 22.1 12.1 152 | Heathrow 1960-7-01 20.1 12.4 153 | Heathrow 1960-8-01 20.3 11.8 154 | Heathrow 1960-9-01 18.5 10.5 155 | Heathrow 1960-10-01 14.2 8.2 156 | Heathrow 1960-11-01 11.2 4.5 157 | Heathrow 1960-12-01 6.9 2.1 158 | Heathrow 1961-1-01 6.9 1.2 159 | Heathrow 1961-2-01 10.3 4.9 160 | Heathrow 1961-3-01 13.9 2.9 161 | Heathrow 1961-4-01 15 7.1 162 | Heathrow 1961-5-01 16.8 7.4 163 | Heathrow 1961-6-01 21.7 10.5 164 | Heathrow 1961-7-01 22.1 12.1 165 | Heathrow 1961-8-01 21.7 12.6 166 | Heathrow 1961-9-01 20.9 12 167 | Heathrow 1961-10-01 15.6 7.6 168 | Heathrow 1961-11-01 9.9 3.5 169 | Heathrow 1961-12-01 6.8 0.2 170 | Heathrow 1962-1-01 7.9 1.2 171 | Heathrow 1962-2-01 7.6 1.4 172 | Heathrow 1962-3-01 7.4 -0.6 173 | Heathrow 1962-4-01 12.7 4.7 174 | Heathrow 1962-5-01 15 7.1 175 | Heathrow 1962-6-01 20.4 9.4 176 | Heathrow 1962-7-01 20.6 12.1 177 | Heathrow 1962-8-01 20 11.6 178 | Heathrow 1962-9-01 17.8 9.6 179 | Heathrow 1962-10-01 15.7 7.1 180 | Heathrow 1962-11-01 9.1 3.2 181 | Heathrow 1962-12-01 5 -1.1 182 | Heathrow 1963-1-01 0.8 -4.6 183 | Heathrow 1963-2-01 2.8 -2.2 184 | Heathrow 1963-3-01 10.7 3 185 | Heathrow 1963-4-01 13.6 5.7 186 | Heathrow 1963-5-01 16 6.9 187 | Heathrow 1963-6-01 20.8 11.3 188 | Heathrow 1963-7-01 21.1 11.9 189 | Heathrow 1963-8-01 19.8 11.7 190 | Heathrow 1963-9-01 18 10.1 191 | Heathrow 1963-10-01 14.8 8.2 192 | Heathrow 1963-11-01 11.8 6 193 | Heathrow 1963-12-01 5.4 0 194 | Heathrow 1964-1-01 5.8 0.4 195 | Heathrow 1964-2-01 7.6 2 196 | Heathrow 1964-3-01 7.6 2.6 197 | Heathrow 1964-4-01 12.8 5.4 198 | Heathrow 1964-5-01 19.6 9.8 199 | Heathrow 1964-6-01 19.3 11.2 200 | Heathrow 1964-7-01 22.8 13.5 201 | Heathrow 1964-8-01 22.3 12.7 202 | Heathrow 1964-9-01 21.1 10.6 203 | Heathrow 1964-10-01 13.7 5.3 204 | Heathrow 1964-11-01 11.2 5.3 205 | Heathrow 1964-12-01 7.1 0.9 206 | Heathrow 1965-1-01 6.6 1 207 | Heathrow 1965-2-01 5.9 0.9 208 | Heathrow 1965-3-01 10.5 2.2 209 | Heathrow 1965-4-01 13.4 4.8 210 | Heathrow 1965-5-01 16.8 8.6 211 | Heathrow 1965-6-01 19.7 11 212 | Heathrow 1965-7-01 19.3 11.7 213 | Heathrow 1965-8-01 20.8 11.9 214 | Heathrow 1965-9-01 17.4 9.2 215 | Heathrow 1965-10-01 16.2 7.5 216 | Heathrow 1965-11-01 8.4 2.2 217 | Heathrow 1965-12-01 8.4 1.7 218 | Heathrow 1966-1-01 5.3 1 219 | Heathrow 1966-2-01 9.3 4.4 220 | Heathrow 1966-3-01 10.9 2.6 221 | Heathrow 1966-4-01 12.2 5.4 222 | Heathrow 1966-5-01 17 7.5 223 | Heathrow 1966-6-01 21.8 12.2 224 | Heathrow 1966-7-01 20.1 12.2 225 | Heathrow 1966-8-01 20.6 11.6 226 | Heathrow 1966-9-01 19.6 10.8 227 | Heathrow 1966-10-01 14.7 8.6 228 | Heathrow 1966-11-01 8.8 2.9 229 | Heathrow 1966-12-01 9.3 2.2 230 | Heathrow 1967-1-01 7.3 2.1 231 | Heathrow 1967-2-01 9.3 2.6 232 | Heathrow 1967-3-01 11.6 3.7 233 | Heathrow 1967-4-01 12.5 4.4 234 | Heathrow 1967-5-01 15.6 7.8 235 | Heathrow 1967-6-01 20.1 10.3 236 | Heathrow 1967-7-01 23.5 13.8 237 | Heathrow 1967-8-01 21.5 12.7 238 | Heathrow 1967-9-01 18.5 11.1 239 | Heathrow 1967-10-01 15 8.8 240 | Heathrow 1967-11-01 9.7 2.6 241 | Heathrow 1967-12-01 7.2 1.3 242 | Heathrow 1968-1-01 7.2 1.3 243 | Heathrow 1968-2-01 5.7 0.2 244 | Heathrow 1968-3-01 11.1 3.5 245 | Heathrow 1968-4-01 13.7 4.4 246 | Heathrow 1968-5-01 15.4 7 247 | Heathrow 1968-6-01 20.6 11.5 248 | Heathrow 1968-7-01 20.7 12.6 249 | Heathrow 1968-8-01 20.2 12.6 250 | Heathrow 1968-9-01 18.8 11.6 251 | Heathrow 1968-10-01 16.5 10.7 252 | Heathrow 1968-11-01 9.5 4.8 253 | Heathrow 1968-12-01 5.4 1 254 | Heathrow 1969-1-01 8.9 3.4 255 | Heathrow 1969-2-01 4.9 -0.9 256 | Heathrow 1969-3-01 8 1.3 257 | Heathrow 1969-4-01 13.6 3.9 258 | Heathrow 1969-5-01 17.1 8.6 259 | Heathrow 1969-6-01 20.6 10.2 260 | Heathrow 1969-7-01 23.9 13.9 261 | Heathrow 1969-8-01 21.8 13.6 262 | Heathrow 1969-9-01 19.6 11.7 263 | Heathrow 1969-10-01 18.2 9.9 264 | Heathrow 1969-11-01 9.6 3.3 265 | Heathrow 1969-12-01 6.1 1.4 266 | Heathrow 1970-1-01 7.1 2.1 267 | Heathrow 1970-2-01 7.2 0.8 268 | Heathrow 1970-3-01 8.1 0.7 269 | Heathrow 1970-4-01 11.4 3.7 270 | Heathrow 1970-5-01 19.2 9.2 271 | Heathrow 1970-6-01 23.6 12.7 272 | Heathrow 1970-7-01 21.3 12.3 273 | Heathrow 1970-8-01 22.3 13 274 | Heathrow 1970-9-01 20.3 11.4 275 | Heathrow 1970-10-01 15.7 8.1 276 | Heathrow 1970-11-01 11.9 5.5 277 | Heathrow 1970-12-01 7 1.7 278 | Heathrow 1971-1-01 7.8 2.8 279 | Heathrow 1971-2-01 8.6 1.9 280 | Heathrow 1971-3-01 9.1 2.3 281 | Heathrow 1971-4-01 12.2 4.8 282 | Heathrow 1971-5-01 18.1 8.2 283 | Heathrow 1971-6-01 17.8 10.1 284 | Heathrow 1971-7-01 24.1 13.8 285 | Heathrow 1971-8-01 21.3 13.5 286 | Heathrow 1971-9-01 20.7 10.2 287 | Heathrow 1971-10-01 17.2 8.1 288 | Heathrow 1971-11-01 10.4 3 289 | Heathrow 1971-12-01 9.3 4.5 290 | Heathrow 1972-1-01 6.9 2.1 291 | Heathrow 1972-2-01 7.9 2.6 292 | Heathrow 1972-3-01 12.4 3.3 293 | Heathrow 1972-4-01 12.9 5.7 294 | Heathrow 1972-5-01 16 7.6 295 | Heathrow 1972-6-01 17.5 9 296 | Heathrow 1972-7-01 22.3 12.7 297 | Heathrow 1972-8-01 21.8 12.1 298 | Heathrow 1972-9-01 17.3 9 299 | Heathrow 1972-10-01 15.6 8.5 300 | Heathrow 1972-11-01 9.9 3.2 301 | Heathrow 1972-12-01 9.4 3.5 302 | Heathrow 1973-1-01 7.3 2 303 | Heathrow 1973-2-01 8.1 0.7 304 | Heathrow 1973-3-01 11.5 2.2 305 | Heathrow 1973-4-01 12.5 3.9 306 | Heathrow 1973-5-01 16.9 8.6 307 | Heathrow 1973-6-01 21.9 11.6 308 | Heathrow 1973-7-01 21.4 12.7 309 | Heathrow 1973-8-01 23.7 13.8 310 | Heathrow 1973-9-01 20.7 11.6 311 | Heathrow 1973-10-01 13.9 6.1 312 | Heathrow 1973-11-01 10.3 2.5 313 | Heathrow 1973-12-01 8.6 2.1 314 | Heathrow 1974-1-01 9.6 3.6 315 | Heathrow 1974-2-01 9.2 3 316 | Heathrow 1974-3-01 10.3 2.8 317 | Heathrow 1974-4-01 14 4.7 318 | Heathrow 1974-5-01 17 7.5 319 | Heathrow 1974-6-01 20.1 10.6 320 | Heathrow 1974-7-01 20.9 12.5 321 | Heathrow 1974-8-01 21.5 12.1 322 | Heathrow 1974-9-01 17.5 9.5 323 | Heathrow 1974-10-01 11 5 324 | Heathrow 1974-11-01 10.6 5 325 | Heathrow 1974-12-01 11 5.6 326 | Heathrow 1975-1-01 10.3 4.5 327 | Heathrow 1975-2-01 9.3 1.9 328 | Heathrow 1975-3-01 8.4 2.8 329 | Heathrow 1975-4-01 13.3 5 330 | Heathrow 1975-5-01 15.1 6.9 331 | Heathrow 1975-6-01 21.8 10.4 332 | Heathrow 1975-7-01 24.1 14.1 333 | Heathrow 1975-8-01 25.9 15 334 | Heathrow 1975-9-01 19.5 10.6 335 | Heathrow 1975-10-01 14.4 7 336 | Heathrow 1975-11-01 10.1 3.2 337 | Heathrow 1975-12-01 7.6 1.5 338 | Heathrow 1976-1-01 8.8 3 339 | Heathrow 1976-2-01 7.8 2.3 340 | Heathrow 1976-3-01 9.5 2 341 | Heathrow 1976-4-01 13.7 4.3 342 | Heathrow 1976-5-01 19.3 8.9 343 | Heathrow 1976-6-01 25.5 13.7 344 | Heathrow 1976-7-01 26.6 14.9 345 | Heathrow 1976-8-01 25.1 13.2 346 | Heathrow 1976-9-01 19 11.2 347 | Heathrow 1976-10-01 14.9 8.8 348 | Heathrow 1976-11-01 9.9 3.5 349 | Heathrow 1976-12-01 5.6 -0.2 350 | Heathrow 1977-1-01 6.1 0.8 351 | Heathrow 1977-2-01 9.6 3.4 352 | Heathrow 1977-3-01 11.2 4.5 353 | Heathrow 1977-4-01 12.2 4.1 354 | Heathrow 1977-5-01 16.4 7.2 355 | Heathrow 1977-6-01 17.4 9.6 356 | Heathrow 1977-7-01 22.4 12.7 357 | Heathrow 1977-8-01 20.3 13 358 | Heathrow 1977-9-01 18 10.7 359 | Heathrow 1977-10-01 16.3 9 360 | Heathrow 1977-11-01 10.4 4.6 361 | Heathrow 1977-12-01 9.2 4.1 362 | Heathrow 1978-1-01 6.7 0.7 363 | Heathrow 1978-2-01 6.2 0.7 364 | Heathrow 1978-3-01 11.3 3.5 365 | Heathrow 1978-4-01 10.7 3.9 366 | Heathrow 1978-5-01 17.2 7.9 367 | Heathrow 1978-6-01 19.7 10.7 368 | Heathrow 1978-7-01 20.5 12.7 369 | Heathrow 1978-8-01 20.7 12.1 370 | Heathrow 1978-9-01 20.1 10.8 371 | Heathrow 1978-10-01 17.1 8.4 372 | Heathrow 1978-11-01 12.6 6.2 373 | Heathrow 1978-12-01 7.8 2.6 374 | Heathrow 1979-1-01 3.8 -2.6 375 | Heathrow 1979-2-01 4.5 -0.4 376 | Heathrow 1979-3-01 9.2 2 377 | Heathrow 1979-4-01 12.7 4.8 378 | Heathrow 1979-5-01 15.9 7.2 379 | Heathrow 1979-6-01 19 11.1 380 | Heathrow 1979-7-01 22.5 13.4 381 | Heathrow 1979-8-01 21 12.2 382 | Heathrow 1979-9-01 19.6 10.3 383 | Heathrow 1979-10-01 16.4 8.8 384 | Heathrow 1979-11-01 10.8 3.5 385 | Heathrow 1979-12-01 9.2 3.9 386 | Heathrow 1980-1-01 6 -0.1 387 | Heathrow 1980-2-01 9.9 2.9 388 | Heathrow 1980-3-01 9 2.4 389 | Heathrow 1980-4-01 14 5.4 390 | Heathrow 1980-5-01 17.3 7.4 391 | Heathrow 1980-6-01 19.8 10.9 392 | Heathrow 1980-7-01 19.7 11.9 393 | Heathrow 1980-8-01 21.9 13.3 394 | Heathrow 1980-9-01 20.1 12 395 | Heathrow 1980-10-01 14 5.8 396 | Heathrow 1980-11-01 9.3 4.5 397 | Heathrow 1980-12-01 8.9 2.7 398 | Heathrow 1981-1-01 8.1 2 399 | Heathrow 1981-2-01 7.1 -0.1 400 | Heathrow 1981-3-01 11.8 6.5 401 | Heathrow 1981-4-01 12.9 4.9 402 | Heathrow 1981-5-01 16.1 8.4 403 | Heathrow 1981-6-01 18.5 10.4 404 | Heathrow 1981-7-01 22 12.8 405 | Heathrow 1981-8-01 22.8 13 406 | Heathrow 1981-9-01 20.3 11.3 407 | Heathrow 1981-10-01 12.9 5.8 408 | Heathrow 1981-11-01 11.5 5.1 409 | Heathrow 1981-12-01 4.4 -1.5 410 | Heathrow 1982-1-01 6.9 0.4 411 | Heathrow 1982-2-01 8.4 2.4 412 | Heathrow 1982-3-01 11.1 2.5 413 | Heathrow 1982-4-01 14.3 5 414 | Heathrow 1982-5-01 18 7.6 415 | Heathrow 1982-6-01 21.5 12.8 416 | Heathrow 1982-7-01 22.7 13.4 417 | Heathrow 1982-8-01 22.2 12.9 418 | Heathrow 1982-9-01 20.8 11.1 419 | Heathrow 1982-10-01 14.1 7.8 420 | Heathrow 1982-11-01 11.4 6.2 421 | Heathrow 1982-12-01 8.2 1.9 422 | Heathrow 1983-1-01 10 4.3 423 | Heathrow 1983-2-01 5.5 -0.5 424 | Heathrow 1983-3-01 10.8 3 425 | Heathrow 1983-4-01 12.4 3.6 426 | Heathrow 1983-5-01 15.6 7.5 427 | Heathrow 1983-6-01 20.8 11.4 428 | Heathrow 1983-7-01 27.6 16 429 | Heathrow 1983-8-01 24.5 13.8 430 | Heathrow 1983-9-01 19.3 11.3 431 | Heathrow 1983-10-01 15.1 7.6 432 | Heathrow 1983-11-01 11.3 5.5 433 | Heathrow 1983-12-01 9.2 2.7 434 | Heathrow 1984-1-01 8 1.4 435 | Heathrow 1984-2-01 7.4 1.3 436 | Heathrow 1984-3-01 8.9 2.5 437 | Heathrow 1984-4-01 14.6 3.9 438 | Heathrow 1984-5-01 14.9 6.8 439 | Heathrow 1984-6-01 21.3 11.3 440 | Heathrow 1984-7-01 24.2 12.9 441 | Heathrow 1984-8-01 24.4 14.2 442 | Heathrow 1984-9-01 18.6 11 443 | Heathrow 1984-10-01 15.8 8.5 444 | Heathrow 1984-11-01 12.2 6.4 445 | Heathrow 1984-12-01 8.7 2.8 446 | Heathrow 1985-1-01 4.1 -1.8 447 | Heathrow 1985-2-01 6.3 0.1 448 | Heathrow 1985-3-01 9.4 1.3 449 | Heathrow 1985-4-01 14 5.3 450 | Heathrow 1985-5-01 16.4 8.2 451 | Heathrow 1985-6-01 18.5 9.9 452 | Heathrow 1985-7-01 22.9 13.2 453 | Heathrow 1985-8-01 20.3 11.9 454 | Heathrow 1985-9-01 20.6 11.4 455 | Heathrow 1985-10-01 16.1 8.8 456 | Heathrow 1985-11-01 8.1 1.2 457 | Heathrow 1985-12-01 10 5.2 458 | Heathrow 1986-1-01 7.2 1 459 | Heathrow 1986-2-01 1.7 -2.7 460 | Heathrow 1986-3-01 10.1 1.8 461 | Heathrow 1986-4-01 10.9 3.2 462 | Heathrow 1986-5-01 16.3 7.9 463 | Heathrow 1986-6-01 21.8 11.4 464 | Heathrow 1986-7-01 22.6 13.3 465 | Heathrow 1986-8-01 20 11.5 466 | Heathrow 1986-9-01 17.4 8.1 467 | Heathrow 1986-10-01 16.4 8.5 468 | Heathrow 1986-11-01 12.1 5.2 469 | Heathrow 1986-12-01 9.7 3.2 470 | Heathrow 1987-1-01 3.6 -1 471 | Heathrow 1987-2-01 7.7 1.4 472 | Heathrow 1987-3-01 8.5 1.4 473 | Heathrow 1987-4-01 15.8 6.7 474 | Heathrow 1987-5-01 16.3 7 475 | Heathrow 1987-6-01 18.6 10.6 476 | Heathrow 1987-7-01 21.8 13.2 477 | Heathrow 1987-8-01 21.8 12.5 478 | Heathrow 1987-9-01 19.3 11.4 479 | Heathrow 1987-10-01 15 7.7 480 | Heathrow 1987-11-01 9.8 4.2 481 | Heathrow 1987-12-01 8.9 4.1 482 | Heathrow 1988-1-01 8.8 3.1 483 | Heathrow 1988-2-01 8.7 1.8 484 | Heathrow 1988-3-01 10.7 3.7 485 | Heathrow 1988-4-01 13.5 5.1 486 | Heathrow 1988-5-01 18 9.1 487 | Heathrow 1988-6-01 19.7 11.3 488 | Heathrow 1988-7-01 20 12.2 489 | Heathrow 1988-8-01 21.8 12.4 490 | Heathrow 1988-9-01 18.8 10.8 491 | Heathrow 1988-10-01 15.5 8.5 492 | Heathrow 1988-11-01 9.9 1.8 493 | Heathrow 1988-12-01 10.4 4.8 494 | Heathrow 1989-1-01 9.5 3.1 495 | Heathrow 1989-2-01 10.2 2.6 496 | Heathrow 1989-3-01 12.9 4.5 497 | Heathrow 1989-4-01 11.5 4.3 498 | Heathrow 1989-5-01 21 10 499 | Heathrow 1989-6-01 22.1 11.4 500 | Heathrow 1989-7-01 25.8 14.8 501 | Heathrow 1989-8-01 24.2 13.1 502 | Heathrow 1989-9-01 20.7 12.6 503 | Heathrow 1989-10-01 17.1 9.7 504 | Heathrow 1989-11-01 10.9 3.7 505 | Heathrow 1989-12-01 9.4 4.2 506 | Heathrow 1990-1-01 10.2 4.4 507 | Heathrow 1990-2-01 11.7 5.3 508 | Heathrow 1990-3-01 13.6 4.8 509 | Heathrow 1990-4-01 14.6 4.2 510 | Heathrow 1990-5-01 20.5 9 511 | Heathrow 1990-6-01 19.5 10.8 512 | Heathrow 1990-7-01 24.7 13.2 513 | Heathrow 1990-8-01 26 14.7 514 | Heathrow 1990-9-01 19.7 10 515 | Heathrow 1990-10-01 16.9 9.6 516 | Heathrow 1990-11-01 10.7 5.1 517 | Heathrow 1990-12-01 7.6 2.5 518 | Heathrow 1991-1-01 7.3 1.8 519 | Heathrow 1991-2-01 5.4 -1.3 520 | Heathrow 1991-3-01 12.5 5.3 521 | Heathrow 1991-4-01 13.1 4.8 522 | Heathrow 1991-5-01 15.7 7.7 523 | Heathrow 1991-6-01 17.8 9.7 524 | Heathrow 1991-7-01 23.2 14.4 525 | Heathrow 1991-8-01 24.1 14.4 526 | Heathrow 1991-9-01 21.4 11.5 527 | Heathrow 1991-10-01 14.6 7.6 528 | Heathrow 1991-11-01 10.6 4.2 529 | Heathrow 1991-12-01 8.3 1.7 530 | Heathrow 1992-1-01 7.5 2 531 | Heathrow 1992-2-01 9.5 2.3 532 | Heathrow 1992-3-01 11.8 4.9 533 | Heathrow 1992-4-01 14 5.6 534 | Heathrow 1992-5-01 21 10.2 535 | Heathrow 1992-6-01 22.5 12.3 536 | Heathrow 1992-7-01 22.5 14.2 537 | Heathrow 1992-8-01 21.7 13.6 538 | Heathrow 1992-9-01 18.9 11 539 | Heathrow 1992-10-01 12.5 5.3 540 | Heathrow 1992-11-01 12 4.8 541 | Heathrow 1992-12-01 7.8 1.6 542 | Heathrow 1993-1-01 10.3 3.5 543 | Heathrow 1993-2-01 7.2 2.5 544 | Heathrow 1993-3-01 11.8 3.3 545 | Heathrow 1993-4-01 14.6 6.8 546 | Heathrow 1993-5-01 18 8.8 547 | Heathrow 1993-6-01 21.8 12.2 548 | Heathrow 1993-7-01 21.6 12.6 549 | Heathrow 1993-8-01 21.6 11.7 550 | Heathrow 1993-9-01 17.5 9.8 551 | Heathrow 1993-10-01 13 7 552 | Heathrow 1993-11-01 8.8 2.4 553 | Heathrow 1993-12-01 9.2 3.6 554 | Heathrow 1994-1-01 9.3 2.8 555 | Heathrow 1994-2-01 7.7 1.2 556 | Heathrow 1994-3-01 12.3 5.1 557 | Heathrow 1994-4-01 13.3 5.1 558 | Heathrow 1994-5-01 16 8.2 559 | Heathrow 1994-6-01 21.5 11.2 560 | Heathrow 1994-7-01 26.2 15.2 561 | Heathrow 1994-8-01 23 13.8 562 | Heathrow 1994-9-01 17.8 10.8 563 | Heathrow 1994-10-01 15.4 7.7 564 | Heathrow 1994-11-01 13.6 8.4 565 | Heathrow 1994-12-01 10.7 4 566 | Heathrow 1995-1-01 8.9 2.2 567 | Heathrow 1995-2-01 10.7 4.4 568 | Heathrow 1995-3-01 11.2 2 569 | Heathrow 1995-4-01 15 6.1 570 | Heathrow 1995-5-01 19 8.2 571 | Heathrow 1995-6-01 20.7 10.8 572 | Heathrow 1995-7-01 26.3 15.2 573 | Heathrow 1995-8-01 27 15.6 574 | Heathrow 1995-9-01 19.2 10.7 575 | Heathrow 1995-10-01 18.3 10.2 576 | Heathrow 1995-11-01 12 5.1 577 | Heathrow 1995-12-01 5.8 1 578 | Heathrow 1996-1-01 7.2 3.1 579 | Heathrow 1996-2-01 6.8 0.1 580 | Heathrow 1996-3-01 8.6 2.1 581 | Heathrow 1996-4-01 14.3 5.5 582 | Heathrow 1996-5-01 15.1 5.9 583 | Heathrow 1996-6-01 22.8 11.3 584 | Heathrow 1996-7-01 24.2 13.2 585 | Heathrow 1996-8-01 23.1 13.4 586 | Heathrow 1996-9-01 19.2 10.7 587 | Heathrow 1996-10-01 16.6 8.9 588 | Heathrow 1996-11-01 10.5 2.7 589 | Heathrow 1996-12-01 6.2 1.4 590 | Heathrow 1997-1-01 5.5 0.2 591 | Heathrow 1997-2-01 10.8 4 592 | Heathrow 1997-3-01 13.8 5.3 593 | Heathrow 1997-4-01 15.6 5.4 594 | Heathrow 1997-5-01 18.7 8.5 595 | Heathrow 1997-6-01 20.2 12.2 596 | Heathrow 1997-7-01 23.5 13.9 597 | Heathrow 1997-8-01 25.8 16.6 598 | Heathrow 1997-9-01 20.9 11.8 599 | Heathrow 1997-10-01 15.9 7.5 600 | Heathrow 1997-11-01 12.5 6.2 601 | Heathrow 1997-12-01 9.5 4.2 602 | Heathrow 1998-1-01 9.2 3.5 603 | Heathrow 1998-2-01 11.6 3.5 604 | Heathrow 1998-3-01 12.1 5.7 605 | Heathrow 1998-4-01 12.7 5.7 606 | Heathrow 1998-5-01 19.6 10.2 607 | Heathrow 1998-6-01 19.9 12 608 | Heathrow 1998-7-01 21.4 13 609 | Heathrow 1998-8-01 23.5 12.7 610 | Heathrow 1998-9-01 20.4 12.7 611 | Heathrow 1998-10-01 14.7 8.6 612 | Heathrow 1998-11-01 9.6 3.4 613 | Heathrow 1998-12-01 9.7 3.8 614 | Heathrow 1999-1-01 9.4 3.8 615 | Heathrow 1999-2-01 8.8 2.8 616 | Heathrow 1999-3-01 12.2 5 617 | Heathrow 1999-4-01 14.9 6.3 618 | Heathrow 1999-5-01 19.1 10.2 619 | Heathrow 1999-6-01 20.3 11 620 | Heathrow 1999-7-01 24.9 14.3 621 | Heathrow 1999-8-01 22.8 14 622 | Heathrow 1999-9-01 21.3 13.2 623 | Heathrow 1999-10-01 15.6 7.9 624 | Heathrow 1999-11-01 11.3 5.9 625 | Heathrow 1999-12-01 8.7 2.4 626 | Heathrow 2000-1-01 8.6 2.4 627 | Heathrow 2000-2-01 10.4 3.8 628 | Heathrow 2000-3-01 12.1 4.9 629 | Heathrow 2000-4-01 12.9 5.4 630 | Heathrow 2000-5-01 18 9.6 631 | Heathrow 2000-6-01 21 12.8 632 | Heathrow 2000-7-01 21 12.8 633 | Heathrow 2000-8-01 23.2 14 634 | Heathrow 2000-9-01 20.1 12.5 635 | Heathrow 2000-10-01 14.7 8.5 636 | Heathrow 2000-11-01 11 4.5 637 | Heathrow 2000-12-01 9 4.6 638 | Heathrow 2001-1-01 7.1 1.8 639 | Heathrow 2001-2-01 9.2 2.8 640 | Heathrow 2001-3-01 9.5 3.8 641 | Heathrow 2001-4-01 12.8 5.4 642 | Heathrow 2001-5-01 18.8 9.1 643 | Heathrow 2001-6-01 20.8 11.3 644 | Heathrow 2001-7-01 24.3 14.5 645 | Heathrow 2001-8-01 23.5 14.5 646 | Heathrow 2001-9-01 18.1 10.8 647 | Heathrow 2001-10-01 17.6 11.3 648 | Heathrow 2001-11-01 11.3 4.4 649 | Heathrow 2001-12-01 7.3 1.4 650 | Heathrow 2002-1-01 9.5 3.5 651 | Heathrow 2002-2-01 11.3 4.8 652 | Heathrow 2002-3-01 12.4 5.1 653 | Heathrow 2002-4-01 15.7 6.1 654 | Heathrow 2002-5-01 17.3 9.4 655 | Heathrow 2002-6-01 20.1 11.6 656 | Heathrow 2002-7-01 22.3 13.5 657 | Heathrow 2002-8-01 23.3 14.7 658 | Heathrow 2002-9-01 20.3 11.5 659 | Heathrow 2002-10-01 15.3 8.4 660 | Heathrow 2002-11-01 12.4 7 661 | Heathrow 2002-12-01 9 5.2 662 | Heathrow 2003-1-01 8 2.3 663 | Heathrow 2003-2-01 8.4 1.8 664 | Heathrow 2003-3-01 13.6 4.4 665 | Heathrow 2003-4-01 15.7 6.3 666 | Heathrow 2003-5-01 18.2 9 667 | Heathrow 2003-6-01 23.3 13.3 668 | Heathrow 2003-7-01 24.2 14.7 669 | Heathrow 2003-8-01 26.4 15.7 670 | Heathrow 2003-9-01 21.9 10.8 671 | Heathrow 2003-10-01 14.5 6.4 672 | Heathrow 2003-11-01 12.6 6.7 673 | Heathrow 2003-12-01 8.8 3.2 674 | Heathrow 2004-1-01 8.8 3.1 675 | Heathrow 2004-2-01 8.7 3.8 676 | Heathrow 2004-3-01 10.8 3.9 677 | Heathrow 2004-4-01 14.9 6.3 678 | Heathrow 2004-5-01 18.2 9.5 679 | Heathrow 2004-6-01 22.1 12.6 680 | Heathrow 2004-7-01 22.7 13.3 681 | Heathrow 2004-8-01 23.8 15.1 682 | Heathrow 2004-9-01 20.8 12.5 683 | Heathrow 2004-10-01 15.3 9.1 684 | Heathrow 2004-11-01 11.2 6.2 685 | Heathrow 2004-12-01 8.8 2.9 686 | Heathrow 2005-1-01 9.5 3.8 687 | Heathrow 2005-2-01 7.3 2.5 688 | Heathrow 2005-3-01 11.5 4.5 689 | Heathrow 2005-4-01 14.6 6.2 690 | Heathrow 2005-5-01 17.7 8.5 691 | Heathrow 2005-6-01 22.8 12.9 692 | Heathrow 2005-7-01 23.3 14.1 693 | Heathrow 2005-8-01 23.2 13 694 | Heathrow 2005-9-01 21.4 12.7 695 | Heathrow 2005-10-01 17.8 11.3 696 | Heathrow 2005-11-01 10.7 3.5 697 | Heathrow 2005-12-01 8.2 1.9 698 | Heathrow 2006-1-01 7.6 2.9 699 | Heathrow 2006-2-01 7.2 1.7 700 | Heathrow 2006-3-01 9.4 2.8 701 | Heathrow 2006-4-01 14.1 6 702 | Heathrow 2006-5-01 18 9.8 703 | Heathrow 2006-6-01 23.7 12.9 704 | Heathrow 2006-7-01 28.2 16.7 705 | Heathrow 2006-8-01 22.2 13.5 706 | Heathrow 2006-9-01 22.7 14.5 707 | Heathrow 2006-10-01 17.8 11.2 708 | Heathrow 2006-11-01 12.7 5.4 709 | Heathrow 2006-12-01 9.7 4.5 710 | Heathrow 2007-1-01 10.5 5.1 711 | Heathrow 2007-2-01 9.9 3.9 712 | Heathrow 2007-3-01 12.5 4.4 713 | Heathrow 2007-4-01 18.9 7.7 714 | Heathrow 2007-5-01 17.9 9.7 715 | Heathrow 2007-6-01 21.2 12.6 716 | Heathrow 2007-7-01 21.4 13.1 717 | Heathrow 2007-8-01 21.5 12.9 718 | Heathrow 2007-9-01 19.9 11.4 719 | Heathrow 2007-10-01 15.4 8.5 720 | Heathrow 2007-11-01 11.4 4.6 721 | Heathrow 2007-12-01 8.9 3.1 722 | Heathrow 2008-1-01 10.4 4.7 723 | Heathrow 2008-2-01 11 2 724 | Heathrow 2008-3-01 10.6 3.7 725 | Heathrow 2008-4-01 13.7 5.2 726 | Heathrow 2008-5-01 19.8 10.5 727 | Heathrow 2008-6-01 20.8 11.9 728 | Heathrow 2008-7-01 22.8 13.7 729 | Heathrow 2008-8-01 21.5 14.2 730 | Heathrow 2008-9-01 18.5 11.2 731 | Heathrow 2008-10-01 15 6.8 732 | Heathrow 2008-11-01 10.7 5.2 733 | Heathrow 2008-12-01 7.3 1.7 734 | Heathrow 2009-1-01 6.8 0.3 735 | Heathrow 2009-2-01 7.8 2.1 736 | Heathrow 2009-3-01 12.9 3.7 737 | Heathrow 2009-4-01 16.1 7.2 738 | Heathrow 2009-5-01 19.1 9.4 739 | Heathrow 2009-6-01 22.4 12.2 740 | Heathrow 2009-7-01 23 13.7 741 | Heathrow 2009-8-01 23.9 14.1 742 | Heathrow 2009-9-01 20.5 12 743 | Heathrow 2009-10-01 16.3 9.3 744 | Heathrow 2009-11-01 12.6 7.4 745 | Heathrow 2009-12-01 7 1.3 746 | Heathrow 2010-1-01 4.5 -0.3 747 | Heathrow 2010-2-01 6.9 1.7 748 | Heathrow 2010-3-01 11.1 3.7 749 | Heathrow 2010-4-01 15.8 5.6 750 | Heathrow 2010-5-01 17.3 7.7 751 | Heathrow 2010-6-01 23.5 12.1 752 | Heathrow 2010-7-01 25 15.1 753 | Heathrow 2010-8-01 21.6 13.2 754 | Heathrow 2010-9-01 19.4 11.2 755 | Heathrow 2010-10-01 15.2 8.3 756 | Heathrow 2010-11-01 9.1 4 757 | Heathrow 2010-12-01 3.9 -1.5 758 | Heathrow 2011-1-01 7.4 2.8 759 | Heathrow 2011-2-01 10.2 4.8 760 | Heathrow 2011-3-01 12.3 3.8 761 | Heathrow 2011-4-01 19.7 8.6 762 | Heathrow 2011-5-01 19.4 9.4 763 | Heathrow 2011-6-01 20.7 11 764 | Heathrow 2011-7-01 21.7 12.6 765 | Heathrow 2011-8-01 21.8 13.4 766 | Heathrow 2011-9-01 21.3 12.4 767 | Heathrow 2011-10-01 18.1 10.1 768 | Heathrow 2011-11-01 13.6 7.3 769 | Heathrow 2011-12-01 9.9 3.8 770 | Heathrow 2012-1-01 9.8 3.4 771 | Heathrow 2012-2-01 8 1.3 772 | Heathrow 2012-3-01 14.7 4.7 773 | Heathrow 2012-4-01 13.3 4.9 774 | Heathrow 2012-5-01 18.2 9.7 775 | Heathrow 2012-6-01 19.4 11.6 776 | Heathrow 2012-7-01 21.3 13.2 777 | Heathrow 2012-8-01 23.5 14.3 778 | Heathrow 2012-9-01 20 10.3 779 | Heathrow 2012-10-01 14.2 8 780 | Heathrow 2012-11-01 11 4.6 781 | Heathrow 2012-12-01 9 2.6 782 | Heathrow 2013-1-01 6.5 2 783 | Heathrow 2013-2-01 6.7 1.2 784 | Heathrow 2013-3-01 6.9 1.2 785 | Heathrow 2013-4-01 13.5 4.7 786 | Heathrow 2013-5-01 16.4 7.7 787 | Heathrow 2013-6-01 20.3 11.2 788 | Heathrow 2013-7-01 27 15.2 789 | Heathrow 2013-8-01 24.3 14.3 790 | Heathrow 2013-9-01 19.7 11.1 791 | Heathrow 2013-10-01 17 10.6 792 | Heathrow 2013-11-01 10.4 4.7 793 | Heathrow 2013-12-01 10.2 3.5 794 | Heathrow 2014-1-01 10 3.8 795 | Heathrow 2014-2-01 10.6 4.4 796 | Heathrow 2014-3-01 14.1 4.4 797 | Heathrow 2014-4-01 16.1 7.5 798 | Heathrow 2014-5-01 18 9.8 799 | Heathrow 2014-6-01 22.1 12.5 800 | Heathrow 2014-7-01 25.8 15 801 | Heathrow 2014-8-01 21.7 12.7 802 | Heathrow 2014-9-01 21.5 12.8 803 | Heathrow 2014-10-01 17.6 11 804 | Heathrow 2014-11-01 12.5 6.9 805 | Heathrow 2014-12-01 9.2 3 806 | Heathrow 2015-1-01 8.8 1.6 807 | Heathrow 2015-2-01 8 1.8 808 | Heathrow 2015-3-01 11.6 4.1 809 | Heathrow 2015-4-01 16.3 6 810 | Heathrow 2015-5-01 17.6 8.8 811 | Heathrow 2015-6-01 22.2 11.4 812 | Heathrow 2015-7-01 23.7 13.8 813 | Heathrow 2015-8-01 22.2 14.1 814 | Heathrow 2015-9-01 18.6 10.2 815 | Heathrow 2015-10-01 15.8 9.3 816 | Heathrow 2015-11-01 13.4 8 817 | Heathrow 2015-12-01 13.7 8.9 818 | Heathrow 2016-1-01 9.5 3 819 | Heathrow 2016-2-01 9.4 2.9 820 | Heathrow 2016-3-01 10.7 3.2 821 | Heathrow 2016-4-01 13.5 4.9 822 | Heathrow 2016-5-01 19 9.7 823 | Heathrow 2016-6-01 20.7 12.7 824 | Heathrow 2016-7-01 24 14.5 825 | Heathrow 2016-8-01 24.7 14.6 826 | Heathrow 2016-9-01 22.4 13.7 827 | Heathrow 2016-10-01 15.9 8.7 828 | Heathrow 2016-11-01 10.5 3.8 829 | Heathrow 2016-12-01 10.2 3.4 830 | Heathrow 2017-1-01 7.6 0.7 831 | Heathrow 2017-2-01 10 4.4 832 | Heathrow 2017-3-01 14.1 6.6 833 | Heathrow 2017-4-01 15.8 5.9 834 | Heathrow 2017-5-01 19.8 10.4 835 | Heathrow 2017-6-01 24 13.9 836 | Heathrow 2017-7-01 23.8 14.9 837 | Heathrow 2017-8-01 22 13.5 838 | Heathrow 2017-9-01 19.2 11 839 | Heathrow 2017-10-01 17.1 10.3 840 | Heathrow 2017-11-01 11.1 4.5 841 | Heathrow 2017-12-01 8.7 2.9 842 | Heathrow 2018-1-01 9.7 3.8 843 | Heathrow 2018-2-01 6.7 0.6 844 | -------------------------------------------------------------------------------- /Section 3/weather/main.py: -------------------------------------------------------------------------------- 1 | from os.path import join, dirname 2 | import datetime 3 | 4 | import pandas as pd 5 | from scipy.signal import savgol_filter 6 | 7 | from bokeh.io import curdoc 8 | from bokeh.layouts import row, column 9 | from bokeh.models import ColumnDataSource, DataRange1d, Select 10 | from bokeh.palettes import Blues4 11 | from bokeh.plotting import figure 12 | 13 | STATISTICS = ['record_min_temp', 'actual_min_temp', 'average_min_temp', 'average_max_temp', 'actual_max_temp', 'record_max_temp'] 14 | 15 | def get_dataset(src, name, distribution): 16 | df = src[src.airport == name].copy() 17 | del df['airport'] 18 | df['date'] = pd.to_datetime(df.date) 19 | # timedelta here instead of pd.DateOffset to avoid pandas bug < 0.18 (Pandas issue #11925) 20 | df['left'] = df.date - datetime.timedelta(days=0.5) 21 | df['right'] = df.date + datetime.timedelta(days=0.5) 22 | df = df.set_index(['date']) 23 | df.sort_index(inplace=True) 24 | if distribution == 'Smoothed': 25 | window, order = 51, 3 26 | for key in STATISTICS: 27 | df[key] = savgol_filter(df[key], window, order) 28 | 29 | return ColumnDataSource(data=df) 30 | 31 | def make_plot(source, title): 32 | plot = figure(x_axis_type="datetime", plot_width=800, tools="", toolbar_location=None) 33 | plot.title.text = title 34 | 35 | plot.quad(top='record_max_temp', bottom='record_min_temp', left='left', right='right', 36 | color=Blues4[2], source=source, legend="Record") 37 | plot.quad(top='average_max_temp', bottom='average_min_temp', left='left', right='right', 38 | color=Blues4[1], source=source, legend="Average") 39 | plot.quad(top='actual_max_temp', bottom='actual_min_temp', left='left', right='right', 40 | color=Blues4[0], alpha=0.5, line_color="black", source=source, legend="Actual") 41 | 42 | # fixed attributes 43 | plot.xaxis.axis_label = None 44 | plot.yaxis.axis_label = "Temperature (F)" 45 | plot.axis.axis_label_text_font_style = "bold" 46 | plot.x_range = DataRange1d(range_padding=0.0) 47 | plot.grid.grid_line_alpha = 0.3 48 | 49 | return plot 50 | 51 | def update_plot(attrname, old, new): 52 | city = city_select.value 53 | plot.title.text = "Weather data for " + cities[city]['title'] 54 | 55 | src = get_dataset(df, cities[city]['airport'], distribution_select.value) 56 | source.data.update(src.data) 57 | 58 | city = 'Austin' 59 | distribution = 'Discrete' 60 | 61 | cities = { 62 | 'Austin': { 63 | 'airport': 'AUS', 64 | 'title': 'Austin, TX', 65 | }, 66 | 'Boston': { 67 | 'airport': 'BOS', 68 | 'title': 'Boston, MA', 69 | }, 70 | 'Seattle': { 71 | 'airport': 'SEA', 72 | 'title': 'Seattle, WA', 73 | } 74 | } 75 | 76 | city_select = Select(value=city, title='City', options=sorted(cities.keys())) 77 | distribution_select = Select(value=distribution, title='Distribution', options=['Discrete', 'Smoothed']) 78 | 79 | df = pd.read_csv(join(dirname(__file__), 'data/2015_weather.csv')) 80 | source = get_dataset(df, cities[city]['airport'], distribution) 81 | plot = make_plot(source, "Weather data for " + cities[city]['title']) 82 | 83 | city_select.on_change('value', update_plot) 84 | distribution_select.on_change('value', update_plot) 85 | 86 | controls = column(city_select, distribution_select) 87 | 88 | curdoc().add_root(row(plot, controls)) 89 | curdoc().title = "Weather" 90 | -------------------------------------------------------------------------------- /Section 4/README.md: -------------------------------------------------------------------------------- 1 | # Data-visualization-projects-in-python 2 | Data visualization projects in python [video], published by Packt 3 | -------------------------------------------------------------------------------- /Section 4/android1/app.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import dash 3 | import dash_core_components as dcc 4 | import dash_html_components as html 5 | 6 | app = dash.Dash() 7 | 8 | app.layout = html.Div(children=[ 9 | html.H1(children='Android Data Visualization'), 10 | 11 | html.Div(children=''' 12 | Android versions marketshare data visusliation using Dash. 13 | '''), 14 | 15 | dcc.Graph( 16 | id='example-graph', 17 | figure={ 18 | 'data': [ 19 | {'x': ['Gingerbread', 'Ice Cream Sandwich', 'Jelly Bean', 'Kitkat', 20 | 'Lollipop', 'Marshmallow','Nougat', 'Oreo'], 21 | 'y': [0.3, 0.4, 5, 12, 24.6, 28.10, 28.5, 1.1], 22 | 'type': 'bar'} 23 | ], 24 | 'layout': { 25 | 'title': 'Android Data Visualization' 26 | } 27 | } 28 | ) 29 | ]) 30 | 31 | if __name__ == '__main__': 32 | app.run_server(debug=True) 33 | -------------------------------------------------------------------------------- /Section 4/android2/app.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import dash 3 | import dash_core_components as dcc 4 | import dash_html_components as html 5 | 6 | app = dash.Dash() 7 | 8 | colors = { 9 | 'background': '#111111', 10 | 'text': '#7FDBFF' 11 | } 12 | 13 | app.layout = html.Div(style={'backgroundColor': colors['background']}, children=[ 14 | html.H1( 15 | children='Android Data Visualization', 16 | style={ 17 | 'textAlign': 'center', 18 | 'color': colors['text'] 19 | } 20 | ), 21 | 22 | html.Div(children='Android versions\' marketshare data visualization using Dash.', style={ 23 | 'textAlign': 'center', 24 | 'color': colors['text'] 25 | }), 26 | 27 | dcc.Graph( 28 | id='example-graph', 29 | figure={ 30 | 'data': [ 31 | {'x': ['Gingerbread', 'Ice Cream Sandwich', 'Jelly Bean', 'Kitkat', 32 | 'Lollipop', 'Marshmallow','Nougat', 'Oreo'], 33 | 'y': [0.3, 0.4, 5, 12, 24.6, 28.10, 28.5, 1.1], 34 | 'type': 'bar'} 35 | ], 36 | 'layout': { 37 | 'title': 'Android Data Visualization', 38 | 'plot_bgcolor': colors['background'], 39 | 'paper_bgcolor': colors['background'], 40 | 'font': { 41 | 'color': colors['text'] 42 | } 43 | } 44 | } 45 | ) 46 | ]) 47 | 48 | if __name__ == '__main__': 49 | app.run_server(debug=True) 50 | -------------------------------------------------------------------------------- /Section 4/walmart1/app.py: -------------------------------------------------------------------------------- 1 | import dash 2 | import dash_core_components as dcc 3 | import dash_html_components as html 4 | import plotly.graph_objs as go 5 | import pandas as pd 6 | 7 | app = dash.Dash() 8 | 9 | df = pd.read_csv( 10 | 'https://raw.githubusercontent.com/' 11 | 'plotly/datasets/master/' 12 | '1962_2006_walmart_store_openings.csv') 13 | 14 | app.layout = html.Div([ 15 | html.H1('Walmart Store Openings'), 16 | html.Div(id='text-content'), 17 | dcc.Graph(id='map', figure={ 18 | 'data': [{ 19 | 'lat': df['LAT'], 20 | 'lon': df['LON'], 21 | 'marker': { 22 | 'color': df['YEAR'], 23 | 'size': 8, 24 | 'opacity': 0.6 25 | }, 26 | 'customdata': df['storenum'], 27 | 'type': 'scattermapbox' 28 | }], 29 | 'layout': { 30 | 'mapbox': { 31 | 'accesstoken': 'pk.eyJ1IjoiY2hyaWRkeXAiLCJhIjoiY2ozcGI1MTZ3MDBpcTJ3cXR4b3owdDQwaCJ9.8jpMunbKjdq1anXwU5gxIw' 32 | }, 33 | 'hovermode': 'closest', 34 | 'margin': {'l': 0, 'r': 0, 'b': 0, 't': 0} 35 | } 36 | }) 37 | ]) 38 | 39 | 40 | @app.callback( 41 | dash.dependencies.Output('text-content', 'children'), 42 | [dash.dependencies.Input('map', 'hoverData')]) 43 | def update_text(hoverData): 44 | s = df[df['storenum'] == hoverData['points'][0]['customdata']] 45 | return html.H3( 46 | 'The {}, {} {} opened in {}'.format( 47 | s.iloc[0]['STRCITY'], 48 | s.iloc[0]['STRSTATE'], 49 | s.iloc[0]['type_store'], 50 | s.iloc[0]['YEAR'] 51 | ) 52 | ) 53 | 54 | app.css.append_css({ 55 | 'external_url': 'https://codepen.io/chriddyp/pen/bWLwgP.css' 56 | }) 57 | 58 | if __name__ == '__main__': 59 | app.run_server(debug=True) 60 | -------------------------------------------------------------------------------- /Section 4/walmart2/app.py: -------------------------------------------------------------------------------- 1 | import dash 2 | import dash_html_components as html 3 | import dash_core_components as dcc 4 | 5 | import pandas as pd 6 | 7 | df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/1962_2006_walmart_store_openings.csv') 8 | 9 | app = dash.Dash() 10 | app.scripts.config.serve_locally=True 11 | app.css.append_css({"external_url": "https://codepen.io/chriddyp/pen/dZVMbK.css"}) 12 | 13 | 14 | app.layout = html.Div([ 15 | html.H1('Dash App'), 16 | html.Div(id='text-element'), 17 | dcc.Dropdown( 18 | id='dropdown', 19 | options=[ 20 | {'label': i, 'value': i} 21 | for i in df.YEAR.unique() 22 | ], 23 | value=2001 24 | ), 25 | dcc.Graph( 26 | id='my-graph', 27 | figure={ 28 | 'data': [ 29 | {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar'} 30 | ] 31 | } 32 | ) 33 | ]) 34 | 35 | @app.callback( 36 | dash.dependencies.Output('text-element', 'children'), 37 | [dash.dependencies.Input('dropdown', 'value')]) 38 | def update_text(new_year): 39 | dff = df[df.YEAR == new_year] 40 | return 'There were {} stores in {}'.format( 41 | len(dff), 42 | new_year 43 | ) 44 | 45 | @app.callback( 46 | dash.dependencies.Output('my-graph', 'figure'), 47 | [dash.dependencies.Input('dropdown', 'value')]) 48 | def update_graph(new_value): 49 | dff = df[df.YEAR == new_value] 50 | return { 51 | 'data': [{ 52 | 'lat': dff.LAT, 53 | 'lon': dff.LON, 54 | 'type': 'scattermapbox', 55 | }], 56 | 'layout': {'mapbox': {'accesstoken': 'pk.eyJ1IjoiY2hyaWRkeXAiLCJhIjoiY2oyY2M4YW55MDF1YjMzbzhmemIzb290NiJ9.sT6pncHLXLgytVEj21q43A'}} 57 | } 58 | 59 | if __name__ == '__main__': 60 | app.run_server(debug=True) 61 | --------------------------------------------------------------------------------