├── .gitignore ├── .notes.txt ├── 00_introduction.ipynb ├── 01_exercise_pandas.ipynb ├── 01_intro_numpy_pandas.ipynb ├── 01_solutions_pandas.ipynb ├── 02_intro_seaborn.ipynb ├── 03_exercise_scikit_learn.ipynb ├── 03_intro_scikit_learn.ipynb ├── 03_solutions_scikit_learn.ipynb ├── README.md ├── colormaps.py ├── data ├── 2002FemPreg.csv.gz ├── AAPL.csv ├── iris.csv └── titanic3.csv ├── figures ├── cumulative_snowfall.png ├── iris_setosa.jpg ├── iris_versicolor.jpg ├── iris_virginica.jpg ├── pandas-book.jpg ├── petal_sepal.jpg ├── seaborn_gallery.png ├── supervised_workflow.svg └── train_test_split.svg ├── index.ipynb └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | \#* 3 | *.swp 4 | .ipynb_checkpoints 5 | -------------------------------------------------------------------------------- /.notes.txt: -------------------------------------------------------------------------------- 1 | # An introduction to "Data Science" 2 | 3 | ## Python Survival Pack 4 | 5 | 14:00 -- 15:40 Session One 6 | 16:15 -- 17:55 Session Two 7 | 8 | ** Add mybinder links ** 9 | 10 | ## Session One: Exploring the data (100 mins) 11 | 12 | DS: Asking & answering questions about data 13 | - Principles 14 | - Methods 15 | - Discipline 16 | 17 | Data Loading, Cleaning and Visualization 18 | 19 | + nature (big/small, stream/not, etc.) 20 | 21 | 1. Introduction + install + overview (20 mins) 22 | 23 | - Give page of resources including: 24 | 25 | - scipy lectures 26 | - docs for pandas, seaborn, scikit-learn, etc. 27 | 28 | - Mention git as prominent first step in tracking code / data 29 | 30 | 2. [X] (NumPy) + Pandas (+ basic hist / plotting) (40 mins) 31 | 3. [X] Assignment: "early births" (30 mins) 32 | 4. Solution of "early births": (10 mins) 33 | 34 | ## Session Two: (100 mins) 35 | 36 | - Visualization using Seaborn (20 mins) 37 | - Mention alternatives (Matplotlib, Bokeh, Vega, etc.) 38 | 39 | - [X] Scikit-learn (40 mins) 40 | - ML: Supervised classification 41 | - Training vs testing data 42 | - API overview 43 | - Example: Titanic 44 | 45 | - [X] Assignment (Iris dataset): (30 mins) 46 | - Solutions of Iris dataset: (10 mins) 47 | 48 | 49 | A. Data management, data exploration and visualization, and data processing 50 | 51 | Data management includes the versioning of material (e.g., us- 52 | ing snapshots, check-ins, or labeled back-ups), sharing and distri- 53 | bution (e.g., revision control, databases, cloud storage, distributed 54 | networks, network file servers or physical media) and cleaning 55 | (converting the data into usable formats, interpreting elements, and 56 | scrubbing out invalid or blank records). 57 | 58 | Once the data is in a usable form, it can be explored to gain an in- 59 | tuitive understanding of what it contains (and whether there are any 60 | anomalies—such as sampling or encoding artifacts—to be aware 61 | of). This step can include reducing the amount of data through slic- 62 | ing or projection, calculating summary statistics, and plotting the 63 | resulting sets in various ways. 64 | 65 | After we’ve improved our understanding of the data, we process 66 | it by applying more sophisticated statistical models. From these 67 | models, we may draw inferences on newly obtained data, or use 68 | our results to frame questions for a next round of data gathering. 69 | After attending this part of the tutorial, attendees should have a 70 | basic global understanding of the data science landscape 71 | 72 | 73 | B. Part 2: The data scientist’s Python toolbox 74 | 75 | (a) Create a numpy array and perform fundamental operations on 76 | it. 77 | (b) Plot one and two dimensional arrays. 78 | (c) Load/save arrays from/to disk. 79 | (d) Create common plotting items such as line plots, histograms, 80 | scatter plots, density plots, error bars and error margins (on 81 | line plots). 82 | (e) Create a network with nodes and links and run some common 83 | queries on it. 84 | (f) Be able to help themselves (from online sources and via doc- 85 | strings), should they get stuck. 86 | 87 | C. Data Exploration 88 | 89 | (a) Be aware of the most common ways of storing and fetch- 90 | ing data, including revision control systems (such as Git) and 91 | SQL, as well as formats (such as CSV, JSON). 92 | (b) Be able to load a CSV file from disk. 93 | (c) Be able to remove or replace missing values from a data-set. 94 | (d) Know how to perform exploratory data visualization, includ- 95 | ing slicing and displaying a data set. 96 | 97 | D. Analysis 98 | 99 | (a) Understand what a classifier is. 100 | (b) Be familiar with the scikit-learn classifier API. 101 | (c) Be able to construct a random forest classifier based on known 102 | data. 103 | (d) Be able to evaluate its classification accuracy for a new, un- 104 | known set of data. 105 | -------------------------------------------------------------------------------- /00_introduction.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "slide" 8 | } 9 | }, 10 | "source": [ 11 | "## About me\n", 12 | "\n", 13 | "### Stéfan van der Walt (@stefanvdwalt)\n", 14 | "\n", 15 | "\n", 16 | "\n", 17 | "\n", 18 | "
\n", 19 | "### https://github.com/stefanv/ds_intro" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": { 25 | "slideshow": { 26 | "slide_type": "slide" 27 | } 28 | }, 29 | "source": [ 30 | "## What is Data Science?\n", 31 | "\n", 32 | "That's an excellent question, thank you for asking." 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "metadata": { 38 | "slideshow": { 39 | "slide_type": "subslide" 40 | } 41 | }, 42 | "source": [ 43 | "It means a lot of things to a lot of people. Including different things to those in:\n", 44 | " \n", 45 | " - Industry\n", 46 | " - Statistics\n", 47 | " - Engineering\n", 48 | " - Computer Science\n", 49 | " - \"Data Science\"" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": { 55 | "slideshow": { 56 | "slide_type": "subslide" 57 | } 58 | }, 59 | "source": [ 60 | "Very simplistically, data science is about asking & answering questions around data, and making use of a wide variety of tools across the fields of computation, visualization and engineering to achieve that goal. DS sources from various fields:\n", 61 | "\n", 62 | " - Principles (mathematical)\n", 63 | " - Methods (statistical)\n", 64 | " - Implementation (engineering)\n", 65 | " - Discipline (software engineering & CS)" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": { 71 | "slideshow": { 72 | "slide_type": "subslide" 73 | } 74 | }, 75 | "source": [ 76 | "- We're not going to try and answer these questions today.\n", 77 | "- We're also not going to try and turn you into a so-called Data Scientist in 3 hours.\n", 78 | "- We will try and teach you how to:\n", 79 | "\n", 80 | " - Load & manipulate data using **Pandas**\n", 81 | " - How to generate beautiful plots using **Seaborn**\n", 82 | " - Do basic machine learning, i.e. how to fit & evaluate a model in **scikit-learn**" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": { 88 | "slideshow": { 89 | "slide_type": "subslide" 90 | } 91 | }, 92 | "source": [ 93 | "We should be saying things about:\n", 94 | "\n", 95 | " - Version control\n", 96 | " - Data sharing and distribution\n", 97 | " - Testing\n", 98 | " - Licensing and collaboration\n", 99 | " - & many other important topics...\n", 100 | " \n", 101 | "But we also won't do that today." 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "metadata": { 107 | "slideshow": { 108 | "slide_type": "subslide" 109 | } 110 | }, 111 | "source": [ 112 | "## Who is the intended audience of this tutorial?\n", 113 | "\n", 114 | "This tutorial is intended for people who:\n", 115 | "\n", 116 | "- have programmed in Python before,\n", 117 | "- have worked with arrays (in some) languages,\n", 118 | "- are interested in learning about Pandas & scikit-learn.\n", 119 | "\n", 120 | "It is not intended to:\n", 121 | "\n", 122 | "- Explore the dark underbelly of NumPy (I have [another lecture for that](https://github.com/stefanv/teaching/tree/master/2014_assp_split_numpy)).\n", 123 | "- Further hone the skills of experts in machine learning (you want [this scikit-learn tutorial](https://github.com/amueller/scipy_2015_sklearn_tutorial)).\n", 124 | "\n", 125 | "\n" 126 | ] 127 | }, 128 | { 129 | "cell_type": "markdown", 130 | "metadata": { 131 | "slideshow": { 132 | "slide_type": "slide" 133 | } 134 | }, 135 | "source": [ 136 | "## This tutorial is meant to be enjoyed interactively.\n", 137 | "\n", 138 | "Please ask if you have any questions along the way." 139 | ] 140 | }, 141 | { 142 | "cell_type": "markdown", 143 | "metadata": { 144 | "collapsed": true, 145 | "slideshow": { 146 | "slide_type": "subslide" 147 | } 148 | }, 149 | "source": [ 150 | "## Using the IPython notebook" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "* You can run a cell by pressing ``[shift] + [Enter]`` or by pressing the \"play\" button in the menu.\n", 158 | "* You can get help on a function or object by pressing ``[shift] + [tab]`` after the opening parenthesis ``function(``\n", 159 | "* You can also get help by executing: ``function?``" 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": { 165 | "slideshow": { 166 | "slide_type": "subslide" 167 | } 168 | }, 169 | "source": [ 170 | "## Finding help\n", 171 | "\n", 172 | "- Docstrings\n", 173 | "- Tab completion, shift-tab\n", 174 | "- Package documentation:\n", 175 | "\n", 176 | " + http://www.scipy-lectures.org/\n", 177 | " + http://pandas.pydata.org/pandas-docs/stable/\n", 178 | " + http://stanford.edu/~mwaskom/software/seaborn/\n", 179 | " + http://scikit-learn.org/stable/documentation.html" 180 | ] 181 | }, 182 | { 183 | "cell_type": "markdown", 184 | "metadata": { 185 | "slideshow": { 186 | "slide_type": "subslide" 187 | } 188 | }, 189 | "source": [ 190 | "## Installation\n", 191 | "\n", 192 | "Please see the [index](index.ipynb)" 193 | ] 194 | } 195 | ], 196 | "metadata": { 197 | "celltoolbar": "Slideshow", 198 | "kernelspec": { 199 | "display_name": "Python 3", 200 | "language": "python", 201 | "name": "python3" 202 | }, 203 | "language_info": { 204 | "codemirror_mode": { 205 | "name": "ipython", 206 | "version": 3 207 | }, 208 | "file_extension": ".py", 209 | "mimetype": "text/x-python", 210 | "name": "python", 211 | "nbconvert_exporter": "python", 212 | "pygments_lexer": "ipython3", 213 | "version": "3.4.3" 214 | } 215 | }, 216 | "nbformat": 4, 217 | "nbformat_minor": 0 218 | } 219 | -------------------------------------------------------------------------------- /01_exercise_pandas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## IPython Notebooks\n", 8 | "\n", 9 | "* You can run a cell by pressing ``[shift] + [Enter]`` or by pressing the \"play\" button in the menu.\n", 10 | "* You can get help on a function or object by pressing ``[shift] + [tab]`` after the opening parenthesis ``function(``\n", 11 | "* You can also get help by executing: ``function?``\n", 12 | "\n", 13 | "We'll use the following standard imports. Execute this cell first:" 14 | ] 15 | }, 16 | { 17 | "cell_type": "markdown", 18 | "metadata": {}, 19 | "source": [ 20 | "# Exercise: are first-borns more likely to be late?\n", 21 | "\n", 22 | "This exercise is based on [lecture material by Allen Downey](https://github.com/AllenDowney/CompStats.git).\n", 23 | "\n", 24 | "License: [Creative Commons Attribution 4.0 International](http://creativecommons.org/licenses/by/4.0/)" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": null, 30 | "metadata": { 31 | "collapsed": false 32 | }, 33 | "outputs": [], 34 | "source": [ 35 | "# this future import makes this code mostly compatible with Python 2 and 3\n", 36 | "from __future__ import print_function, division\n", 37 | "\n", 38 | "import random\n", 39 | "\n", 40 | "import numpy as np\n", 41 | "import pandas as pd\n", 42 | "import seaborn as sns\n", 43 | "\n", 44 | "%matplotlib inline\n", 45 | "import matplotlib.pyplot as plt" 46 | ] 47 | }, 48 | { 49 | "cell_type": "markdown", 50 | "metadata": {}, 51 | "source": [ 52 | "Are first babies more likely to be late?\n", 53 | "----------------------------------------\n", 54 | "\n", 55 | "Allen Downey wrote a popular blog post about this topic:\n", 56 | "\n", 57 | "http://allendowney.blogspot.com/2011/02/are-first-babies-more-likely-to-be-late.html\n", 58 | "\n", 59 | "We are going to investigate the question for ourselves, based on data from the National Survey of Family Growth (NSFG)." 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "Use the Pandas ``read_csv`` command to load ``data/2002FemPreg.csv.gz``." 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": null, 72 | "metadata": { 73 | "collapsed": false 74 | }, 75 | "outputs": [], 76 | "source": [ 77 | "preg = ..." 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": {}, 83 | "source": [ 84 | "- The variable **`outcome`** encodes the outcome of the pregnancy. Outcome 1 is a live birth.\n", 85 | "- The variable **`pregordr`** encodes for first pregnancies (==1) and others (>1).\n", 86 | "- The variables **`prglngth`** encodes for the length of pregnancy up to birth." 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": null, 92 | "metadata": { 93 | "collapsed": false 94 | }, 95 | "outputs": [], 96 | "source": [ 97 | "preg.outcome.value_counts().sort_index()" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": null, 103 | "metadata": { 104 | "collapsed": false 105 | }, 106 | "outputs": [], 107 | "source": [ 108 | "preg.pregordr.value_counts().sort_index()" 109 | ] 110 | }, 111 | { 112 | "cell_type": "markdown", 113 | "metadata": {}, 114 | "source": [ 115 | "Let's visualize the number of births over different weeks:" 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "execution_count": null, 121 | "metadata": { 122 | "collapsed": false 123 | }, 124 | "outputs": [], 125 | "source": [ 126 | "preg.prglngth.value_counts().sort_index().plot(title='Number of births for week')" 127 | ] 128 | }, 129 | { 130 | "cell_type": "markdown", 131 | "metadata": {}, 132 | "source": [ 133 | "And here is the total number of babies born up to a certain week:" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": null, 139 | "metadata": { 140 | "collapsed": false 141 | }, 142 | "outputs": [], 143 | "source": [ 144 | "preg.prglngth.value_counts().sort_index().cumsum().plot(title='Total nr of births up to week')" 145 | ] 146 | }, 147 | { 148 | "cell_type": "markdown", 149 | "metadata": {}, 150 | "source": [ 151 | "Now, create a Pandas dataframe containing *only* the three columns of interest. **Hint:** ``loc``" 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": null, 157 | "metadata": { 158 | "collapsed": false 159 | }, 160 | "outputs": [], 161 | "source": [ 162 | "pp = ...\n", 163 | "pp.head()" 164 | ] 165 | }, 166 | { 167 | "cell_type": "markdown", 168 | "metadata": {}, 169 | "source": [ 170 | "Now, select only entries where ``outcome`` is 1 (i.e., live births)." 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": null, 176 | "metadata": { 177 | "collapsed": false 178 | }, 179 | "outputs": [], 180 | "source": [ 181 | "pp = ..." 182 | ] 183 | }, 184 | { 185 | "cell_type": "markdown", 186 | "metadata": {}, 187 | "source": [ 188 | "Also, we are only interested in whether babies are first born or not, so set any entries for ``pregordr`` that are !=1 to the value 2. *Hint:* Use ``.loc`` with two indices." 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": null, 194 | "metadata": { 195 | "collapsed": false 196 | }, 197 | "outputs": [], 198 | "source": [ 199 | "pp.loc[...] = 2\n", 200 | "pp.head()" 201 | ] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "execution_count": null, 206 | "metadata": { 207 | "collapsed": true 208 | }, 209 | "outputs": [], 210 | "source": [ 211 | "pp.groupby('pregordr').describe()" 212 | ] 213 | }, 214 | { 215 | "cell_type": "markdown", 216 | "metadata": {}, 217 | "source": [ 218 | "Create two dataframes. One with first pregnancies, and one with all the rest." 219 | ] 220 | }, 221 | { 222 | "cell_type": "code", 223 | "execution_count": null, 224 | "metadata": { 225 | "collapsed": false 226 | }, 227 | "outputs": [], 228 | "source": [ 229 | "firsts = pp[...]\n", 230 | "others = pp[...]" 231 | ] 232 | }, 233 | { 234 | "cell_type": "markdown", 235 | "metadata": {}, 236 | "source": [ 237 | "Computer the mean difference in weeks:" 238 | ] 239 | }, 240 | { 241 | "cell_type": "code", 242 | "execution_count": null, 243 | "metadata": { 244 | "collapsed": false 245 | }, 246 | "outputs": [], 247 | "source": [ 248 | "firsts.prglngth.mean(), others.prglngth.mean()" 249 | ] 250 | }, 251 | { 252 | "cell_type": "markdown", 253 | "metadata": {}, 254 | "source": [ 255 | "The difference is very small--a few hours!" 256 | ] 257 | }, 258 | { 259 | "cell_type": "markdown", 260 | "metadata": {}, 261 | "source": [ 262 | "### Let's see if we can visualize the difference in the histograms.\n", 263 | "\n", 264 | "1. From the first pregnancy table, select column ``prglngth``, then call ``hist`` on it.\n", 265 | "2. You will get better results if you specify bins to ``hist``, with ``bins=range(50)``.\n", 266 | "3. Do the same for other births.\n", 267 | "4. To optimally compare the two histograms, set the x-axis to be the same with ``plt.xlim(30, 45)``" 268 | ] 269 | }, 270 | { 271 | "cell_type": "code", 272 | "execution_count": null, 273 | "metadata": { 274 | "collapsed": false 275 | }, 276 | "outputs": [], 277 | "source": [ 278 | "# ...\n", 279 | "plt.xlim(30, 45)" 280 | ] 281 | }, 282 | { 283 | "cell_type": "code", 284 | "execution_count": null, 285 | "metadata": { 286 | "collapsed": false 287 | }, 288 | "outputs": [], 289 | "source": [ 290 | "# ...\n", 291 | "plt.xlim(30, 45)" 292 | ] 293 | }, 294 | { 295 | "cell_type": "markdown", 296 | "metadata": {}, 297 | "source": [ 298 | "I wrote a little utility function to help us plot the distributions side-by-side. See if you can read the code below and figure out what it does:" 299 | ] 300 | }, 301 | { 302 | "cell_type": "code", 303 | "execution_count": null, 304 | "metadata": { 305 | "collapsed": true 306 | }, 307 | "outputs": [], 308 | "source": [ 309 | "LILAC = '#998ec3'\n", 310 | "ORANGE = '#f1a340'\n", 311 | "\n", 312 | "\n", 313 | "def hist_two(series_A, series_B,\n", 314 | " labels=['series_A', 'series_B'],\n", 315 | " normalize=False, cumulative=False, bar_or_line='bar'):\n", 316 | "\n", 317 | " fig, ax = plt.subplots(figsize=(10, 5))\n", 318 | " \n", 319 | " a_heights, a_bins = np.histogram(series_A, bins=range(45), normed=normalize)\n", 320 | " b_heights, b_bins = np.histogram(series_B, bins=a_bins, normed=normalize)\n", 321 | " \n", 322 | " if cumulative:\n", 323 | " a_heights = np.cumsum(a_heights)\n", 324 | " b_heights = np.cumsum(b_heights)\n", 325 | "\n", 326 | " width = (a_bins[1] - a_bins[0])/2.5\n", 327 | "\n", 328 | " if bar_or_line == 'bar':\n", 329 | " ax.bar(a_bins[:-1], a_heights, width=width, facecolor=LILAC, label=labels[0])\n", 330 | " ax.bar(b_bins[:-1] + width, b_heights, width=width, facecolor=ORANGE, label=labels[1])\n", 331 | " else:\n", 332 | " plt.plot(a_bins[:-1], a_heights, linewidth=4, color=LILAC, label=labels[0])\n", 333 | " plt.plot(b_bins[:-1], b_heights, linewidth=4, color=ORANGE, label=labels[1])\n", 334 | "\n", 335 | " plt.legend(loc='upper left')" 336 | ] 337 | }, 338 | { 339 | "cell_type": "code", 340 | "execution_count": null, 341 | "metadata": { 342 | "collapsed": false 343 | }, 344 | "outputs": [], 345 | "source": [ 346 | "hist_two(firsts.prglngth, others.prglngth, labels=['firsts', 'others'])\n", 347 | "plt.xlim(33, 44);" 348 | ] 349 | }, 350 | { 351 | "cell_type": "markdown", 352 | "metadata": {}, 353 | "source": [ 354 | "Remember that the vertical axis is counts. In this case, we are comparing counts with different totals, which might be misleading.\n", 355 | "\n", 356 | "An alternative is to compute a probability mass function (PMF), which divides the counts by the totals, yielding a map from each element to its probability.\n", 357 | "\n", 358 | "The probabilities are \"normalized\" to add up to 1.\n" 359 | ] 360 | }, 361 | { 362 | "cell_type": "markdown", 363 | "metadata": {}, 364 | "source": [ 365 | "Now we can compare histograms fairly." 366 | ] 367 | }, 368 | { 369 | "cell_type": "code", 370 | "execution_count": null, 371 | "metadata": { 372 | "collapsed": false 373 | }, 374 | "outputs": [], 375 | "source": [ 376 | "hist_two(firsts.prglngth, others.prglngth, labels=['firsts', 'others'], normalize=True)\n", 377 | "plt.xlim(33, 44);" 378 | ] 379 | }, 380 | { 381 | "cell_type": "markdown", 382 | "metadata": {}, 383 | "source": [ 384 | "We see here that some of the difference at 39 weeks was an artifact of the different samples sizes." 385 | ] 386 | }, 387 | { 388 | "cell_type": "markdown", 389 | "metadata": {}, 390 | "source": [ 391 | "Even so, it is not easy to compare histograms. One more alternative is the cumulative histogram, which shows, for each $t$, the total probability up to and including $t$." 392 | ] 393 | }, 394 | { 395 | "cell_type": "code", 396 | "execution_count": null, 397 | "metadata": { 398 | "collapsed": false 399 | }, 400 | "outputs": [], 401 | "source": [ 402 | "pp = live.loc[:, ['birthord','prglngth']]\n", 403 | "not_firsts = pp['birthord'] != 1\n", 404 | "pp.loc[not_firsts, 'birthord'] = 2" 405 | ] 406 | }, 407 | { 408 | "cell_type": "code", 409 | "execution_count": null, 410 | "metadata": { 411 | "collapsed": false 412 | }, 413 | "outputs": [], 414 | "source": [ 415 | "hist_two(firsts.prglngth, others.prglngth, labels=['firsts', 'others'], normalize=True, cumulative=True, bar_or_line='line')\n", 416 | "plt.xlim(33, 44);" 417 | ] 418 | }, 419 | { 420 | "cell_type": "markdown", 421 | "metadata": {}, 422 | "source": [ 423 | "The cumulative histograms are similar up to week 38. After that, first babies are more likely to be born late. \n", 424 | "\n", 425 | "*Can you read this from the plot above?*" 426 | ] 427 | }, 428 | { 429 | "cell_type": "markdown", 430 | "metadata": {}, 431 | "source": [ 432 | "One other thought: cumulative curves are often a good option for visualizing noisy series. For example, the graphic below works pretty well despite some questionable aesthetic choices. " 433 | ] 434 | }, 435 | { 436 | "cell_type": "markdown", 437 | "metadata": {}, 438 | "source": [ 439 | "" 440 | ] 441 | }, 442 | { 443 | "cell_type": "code", 444 | "execution_count": null, 445 | "metadata": { 446 | "collapsed": true 447 | }, 448 | "outputs": [], 449 | "source": [] 450 | } 451 | ], 452 | "metadata": { 453 | "kernelspec": { 454 | "display_name": "Python 3", 455 | "language": "python", 456 | "name": "python3" 457 | }, 458 | "language_info": { 459 | "codemirror_mode": { 460 | "name": "ipython", 461 | "version": 3 462 | }, 463 | "file_extension": ".py", 464 | "mimetype": "text/x-python", 465 | "name": "python", 466 | "nbconvert_exporter": "python", 467 | "pygments_lexer": "ipython3", 468 | "version": "3.4.3" 469 | } 470 | }, 471 | "nbformat": 4, 472 | "nbformat_minor": 0 473 | } 474 | -------------------------------------------------------------------------------- /03_exercise_scikit_learn.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n", 8 | "\n", 9 | " \n", 10 | " \n", 11 | " \n", 12 | "\n", 13 | "\n", 14 | "\n", 15 | " \n", 16 | "" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": {}, 22 | "source": [ 23 | "From Wikipedia:\n", 24 | "\n", 25 | "The Iris flower data set or Fisher's Iris data set is a multivariate data set introduced by Ronald Fisher in his 1936 paper The use of multiple measurements in taxonomic problems as an example of linear discriminant analysis. It is sometimes called Anderson's Iris data set because Edgar Anderson collected the data to quantify the morphologic variation of Iris flowers of three related species. Two of the three species were collected in the Gaspé Peninsula \"all from the same pasture, and picked on the same day and measured at the same time by the same person with the same apparatus\".\n", 26 | "\n", 27 | "\"Sepal\"\n", 28 | "\n", 29 | "The data set consists of 50 samples from each of three species of Iris (Iris setosa, Iris virginica and Iris versicolor). Four features were measured from each sample: the length and the width of the sepals and petals, in centimetres. Based on the combination of these four features, Fisher developed a linear discriminant model to distinguish the species from each other.\n", 30 | "\n", 31 | "
\n", 32 | "\"Petal-sepal\". Licensed under CC BY-SA 3.0 via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Petal-sepal.jpg#/media/File:Petal-sepal.jpg" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": null, 38 | "metadata": { 39 | "collapsed": true 40 | }, 41 | "outputs": [], 42 | "source": [ 43 | "%matplotlib inline\n", 44 | "\n", 45 | "import pandas as pd\n", 46 | "import sklearn\n", 47 | "import seaborn as sns\n", 48 | "import matplotlib.pyplot as plt" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": {}, 54 | "source": [ 55 | "# Exercise\n", 56 | "\n", 57 | "In this exercise, we train a classifier to tell us the type of a flower, based on several of its measured properties." 58 | ] 59 | }, 60 | { 61 | "cell_type": "markdown", 62 | "metadata": {}, 63 | "source": [ 64 | "### Load the data\n", 65 | "\n", 66 | "1. Using the ``read_csv`` command in Pandas, load the dataset in the file ``data/iris.csv``.\n", 67 | "2. Use the ``head`` method of the resulting DataFrame to see the first few entries.\n", 68 | "3. Use the ``tail`` method to see the last few entries." 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": null, 74 | "metadata": { 75 | "collapsed": false 76 | }, 77 | "outputs": [], 78 | "source": [ 79 | "iris = ...\n", 80 | "iris.head()" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": null, 86 | "metadata": { 87 | "collapsed": false 88 | }, 89 | "outputs": [], 90 | "source": [ 91 | "iris.tail()" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": {}, 97 | "source": [ 98 | "### Examine the data" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "Let's use ``groupby`` to group measurements by flower name and then display summary statistics. Look at the numbers, and see if you can identify any big differences between species:" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": null, 111 | "metadata": { 112 | "collapsed": false 113 | }, 114 | "outputs": [], 115 | "source": [ 116 | "iris.groupby('Name').describe()" 117 | ] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": {}, 122 | "source": [ 123 | "### Visualize the data\n", 124 | "\n", 125 | "- Use Seaborn's ``pairplot`` function to display the different features of the data.\n", 126 | "- Remember to set the keyword `hue` to the correct column name so that the classes are colored separately." 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": null, 132 | "metadata": { 133 | "collapsed": false 134 | }, 135 | "outputs": [], 136 | "source": [] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": {}, 141 | "source": [ 142 | "You can see that this dataset should be very easy to classify." 143 | ] 144 | }, 145 | { 146 | "cell_type": "markdown", 147 | "metadata": {}, 148 | "source": [ 149 | "Now, use the ``pop`` method of the DataFrame to grab the labels from the Name column:" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": null, 155 | "metadata": { 156 | "collapsed": false 157 | }, 158 | "outputs": [], 159 | "source": [ 160 | "data = iris.copy()\n", 161 | "labels = ..." 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "execution_count": null, 167 | "metadata": { 168 | "collapsed": false 169 | }, 170 | "outputs": [], 171 | "source": [ 172 | "labels[:15]" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": {}, 178 | "source": [ 179 | "### Transform labels to numbers" 180 | ] 181 | }, 182 | { 183 | "cell_type": "markdown", 184 | "metadata": {}, 185 | "source": [ 186 | "Let's transform those text labels to numbers (0, 1, or 2) respectively. Strictly speaking, this isn't necessary, since NumPy arrays can contain objects, and comparisons work fine on those. But in general, working with numbers speed things up a lot." 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "execution_count": null, 192 | "metadata": { 193 | "collapsed": true 194 | }, 195 | "outputs": [], 196 | "source": [ 197 | "from sklearn.preprocessing import LabelEncoder" 198 | ] 199 | }, 200 | { 201 | "cell_type": "code", 202 | "execution_count": null, 203 | "metadata": { 204 | "collapsed": false 205 | }, 206 | "outputs": [], 207 | "source": [ 208 | "encoder = LabelEncoder()\n", 209 | "labels = ...\n", 210 | "labels" 211 | ] 212 | }, 213 | { 214 | "cell_type": "markdown", 215 | "metadata": {}, 216 | "source": [ 217 | "### Split data into training & testing data\n", 218 | "\n", 219 | "Using ``sklearn.cross_validation.train_test_split``, split the dataset and labels into two: training data and testing data.\n", 220 | "\n", 221 | "**Since this is such an easy problem, we only want 0.1% of the samples to go towards training.**\n", 222 | "\n", 223 | "Note, it's important to pass both data and labels into the ``train_test_split`` function together so that they can be split the same way (i.e., do not run ``train_test_split`` once for each).\n", 224 | "\n", 225 | "**Hint:** *If you set the ``random_state`` variable, you will always get the same split, and your experiments will be comparable.*" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": null, 231 | "metadata": { 232 | "collapsed": false 233 | }, 234 | "outputs": [], 235 | "source": [ 236 | "from sklearn.cross_validation import train_test_split" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": null, 242 | "metadata": { 243 | "collapsed": false 244 | }, 245 | "outputs": [], 246 | "source": [ 247 | "data_train, data_test, labels_train, labels_test = ..." 248 | ] 249 | }, 250 | { 251 | "cell_type": "markdown", 252 | "metadata": {}, 253 | "source": [ 254 | "Check the lengths of the training and testing data and labels." 255 | ] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "execution_count": null, 260 | "metadata": { 261 | "collapsed": false 262 | }, 263 | "outputs": [], 264 | "source": [ 265 | "len(data_train), len(data_test)" 266 | ] 267 | }, 268 | { 269 | "cell_type": "markdown", 270 | "metadata": {}, 271 | "source": [ 272 | "### Classify and evaluate" 273 | ] 274 | }, 275 | { 276 | "cell_type": "code", 277 | "execution_count": null, 278 | "metadata": { 279 | "collapsed": true 280 | }, 281 | "outputs": [], 282 | "source": [ 283 | "from sklearn.naive_bayes import GaussianNB\n", 284 | "from sklearn.ensemble import RandomForestClassifier\n", 285 | "from sklearn.metrics import accuracy_score" 286 | ] 287 | }, 288 | { 289 | "cell_type": "markdown", 290 | "metadata": {}, 291 | "source": [ 292 | "### The Gaussian Naive Bayes classifier is a good entry-level benchmark" 293 | ] 294 | }, 295 | { 296 | "cell_type": "code", 297 | "execution_count": null, 298 | "metadata": { 299 | "collapsed": false 300 | }, 301 | "outputs": [], 302 | "source": [ 303 | "nb = GaussianNB()\n", 304 | "nb.fit(...)\n", 305 | "labels_predicted_nb = ...\n", 306 | "accuracy_score(labels_test, labels_predicted_nb)" 307 | ] 308 | }, 309 | { 310 | "cell_type": "markdown", 311 | "metadata": {}, 312 | "source": [ 313 | "### Now, try the evaluation, but with a RandomForest classifier" 314 | ] 315 | }, 316 | { 317 | "cell_type": "code", 318 | "execution_count": null, 319 | "metadata": { 320 | "collapsed": false 321 | }, 322 | "outputs": [], 323 | "source": [ 324 | "rf = RandomForestClassifier(random_state=42)\n", 325 | "..." 326 | ] 327 | }, 328 | { 329 | "cell_type": "markdown", 330 | "metadata": {}, 331 | "source": [ 332 | "And let's look at the feature importances, just for the fun of it:" 333 | ] 334 | }, 335 | { 336 | "cell_type": "code", 337 | "execution_count": null, 338 | "metadata": { 339 | "collapsed": false 340 | }, 341 | "outputs": [], 342 | "source": [ 343 | "list(zip(iris.columns, rf.feature_importances_))" 344 | ] 345 | }, 346 | { 347 | "cell_type": "markdown", 348 | "metadata": {}, 349 | "source": [ 350 | "# Extra/advanced exercise" 351 | ] 352 | }, 353 | { 354 | "cell_type": "markdown", 355 | "metadata": {}, 356 | "source": [ 357 | "In this example, we're going to work with a digits dataset. Each digit is represented as a matrix, with values representing intensity (0 is black, 16 is white). To form a feature vector, the matrix is \"unravelled\", i.e. all the values are unpacked from the matrix into a single, long vector." 358 | ] 359 | }, 360 | { 361 | "cell_type": "code", 362 | "execution_count": null, 363 | "metadata": { 364 | "collapsed": true 365 | }, 366 | "outputs": [], 367 | "source": [ 368 | "from sklearn.datasets import load_digits\n", 369 | "digits = load_digits()" 370 | ] 371 | }, 372 | { 373 | "cell_type": "code", 374 | "execution_count": null, 375 | "metadata": { 376 | "collapsed": false 377 | }, 378 | "outputs": [], 379 | "source": [ 380 | "fig = plt.figure(figsize=(6, 6)) # figure size in inches\n", 381 | "fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)\n", 382 | "\n", 383 | "# plot the digits: each image is 8x8 pixels\n", 384 | "for i in range(64):\n", 385 | " ax = fig.add_subplot(8, 8, i + 1, xticks=[], yticks=[])\n", 386 | " ax.imshow(digits.images[i], cmap=plt.cm.binary, interpolation='nearest')\n", 387 | " \n", 388 | " # label the image with the target value\n", 389 | " ax.text(0, 7, str(digits.target[i]))" 390 | ] 391 | }, 392 | { 393 | "cell_type": "markdown", 394 | "metadata": {}, 395 | "source": [ 396 | "### Visualization\n", 397 | "\n", 398 | "A good first-step for many problems is to visualize the data using one of the\n", 399 | "*Dimensionality Reduction* techniques we saw earlier. We'll start with the\n", 400 | "most straightforward one, Principal Component Analysis (PCA).\n", 401 | "\n", 402 | "PCA seeks orthogonal linear combinations of the features which show the greatest\n", 403 | "variance, and as such, can help give you a good idea of the structure of the\n", 404 | "data set. Here we'll use `RandomizedPCA`, because it's faster for large `N`." 405 | ] 406 | }, 407 | { 408 | "cell_type": "code", 409 | "execution_count": null, 410 | "metadata": { 411 | "collapsed": true 412 | }, 413 | "outputs": [], 414 | "source": [ 415 | "from sklearn.decomposition import RandomizedPCA\n", 416 | "pca = RandomizedPCA(n_components=2, random_state=1999)\n", 417 | "proj = pca.fit_transform(digits.data)" 418 | ] 419 | }, 420 | { 421 | "cell_type": "code", 422 | "execution_count": null, 423 | "metadata": { 424 | "collapsed": false 425 | }, 426 | "outputs": [], 427 | "source": [ 428 | "plt.scatter(proj[:, 0], proj[:, 1], c=digits.target, cmap='RdBu')\n", 429 | "plt.colorbar();" 430 | ] 431 | }, 432 | { 433 | "cell_type": "markdown", 434 | "metadata": {}, 435 | "source": [ 436 | "Here we see that the digits do cluster fairly well, so we can expect even\n", 437 | "a fairly naive classification scheme to do a decent job separating them.\n", 438 | "\n", 439 | "A weakness of PCA is that it produces a linear dimensionality reduction:\n", 440 | "this may miss some interesting relationships in the data. If we want to\n", 441 | "see a nonlinear mapping of the data, we can use one of the several\n", 442 | "methods in the `manifold` module. Here we'll use Isomap (ISOmetric MAPping)\n", 443 | "which is a manifold learning method based on graph theory:" 444 | ] 445 | }, 446 | { 447 | "cell_type": "code", 448 | "execution_count": null, 449 | "metadata": { 450 | "collapsed": true 451 | }, 452 | "outputs": [], 453 | "source": [ 454 | "from sklearn.manifold import Isomap\n", 455 | "iso = Isomap(n_neighbors=5, n_components=2)\n", 456 | "proj = iso.fit_transform(digits.data)" 457 | ] 458 | }, 459 | { 460 | "cell_type": "code", 461 | "execution_count": null, 462 | "metadata": { 463 | "collapsed": false 464 | }, 465 | "outputs": [], 466 | "source": [ 467 | "plt.scatter(proj[:, 0], proj[:, 1], c=digits.target, cmap='RdBu')\n", 468 | "plt.colorbar();" 469 | ] 470 | }, 471 | { 472 | "cell_type": "markdown", 473 | "metadata": {}, 474 | "source": [ 475 | "These visualizations show that it classification should be possible!" 476 | ] 477 | }, 478 | { 479 | "cell_type": "markdown", 480 | "metadata": {}, 481 | "source": [ 482 | "### Now, train classifiers as we did with the Iris dataset, and see how they do!" 483 | ] 484 | } 485 | ], 486 | "metadata": { 487 | "kernelspec": { 488 | "display_name": "Python 3", 489 | "language": "python", 490 | "name": "python3" 491 | }, 492 | "language_info": { 493 | "codemirror_mode": { 494 | "name": "ipython", 495 | "version": 3 496 | }, 497 | "file_extension": ".py", 498 | "mimetype": "text/x-python", 499 | "name": "python", 500 | "nbconvert_exporter": "python", 501 | "pygments_lexer": "ipython3", 502 | "version": "3.4.3" 503 | } 504 | }, 505 | "nbformat": 4, 506 | "nbformat_minor": 0 507 | } 508 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # An introduction to "Data Science" 2 | 3 | [![Binder](http://mybinder.org/badge.svg)](https://beta.mybinder.org/v2/gh/stefanv/ds_intro/master) 4 | 5 | ## A Python Survival Pack 6 | 7 | ### Installation 8 | 9 | The full set of tools we'll be using is available in 10 | [Anaconda](https://www.continuum.io/downloads). 11 | 12 | **Please select the Python 3 download.** 13 | 14 | This is a big download, so if you're on conference wifi, rather 15 | install [MiniConda](http://conda.pydata.org/miniconda.html), and 16 | install additional packages as you need them with 17 | 18 | ``` 19 | conda install package_name 20 | ``` 21 | 22 | The full list of packages you'll need: 23 | 24 | - numpy 25 | - pandas 26 | - seaborn 27 | - scikit-learn 28 | 29 | All of these, except for ``seaborn``, are installed by default. 30 | -------------------------------------------------------------------------------- /colormaps.py: -------------------------------------------------------------------------------- 1 | __all__ = ['magma', 'inferno', 'plasma', 'viridis'] 2 | 3 | _magma_data = [[0.001462, 0.000466, 0.013866], 4 | [0.002258, 0.001295, 0.018331], 5 | [0.003279, 0.002305, 0.023708], 6 | [0.004512, 0.003490, 0.029965], 7 | [0.005950, 0.004843, 0.037130], 8 | [0.007588, 0.006356, 0.044973], 9 | [0.009426, 0.008022, 0.052844], 10 | [0.011465, 0.009828, 0.060750], 11 | [0.013708, 0.011771, 0.068667], 12 | [0.016156, 0.013840, 0.076603], 13 | [0.018815, 0.016026, 0.084584], 14 | [0.021692, 0.018320, 0.092610], 15 | [0.024792, 0.020715, 0.100676], 16 | [0.028123, 0.023201, 0.108787], 17 | [0.031696, 0.025765, 0.116965], 18 | [0.035520, 0.028397, 0.125209], 19 | [0.039608, 0.031090, 0.133515], 20 | [0.043830, 0.033830, 0.141886], 21 | [0.048062, 0.036607, 0.150327], 22 | [0.052320, 0.039407, 0.158841], 23 | [0.056615, 0.042160, 0.167446], 24 | [0.060949, 0.044794, 0.176129], 25 | [0.065330, 0.047318, 0.184892], 26 | [0.069764, 0.049726, 0.193735], 27 | [0.074257, 0.052017, 0.202660], 28 | [0.078815, 0.054184, 0.211667], 29 | [0.083446, 0.056225, 0.220755], 30 | [0.088155, 0.058133, 0.229922], 31 | [0.092949, 0.059904, 0.239164], 32 | [0.097833, 0.061531, 0.248477], 33 | [0.102815, 0.063010, 0.257854], 34 | [0.107899, 0.064335, 0.267289], 35 | [0.113094, 0.065492, 0.276784], 36 | [0.118405, 0.066479, 0.286321], 37 | [0.123833, 0.067295, 0.295879], 38 | [0.129380, 0.067935, 0.305443], 39 | [0.135053, 0.068391, 0.315000], 40 | [0.140858, 0.068654, 0.324538], 41 | [0.146785, 0.068738, 0.334011], 42 | [0.152839, 0.068637, 0.343404], 43 | [0.159018, 0.068354, 0.352688], 44 | [0.165308, 0.067911, 0.361816], 45 | [0.171713, 0.067305, 0.370771], 46 | [0.178212, 0.066576, 0.379497], 47 | [0.184801, 0.065732, 0.387973], 48 | [0.191460, 0.064818, 0.396152], 49 | [0.198177, 0.063862, 0.404009], 50 | [0.204935, 0.062907, 0.411514], 51 | [0.211718, 0.061992, 0.418647], 52 | [0.218512, 0.061158, 0.425392], 53 | [0.225302, 0.060445, 0.431742], 54 | [0.232077, 0.059889, 0.437695], 55 | [0.238826, 0.059517, 0.443256], 56 | [0.245543, 0.059352, 0.448436], 57 | [0.252220, 0.059415, 0.453248], 58 | [0.258857, 0.059706, 0.457710], 59 | [0.265447, 0.060237, 0.461840], 60 | [0.271994, 0.060994, 0.465660], 61 | [0.278493, 0.061978, 0.469190], 62 | [0.284951, 0.063168, 0.472451], 63 | [0.291366, 0.064553, 0.475462], 64 | [0.297740, 0.066117, 0.478243], 65 | [0.304081, 0.067835, 0.480812], 66 | [0.310382, 0.069702, 0.483186], 67 | [0.316654, 0.071690, 0.485380], 68 | [0.322899, 0.073782, 0.487408], 69 | [0.329114, 0.075972, 0.489287], 70 | [0.335308, 0.078236, 0.491024], 71 | [0.341482, 0.080564, 0.492631], 72 | [0.347636, 0.082946, 0.494121], 73 | [0.353773, 0.085373, 0.495501], 74 | [0.359898, 0.087831, 0.496778], 75 | [0.366012, 0.090314, 0.497960], 76 | [0.372116, 0.092816, 0.499053], 77 | [0.378211, 0.095332, 0.500067], 78 | [0.384299, 0.097855, 0.501002], 79 | [0.390384, 0.100379, 0.501864], 80 | [0.396467, 0.102902, 0.502658], 81 | [0.402548, 0.105420, 0.503386], 82 | [0.408629, 0.107930, 0.504052], 83 | [0.414709, 0.110431, 0.504662], 84 | [0.420791, 0.112920, 0.505215], 85 | [0.426877, 0.115395, 0.505714], 86 | [0.432967, 0.117855, 0.506160], 87 | [0.439062, 0.120298, 0.506555], 88 | [0.445163, 0.122724, 0.506901], 89 | [0.451271, 0.125132, 0.507198], 90 | [0.457386, 0.127522, 0.507448], 91 | [0.463508, 0.129893, 0.507652], 92 | [0.469640, 0.132245, 0.507809], 93 | [0.475780, 0.134577, 0.507921], 94 | [0.481929, 0.136891, 0.507989], 95 | [0.488088, 0.139186, 0.508011], 96 | [0.494258, 0.141462, 0.507988], 97 | [0.500438, 0.143719, 0.507920], 98 | [0.506629, 0.145958, 0.507806], 99 | [0.512831, 0.148179, 0.507648], 100 | [0.519045, 0.150383, 0.507443], 101 | [0.525270, 0.152569, 0.507192], 102 | [0.531507, 0.154739, 0.506895], 103 | [0.537755, 0.156894, 0.506551], 104 | [0.544015, 0.159033, 0.506159], 105 | [0.550287, 0.161158, 0.505719], 106 | [0.556571, 0.163269, 0.505230], 107 | [0.562866, 0.165368, 0.504692], 108 | [0.569172, 0.167454, 0.504105], 109 | [0.575490, 0.169530, 0.503466], 110 | [0.581819, 0.171596, 0.502777], 111 | [0.588158, 0.173652, 0.502035], 112 | [0.594508, 0.175701, 0.501241], 113 | [0.600868, 0.177743, 0.500394], 114 | [0.607238, 0.179779, 0.499492], 115 | [0.613617, 0.181811, 0.498536], 116 | [0.620005, 0.183840, 0.497524], 117 | [0.626401, 0.185867, 0.496456], 118 | [0.632805, 0.187893, 0.495332], 119 | [0.639216, 0.189921, 0.494150], 120 | [0.645633, 0.191952, 0.492910], 121 | [0.652056, 0.193986, 0.491611], 122 | [0.658483, 0.196027, 0.490253], 123 | [0.664915, 0.198075, 0.488836], 124 | [0.671349, 0.200133, 0.487358], 125 | [0.677786, 0.202203, 0.485819], 126 | [0.684224, 0.204286, 0.484219], 127 | [0.690661, 0.206384, 0.482558], 128 | [0.697098, 0.208501, 0.480835], 129 | [0.703532, 0.210638, 0.479049], 130 | [0.709962, 0.212797, 0.477201], 131 | [0.716387, 0.214982, 0.475290], 132 | [0.722805, 0.217194, 0.473316], 133 | [0.729216, 0.219437, 0.471279], 134 | [0.735616, 0.221713, 0.469180], 135 | [0.742004, 0.224025, 0.467018], 136 | [0.748378, 0.226377, 0.464794], 137 | [0.754737, 0.228772, 0.462509], 138 | [0.761077, 0.231214, 0.460162], 139 | [0.767398, 0.233705, 0.457755], 140 | [0.773695, 0.236249, 0.455289], 141 | [0.779968, 0.238851, 0.452765], 142 | [0.786212, 0.241514, 0.450184], 143 | [0.792427, 0.244242, 0.447543], 144 | [0.798608, 0.247040, 0.444848], 145 | [0.804752, 0.249911, 0.442102], 146 | [0.810855, 0.252861, 0.439305], 147 | [0.816914, 0.255895, 0.436461], 148 | [0.822926, 0.259016, 0.433573], 149 | [0.828886, 0.262229, 0.430644], 150 | [0.834791, 0.265540, 0.427671], 151 | [0.840636, 0.268953, 0.424666], 152 | [0.846416, 0.272473, 0.421631], 153 | [0.852126, 0.276106, 0.418573], 154 | [0.857763, 0.279857, 0.415496], 155 | [0.863320, 0.283729, 0.412403], 156 | [0.868793, 0.287728, 0.409303], 157 | [0.874176, 0.291859, 0.406205], 158 | [0.879464, 0.296125, 0.403118], 159 | [0.884651, 0.300530, 0.400047], 160 | [0.889731, 0.305079, 0.397002], 161 | [0.894700, 0.309773, 0.393995], 162 | [0.899552, 0.314616, 0.391037], 163 | [0.904281, 0.319610, 0.388137], 164 | [0.908884, 0.324755, 0.385308], 165 | [0.913354, 0.330052, 0.382563], 166 | [0.917689, 0.335500, 0.379915], 167 | [0.921884, 0.341098, 0.377376], 168 | [0.925937, 0.346844, 0.374959], 169 | [0.929845, 0.352734, 0.372677], 170 | [0.933606, 0.358764, 0.370541], 171 | [0.937221, 0.364929, 0.368567], 172 | [0.940687, 0.371224, 0.366762], 173 | [0.944006, 0.377643, 0.365136], 174 | [0.947180, 0.384178, 0.363701], 175 | [0.950210, 0.390820, 0.362468], 176 | [0.953099, 0.397563, 0.361438], 177 | [0.955849, 0.404400, 0.360619], 178 | [0.958464, 0.411324, 0.360014], 179 | [0.960949, 0.418323, 0.359630], 180 | [0.963310, 0.425390, 0.359469], 181 | [0.965549, 0.432519, 0.359529], 182 | [0.967671, 0.439703, 0.359810], 183 | [0.969680, 0.446936, 0.360311], 184 | [0.971582, 0.454210, 0.361030], 185 | [0.973381, 0.461520, 0.361965], 186 | [0.975082, 0.468861, 0.363111], 187 | [0.976690, 0.476226, 0.364466], 188 | [0.978210, 0.483612, 0.366025], 189 | [0.979645, 0.491014, 0.367783], 190 | [0.981000, 0.498428, 0.369734], 191 | [0.982279, 0.505851, 0.371874], 192 | [0.983485, 0.513280, 0.374198], 193 | [0.984622, 0.520713, 0.376698], 194 | [0.985693, 0.528148, 0.379371], 195 | [0.986700, 0.535582, 0.382210], 196 | [0.987646, 0.543015, 0.385210], 197 | [0.988533, 0.550446, 0.388365], 198 | [0.989363, 0.557873, 0.391671], 199 | [0.990138, 0.565296, 0.395122], 200 | [0.990871, 0.572706, 0.398714], 201 | [0.991558, 0.580107, 0.402441], 202 | [0.992196, 0.587502, 0.406299], 203 | [0.992785, 0.594891, 0.410283], 204 | [0.993326, 0.602275, 0.414390], 205 | [0.993834, 0.609644, 0.418613], 206 | [0.994309, 0.616999, 0.422950], 207 | [0.994738, 0.624350, 0.427397], 208 | [0.995122, 0.631696, 0.431951], 209 | [0.995480, 0.639027, 0.436607], 210 | [0.995810, 0.646344, 0.441361], 211 | [0.996096, 0.653659, 0.446213], 212 | [0.996341, 0.660969, 0.451160], 213 | [0.996580, 0.668256, 0.456192], 214 | [0.996775, 0.675541, 0.461314], 215 | [0.996925, 0.682828, 0.466526], 216 | [0.997077, 0.690088, 0.471811], 217 | [0.997186, 0.697349, 0.477182], 218 | [0.997254, 0.704611, 0.482635], 219 | [0.997325, 0.711848, 0.488154], 220 | [0.997351, 0.719089, 0.493755], 221 | [0.997351, 0.726324, 0.499428], 222 | [0.997341, 0.733545, 0.505167], 223 | [0.997285, 0.740772, 0.510983], 224 | [0.997228, 0.747981, 0.516859], 225 | [0.997138, 0.755190, 0.522806], 226 | [0.997019, 0.762398, 0.528821], 227 | [0.996898, 0.769591, 0.534892], 228 | [0.996727, 0.776795, 0.541039], 229 | [0.996571, 0.783977, 0.547233], 230 | [0.996369, 0.791167, 0.553499], 231 | [0.996162, 0.798348, 0.559820], 232 | [0.995932, 0.805527, 0.566202], 233 | [0.995680, 0.812706, 0.572645], 234 | [0.995424, 0.819875, 0.579140], 235 | [0.995131, 0.827052, 0.585701], 236 | [0.994851, 0.834213, 0.592307], 237 | [0.994524, 0.841387, 0.598983], 238 | [0.994222, 0.848540, 0.605696], 239 | [0.993866, 0.855711, 0.612482], 240 | [0.993545, 0.862859, 0.619299], 241 | [0.993170, 0.870024, 0.626189], 242 | [0.992831, 0.877168, 0.633109], 243 | [0.992440, 0.884330, 0.640099], 244 | [0.992089, 0.891470, 0.647116], 245 | [0.991688, 0.898627, 0.654202], 246 | [0.991332, 0.905763, 0.661309], 247 | [0.990930, 0.912915, 0.668481], 248 | [0.990570, 0.920049, 0.675675], 249 | [0.990175, 0.927196, 0.682926], 250 | [0.989815, 0.934329, 0.690198], 251 | [0.989434, 0.941470, 0.697519], 252 | [0.989077, 0.948604, 0.704863], 253 | [0.988717, 0.955742, 0.712242], 254 | [0.988367, 0.962878, 0.719649], 255 | [0.988033, 0.970012, 0.727077], 256 | [0.987691, 0.977154, 0.734536], 257 | [0.987387, 0.984288, 0.742002], 258 | [0.987053, 0.991438, 0.749504]] 259 | 260 | _inferno_data = [[0.001462, 0.000466, 0.013866], 261 | [0.002267, 0.001270, 0.018570], 262 | [0.003299, 0.002249, 0.024239], 263 | [0.004547, 0.003392, 0.030909], 264 | [0.006006, 0.004692, 0.038558], 265 | [0.007676, 0.006136, 0.046836], 266 | [0.009561, 0.007713, 0.055143], 267 | [0.011663, 0.009417, 0.063460], 268 | [0.013995, 0.011225, 0.071862], 269 | [0.016561, 0.013136, 0.080282], 270 | [0.019373, 0.015133, 0.088767], 271 | [0.022447, 0.017199, 0.097327], 272 | [0.025793, 0.019331, 0.105930], 273 | [0.029432, 0.021503, 0.114621], 274 | [0.033385, 0.023702, 0.123397], 275 | [0.037668, 0.025921, 0.132232], 276 | [0.042253, 0.028139, 0.141141], 277 | [0.046915, 0.030324, 0.150164], 278 | [0.051644, 0.032474, 0.159254], 279 | [0.056449, 0.034569, 0.168414], 280 | [0.061340, 0.036590, 0.177642], 281 | [0.066331, 0.038504, 0.186962], 282 | [0.071429, 0.040294, 0.196354], 283 | [0.076637, 0.041905, 0.205799], 284 | [0.081962, 0.043328, 0.215289], 285 | [0.087411, 0.044556, 0.224813], 286 | [0.092990, 0.045583, 0.234358], 287 | [0.098702, 0.046402, 0.243904], 288 | [0.104551, 0.047008, 0.253430], 289 | [0.110536, 0.047399, 0.262912], 290 | [0.116656, 0.047574, 0.272321], 291 | [0.122908, 0.047536, 0.281624], 292 | [0.129285, 0.047293, 0.290788], 293 | [0.135778, 0.046856, 0.299776], 294 | [0.142378, 0.046242, 0.308553], 295 | [0.149073, 0.045468, 0.317085], 296 | [0.155850, 0.044559, 0.325338], 297 | [0.162689, 0.043554, 0.333277], 298 | [0.169575, 0.042489, 0.340874], 299 | [0.176493, 0.041402, 0.348111], 300 | [0.183429, 0.040329, 0.354971], 301 | [0.190367, 0.039309, 0.361447], 302 | [0.197297, 0.038400, 0.367535], 303 | [0.204209, 0.037632, 0.373238], 304 | [0.211095, 0.037030, 0.378563], 305 | [0.217949, 0.036615, 0.383522], 306 | [0.224763, 0.036405, 0.388129], 307 | [0.231538, 0.036405, 0.392400], 308 | [0.238273, 0.036621, 0.396353], 309 | [0.244967, 0.037055, 0.400007], 310 | [0.251620, 0.037705, 0.403378], 311 | [0.258234, 0.038571, 0.406485], 312 | [0.264810, 0.039647, 0.409345], 313 | [0.271347, 0.040922, 0.411976], 314 | [0.277850, 0.042353, 0.414392], 315 | [0.284321, 0.043933, 0.416608], 316 | [0.290763, 0.045644, 0.418637], 317 | [0.297178, 0.047470, 0.420491], 318 | [0.303568, 0.049396, 0.422182], 319 | [0.309935, 0.051407, 0.423721], 320 | [0.316282, 0.053490, 0.425116], 321 | [0.322610, 0.055634, 0.426377], 322 | [0.328921, 0.057827, 0.427511], 323 | [0.335217, 0.060060, 0.428524], 324 | [0.341500, 0.062325, 0.429425], 325 | [0.347771, 0.064616, 0.430217], 326 | [0.354032, 0.066925, 0.430906], 327 | [0.360284, 0.069247, 0.431497], 328 | [0.366529, 0.071579, 0.431994], 329 | [0.372768, 0.073915, 0.432400], 330 | [0.379001, 0.076253, 0.432719], 331 | [0.385228, 0.078591, 0.432955], 332 | [0.391453, 0.080927, 0.433109], 333 | [0.397674, 0.083257, 0.433183], 334 | [0.403894, 0.085580, 0.433179], 335 | [0.410113, 0.087896, 0.433098], 336 | [0.416331, 0.090203, 0.432943], 337 | [0.422549, 0.092501, 0.432714], 338 | [0.428768, 0.094790, 0.432412], 339 | [0.434987, 0.097069, 0.432039], 340 | [0.441207, 0.099338, 0.431594], 341 | [0.447428, 0.101597, 0.431080], 342 | [0.453651, 0.103848, 0.430498], 343 | [0.459875, 0.106089, 0.429846], 344 | [0.466100, 0.108322, 0.429125], 345 | [0.472328, 0.110547, 0.428334], 346 | [0.478558, 0.112764, 0.427475], 347 | [0.484789, 0.114974, 0.426548], 348 | [0.491022, 0.117179, 0.425552], 349 | [0.497257, 0.119379, 0.424488], 350 | [0.503493, 0.121575, 0.423356], 351 | [0.509730, 0.123769, 0.422156], 352 | [0.515967, 0.125960, 0.420887], 353 | [0.522206, 0.128150, 0.419549], 354 | [0.528444, 0.130341, 0.418142], 355 | [0.534683, 0.132534, 0.416667], 356 | [0.540920, 0.134729, 0.415123], 357 | [0.547157, 0.136929, 0.413511], 358 | [0.553392, 0.139134, 0.411829], 359 | [0.559624, 0.141346, 0.410078], 360 | [0.565854, 0.143567, 0.408258], 361 | [0.572081, 0.145797, 0.406369], 362 | [0.578304, 0.148039, 0.404411], 363 | [0.584521, 0.150294, 0.402385], 364 | [0.590734, 0.152563, 0.400290], 365 | [0.596940, 0.154848, 0.398125], 366 | [0.603139, 0.157151, 0.395891], 367 | [0.609330, 0.159474, 0.393589], 368 | [0.615513, 0.161817, 0.391219], 369 | [0.621685, 0.164184, 0.388781], 370 | [0.627847, 0.166575, 0.386276], 371 | [0.633998, 0.168992, 0.383704], 372 | [0.640135, 0.171438, 0.381065], 373 | [0.646260, 0.173914, 0.378359], 374 | [0.652369, 0.176421, 0.375586], 375 | [0.658463, 0.178962, 0.372748], 376 | [0.664540, 0.181539, 0.369846], 377 | [0.670599, 0.184153, 0.366879], 378 | [0.676638, 0.186807, 0.363849], 379 | [0.682656, 0.189501, 0.360757], 380 | [0.688653, 0.192239, 0.357603], 381 | [0.694627, 0.195021, 0.354388], 382 | [0.700576, 0.197851, 0.351113], 383 | [0.706500, 0.200728, 0.347777], 384 | [0.712396, 0.203656, 0.344383], 385 | [0.718264, 0.206636, 0.340931], 386 | [0.724103, 0.209670, 0.337424], 387 | [0.729909, 0.212759, 0.333861], 388 | [0.735683, 0.215906, 0.330245], 389 | [0.741423, 0.219112, 0.326576], 390 | [0.747127, 0.222378, 0.322856], 391 | [0.752794, 0.225706, 0.319085], 392 | [0.758422, 0.229097, 0.315266], 393 | [0.764010, 0.232554, 0.311399], 394 | [0.769556, 0.236077, 0.307485], 395 | [0.775059, 0.239667, 0.303526], 396 | [0.780517, 0.243327, 0.299523], 397 | [0.785929, 0.247056, 0.295477], 398 | [0.791293, 0.250856, 0.291390], 399 | [0.796607, 0.254728, 0.287264], 400 | [0.801871, 0.258674, 0.283099], 401 | [0.807082, 0.262692, 0.278898], 402 | [0.812239, 0.266786, 0.274661], 403 | [0.817341, 0.270954, 0.270390], 404 | [0.822386, 0.275197, 0.266085], 405 | [0.827372, 0.279517, 0.261750], 406 | [0.832299, 0.283913, 0.257383], 407 | [0.837165, 0.288385, 0.252988], 408 | [0.841969, 0.292933, 0.248564], 409 | [0.846709, 0.297559, 0.244113], 410 | [0.851384, 0.302260, 0.239636], 411 | [0.855992, 0.307038, 0.235133], 412 | [0.860533, 0.311892, 0.230606], 413 | [0.865006, 0.316822, 0.226055], 414 | [0.869409, 0.321827, 0.221482], 415 | [0.873741, 0.326906, 0.216886], 416 | [0.878001, 0.332060, 0.212268], 417 | [0.882188, 0.337287, 0.207628], 418 | [0.886302, 0.342586, 0.202968], 419 | [0.890341, 0.347957, 0.198286], 420 | [0.894305, 0.353399, 0.193584], 421 | [0.898192, 0.358911, 0.188860], 422 | [0.902003, 0.364492, 0.184116], 423 | [0.905735, 0.370140, 0.179350], 424 | [0.909390, 0.375856, 0.174563], 425 | [0.912966, 0.381636, 0.169755], 426 | [0.916462, 0.387481, 0.164924], 427 | [0.919879, 0.393389, 0.160070], 428 | [0.923215, 0.399359, 0.155193], 429 | [0.926470, 0.405389, 0.150292], 430 | [0.929644, 0.411479, 0.145367], 431 | [0.932737, 0.417627, 0.140417], 432 | [0.935747, 0.423831, 0.135440], 433 | [0.938675, 0.430091, 0.130438], 434 | [0.941521, 0.436405, 0.125409], 435 | [0.944285, 0.442772, 0.120354], 436 | [0.946965, 0.449191, 0.115272], 437 | [0.949562, 0.455660, 0.110164], 438 | [0.952075, 0.462178, 0.105031], 439 | [0.954506, 0.468744, 0.099874], 440 | [0.956852, 0.475356, 0.094695], 441 | [0.959114, 0.482014, 0.089499], 442 | [0.961293, 0.488716, 0.084289], 443 | [0.963387, 0.495462, 0.079073], 444 | [0.965397, 0.502249, 0.073859], 445 | [0.967322, 0.509078, 0.068659], 446 | [0.969163, 0.515946, 0.063488], 447 | [0.970919, 0.522853, 0.058367], 448 | [0.972590, 0.529798, 0.053324], 449 | [0.974176, 0.536780, 0.048392], 450 | [0.975677, 0.543798, 0.043618], 451 | [0.977092, 0.550850, 0.039050], 452 | [0.978422, 0.557937, 0.034931], 453 | [0.979666, 0.565057, 0.031409], 454 | [0.980824, 0.572209, 0.028508], 455 | [0.981895, 0.579392, 0.026250], 456 | [0.982881, 0.586606, 0.024661], 457 | [0.983779, 0.593849, 0.023770], 458 | [0.984591, 0.601122, 0.023606], 459 | [0.985315, 0.608422, 0.024202], 460 | [0.985952, 0.615750, 0.025592], 461 | [0.986502, 0.623105, 0.027814], 462 | [0.986964, 0.630485, 0.030908], 463 | [0.987337, 0.637890, 0.034916], 464 | [0.987622, 0.645320, 0.039886], 465 | [0.987819, 0.652773, 0.045581], 466 | [0.987926, 0.660250, 0.051750], 467 | [0.987945, 0.667748, 0.058329], 468 | [0.987874, 0.675267, 0.065257], 469 | [0.987714, 0.682807, 0.072489], 470 | [0.987464, 0.690366, 0.079990], 471 | [0.987124, 0.697944, 0.087731], 472 | [0.986694, 0.705540, 0.095694], 473 | [0.986175, 0.713153, 0.103863], 474 | [0.985566, 0.720782, 0.112229], 475 | [0.984865, 0.728427, 0.120785], 476 | [0.984075, 0.736087, 0.129527], 477 | [0.983196, 0.743758, 0.138453], 478 | [0.982228, 0.751442, 0.147565], 479 | [0.981173, 0.759135, 0.156863], 480 | [0.980032, 0.766837, 0.166353], 481 | [0.978806, 0.774545, 0.176037], 482 | [0.977497, 0.782258, 0.185923], 483 | [0.976108, 0.789974, 0.196018], 484 | [0.974638, 0.797692, 0.206332], 485 | [0.973088, 0.805409, 0.216877], 486 | [0.971468, 0.813122, 0.227658], 487 | [0.969783, 0.820825, 0.238686], 488 | [0.968041, 0.828515, 0.249972], 489 | [0.966243, 0.836191, 0.261534], 490 | [0.964394, 0.843848, 0.273391], 491 | [0.962517, 0.851476, 0.285546], 492 | [0.960626, 0.859069, 0.298010], 493 | [0.958720, 0.866624, 0.310820], 494 | [0.956834, 0.874129, 0.323974], 495 | [0.954997, 0.881569, 0.337475], 496 | [0.953215, 0.888942, 0.351369], 497 | [0.951546, 0.896226, 0.365627], 498 | [0.950018, 0.903409, 0.380271], 499 | [0.948683, 0.910473, 0.395289], 500 | [0.947594, 0.917399, 0.410665], 501 | [0.946809, 0.924168, 0.426373], 502 | [0.946392, 0.930761, 0.442367], 503 | [0.946403, 0.937159, 0.458592], 504 | [0.946903, 0.943348, 0.474970], 505 | [0.947937, 0.949318, 0.491426], 506 | [0.949545, 0.955063, 0.507860], 507 | [0.951740, 0.960587, 0.524203], 508 | [0.954529, 0.965896, 0.540361], 509 | [0.957896, 0.971003, 0.556275], 510 | [0.961812, 0.975924, 0.571925], 511 | [0.966249, 0.980678, 0.587206], 512 | [0.971162, 0.985282, 0.602154], 513 | [0.976511, 0.989753, 0.616760], 514 | [0.982257, 0.994109, 0.631017], 515 | [0.988362, 0.998364, 0.644924]] 516 | 517 | _plasma_data = [[0.050383, 0.029803, 0.527975], 518 | [0.063536, 0.028426, 0.533124], 519 | [0.075353, 0.027206, 0.538007], 520 | [0.086222, 0.026125, 0.542658], 521 | [0.096379, 0.025165, 0.547103], 522 | [0.105980, 0.024309, 0.551368], 523 | [0.115124, 0.023556, 0.555468], 524 | [0.123903, 0.022878, 0.559423], 525 | [0.132381, 0.022258, 0.563250], 526 | [0.140603, 0.021687, 0.566959], 527 | [0.148607, 0.021154, 0.570562], 528 | [0.156421, 0.020651, 0.574065], 529 | [0.164070, 0.020171, 0.577478], 530 | [0.171574, 0.019706, 0.580806], 531 | [0.178950, 0.019252, 0.584054], 532 | [0.186213, 0.018803, 0.587228], 533 | [0.193374, 0.018354, 0.590330], 534 | [0.200445, 0.017902, 0.593364], 535 | [0.207435, 0.017442, 0.596333], 536 | [0.214350, 0.016973, 0.599239], 537 | [0.221197, 0.016497, 0.602083], 538 | [0.227983, 0.016007, 0.604867], 539 | [0.234715, 0.015502, 0.607592], 540 | [0.241396, 0.014979, 0.610259], 541 | [0.248032, 0.014439, 0.612868], 542 | [0.254627, 0.013882, 0.615419], 543 | [0.261183, 0.013308, 0.617911], 544 | [0.267703, 0.012716, 0.620346], 545 | [0.274191, 0.012109, 0.622722], 546 | [0.280648, 0.011488, 0.625038], 547 | [0.287076, 0.010855, 0.627295], 548 | [0.293478, 0.010213, 0.629490], 549 | [0.299855, 0.009561, 0.631624], 550 | [0.306210, 0.008902, 0.633694], 551 | [0.312543, 0.008239, 0.635700], 552 | [0.318856, 0.007576, 0.637640], 553 | [0.325150, 0.006915, 0.639512], 554 | [0.331426, 0.006261, 0.641316], 555 | [0.337683, 0.005618, 0.643049], 556 | [0.343925, 0.004991, 0.644710], 557 | [0.350150, 0.004382, 0.646298], 558 | [0.356359, 0.003798, 0.647810], 559 | [0.362553, 0.003243, 0.649245], 560 | [0.368733, 0.002724, 0.650601], 561 | [0.374897, 0.002245, 0.651876], 562 | [0.381047, 0.001814, 0.653068], 563 | [0.387183, 0.001434, 0.654177], 564 | [0.393304, 0.001114, 0.655199], 565 | [0.399411, 0.000859, 0.656133], 566 | [0.405503, 0.000678, 0.656977], 567 | [0.411580, 0.000577, 0.657730], 568 | [0.417642, 0.000564, 0.658390], 569 | [0.423689, 0.000646, 0.658956], 570 | [0.429719, 0.000831, 0.659425], 571 | [0.435734, 0.001127, 0.659797], 572 | [0.441732, 0.001540, 0.660069], 573 | [0.447714, 0.002080, 0.660240], 574 | [0.453677, 0.002755, 0.660310], 575 | [0.459623, 0.003574, 0.660277], 576 | [0.465550, 0.004545, 0.660139], 577 | [0.471457, 0.005678, 0.659897], 578 | [0.477344, 0.006980, 0.659549], 579 | [0.483210, 0.008460, 0.659095], 580 | [0.489055, 0.010127, 0.658534], 581 | [0.494877, 0.011990, 0.657865], 582 | [0.500678, 0.014055, 0.657088], 583 | [0.506454, 0.016333, 0.656202], 584 | [0.512206, 0.018833, 0.655209], 585 | [0.517933, 0.021563, 0.654109], 586 | [0.523633, 0.024532, 0.652901], 587 | [0.529306, 0.027747, 0.651586], 588 | [0.534952, 0.031217, 0.650165], 589 | [0.540570, 0.034950, 0.648640], 590 | [0.546157, 0.038954, 0.647010], 591 | [0.551715, 0.043136, 0.645277], 592 | [0.557243, 0.047331, 0.643443], 593 | [0.562738, 0.051545, 0.641509], 594 | [0.568201, 0.055778, 0.639477], 595 | [0.573632, 0.060028, 0.637349], 596 | [0.579029, 0.064296, 0.635126], 597 | [0.584391, 0.068579, 0.632812], 598 | [0.589719, 0.072878, 0.630408], 599 | [0.595011, 0.077190, 0.627917], 600 | [0.600266, 0.081516, 0.625342], 601 | [0.605485, 0.085854, 0.622686], 602 | [0.610667, 0.090204, 0.619951], 603 | [0.615812, 0.094564, 0.617140], 604 | [0.620919, 0.098934, 0.614257], 605 | [0.625987, 0.103312, 0.611305], 606 | [0.631017, 0.107699, 0.608287], 607 | [0.636008, 0.112092, 0.605205], 608 | [0.640959, 0.116492, 0.602065], 609 | [0.645872, 0.120898, 0.598867], 610 | [0.650746, 0.125309, 0.595617], 611 | [0.655580, 0.129725, 0.592317], 612 | [0.660374, 0.134144, 0.588971], 613 | [0.665129, 0.138566, 0.585582], 614 | [0.669845, 0.142992, 0.582154], 615 | [0.674522, 0.147419, 0.578688], 616 | [0.679160, 0.151848, 0.575189], 617 | [0.683758, 0.156278, 0.571660], 618 | [0.688318, 0.160709, 0.568103], 619 | [0.692840, 0.165141, 0.564522], 620 | [0.697324, 0.169573, 0.560919], 621 | [0.701769, 0.174005, 0.557296], 622 | [0.706178, 0.178437, 0.553657], 623 | [0.710549, 0.182868, 0.550004], 624 | [0.714883, 0.187299, 0.546338], 625 | [0.719181, 0.191729, 0.542663], 626 | [0.723444, 0.196158, 0.538981], 627 | [0.727670, 0.200586, 0.535293], 628 | [0.731862, 0.205013, 0.531601], 629 | [0.736019, 0.209439, 0.527908], 630 | [0.740143, 0.213864, 0.524216], 631 | [0.744232, 0.218288, 0.520524], 632 | [0.748289, 0.222711, 0.516834], 633 | [0.752312, 0.227133, 0.513149], 634 | [0.756304, 0.231555, 0.509468], 635 | [0.760264, 0.235976, 0.505794], 636 | [0.764193, 0.240396, 0.502126], 637 | [0.768090, 0.244817, 0.498465], 638 | [0.771958, 0.249237, 0.494813], 639 | [0.775796, 0.253658, 0.491171], 640 | [0.779604, 0.258078, 0.487539], 641 | [0.783383, 0.262500, 0.483918], 642 | [0.787133, 0.266922, 0.480307], 643 | [0.790855, 0.271345, 0.476706], 644 | [0.794549, 0.275770, 0.473117], 645 | [0.798216, 0.280197, 0.469538], 646 | [0.801855, 0.284626, 0.465971], 647 | [0.805467, 0.289057, 0.462415], 648 | [0.809052, 0.293491, 0.458870], 649 | [0.812612, 0.297928, 0.455338], 650 | [0.816144, 0.302368, 0.451816], 651 | [0.819651, 0.306812, 0.448306], 652 | [0.823132, 0.311261, 0.444806], 653 | [0.826588, 0.315714, 0.441316], 654 | [0.830018, 0.320172, 0.437836], 655 | [0.833422, 0.324635, 0.434366], 656 | [0.836801, 0.329105, 0.430905], 657 | [0.840155, 0.333580, 0.427455], 658 | [0.843484, 0.338062, 0.424013], 659 | [0.846788, 0.342551, 0.420579], 660 | [0.850066, 0.347048, 0.417153], 661 | [0.853319, 0.351553, 0.413734], 662 | [0.856547, 0.356066, 0.410322], 663 | [0.859750, 0.360588, 0.406917], 664 | [0.862927, 0.365119, 0.403519], 665 | [0.866078, 0.369660, 0.400126], 666 | [0.869203, 0.374212, 0.396738], 667 | [0.872303, 0.378774, 0.393355], 668 | [0.875376, 0.383347, 0.389976], 669 | [0.878423, 0.387932, 0.386600], 670 | [0.881443, 0.392529, 0.383229], 671 | [0.884436, 0.397139, 0.379860], 672 | [0.887402, 0.401762, 0.376494], 673 | [0.890340, 0.406398, 0.373130], 674 | [0.893250, 0.411048, 0.369768], 675 | [0.896131, 0.415712, 0.366407], 676 | [0.898984, 0.420392, 0.363047], 677 | [0.901807, 0.425087, 0.359688], 678 | [0.904601, 0.429797, 0.356329], 679 | [0.907365, 0.434524, 0.352970], 680 | [0.910098, 0.439268, 0.349610], 681 | [0.912800, 0.444029, 0.346251], 682 | [0.915471, 0.448807, 0.342890], 683 | [0.918109, 0.453603, 0.339529], 684 | [0.920714, 0.458417, 0.336166], 685 | [0.923287, 0.463251, 0.332801], 686 | [0.925825, 0.468103, 0.329435], 687 | [0.928329, 0.472975, 0.326067], 688 | [0.930798, 0.477867, 0.322697], 689 | [0.933232, 0.482780, 0.319325], 690 | [0.935630, 0.487712, 0.315952], 691 | [0.937990, 0.492667, 0.312575], 692 | [0.940313, 0.497642, 0.309197], 693 | [0.942598, 0.502639, 0.305816], 694 | [0.944844, 0.507658, 0.302433], 695 | [0.947051, 0.512699, 0.299049], 696 | [0.949217, 0.517763, 0.295662], 697 | [0.951344, 0.522850, 0.292275], 698 | [0.953428, 0.527960, 0.288883], 699 | [0.955470, 0.533093, 0.285490], 700 | [0.957469, 0.538250, 0.282096], 701 | [0.959424, 0.543431, 0.278701], 702 | [0.961336, 0.548636, 0.275305], 703 | [0.963203, 0.553865, 0.271909], 704 | [0.965024, 0.559118, 0.268513], 705 | [0.966798, 0.564396, 0.265118], 706 | [0.968526, 0.569700, 0.261721], 707 | [0.970205, 0.575028, 0.258325], 708 | [0.971835, 0.580382, 0.254931], 709 | [0.973416, 0.585761, 0.251540], 710 | [0.974947, 0.591165, 0.248151], 711 | [0.976428, 0.596595, 0.244767], 712 | [0.977856, 0.602051, 0.241387], 713 | [0.979233, 0.607532, 0.238013], 714 | [0.980556, 0.613039, 0.234646], 715 | [0.981826, 0.618572, 0.231287], 716 | [0.983041, 0.624131, 0.227937], 717 | [0.984199, 0.629718, 0.224595], 718 | [0.985301, 0.635330, 0.221265], 719 | [0.986345, 0.640969, 0.217948], 720 | [0.987332, 0.646633, 0.214648], 721 | [0.988260, 0.652325, 0.211364], 722 | [0.989128, 0.658043, 0.208100], 723 | [0.989935, 0.663787, 0.204859], 724 | [0.990681, 0.669558, 0.201642], 725 | [0.991365, 0.675355, 0.198453], 726 | [0.991985, 0.681179, 0.195295], 727 | [0.992541, 0.687030, 0.192170], 728 | [0.993032, 0.692907, 0.189084], 729 | [0.993456, 0.698810, 0.186041], 730 | [0.993814, 0.704741, 0.183043], 731 | [0.994103, 0.710698, 0.180097], 732 | [0.994324, 0.716681, 0.177208], 733 | [0.994474, 0.722691, 0.174381], 734 | [0.994553, 0.728728, 0.171622], 735 | [0.994561, 0.734791, 0.168938], 736 | [0.994495, 0.740880, 0.166335], 737 | [0.994355, 0.746995, 0.163821], 738 | [0.994141, 0.753137, 0.161404], 739 | [0.993851, 0.759304, 0.159092], 740 | [0.993482, 0.765499, 0.156891], 741 | [0.993033, 0.771720, 0.154808], 742 | [0.992505, 0.777967, 0.152855], 743 | [0.991897, 0.784239, 0.151042], 744 | [0.991209, 0.790537, 0.149377], 745 | [0.990439, 0.796859, 0.147870], 746 | [0.989587, 0.803205, 0.146529], 747 | [0.988648, 0.809579, 0.145357], 748 | [0.987621, 0.815978, 0.144363], 749 | [0.986509, 0.822401, 0.143557], 750 | [0.985314, 0.828846, 0.142945], 751 | [0.984031, 0.835315, 0.142528], 752 | [0.982653, 0.841812, 0.142303], 753 | [0.981190, 0.848329, 0.142279], 754 | [0.979644, 0.854866, 0.142453], 755 | [0.977995, 0.861432, 0.142808], 756 | [0.976265, 0.868016, 0.143351], 757 | [0.974443, 0.874622, 0.144061], 758 | [0.972530, 0.881250, 0.144923], 759 | [0.970533, 0.887896, 0.145919], 760 | [0.968443, 0.894564, 0.147014], 761 | [0.966271, 0.901249, 0.148180], 762 | [0.964021, 0.907950, 0.149370], 763 | [0.961681, 0.914672, 0.150520], 764 | [0.959276, 0.921407, 0.151566], 765 | [0.956808, 0.928152, 0.152409], 766 | [0.954287, 0.934908, 0.152921], 767 | [0.951726, 0.941671, 0.152925], 768 | [0.949151, 0.948435, 0.152178], 769 | [0.946602, 0.955190, 0.150328], 770 | [0.944152, 0.961916, 0.146861], 771 | [0.941896, 0.968590, 0.140956], 772 | [0.940015, 0.975158, 0.131326]] 773 | 774 | _viridis_data = [[0.267004, 0.004874, 0.329415], 775 | [0.268510, 0.009605, 0.335427], 776 | [0.269944, 0.014625, 0.341379], 777 | [0.271305, 0.019942, 0.347269], 778 | [0.272594, 0.025563, 0.353093], 779 | [0.273809, 0.031497, 0.358853], 780 | [0.274952, 0.037752, 0.364543], 781 | [0.276022, 0.044167, 0.370164], 782 | [0.277018, 0.050344, 0.375715], 783 | [0.277941, 0.056324, 0.381191], 784 | [0.278791, 0.062145, 0.386592], 785 | [0.279566, 0.067836, 0.391917], 786 | [0.280267, 0.073417, 0.397163], 787 | [0.280894, 0.078907, 0.402329], 788 | [0.281446, 0.084320, 0.407414], 789 | [0.281924, 0.089666, 0.412415], 790 | [0.282327, 0.094955, 0.417331], 791 | [0.282656, 0.100196, 0.422160], 792 | [0.282910, 0.105393, 0.426902], 793 | [0.283091, 0.110553, 0.431554], 794 | [0.283197, 0.115680, 0.436115], 795 | [0.283229, 0.120777, 0.440584], 796 | [0.283187, 0.125848, 0.444960], 797 | [0.283072, 0.130895, 0.449241], 798 | [0.282884, 0.135920, 0.453427], 799 | [0.282623, 0.140926, 0.457517], 800 | [0.282290, 0.145912, 0.461510], 801 | [0.281887, 0.150881, 0.465405], 802 | [0.281412, 0.155834, 0.469201], 803 | [0.280868, 0.160771, 0.472899], 804 | [0.280255, 0.165693, 0.476498], 805 | [0.279574, 0.170599, 0.479997], 806 | [0.278826, 0.175490, 0.483397], 807 | [0.278012, 0.180367, 0.486697], 808 | [0.277134, 0.185228, 0.489898], 809 | [0.276194, 0.190074, 0.493001], 810 | [0.275191, 0.194905, 0.496005], 811 | [0.274128, 0.199721, 0.498911], 812 | [0.273006, 0.204520, 0.501721], 813 | [0.271828, 0.209303, 0.504434], 814 | [0.270595, 0.214069, 0.507052], 815 | [0.269308, 0.218818, 0.509577], 816 | [0.267968, 0.223549, 0.512008], 817 | [0.266580, 0.228262, 0.514349], 818 | [0.265145, 0.232956, 0.516599], 819 | [0.263663, 0.237631, 0.518762], 820 | [0.262138, 0.242286, 0.520837], 821 | [0.260571, 0.246922, 0.522828], 822 | [0.258965, 0.251537, 0.524736], 823 | [0.257322, 0.256130, 0.526563], 824 | [0.255645, 0.260703, 0.528312], 825 | [0.253935, 0.265254, 0.529983], 826 | [0.252194, 0.269783, 0.531579], 827 | [0.250425, 0.274290, 0.533103], 828 | [0.248629, 0.278775, 0.534556], 829 | [0.246811, 0.283237, 0.535941], 830 | [0.244972, 0.287675, 0.537260], 831 | [0.243113, 0.292092, 0.538516], 832 | [0.241237, 0.296485, 0.539709], 833 | [0.239346, 0.300855, 0.540844], 834 | [0.237441, 0.305202, 0.541921], 835 | [0.235526, 0.309527, 0.542944], 836 | [0.233603, 0.313828, 0.543914], 837 | [0.231674, 0.318106, 0.544834], 838 | [0.229739, 0.322361, 0.545706], 839 | [0.227802, 0.326594, 0.546532], 840 | [0.225863, 0.330805, 0.547314], 841 | [0.223925, 0.334994, 0.548053], 842 | [0.221989, 0.339161, 0.548752], 843 | [0.220057, 0.343307, 0.549413], 844 | [0.218130, 0.347432, 0.550038], 845 | [0.216210, 0.351535, 0.550627], 846 | [0.214298, 0.355619, 0.551184], 847 | [0.212395, 0.359683, 0.551710], 848 | [0.210503, 0.363727, 0.552206], 849 | [0.208623, 0.367752, 0.552675], 850 | [0.206756, 0.371758, 0.553117], 851 | [0.204903, 0.375746, 0.553533], 852 | [0.203063, 0.379716, 0.553925], 853 | [0.201239, 0.383670, 0.554294], 854 | [0.199430, 0.387607, 0.554642], 855 | [0.197636, 0.391528, 0.554969], 856 | [0.195860, 0.395433, 0.555276], 857 | [0.194100, 0.399323, 0.555565], 858 | [0.192357, 0.403199, 0.555836], 859 | [0.190631, 0.407061, 0.556089], 860 | [0.188923, 0.410910, 0.556326], 861 | [0.187231, 0.414746, 0.556547], 862 | [0.185556, 0.418570, 0.556753], 863 | [0.183898, 0.422383, 0.556944], 864 | [0.182256, 0.426184, 0.557120], 865 | [0.180629, 0.429975, 0.557282], 866 | [0.179019, 0.433756, 0.557430], 867 | [0.177423, 0.437527, 0.557565], 868 | [0.175841, 0.441290, 0.557685], 869 | [0.174274, 0.445044, 0.557792], 870 | [0.172719, 0.448791, 0.557885], 871 | [0.171176, 0.452530, 0.557965], 872 | [0.169646, 0.456262, 0.558030], 873 | [0.168126, 0.459988, 0.558082], 874 | [0.166617, 0.463708, 0.558119], 875 | [0.165117, 0.467423, 0.558141], 876 | [0.163625, 0.471133, 0.558148], 877 | [0.162142, 0.474838, 0.558140], 878 | [0.160665, 0.478540, 0.558115], 879 | [0.159194, 0.482237, 0.558073], 880 | [0.157729, 0.485932, 0.558013], 881 | [0.156270, 0.489624, 0.557936], 882 | [0.154815, 0.493313, 0.557840], 883 | [0.153364, 0.497000, 0.557724], 884 | [0.151918, 0.500685, 0.557587], 885 | [0.150476, 0.504369, 0.557430], 886 | [0.149039, 0.508051, 0.557250], 887 | [0.147607, 0.511733, 0.557049], 888 | [0.146180, 0.515413, 0.556823], 889 | [0.144759, 0.519093, 0.556572], 890 | [0.143343, 0.522773, 0.556295], 891 | [0.141935, 0.526453, 0.555991], 892 | [0.140536, 0.530132, 0.555659], 893 | [0.139147, 0.533812, 0.555298], 894 | [0.137770, 0.537492, 0.554906], 895 | [0.136408, 0.541173, 0.554483], 896 | [0.135066, 0.544853, 0.554029], 897 | [0.133743, 0.548535, 0.553541], 898 | [0.132444, 0.552216, 0.553018], 899 | [0.131172, 0.555899, 0.552459], 900 | [0.129933, 0.559582, 0.551864], 901 | [0.128729, 0.563265, 0.551229], 902 | [0.127568, 0.566949, 0.550556], 903 | [0.126453, 0.570633, 0.549841], 904 | [0.125394, 0.574318, 0.549086], 905 | [0.124395, 0.578002, 0.548287], 906 | [0.123463, 0.581687, 0.547445], 907 | [0.122606, 0.585371, 0.546557], 908 | [0.121831, 0.589055, 0.545623], 909 | [0.121148, 0.592739, 0.544641], 910 | [0.120565, 0.596422, 0.543611], 911 | [0.120092, 0.600104, 0.542530], 912 | [0.119738, 0.603785, 0.541400], 913 | [0.119512, 0.607464, 0.540218], 914 | [0.119423, 0.611141, 0.538982], 915 | [0.119483, 0.614817, 0.537692], 916 | [0.119699, 0.618490, 0.536347], 917 | [0.120081, 0.622161, 0.534946], 918 | [0.120638, 0.625828, 0.533488], 919 | [0.121380, 0.629492, 0.531973], 920 | [0.122312, 0.633153, 0.530398], 921 | [0.123444, 0.636809, 0.528763], 922 | [0.124780, 0.640461, 0.527068], 923 | [0.126326, 0.644107, 0.525311], 924 | [0.128087, 0.647749, 0.523491], 925 | [0.130067, 0.651384, 0.521608], 926 | [0.132268, 0.655014, 0.519661], 927 | [0.134692, 0.658636, 0.517649], 928 | [0.137339, 0.662252, 0.515571], 929 | [0.140210, 0.665859, 0.513427], 930 | [0.143303, 0.669459, 0.511215], 931 | [0.146616, 0.673050, 0.508936], 932 | [0.150148, 0.676631, 0.506589], 933 | [0.153894, 0.680203, 0.504172], 934 | [0.157851, 0.683765, 0.501686], 935 | [0.162016, 0.687316, 0.499129], 936 | [0.166383, 0.690856, 0.496502], 937 | [0.170948, 0.694384, 0.493803], 938 | [0.175707, 0.697900, 0.491033], 939 | [0.180653, 0.701402, 0.488189], 940 | [0.185783, 0.704891, 0.485273], 941 | [0.191090, 0.708366, 0.482284], 942 | [0.196571, 0.711827, 0.479221], 943 | [0.202219, 0.715272, 0.476084], 944 | [0.208030, 0.718701, 0.472873], 945 | [0.214000, 0.722114, 0.469588], 946 | [0.220124, 0.725509, 0.466226], 947 | [0.226397, 0.728888, 0.462789], 948 | [0.232815, 0.732247, 0.459277], 949 | [0.239374, 0.735588, 0.455688], 950 | [0.246070, 0.738910, 0.452024], 951 | [0.252899, 0.742211, 0.448284], 952 | [0.259857, 0.745492, 0.444467], 953 | [0.266941, 0.748751, 0.440573], 954 | [0.274149, 0.751988, 0.436601], 955 | [0.281477, 0.755203, 0.432552], 956 | [0.288921, 0.758394, 0.428426], 957 | [0.296479, 0.761561, 0.424223], 958 | [0.304148, 0.764704, 0.419943], 959 | [0.311925, 0.767822, 0.415586], 960 | [0.319809, 0.770914, 0.411152], 961 | [0.327796, 0.773980, 0.406640], 962 | [0.335885, 0.777018, 0.402049], 963 | [0.344074, 0.780029, 0.397381], 964 | [0.352360, 0.783011, 0.392636], 965 | [0.360741, 0.785964, 0.387814], 966 | [0.369214, 0.788888, 0.382914], 967 | [0.377779, 0.791781, 0.377939], 968 | [0.386433, 0.794644, 0.372886], 969 | [0.395174, 0.797475, 0.367757], 970 | [0.404001, 0.800275, 0.362552], 971 | [0.412913, 0.803041, 0.357269], 972 | [0.421908, 0.805774, 0.351910], 973 | [0.430983, 0.808473, 0.346476], 974 | [0.440137, 0.811138, 0.340967], 975 | [0.449368, 0.813768, 0.335384], 976 | [0.458674, 0.816363, 0.329727], 977 | [0.468053, 0.818921, 0.323998], 978 | [0.477504, 0.821444, 0.318195], 979 | [0.487026, 0.823929, 0.312321], 980 | [0.496615, 0.826376, 0.306377], 981 | [0.506271, 0.828786, 0.300362], 982 | [0.515992, 0.831158, 0.294279], 983 | [0.525776, 0.833491, 0.288127], 984 | [0.535621, 0.835785, 0.281908], 985 | [0.545524, 0.838039, 0.275626], 986 | [0.555484, 0.840254, 0.269281], 987 | [0.565498, 0.842430, 0.262877], 988 | [0.575563, 0.844566, 0.256415], 989 | [0.585678, 0.846661, 0.249897], 990 | [0.595839, 0.848717, 0.243329], 991 | [0.606045, 0.850733, 0.236712], 992 | [0.616293, 0.852709, 0.230052], 993 | [0.626579, 0.854645, 0.223353], 994 | [0.636902, 0.856542, 0.216620], 995 | [0.647257, 0.858400, 0.209861], 996 | [0.657642, 0.860219, 0.203082], 997 | [0.668054, 0.861999, 0.196293], 998 | [0.678489, 0.863742, 0.189503], 999 | [0.688944, 0.865448, 0.182725], 1000 | [0.699415, 0.867117, 0.175971], 1001 | [0.709898, 0.868751, 0.169257], 1002 | [0.720391, 0.870350, 0.162603], 1003 | [0.730889, 0.871916, 0.156029], 1004 | [0.741388, 0.873449, 0.149561], 1005 | [0.751884, 0.874951, 0.143228], 1006 | [0.762373, 0.876424, 0.137064], 1007 | [0.772852, 0.877868, 0.131109], 1008 | [0.783315, 0.879285, 0.125405], 1009 | [0.793760, 0.880678, 0.120005], 1010 | [0.804182, 0.882046, 0.114965], 1011 | [0.814576, 0.883393, 0.110347], 1012 | [0.824940, 0.884720, 0.106217], 1013 | [0.835270, 0.886029, 0.102646], 1014 | [0.845561, 0.887322, 0.099702], 1015 | [0.855810, 0.888601, 0.097452], 1016 | [0.866013, 0.889868, 0.095953], 1017 | [0.876168, 0.891125, 0.095250], 1018 | [0.886271, 0.892374, 0.095374], 1019 | [0.896320, 0.893616, 0.096335], 1020 | [0.906311, 0.894855, 0.098125], 1021 | [0.916242, 0.896091, 0.100717], 1022 | [0.926106, 0.897330, 0.104071], 1023 | [0.935904, 0.898570, 0.108131], 1024 | [0.945636, 0.899815, 0.112838], 1025 | [0.955300, 0.901065, 0.118128], 1026 | [0.964894, 0.902323, 0.123941], 1027 | [0.974417, 0.903590, 0.130215], 1028 | [0.983868, 0.904867, 0.136897], 1029 | [0.993248, 0.906157, 0.143936]] 1030 | 1031 | from matplotlib.colors import ListedColormap 1032 | 1033 | cmaps = {} 1034 | for (name, data) in (('magma', _magma_data), 1035 | ('inferno', _inferno_data), 1036 | ('plasma', _plasma_data), 1037 | ('viridis', _viridis_data)): 1038 | 1039 | cmaps[name] = ListedColormap(data, name=name) 1040 | 1041 | magma = cmaps['magma'] 1042 | inferno = cmaps['inferno'] 1043 | plasma = cmaps['plasma'] 1044 | viridis = cmaps['viridis'] 1045 | -------------------------------------------------------------------------------- /data/2002FemPreg.csv.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanv/ds_intro/9b020b6f8770da447285428817dab672362b19dc/data/2002FemPreg.csv.gz -------------------------------------------------------------------------------- /data/iris.csv: -------------------------------------------------------------------------------- 1 | SepalLength,SepalWidth,PetalLength,PetalWidth,Name 2 | 5.1,3.5,1.4,0.2,Iris-setosa 3 | 4.9,3.0,1.4,0.2,Iris-setosa 4 | 4.7,3.2,1.3,0.2,Iris-setosa 5 | 4.6,3.1,1.5,0.2,Iris-setosa 6 | 5.0,3.6,1.4,0.2,Iris-setosa 7 | 5.4,3.9,1.7,0.4,Iris-setosa 8 | 4.6,3.4,1.4,0.3,Iris-setosa 9 | 5.0,3.4,1.5,0.2,Iris-setosa 10 | 4.4,2.9,1.4,0.2,Iris-setosa 11 | 4.9,3.1,1.5,0.1,Iris-setosa 12 | 5.4,3.7,1.5,0.2,Iris-setosa 13 | 4.8,3.4,1.6,0.2,Iris-setosa 14 | 4.8,3.0,1.4,0.1,Iris-setosa 15 | 4.3,3.0,1.1,0.1,Iris-setosa 16 | 5.8,4.0,1.2,0.2,Iris-setosa 17 | 5.7,4.4,1.5,0.4,Iris-setosa 18 | 5.4,3.9,1.3,0.4,Iris-setosa 19 | 5.1,3.5,1.4,0.3,Iris-setosa 20 | 5.7,3.8,1.7,0.3,Iris-setosa 21 | 5.1,3.8,1.5,0.3,Iris-setosa 22 | 5.4,3.4,1.7,0.2,Iris-setosa 23 | 5.1,3.7,1.5,0.4,Iris-setosa 24 | 4.6,3.6,1.0,0.2,Iris-setosa 25 | 5.1,3.3,1.7,0.5,Iris-setosa 26 | 4.8,3.4,1.9,0.2,Iris-setosa 27 | 5.0,3.0,1.6,0.2,Iris-setosa 28 | 5.0,3.4,1.6,0.4,Iris-setosa 29 | 5.2,3.5,1.5,0.2,Iris-setosa 30 | 5.2,3.4,1.4,0.2,Iris-setosa 31 | 4.7,3.2,1.6,0.2,Iris-setosa 32 | 4.8,3.1,1.6,0.2,Iris-setosa 33 | 5.4,3.4,1.5,0.4,Iris-setosa 34 | 5.2,4.1,1.5,0.1,Iris-setosa 35 | 5.5,4.2,1.4,0.2,Iris-setosa 36 | 4.9,3.1,1.5,0.1,Iris-setosa 37 | 5.0,3.2,1.2,0.2,Iris-setosa 38 | 5.5,3.5,1.3,0.2,Iris-setosa 39 | 4.9,3.1,1.5,0.1,Iris-setosa 40 | 4.4,3.0,1.3,0.2,Iris-setosa 41 | 5.1,3.4,1.5,0.2,Iris-setosa 42 | 5.0,3.5,1.3,0.3,Iris-setosa 43 | 4.5,2.3,1.3,0.3,Iris-setosa 44 | 4.4,3.2,1.3,0.2,Iris-setosa 45 | 5.0,3.5,1.6,0.6,Iris-setosa 46 | 5.1,3.8,1.9,0.4,Iris-setosa 47 | 4.8,3.0,1.4,0.3,Iris-setosa 48 | 5.1,3.8,1.6,0.2,Iris-setosa 49 | 4.6,3.2,1.4,0.2,Iris-setosa 50 | 5.3,3.7,1.5,0.2,Iris-setosa 51 | 5.0,3.3,1.4,0.2,Iris-setosa 52 | 7.0,3.2,4.7,1.4,Iris-versicolor 53 | 6.4,3.2,4.5,1.5,Iris-versicolor 54 | 6.9,3.1,4.9,1.5,Iris-versicolor 55 | 5.5,2.3,4.0,1.3,Iris-versicolor 56 | 6.5,2.8,4.6,1.5,Iris-versicolor 57 | 5.7,2.8,4.5,1.3,Iris-versicolor 58 | 6.3,3.3,4.7,1.6,Iris-versicolor 59 | 4.9,2.4,3.3,1.0,Iris-versicolor 60 | 6.6,2.9,4.6,1.3,Iris-versicolor 61 | 5.2,2.7,3.9,1.4,Iris-versicolor 62 | 5.0,2.0,3.5,1.0,Iris-versicolor 63 | 5.9,3.0,4.2,1.5,Iris-versicolor 64 | 6.0,2.2,4.0,1.0,Iris-versicolor 65 | 6.1,2.9,4.7,1.4,Iris-versicolor 66 | 5.6,2.9,3.6,1.3,Iris-versicolor 67 | 6.7,3.1,4.4,1.4,Iris-versicolor 68 | 5.6,3.0,4.5,1.5,Iris-versicolor 69 | 5.8,2.7,4.1,1.0,Iris-versicolor 70 | 6.2,2.2,4.5,1.5,Iris-versicolor 71 | 5.6,2.5,3.9,1.1,Iris-versicolor 72 | 5.9,3.2,4.8,1.8,Iris-versicolor 73 | 6.1,2.8,4.0,1.3,Iris-versicolor 74 | 6.3,2.5,4.9,1.5,Iris-versicolor 75 | 6.1,2.8,4.7,1.2,Iris-versicolor 76 | 6.4,2.9,4.3,1.3,Iris-versicolor 77 | 6.6,3.0,4.4,1.4,Iris-versicolor 78 | 6.8,2.8,4.8,1.4,Iris-versicolor 79 | 6.7,3.0,5.0,1.7,Iris-versicolor 80 | 6.0,2.9,4.5,1.5,Iris-versicolor 81 | 5.7,2.6,3.5,1.0,Iris-versicolor 82 | 5.5,2.4,3.8,1.1,Iris-versicolor 83 | 5.5,2.4,3.7,1.0,Iris-versicolor 84 | 5.8,2.7,3.9,1.2,Iris-versicolor 85 | 6.0,2.7,5.1,1.6,Iris-versicolor 86 | 5.4,3.0,4.5,1.5,Iris-versicolor 87 | 6.0,3.4,4.5,1.6,Iris-versicolor 88 | 6.7,3.1,4.7,1.5,Iris-versicolor 89 | 6.3,2.3,4.4,1.3,Iris-versicolor 90 | 5.6,3.0,4.1,1.3,Iris-versicolor 91 | 5.5,2.5,4.0,1.3,Iris-versicolor 92 | 5.5,2.6,4.4,1.2,Iris-versicolor 93 | 6.1,3.0,4.6,1.4,Iris-versicolor 94 | 5.8,2.6,4.0,1.2,Iris-versicolor 95 | 5.0,2.3,3.3,1.0,Iris-versicolor 96 | 5.6,2.7,4.2,1.3,Iris-versicolor 97 | 5.7,3.0,4.2,1.2,Iris-versicolor 98 | 5.7,2.9,4.2,1.3,Iris-versicolor 99 | 6.2,2.9,4.3,1.3,Iris-versicolor 100 | 5.1,2.5,3.0,1.1,Iris-versicolor 101 | 5.7,2.8,4.1,1.3,Iris-versicolor 102 | 6.3,3.3,6.0,2.5,Iris-virginica 103 | 5.8,2.7,5.1,1.9,Iris-virginica 104 | 7.1,3.0,5.9,2.1,Iris-virginica 105 | 6.3,2.9,5.6,1.8,Iris-virginica 106 | 6.5,3.0,5.8,2.2,Iris-virginica 107 | 7.6,3.0,6.6,2.1,Iris-virginica 108 | 4.9,2.5,4.5,1.7,Iris-virginica 109 | 7.3,2.9,6.3,1.8,Iris-virginica 110 | 6.7,2.5,5.8,1.8,Iris-virginica 111 | 7.2,3.6,6.1,2.5,Iris-virginica 112 | 6.5,3.2,5.1,2.0,Iris-virginica 113 | 6.4,2.7,5.3,1.9,Iris-virginica 114 | 6.8,3.0,5.5,2.1,Iris-virginica 115 | 5.7,2.5,5.0,2.0,Iris-virginica 116 | 5.8,2.8,5.1,2.4,Iris-virginica 117 | 6.4,3.2,5.3,2.3,Iris-virginica 118 | 6.5,3.0,5.5,1.8,Iris-virginica 119 | 7.7,3.8,6.7,2.2,Iris-virginica 120 | 7.7,2.6,6.9,2.3,Iris-virginica 121 | 6.0,2.2,5.0,1.5,Iris-virginica 122 | 6.9,3.2,5.7,2.3,Iris-virginica 123 | 5.6,2.8,4.9,2.0,Iris-virginica 124 | 7.7,2.8,6.7,2.0,Iris-virginica 125 | 6.3,2.7,4.9,1.8,Iris-virginica 126 | 6.7,3.3,5.7,2.1,Iris-virginica 127 | 7.2,3.2,6.0,1.8,Iris-virginica 128 | 6.2,2.8,4.8,1.8,Iris-virginica 129 | 6.1,3.0,4.9,1.8,Iris-virginica 130 | 6.4,2.8,5.6,2.1,Iris-virginica 131 | 7.2,3.0,5.8,1.6,Iris-virginica 132 | 7.4,2.8,6.1,1.9,Iris-virginica 133 | 7.9,3.8,6.4,2.0,Iris-virginica 134 | 6.4,2.8,5.6,2.2,Iris-virginica 135 | 6.3,2.8,5.1,1.5,Iris-virginica 136 | 6.1,2.6,5.6,1.4,Iris-virginica 137 | 7.7,3.0,6.1,2.3,Iris-virginica 138 | 6.3,3.4,5.6,2.4,Iris-virginica 139 | 6.4,3.1,5.5,1.8,Iris-virginica 140 | 6.0,3.0,4.8,1.8,Iris-virginica 141 | 6.9,3.1,5.4,2.1,Iris-virginica 142 | 6.7,3.1,5.6,2.4,Iris-virginica 143 | 6.9,3.1,5.1,2.3,Iris-virginica 144 | 5.8,2.7,5.1,1.9,Iris-virginica 145 | 6.8,3.2,5.9,2.3,Iris-virginica 146 | 6.7,3.3,5.7,2.5,Iris-virginica 147 | 6.7,3.0,5.2,2.3,Iris-virginica 148 | 6.3,2.5,5.0,1.9,Iris-virginica 149 | 6.5,3.0,5.2,2.0,Iris-virginica 150 | 6.2,3.4,5.4,2.3,Iris-virginica 151 | 5.9,3.0,5.1,1.8,Iris-virginica -------------------------------------------------------------------------------- /figures/cumulative_snowfall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanv/ds_intro/9b020b6f8770da447285428817dab672362b19dc/figures/cumulative_snowfall.png -------------------------------------------------------------------------------- /figures/iris_setosa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanv/ds_intro/9b020b6f8770da447285428817dab672362b19dc/figures/iris_setosa.jpg -------------------------------------------------------------------------------- /figures/iris_versicolor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanv/ds_intro/9b020b6f8770da447285428817dab672362b19dc/figures/iris_versicolor.jpg -------------------------------------------------------------------------------- /figures/iris_virginica.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanv/ds_intro/9b020b6f8770da447285428817dab672362b19dc/figures/iris_virginica.jpg -------------------------------------------------------------------------------- /figures/pandas-book.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanv/ds_intro/9b020b6f8770da447285428817dab672362b19dc/figures/pandas-book.jpg -------------------------------------------------------------------------------- /figures/petal_sepal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanv/ds_intro/9b020b6f8770da447285428817dab672362b19dc/figures/petal_sepal.jpg -------------------------------------------------------------------------------- /figures/seaborn_gallery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefanv/ds_intro/9b020b6f8770da447285428817dab672362b19dc/figures/seaborn_gallery.png -------------------------------------------------------------------------------- /figures/supervised_workflow.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xmlTraining Data 335 | Test Data 358 | Training Labels 381 | Model 401 | Prediction 421 | Test Labels 486 | Evaluation 506 | Training 541 | Generalization 558 | -------------------------------------------------------------------------------- /figures/train_test_split.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xmlAll Data 369 | Training data 395 | Test data 421 | -------------------------------------------------------------------------------- /index.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Data Science using Python : A Survival Pack\n", 8 | "\n", 9 | "## IEEE Vis 2015" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": {}, 15 | "source": [ 16 | "- [Introduction](00_introduction.ipynb)\n", 17 | "- [NumPy recap & Introduction to Pandas](01_intro_numpy_pandas.ipynb)\n", 18 | "- [Pandas exercises](01_exercise_pandas.ipynb)\n", 19 | "- [Seaborn intro](02_intro_seaborn.ipynb)\n", 20 | "- [Introduction to scikit-learn](03_intro_scikit_learn.ipynb)\n", 21 | "- [scikit-learn exercises](03_exercise_scikit_learn.ipynb)" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "## https://github.com/stefanv/ds_intro\n", 29 | "\n", 30 | "" 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "metadata": {}, 36 | "source": [ 37 | "## Installation\n", 38 | "\n", 39 | "The full set of tools we'll be using is available in\n", 40 | "[Anaconda](https://www.continuum.io/downloads).\n", 41 | "\n", 42 | "**Please select the Python 3 download.**\n", 43 | "\n", 44 | "This is a big download, so if you're on conference wifi, rather\n", 45 | "install [MiniConda](http://conda.pydata.org/miniconda.html), and\n", 46 | "install additional packages as you need them with\n", 47 | "\n", 48 | "```\n", 49 | "conda install package_name\n", 50 | "```\n", 51 | "\n", 52 | "You will need the following packages:\n", 53 | "\n", 54 | "- numpy\n", 55 | "- pandas\n", 56 | "- seaborn\n", 57 | "- scikit-learn\n", 58 | "\n", 59 | "All of these, except for ``seaborn``, are installed by default." 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "## Rough Schedule\n", 67 | "\n", 68 | "
\n",
 69 |     "14:00--14:20 Introduction + overview + installation\n",
 70 |     "14:20--15:00 NumPy + Pandas\n",
 71 |     "15:00--15:30 Exercise 1\n",
 72 |     "15:30--15:40 Solutions\n",
 73 |     "\n",
 74 |     "Coffee Break\n",
 75 |     "\n",
 76 |     "16:15--16:35 Seaborn\n",
 77 |     "16:35--17:15 scikit-learn\n",
 78 |     "17:15--17:45 Exercise 2\n",
 79 |     "17:45--17:55 Solutions\n",
 80 |     "
" 81 | ] 82 | } 83 | ], 84 | "metadata": { 85 | "kernelspec": { 86 | "display_name": "Python 3", 87 | "language": "python", 88 | "name": "python3" 89 | }, 90 | "language_info": { 91 | "codemirror_mode": { 92 | "name": "ipython", 93 | "version": 3 94 | }, 95 | "file_extension": ".py", 96 | "mimetype": "text/x-python", 97 | "name": "python", 98 | "nbconvert_exporter": "python", 99 | "pygments_lexer": "ipython3", 100 | "version": "3.4.3" 101 | } 102 | }, 103 | "nbformat": 4, 104 | "nbformat_minor": 0 105 | } 106 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy 2 | pandas 3 | seaborn 4 | scikit-learn 5 | --------------------------------------------------------------------------------
Iris SetosaIris VersicolorIris Virginica