OSGeoLive-Notebooks/Pandas/solved - 06 - Reshaping dat...

3263 lines
191 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p><font size=\"6\"><b>Reshaping data</b></font></p>\n",
"\n",
"> *© 2016, Joris Van den Bossche and Stijn Van Hoey (<mailto:jorisvandenbossche@gmail.com>, <mailto:stijnvanhoey@gmail.com>). Licensed under [CC BY 4.0 Creative Commons](http://creativecommons.org/licenses/by/4.0/)*\n",
"\n",
"---"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true,
"run_control": {
"frozen": false,
"read_only": false
},
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Pivoting data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Cfr. excel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"People who know Excel, probably know the **Pivot** functionality:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![](img/pivot_excel.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The data of the table:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"excelample = pd.DataFrame({'Month': [\"January\", \"January\", \"January\", \"January\", \n",
" \"February\", \"February\", \"February\", \"February\", \n",
" \"March\", \"March\", \"March\", \"March\"],\n",
" 'Category': [\"Transportation\", \"Grocery\", \"Household\", \"Entertainment\",\n",
" \"Transportation\", \"Grocery\", \"Household\", \"Entertainment\",\n",
" \"Transportation\", \"Grocery\", \"Household\", \"Entertainment\"],\n",
" 'Amount': [74., 235., 175., 100., 115., 240., 225., 125., 90., 260., 200., 120.]})"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Amount</th>\n",
" <th>Category</th>\n",
" <th>Month</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>74.0</td>\n",
" <td>Transportation</td>\n",
" <td>January</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>235.0</td>\n",
" <td>Grocery</td>\n",
" <td>January</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>175.0</td>\n",
" <td>Household</td>\n",
" <td>January</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>100.0</td>\n",
" <td>Entertainment</td>\n",
" <td>January</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>115.0</td>\n",
" <td>Transportation</td>\n",
" <td>February</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>240.0</td>\n",
" <td>Grocery</td>\n",
" <td>February</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>225.0</td>\n",
" <td>Household</td>\n",
" <td>February</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>125.0</td>\n",
" <td>Entertainment</td>\n",
" <td>February</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>90.0</td>\n",
" <td>Transportation</td>\n",
" <td>March</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>260.0</td>\n",
" <td>Grocery</td>\n",
" <td>March</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>200.0</td>\n",
" <td>Household</td>\n",
" <td>March</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>120.0</td>\n",
" <td>Entertainment</td>\n",
" <td>March</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Amount Category Month\n",
"0 74.0 Transportation January\n",
"1 235.0 Grocery January\n",
"2 175.0 Household January\n",
"3 100.0 Entertainment January\n",
"4 115.0 Transportation February\n",
"5 240.0 Grocery February\n",
"6 225.0 Household February\n",
"7 125.0 Entertainment February\n",
"8 90.0 Transportation March\n",
"9 260.0 Grocery March\n",
"10 200.0 Household March\n",
"11 120.0 Entertainment March"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"excelample"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Month</th>\n",
" <th>February</th>\n",
" <th>January</th>\n",
" <th>March</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Category</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Entertainment</th>\n",
" <td>125.0</td>\n",
" <td>100.0</td>\n",
" <td>120.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Grocery</th>\n",
" <td>240.0</td>\n",
" <td>235.0</td>\n",
" <td>260.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Household</th>\n",
" <td>225.0</td>\n",
" <td>175.0</td>\n",
" <td>200.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Transportation</th>\n",
" <td>115.0</td>\n",
" <td>74.0</td>\n",
" <td>90.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Month February January March\n",
"Category \n",
"Entertainment 125.0 100.0 120.0\n",
"Grocery 240.0 235.0 260.0\n",
"Household 225.0 175.0 200.0\n",
"Transportation 115.0 74.0 90.0"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"excelample_pivot = excelample.pivot(index=\"Category\", columns=\"Month\", values=\"Amount\")\n",
"excelample_pivot"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Interested in *Grand totals*?"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Category\n",
"Entertainment 345.0\n",
"Grocery 735.0\n",
"Household 600.0\n",
"Transportation 279.0\n",
"dtype: float64"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sum columns\n",
"excelample_pivot.sum(axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Month\n",
"February 705.0\n",
"January 584.0\n",
"March 670.0\n",
"dtype: float64"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sum rows\n",
"excelample_pivot.sum(axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Pivot is just reordering your data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Small subsample of the titanic dataset:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [],
"source": [
"df = pd.DataFrame({'Fare': [7.25, 71.2833, 51.8625, 30.0708, 7.8542, 13.0],\n",
" 'Pclass': [3, 1, 1, 2, 3, 2],\n",
" 'Sex': ['male', 'female', 'male', 'female', 'female', 'male'],\n",
" 'Survived': [0, 1, 0, 1, 0, 1]})"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Fare</th>\n",
" <th>Pclass</th>\n",
" <th>Sex</th>\n",
" <th>Survived</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>7.2500</td>\n",
" <td>3</td>\n",
" <td>male</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>71.2833</td>\n",
" <td>1</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>51.8625</td>\n",
" <td>1</td>\n",
" <td>male</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>30.0708</td>\n",
" <td>2</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>7.8542</td>\n",
" <td>3</td>\n",
" <td>female</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>13.0000</td>\n",
" <td>2</td>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Fare Pclass Sex Survived\n",
"0 7.2500 3 male 0\n",
"1 71.2833 1 female 1\n",
"2 51.8625 1 male 0\n",
"3 30.0708 2 female 1\n",
"4 7.8542 3 female 0\n",
"5 13.0000 2 male 1"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Sex</th>\n",
" <th>female</th>\n",
" <th>male</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>71.2833</td>\n",
" <td>51.8625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>30.0708</td>\n",
" <td>13.0000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>7.8542</td>\n",
" <td>7.2500</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Sex female male\n",
"Pclass \n",
"1 71.2833 51.8625\n",
"2 30.0708 13.0000\n",
"3 7.8542 7.2500"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot(index='Pclass', columns='Sex', values='Fare')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Sex</th>\n",
" <th>female</th>\n",
" <th>male</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Sex female male\n",
"Pclass \n",
"1 1 0\n",
"2 1 1\n",
"3 0 0"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot(index='Pclass', columns='Sex', values='Survived')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So far, so good..."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's now use the full titanic dataset:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [],
"source": [
"df = pd.read_csv(\"data/titanic.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>male</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>female</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>female</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>female</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>male</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris male 22.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"2 Heikkinen, Miss. Laina female 26.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
"4 Allen, Mr. William Henry male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"0 0 A/5 21171 7.2500 NaN S \n",
"1 0 PC 17599 71.2833 C85 C \n",
"2 0 STON/O2. 3101282 7.9250 NaN S \n",
"3 0 113803 53.1000 C123 S \n",
"4 0 373450 8.0500 NaN S "
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And try the same pivot (*no worries about the try-except, this is here just used to catch a loooong error*):"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
},
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Exception! Index contains duplicate entries, cannot reshape\n"
]
}
],
"source": [
"try:\n",
" df.pivot(index='Sex', columns='Pclass', values='Fare')\n",
"except Exception as e:\n",
" print(\"Exception!\", e)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This does not work, because we would end up with multiple values for one cell of the resulting frame, as the error says: `duplicated` values for the columns in the selection. As an example, consider the following rows of our three columns of interest:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Sex</th>\n",
" <th>Pclass</th>\n",
" <th>Fare</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>71.2833</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>53.1000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sex Pclass Fare\n",
"1 female 1 71.2833\n",
"3 female 1 53.1000"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc[[1, 3], [\"Sex\", 'Pclass', 'Fare']]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since `pivot` is just restructuring data, where would both values of `Fare` for the same combination of `Sex` and `Pclass` need to go?\n",
"\n",
"Well, they need to be combined, according to an `aggregation` functionality, which is supported by the function`pivot_table`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger\">\n",
"\n",
"<b>NOTE</b>:\n",
"\n",
" <ul>\n",
" <li>**Pivot** is purely restructuring: a single value for each index/column combination is required.</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Pivot tables - aggregating while pivoting"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [],
"source": [
"df = pd.read_csv(\"data/titanic.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Pclass</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>female</th>\n",
" <td>106.125798</td>\n",
" <td>21.970121</td>\n",
" <td>16.118810</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>67.226127</td>\n",
" <td>19.741782</td>\n",
" <td>12.661633</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Pclass 1 2 3\n",
"Sex \n",
"female 106.125798 21.970121 16.118810\n",
"male 67.226127 19.741782 12.661633"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_table(index='Sex', columns='Pclass', values='Fare')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info\">\n",
"\n",
"<b>REMEMBER</b>:\n",
"\n",
" <ul>\n",
" <li>By default, `pivot_table` takes the **mean** of all values that would end up into one cell. However, you can also specify other aggregation functions using the `aggfunc` keyword.</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Pclass</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>female</th>\n",
" <td>512.3292</td>\n",
" <td>65.0</td>\n",
" <td>69.55</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>512.3292</td>\n",
" <td>73.5</td>\n",
" <td>69.55</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Pclass 1 2 3\n",
"Sex \n",
"female 512.3292 65.0 69.55\n",
"male 512.3292 73.5 69.55"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_table(index='Sex', columns='Pclass', \n",
" values='Fare', aggfunc='max')"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Pclass</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>female</th>\n",
" <td>94</td>\n",
" <td>76</td>\n",
" <td>144</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>122</td>\n",
" <td>108</td>\n",
" <td>347</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Pclass 1 2 3\n",
"Sex \n",
"female 94 76 144\n",
"male 122 108 347"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_table(index='Sex', columns='Pclass', \n",
" values='Fare', aggfunc='count')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info\">\n",
"\n",
"<b>REMEMBER</b>:\n",
"\n",
" <ul>\n",
" <li>There is a shortcut function for a `pivot_table` with a `aggfunc=count` as aggregation: `crosstab`</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Pclass</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>female</th>\n",
" <td>94</td>\n",
" <td>76</td>\n",
" <td>144</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>122</td>\n",
" <td>108</td>\n",
" <td>347</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Pclass 1 2 3\n",
"Sex \n",
"female 94 76 144\n",
"male 122 108 347"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.crosstab(index=df['Sex'], columns=df['Pclass'])"
]
},
{
"cell_type": "markdown",
"metadata": {
"clear_cell": false
},
"source": [
"<div class=\"alert alert-success\">\n",
"\n",
"<b>EXERCISE</b>:\n",
"\n",
" <ul>\n",
" <li>Make a pivot table with the survival rates (= number of persons survived / total number of persons) for Pclass vs Sex.</li>\n",
" <li>Plot the result as a bar plot.</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"clear_cell": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Sex</th>\n",
" <th>female</th>\n",
" <th>male</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.968085</td>\n",
" <td>0.368852</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.921053</td>\n",
" <td>0.157407</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.500000</td>\n",
" <td>0.135447</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Sex female male\n",
"Pclass \n",
"1 0.968085 0.368852\n",
"2 0.921053 0.157407\n",
"3 0.500000 0.135447"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_table(index='Pclass', columns='Sex', \n",
" values='Survived', aggfunc='mean')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"clear_cell": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x7f5ce69cbfd0>"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAF4BJREFUeJzt3X2UFfWd5/H3F1DRhchE2AzaOHRGVCSIBpSYhxF1DT4k\nYzYZRzPG+JAZFo1PZ2KMiZqYKFl3wnomPiKZGOKsxhOjRuKwajQoJqJACyioKFGibciKsBLBGGn9\n7h/3WnttoPsCXX2heb/OuYdbVb9b9b3ec/pj/X5Vv4rMRJIkgF6NLkCStPUwFCRJBUNBklQwFCRJ\nBUNBklQwFCRJBUNBklQwFCRJBUNBklToU9aOI+JG4FPAK5n5oQ1sD+D7wDHAG8Cpmfl4Z/sdOHBg\nDh06tIurlaSeraWl5dXMHNRZu9JCAZgGXAPctJHtRwPDqq+xwPXVfzs0dOhQ5s2b10UlStL2ISJ+\nV0+70rqPMnMWsKqDJscBN2XFo8CAiBhcVj2SpM41ckxhD+ClmuXW6jpJUoNsEwPNETEhIuZFxLwV\nK1Y0uhxJ6rHKHFPozMvAkJrlpuq69WTmVGAqwJgxY5zrWxIA69ato7W1lTfffLPRpWw1+vbtS1NT\nEzvssMNmfb6RoTAdOCsibqUywLw6M5c3sB5J25jW1lb69+/P0KFDqVzQuH3LTFauXElrayvNzc2b\ntY8yL0n9CTAOGBgRrcC3gB0AMnMKMIPK5ahLqVySelpZtUjqmd58800DoUZEsNtuu7El3eylhUJm\nfr6T7Ql8uazjS9o+GAjvtaX/PbaJgWZJUvcwFCSpDpMmTWLEiBHsv//+HHDAATz22GONLqkUjRxo\n3iYMvfA/uvV4y644tluPJ6lzs2fP5u677+bxxx9np5124tVXX+Wtt95qdFml8ExBkjqxfPlyBg4c\nyE477QTAwIED2X333WlpaeHQQw9l9OjRjB8/nuXLl9PW1sZBBx3Egw8+CMDXv/51LrroogZWv2kM\nBUnqxCc/+Uleeukl9t57b84880weeugh1q1bx9lnn83PfvYzWlpaOP3007nooovo06cP06ZN44wz\nzuD+++/nnnvu4Vvf+lajv0Ld7D6SpE7069ePlpYWHn74YWbOnMkJJ5zAxRdfzKJFizjyyCMBePvt\ntxk8uDJ924gRIzj55JP51Kc+xezZs9lxxx0bWf4mMRQkqQ69e/dm3LhxjBs3jpEjR3LttdcyYsQI\nZs+evcH2Tz75JAMGDOCVV17p5kq3jN1HktSJJUuW8NxzzxXLCxYsYPjw4axYsaIIhXXr1rF48WIA\n7rjjDlatWsWsWbM4++yzee211xpS9+bwTEGSOrFmzZrij3ufPn3Ya6+9mDp1KhMmTOCcc85h9erV\ntLW1cd555/GBD3yACy+8kAceeIAhQ4Zw1llnce655/LjH/+40V+jLoaCJHVi9OjRPPLII+utHzhw\nILNmzVpv/bPPPlu8P+ecc0qtravZfSRJKhgKkqSC3Ufq0bwjXdo0nilIkgqGgiSpYChIkgqOKUjq\nMbp6DKmeMaKrrrqK66+/ng9/+MPcfPPNXXp8gEsvvZR+/fpx/vnnd/m+N8RQkKQtcN1113H//ffT\n1NTU6FK6hN1HkrSZJk6cyPPPP8/RRx/NpEmTOP300zn44IM58MADueuuuwCYNm0an/nMZzjyyCMZ\nOnQo11xzDVdeeSUHHnggH/nIR1i1ahUAP/jBDzjooIMYNWoUn/vc53jjjTfWO95vf/tbjjrqKEaP\nHs0nPvEJnnnmmS7/ToaCJG2mKVOmsPvuuzNz5kzWrl3L4Ycfzpw5c5g5cyZf/epXWbt2LQCLFi3i\njjvuYO7cuVx00UXssssuzJ8/n0MOOYSbbroJgM9+9rPMnTuXhQsXMnz4cH74wx+ud7wJEyZw9dVX\n09LSwuTJkznzzDO7/DvZfSRJXeC+++5j+vTpTJ48GYA333yTF198EYDDDjuM/v37079/f3bddVc+\n/elPAzBy5EieeOIJoBIcF198Ma+99hpr1qxh/Pjx79n/mjVreOSRRzj++OOLdX/+85+7/HsYCpLU\nBTKT22+/nX322ec96x977LHiiW0AvXr1KpZ79epFW1sbAKeeeio///nPGTVqFNOmTSue3Paud955\nhwEDBrBgwYJSv4fdR5LUBcaPH8/VV19NZgIwf/78Tfr866+/zuDBg1m3bt0Gr2J63/veR3NzM7fd\ndhtQCaGFCxdueeHteKYgqcdo5DQjl1xyCeeddx77778/77zzDs3Nzdx99911f/6yyy5j7NixDBo0\niLFjx/L666+v1+bmm2/mjDPO4PLLL2fdunWceOKJjBo1qiu/BvFuqm0rxowZk/Pmzeu24zl3zrbN\n369ne/rppxk+fHijy9jqbOi/S0S0ZOaYzj5r95EkqWAoSJIKhoIkqWAoSJIKhoIkqWAoSJIK3qcg\nqee4dNcu3t/qrt1fjQcffJDJkydv0r0M3cEzBUlSwVCQpM20bNky9t13X0499VT23ntvTjrpJO6/\n/34+9rGPMWzYMObMmcOcOXM45JBDOPDAA/noRz/KkiVL1tvP2rVrNzjtdiOUGgoRcVRELImIpRFx\n4Qa27xoRv4iIhRGxOCJOK7MeSepqS5cu5Stf+QrPPPMMzzzzDLfccgu//vWvmTx5Mt/97nfZd999\nefjhh5k/fz7f+c53+MY3vrHePiZNmrTRabe7W2ljChHRG7gWOBJoBeZGxPTMfKqm2ZeBpzLz0xEx\nCFgSETdn5ltl1SVJXam5uZmRI0cCMGLECI444ggigpEjR7Js2TJWr17NKaecwnPPPUdEsG7duvX2\nsbFptxsxhUeZA80HA0sz83mAiLgVOA6oDYUE+kdEAP2AVUBbiTVJUpfqbFrsSy65hMMOO4w777yT\nZcuWMW7cuPX2sbFptxuhzO6jPYCXapZbq+tqXQMMB34PPAmcm5nvlFiTJHWr1atXs8celT9906ZN\n22CbLZ12uys1+pLU8cAC4HDgr4FfRsTDmfnH2kYRMQGYALDnnnt2e5GSthElXkK6uS644AJOOeUU\nLr/8co49dsOz6G7ptNtdqcxQeBkYUrPcVF1X6zTgiqzE49KIeAHYF5hT2ygzpwJToTJ1dmkVS9Im\nGDp0KIsWLSqWa88Earc9++yzxfrLL78cgHHjxhVdSTvvvDM33HBD+QXXoczuo7nAsIhojogdgROB\n6e3avAgcARARHwD2AZ4vsSZJUgdKO1PIzLaIOAu4F+gN3JiZiyNiYnX7FOAyYFpEPAkE8LXMfLWs\nmiRJHSt1TCEzZwAz2q2bUvP+98Any6xBUs+WmVQuYBTAlj5N0zuaJW2z+vbty8qVK7f4D2FPkZms\nXLmSvn37bvY+Gn31kSRttqamJlpbW1mxYkWjS9lq9O3bl6amps3+vKEgaZu1ww470Nzc3OgyehS7\njyRJBUNBklQwFCRJBUNBklQwFCRJBUNBklQwFCRJBUNBklQwFCRJBUNBklQwFCRJBUNBklQwFCRJ\nBUNBklQwFCRJBUNBklQwFCRJBUNBklQwFCRJBUNBklQwFCRJBUNBklQwFCRJhU5DISKaIuLOiFgR\nEa9ExO0R0dQdxUmSulc9Zwo/AqYDg4HdgV9U10mSeph6QmFQZv4oM9uqr2nAoJLrkiQ1QD2hsDIi\nvhARvauvLwAryy5MktT96gmF04G/B/4ALAf+DjitzKIkSY3Rp7MGmfk74G+7oRZJUoNtNBQi4oLM\n/JeIuBrI9tsz85xSK5MkdbuOzhServ47rzsKkSQ13kZDITN/UX37RmbeVrstIo6vZ+cRcRTwfaA3\n8G+ZecUG2owD/hXYAXg1Mw+tr3RJUlerZ6D563Wue4+I6A1cCxwN7Ad8PiL2a9dmAHAd8LeZOQKo\nK2wkSeXoaEzhaOAYYI+IuKpm0/uAtjr2fTCwNDOfr+7vVuA44KmaNv8A3JGZLwJk5iubVr4kqSt1\ndKbweyrjCW8CLTWv6cD4Ova9B/BSzXJrdV2tvYG/iIgHI6IlIr64oR1FxISImBcR81asWFHHoSVJ\nm6OjMYWFwMKIuCUz15V4/NHAEcDOwOyIeDQzn21Xy1RgKsCYMWPWuxJKktQ1Or1PARgaEf+dyrhA\n33dXZuYHO/ncy8CQmuWm6rparcDKzFwLrI2IWcAo4FkkSd2u3gnxrqcyjnAYcBPwv+r43FxgWEQ0\nR8SOwIlUup5q3QV8PCL6RMQuwFj+/6WwkqRuVk8o7JyZDwCRmb/LzEuBYzv7UGa2AWcB91L5Q//T\nzFwcERMjYmK1zdPAPcATwBwql60u2ryvIknaUvV0H/05InoBz0XEWVS6gPrVs/PMnAHMaLduSrvl\n7wHfq69cSVKZ6jlTOBfYBTiHyqDwF4BTyixKktQYHZ4pVG9AOyEzzwfW4OyoktSjdXimkJlvAx/v\nplokSQ1Wz5jC/IiYDtwGrH13ZWbeUVpVkqSGqCcU+lJ50trhNesSMBQkqYep5yE7jiNI0nainquP\nJEnbCUNBklQwFCRJhY6ep/DPHX0wM6/s+nIkSY3U0UBz/26rQpK0VejoeQrf7s5CJEmN1+klqRHR\nF/gSMIL3Pk/h9BLrkiQ1QD0Dzf8O/CWVR3A+ROVhOa+XWZQkqTHqCYW9MvMSYG1m/pjKsxTGlluW\nJKkR6gmFd5/P/FpEfAjYFfjP5ZUkSWqUeuY+mhoRfwFcQuVxmv2q7yWpNEMv/I9uPd6yKzp9oOR2\noZ5Q+FF1Cu2HgA+WXI8kqYHq6T56ISKmRsQRERGlVyRJaph6QmFf4H7gy8CyiLgmInzwjiT1QJ2G\nQma+kZk/zczPAgcA76PSlSRJ6mHqmhAvIg6NiOuAFio3sP19qVVJkhqinjualwHzgZ8CX83MtR1/\nQpK0rarn6qP9M/OPpVciSWq4jqbOviAz/wWYFBHZfntmnlNqZZKkbtfRmcLT1X/ndUchkqTG62jq\n7F9U3z6ZmY93Uz2SpAaq5+qj/xkRT0fEZdW5jyRJPVQ99ykcBhwGrABuiIgnI+Li0iuTJHW7uu5T\nyMw/ZOZVwERgAfDNUquSJDVEp6EQEcMj4tKIeBK4GniEyoN2JEk9TD33KdwI3AqMz8zfl1yPJKmB\nOgyFiOgNvJCZ3++meiRJDdRh91H1OQpDImLHbqpHktRAdT1PAfhNRFwSEf/87quenUfEURGxJCKW\nRsSFHbQ7KCLaIuLv6i1cktT16hlT+G311QvoX++Oq11P1wJHAq3A3IiYnplPbaDd/wDuq3ffkqRy\ndBoKmfntzdz3wcDSzHweICJuBY4DnmrX7mzgduCgzTyOJKmL1DN19kxgQxPiHd7JR/cAXqpZbgXG\nttv3HsB/pXJz3EZDISImABMA9txzz85KliRtpnq6j86ved8X+BzQ1kXH/1fga5n5TkePf87MqcBU\ngDFjxqwXUJKkrlFP91FLu1W/iYg5dez7ZWBIzXJTdV2tMcCt1UAYCBwTEW2Z+fM69i9J6mL1dB+9\nv2axFzAa2LWOfc8FhkVEM5UwOBH4h9oGmdlcc5xpwN0GgiQ1Tj3dRy1UxhSCSrfRC8CXOvtQZrZF\nxFnAvUBv4MbMXBwRE6vbp2x21ZKkUtTTfdTcWZsOPjsDmNFu3QbDIDNP3dzjSJK6xkZvXqveUPaX\nNctfjIi7IuKqdl1KkqQeoqMzhRuA/wIQEX8DXEHlnoIDqFwJ5N3HZbi0nuGarjze6u49nqStWkeh\n0DszV1XfnwBMzczbgdsjYkH5pUmSultHcx/1joh3Q+MI4Fc12+oZoJYkbWM6+uP+E+ChiHgV+BPw\nMEBE7AXY5yBJPdBGQyEzJ0XEA8Bg4L7MfPdO4l5UxhYkST1Mh91AmfnoBtY9W145kqRGqud5CpKk\n7YShIEkqGAqSpIKhIEkqGAqSpIKhIEkqGAqSpIKhIEkqGAqSpIKhIEkqGAqSpIKhIEkqGAqSpIKh\nIEkqGAqSpIKhIEkqGAqSpIKhIEkqGAqSpIKhIEkqGAqSpIKhIEkqGAqSpIKhIEkqGAqSpIKhIEkq\nlBoKEXFURCyJiKURceEGtp8UEU9ExJMR8UhEjCqzHklSx0oLhYjoDVwLHA3sB3w+IvZr1+wF4NDM\nHAlcBkwtqx5JUufKPFM4GFiamc9n5lvArcBxtQ0y85HM/L/VxUeBphLrkSR1osxQ2AN4qWa5tbpu\nY74E/O8S65EkdaJPowsAiIjDqITCxzeyfQIwAWDPPffsxsokaftS5pnCy8CQmuWm6rr3iIj9gX8D\njsvMlRvaUWZOzcwxmTlm0KBBpRQrSSo3FOYCwyKiOSJ2BE4Eptc2iIg9gTuAkzPz2RJrkSTVobTu\no8xsi4izgHuB3sCNmbk4IiZWt08BvgnsBlwXEQBtmTmmrJokSR0rdUwhM2cAM9qtm1Lz/h+Bfyyz\nBklS/byjWZJUMBQkSQVDQZJUMBQkSYWt4uY1qce4dNduPt7q7j2eejzPFCRJBUNBklQwFCRJBUNB\nklRwoFmSwIsEqjxTkCQVDAVJUsFQkCQVDAVJUsFQkCQVDAVJUsFQkCQVDAVJUsFQkCQVDAVJUsFQ\nkCQVDAVJUsFQkCQVDAVJUsFQkCQVDAVJUsFQkCQVDAVJUsFQkCQVDAVJUsFQkCQVDAVJUsFQkCQV\nDAVJUqHUUIiIoyJiSUQsjYgLN7A9IuKq6vYnIuLDZdYjSepYaaEQEb2Ba4Gjgf2Az0fEfu2aHQ0M\nq74mANeXVY8kqXNlnikcDCzNzOcz8y3gVuC4dm2OA27KikeBARExuMSaJEkdKDMU9gBeqllura7b\n1DaSpG7Sp9EF1CMiJlDpXgJYExFLGllPmQIGAq922wG/Hd12qO2Bv9+2azv47f6qnkZlhsLLwJCa\n5abquk1tQ2ZOBaZ2dYFbo4iYl5ljGl2HNo+/37bL366izO6jucCwiGiOiB2BE4Hp7dpMB75YvQrp\nI8DqzFxeYk2SpA6UdqaQmW0RcRZwL9AbuDEzF0fExOr2KcAM4BhgKfAGcFpZ9UiSOheZ2egaVCMi\nJlS7y7QN8vfbdvnbVRgKkqSC01xIkgqGwlYiIm6MiFciYlGja9GmiYghETEzIp6KiMURcW6ja1L9\nIqJvRMyJiIXV3+/bja6pkew+2kpExN8Aa6jc4f2hRtej+lXvwh+cmY9HRH+gBfhMZj7V4NJUh4gI\n4D9l5pqI2AH4NXBudZaF7Y5nCluJzJwFrGp0Hdp0mbk8Mx+vvn8deBrvzN9mVKfZWVNd3KH62m7/\nb9lQkLpQRAwFDgQea2wl2hQR0TsiFgCvAL/MzO329zMUpC4SEf2A24HzMvOPja5H9cvMtzPzACqz\nKhwcEdttF66hIHWBal/07cDNmXlHo+vR5snM14CZwFGNrqVRDAVpC1UHKn8IPJ2ZVza6Hm2aiBgU\nEQOq73cGjgSeaWxVjWMobCUi4ifAbGCfiGiNiC81uibV7WPAycDhEbGg+jqm0UWpboOBmRHxBJU5\n236ZmXc3uKaG8ZJUSVLBMwVJUsFQkCQVDAVJUsFQkCQVDAVJUsFQkNqJiLerl5UuiojbImKXDtpe\nGhHnd2d9UpkMBWl9f8rMA6qz1b4FTGx0QVJ3MRSkjj0M7AUQEV+MiCeq8+7/e/uGEfFPETG3uv32\nd88wIuL46lnHwoiYVV03ojqH/4LqPod167eSNsKb16R2ImJNZvaLiD5U5jO6B5gF3Al8NDNfjYj3\nZ+aqiLgUWJOZkyNit8xcWd3H5cD/ycyrI+JJ4KjMfDkiBmTmaxFxNfBoZt4cETsCvTPzTw35wlIN\nzxSk9e1cnUZ5HvAilXmNDgduy8xXATJzQ8+++FBEPFwNgZOAEdX1vwGmRcQ/Ab2r62YD34iIrwF/\nZSBoa9Gn0QVIW6E/VadRLlTmvOvUNCpPXFsYEacC4wAyc2JEjAWOBVoiYnRm3hIRj1XXzYiI/5aZ\nv+rC7yBtFs8UpPr8Cjg+InYDiIj3b6BNf2B5dRrtk95dGRF/nZmPZeY3gRXAkIj4IPB8Zl4F3AXs\nX/o3kOrgmYJUh8xcHBGTgIci4m1gPnBqu2aXUHni2orqv/2r679XHUgO4AFgIfA14OSIWAf8Afhu\n6V9CqoMDzZKkgt1HkqSCoSBJKhgKkqSCoSBJKhgKkqSCoSBJKhgKkqSCoSBJKvw/1lDRQ+p43wQA\nAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5ce6a0fa58>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax1 = plt.subplots()\n",
"df.pivot_table(index='Pclass', columns='Sex', \n",
" values='Survived', aggfunc='mean').plot(kind='bar', \n",
" rot=0, \n",
" ax=ax1)\n",
"ax1.set_ylabel('Survival ratio')"
]
},
{
"cell_type": "markdown",
"metadata": {
"clear_cell": false
},
"source": [
"<div class=\"alert alert-success\">\n",
"\n",
"<b>EXERCISE</b>:\n",
"\n",
" <ul>\n",
" <li>Make a table of the median Fare payed by aged/underaged vs Sex.</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"clear_cell": true,
"collapsed": true
},
"outputs": [],
"source": [
"df['Underaged'] = df['Age'] <= 18"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"clear_cell": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Sex</th>\n",
" <th>female</th>\n",
" <th>male</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Underaged</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>False</th>\n",
" <td>46.612196</td>\n",
" <td>25.118081</td>\n",
" </tr>\n",
" <tr>\n",
" <th>True</th>\n",
" <td>36.765626</td>\n",
" <td>28.416023</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Sex female male\n",
"Underaged \n",
"False 46.612196 25.118081\n",
"True 36.765626 28.416023"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_table(index='Underaged', columns='Sex', \n",
" values='Fare', aggfunc='mean')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Melt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `melt` function performs the inverse operation of a `pivot`. This can be used to make your frame longer, i.e. to make a *tidy* version of your data."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pivoted = df.pivot_table(index='Sex', columns='Pclass', values='Fare').reset_index()\n",
"pivoted.columns.name = None"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Sex</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>female</td>\n",
" <td>106.125798</td>\n",
" <td>21.970121</td>\n",
" <td>16.118810</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>male</td>\n",
" <td>67.226127</td>\n",
" <td>19.741782</td>\n",
" <td>12.661633</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sex 1 2 3\n",
"0 female 106.125798 21.970121 16.118810\n",
"1 male 67.226127 19.741782 12.661633"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pivoted"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Assume we have a DataFrame like the above. The observations (the average Fare people payed) are spread over different columns. In a tidy dataset, each observation is stored in one row. To obtain this, we can use the `melt` function:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>variable</th>\n",
" <th>value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Sex</td>\n",
" <td>female</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Sex</td>\n",
" <td>male</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>106.126</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>67.2261</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2</td>\n",
" <td>21.9701</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2</td>\n",
" <td>19.7418</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>3</td>\n",
" <td>16.1188</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>3</td>\n",
" <td>12.6616</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" variable value\n",
"0 Sex female\n",
"1 Sex male\n",
"2 1 106.126\n",
"3 1 67.2261\n",
"4 2 21.9701\n",
"5 2 19.7418\n",
"6 3 16.1188\n",
"7 3 12.6616"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.melt(pivoted)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As you can see above, the `melt` function puts all column labels in one column, and all values in a second column.\n",
"\n",
"In this case, this is not fully what we want. We would like to keep the 'Sex' column separately:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Sex</th>\n",
" <th>variable</th>\n",
" <th>value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>106.125798</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" <td>67.226127</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>female</td>\n",
" <td>2</td>\n",
" <td>21.970121</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>male</td>\n",
" <td>2</td>\n",
" <td>19.741782</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>female</td>\n",
" <td>3</td>\n",
" <td>16.118810</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>male</td>\n",
" <td>3</td>\n",
" <td>12.661633</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sex variable value\n",
"0 female 1 106.125798\n",
"1 male 1 67.226127\n",
"2 female 2 21.970121\n",
"3 male 2 19.741782\n",
"4 female 3 16.118810\n",
"5 male 3 12.661633"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.melt(pivoted, id_vars=['Sex']) #, var_name='Pclass', value_name='Fare')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Reshaping with `stack` and `unstack`"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"The docs say:\n",
"\n",
"> Pivot a level of the (possibly hierarchical) column labels, returning a\n",
"DataFrame (or Series in the case of an object with a single level of\n",
"column labels) having a hierarchical index with a new inner-most level\n",
"of row labels.\n",
"\n",
"Indeed... \n",
"<img src=\"img/schema-stack.svg\" width=50%>\n",
"\n",
"Before we speak about `hierarchical index`, first check it in practice on the following dummy example:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
},
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>one</td>\n",
" <td>a</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>one</td>\n",
" <td>b</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>two</td>\n",
" <td>a</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>two</td>\n",
" <td>b</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C\n",
"0 one a 0\n",
"1 one b 1\n",
"2 two a 2\n",
"3 two b 3"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame({'A':['one', 'one', 'two', 'two'], \n",
" 'B':['a', 'b', 'a', 'b'], \n",
" 'C':range(4)})\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To use `stack`/`unstack`, we need the values we want to shift from rows to columns or the other way around as the index:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>C</th>\n",
" </tr>\n",
" <tr>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">one</th>\n",
" <th>a</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>b</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">two</th>\n",
" <th>a</th>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>b</th>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" C\n",
"A B \n",
"one a 0\n",
" b 1\n",
"two a 2\n",
" b 3"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = df.set_index(['A', 'B']) # Indeed, you can combine two indices\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
},
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>B</th>\n",
" <th>a</th>\n",
" <th>b</th>\n",
" </tr>\n",
" <tr>\n",
" <th>A</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>one</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>two</th>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"B a b\n",
"A \n",
"one 0 1\n",
"two 2 3"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result = df['C'].unstack()\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>one</td>\n",
" <td>a</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>one</td>\n",
" <td>b</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>two</td>\n",
" <td>a</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>two</td>\n",
" <td>b</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C\n",
"0 one a 0\n",
"1 one b 1\n",
"2 two a 2\n",
"3 two b 3"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = result.stack().reset_index(name='C')\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"source": [
"<div class=\"alert alert-info\">\n",
"\n",
"<b>REMEMBER</b>:\n",
"\n",
" <ul>\n",
" <li>**stack**: make your data *longer* and *smaller* </li>\n",
" <li>**unstack**: make your data *shorter* and *wider* </li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Mimick pivot table "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To better understand and reason about pivot tables, we can express this method as a combination of more basic steps. In short, the pivot is a convenient way of expressing the combination of a `groupby` and `stack/unstack`."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [],
"source": [
"df = pd.read_csv(\"data/titanic.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>male</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>female</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>female</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>female</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>male</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris male 22.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"2 Heikkinen, Miss. Laina female 26.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
"4 Allen, Mr. William Henry male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"0 0 A/5 21171 7.2500 NaN S \n",
"1 0 PC 17599 71.2833 C85 C \n",
"2 0 STON/O2. 3101282 7.9250 NaN S \n",
"3 0 113803 53.1000 C123 S \n",
"4 0 373450 8.0500 NaN S "
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Sex</th>\n",
" <th>female</th>\n",
" <th>male</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.968085</td>\n",
" <td>0.368852</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.921053</td>\n",
" <td>0.157407</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.500000</td>\n",
" <td>0.135447</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Sex female male\n",
"Pclass \n",
"1 0.968085 0.368852\n",
"2 0.921053 0.157407\n",
"3 0.500000 0.135447"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_table(index='Pclass', columns='Sex', \n",
" values='Survived', aggfunc='mean')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-success\">\n",
"\n",
"<b>EXERCISE</b>:\n",
"\n",
" <ul>\n",
" <li>Get the same result as above based on a combination of `groupby` and `unstack`</li>\n",
" <li>First use `groupby` to calculate the survival ratio for all groups</li>\n",
" <li>Then, use `unstack` to reshape the output of the groupby operation</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"clear_cell": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Sex</th>\n",
" <th>female</th>\n",
" <th>male</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.968085</td>\n",
" <td>0.368852</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.921053</td>\n",
" <td>0.157407</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.500000</td>\n",
" <td>0.135447</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Sex female male\n",
"Pclass \n",
"1 0.968085 0.368852\n",
"2 0.921053 0.157407\n",
"3 0.500000 0.135447"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby(['Pclass', 'Sex'])['Survived'].mean().unstack()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Mimick melt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Like the pivot table above, we can now also obtain the result of `melt` with stack/unstack.\n",
"\n",
"Let's use the same `pivoted` frame as above, and look at the final melt result:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Sex</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>female</td>\n",
" <td>106.125798</td>\n",
" <td>21.970121</td>\n",
" <td>16.118810</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>male</td>\n",
" <td>67.226127</td>\n",
" <td>19.741782</td>\n",
" <td>12.661633</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sex 1 2 3\n",
"0 female 106.125798 21.970121 16.118810\n",
"1 male 67.226127 19.741782 12.661633"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pivoted = df.pivot_table(index='Sex', columns='Pclass', values='Fare').reset_index()\n",
"pivoted.columns.name = None\n",
"pivoted"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Sex</th>\n",
" <th>Pclass</th>\n",
" <th>Fare</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>106.125798</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" <td>67.226127</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>female</td>\n",
" <td>2</td>\n",
" <td>21.970121</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>male</td>\n",
" <td>2</td>\n",
" <td>19.741782</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>female</td>\n",
" <td>3</td>\n",
" <td>16.118810</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>male</td>\n",
" <td>3</td>\n",
" <td>12.661633</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sex Pclass Fare\n",
"0 female 1 106.125798\n",
"1 male 1 67.226127\n",
"2 female 2 21.970121\n",
"3 male 2 19.741782\n",
"4 female 3 16.118810\n",
"5 male 3 12.661633"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.melt(pivoted, id_vars=['Sex'], var_name='Pclass', value_name='Fare')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-success\">\n",
"\n",
"<b>EXERCISE</b>:\n",
"\n",
" <ul>\n",
" <li>Get the same result as above using `stack`/`unstack` (combined with `set_index` / `reset_index`)</li>\n",
" <li>Tip: set those columns as the index that you do not want to stack</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"clear_cell": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>female</th>\n",
" <td>106.125798</td>\n",
" <td>21.970121</td>\n",
" <td>16.118810</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>67.226127</td>\n",
" <td>19.741782</td>\n",
" <td>12.661633</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 1 2 3\n",
"Sex \n",
"female 106.125798 21.970121 16.118810\n",
"male 67.226127 19.741782 12.661633"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temp = pivoted.set_index('Sex')\n",
"temp"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"clear_cell": true
},
"outputs": [
{
"data": {
"text/plain": [
"Sex Pclass\n",
"female 1 106.125798\n",
" 2 21.970121\n",
" 3 16.118810\n",
"male 1 67.226127\n",
" 2 19.741782\n",
" 3 12.661633\n",
"dtype: float64"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temp.columns.name = 'Pclass'\n",
"temp = temp.stack()\n",
"temp"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"clear_cell": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Sex</th>\n",
" <th>Pclass</th>\n",
" <th>Fare</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>106.125798</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>female</td>\n",
" <td>2</td>\n",
" <td>21.970121</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>female</td>\n",
" <td>3</td>\n",
" <td>16.118810</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" <td>67.226127</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>male</td>\n",
" <td>2</td>\n",
" <td>19.741782</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>male</td>\n",
" <td>3</td>\n",
" <td>12.661633</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sex Pclass Fare\n",
"0 female 1 106.125798\n",
"1 female 2 21.970121\n",
"2 female 3 16.118810\n",
"3 male 1 67.226127\n",
"4 male 2 19.741782\n",
"5 male 3 12.661633"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temp.reset_index(name='Fare')"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"clear_cell": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Sex</th>\n",
" <th>Pclass</th>\n",
" <th>Fare</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>106.125798</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>female</td>\n",
" <td>2</td>\n",
" <td>21.970121</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>female</td>\n",
" <td>3</td>\n",
" <td>16.118810</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" <td>67.226127</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>male</td>\n",
" <td>2</td>\n",
" <td>19.741782</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>male</td>\n",
" <td>3</td>\n",
" <td>12.661633</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sex Pclass Fare\n",
"0 female 1 106.125798\n",
"1 female 2 21.970121\n",
"2 female 3 16.118810\n",
"3 male 1 67.226127\n",
"4 male 2 19.741782\n",
"5 male 3 12.661633"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# alternative: rename columns at the end\n",
"temp = pivoted.set_index('Sex').stack().reset_index()\n",
"temp.rename(columns={'level_1': 'Pclass', 0: 'Fare'})"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Exercises: use the reshaping methods with the movie data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These exercises are based on the [PyCon tutorial of Brandon Rhodes](https://github.com/brandon-rhodes/pycon-pandas-tutorial/) (so credit to him!) and the datasets he prepared for that. You can download these data from here: [`titles.csv`](https://drive.google.com/open?id=0B3G70MlBnCgKajNMa1pfSzN6Q3M) and [`cast.csv`](https://drive.google.com/open?id=0B3G70MlBnCgKal9UYTJSR2ZhSW8) and put them in the `/data` folder."
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>title</th>\n",
" <th>year</th>\n",
" <th>name</th>\n",
" <th>type</th>\n",
" <th>character</th>\n",
" <th>n</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Suuri illusioni</td>\n",
" <td>1985</td>\n",
" <td>Homo $</td>\n",
" <td>actor</td>\n",
" <td>Guests</td>\n",
" <td>22.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Gangsta Rap: The Glockumentary</td>\n",
" <td>2007</td>\n",
" <td>Too $hort</td>\n",
" <td>actor</td>\n",
" <td>Himself</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Menace II Society</td>\n",
" <td>1993</td>\n",
" <td>Too $hort</td>\n",
" <td>actor</td>\n",
" <td>Lew-Loc</td>\n",
" <td>27.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Porndogs: The Adventures of Sadie</td>\n",
" <td>2009</td>\n",
" <td>Too $hort</td>\n",
" <td>actor</td>\n",
" <td>Bosco</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Stop Pepper Palmer</td>\n",
" <td>2014</td>\n",
" <td>Too $hort</td>\n",
" <td>actor</td>\n",
" <td>Himself</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" title year name type character n\n",
"0 Suuri illusioni 1985 Homo $ actor Guests 22.0\n",
"1 Gangsta Rap: The Glockumentary 2007 Too $hort actor Himself NaN\n",
"2 Menace II Society 1993 Too $hort actor Lew-Loc 27.0\n",
"3 Porndogs: The Adventures of Sadie 2009 Too $hort actor Bosco 3.0\n",
"4 Stop Pepper Palmer 2014 Too $hort actor Himself NaN"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cast = pd.read_csv('data/cast.csv')\n",
"cast.head()"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>title</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>The Rising Son</td>\n",
" <td>1990</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Ashes of Kukulcan</td>\n",
" <td>2016</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>The Thousand Plane Raid</td>\n",
" <td>1969</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Crucea de piatra</td>\n",
" <td>1993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>The 86</td>\n",
" <td>2015</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" title year\n",
"0 The Rising Son 1990\n",
"1 Ashes of Kukulcan 2016\n",
"2 The Thousand Plane Raid 1969\n",
"3 Crucea de piatra 1993\n",
"4 The 86 2015"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"titles = pd.read_csv('data/titles.csv')\n",
"titles.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-success\">\n",
"\n",
"<b>EXERCISE</b>:\n",
"\n",
" <ul>\n",
" <li>Plot the number of actor roles each year and the number of actress roles each year over the whole period of available movie data.</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"clear_cell": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f5cc8f9e320>"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5cdd8d70b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"grouped = cast.groupby(['year', 'type']).size()\n",
"table = grouped.unstack('type')\n",
"table.plot()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"clear_cell": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f5cdd862278>"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5cdd8df470>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cast.pivot_table(index='year', columns='type', values=\"character\", aggfunc='count').plot() \n",
"# for values in using the , take a column with no Nan values in order to count effectively all values -> at this stage: aha-erlebnis about crosstab function(!)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"clear_cell": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f5cdd7c5978>"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5cdd7d00b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pd.crosstab(index=cast['year'], columns=cast['type']).plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-success\">\n",
"\n",
"<b>EXERCISE</b>:\n",
"\n",
" <ul>\n",
" <li>Plot the number of actor roles each year and the number of actress roles each year. Use kind='area' as plot type</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"clear_cell": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f5ce695c978>"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n3AAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5cdd8cda58>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pd.crosstab(index=cast['year'], columns=cast['type']).plot(kind='area')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-success\">\n",
"\n",
"<b>EXERCISE</b>:\n",
"\n",
" <ul>\n",
" <li>Plot the fraction of roles that have been 'actor' roles each year over the whole period of available movie data.</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"clear_cell": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f5cdd78b3c8>"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5cdd70a320>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"grouped = cast.groupby(['year', 'type']).size()\n",
"table = grouped.unstack('type')\n",
"(table['actor'] / (table['actor'] + table['actress'])).plot(ylim=[0,1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-success\">\n",
"\n",
"<b>EXERCISE</b>:\n",
"\n",
" <ul>\n",
" <li>Define a year as a \"Superman year\" when films of that year feature more Superman characters than Batman characters. How many years in film history have been Superman years?</li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"clear_cell": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>character</th>\n",
" <th>Batman</th>\n",
" <th>Superman</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1938</th>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1940</th>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1943</th>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1948</th>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1949</th>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"character Batman Superman\n",
"year \n",
"1938 1.0 0.0\n",
"1940 1.0 0.0\n",
"1943 1.0 0.0\n",
"1948 0.0 1.0\n",
"1949 2.0 0.0"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sel = cast[(cast.character == 'Superman') | (cast.character == 'Batman')]\n",
"sel = sel.groupby(['year', 'character']).size()\n",
"sel = sel.unstack()\n",
"sel = sel.fillna(0)\n",
"sel.head()"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"clear_cell": true,
"run_control": {
"frozen": false,
"read_only": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Superman years:\n",
"12\n"
]
}
],
"source": [
"d = sel['Superman'] - sel['Batman']\n",
"print('Superman years:')\n",
"print(len(d[d > 0.0]))"
]
}
],
"metadata": {
"celltoolbar": "Nbtutor - export exercises",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
},
"nav_menu": {},
"toc": {
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 6,
"toc_cell": false,
"toc_section_display": "block",
"toc_window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 1
}