Skip to content

Instantly share code, notes, and snippets.

@yhilpisch
Last active May 9, 2020 13:02
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save yhilpisch/2561a238e9d78744207a05ab1d110e18 to your computer and use it in GitHub Desktop.
Save yhilpisch/2561a238e9d78744207a05ab1d110e18 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img src='http://hilpisch.com/tpq_logo.png' width=\"300px\" align=\"right\">"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# FPQ Bootcamp &mdash; Day 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Data Science**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Working with pandas"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Reading the Data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"data = pd.read_csv('Titanic.csv', index_col=0)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# data retrieval from remote source by providing URL\n",
"# data = pd.read_csv('http://hilpisch.com/Titanic.csv', index_col=0)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Class</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Survived</th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1st</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2nd</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3rd</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Crew</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1st</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2nd</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>3rd</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Crew</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1st</td>\n",
" <td>Male</td>\n",
" <td>Adult</td>\n",
" <td>No</td>\n",
" <td>118</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>2nd</td>\n",
" <td>Male</td>\n",
" <td>Adult</td>\n",
" <td>No</td>\n",
" <td>154</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>3rd</td>\n",
" <td>Male</td>\n",
" <td>Adult</td>\n",
" <td>No</td>\n",
" <td>387</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Crew</td>\n",
" <td>Male</td>\n",
" <td>Adult</td>\n",
" <td>No</td>\n",
" <td>670</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>1st</td>\n",
" <td>Female</td>\n",
" <td>Adult</td>\n",
" <td>No</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2nd</td>\n",
" <td>Female</td>\n",
" <td>Adult</td>\n",
" <td>No</td>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>3rd</td>\n",
" <td>Female</td>\n",
" <td>Adult</td>\n",
" <td>No</td>\n",
" <td>89</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>Crew</td>\n",
" <td>Female</td>\n",
" <td>Adult</td>\n",
" <td>No</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>1st</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>Yes</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>2nd</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>Yes</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>3rd</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>Yes</td>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>Crew</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>Yes</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>1st</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>Yes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>2nd</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>Yes</td>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>3rd</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>Yes</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>Crew</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>Yes</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>1st</td>\n",
" <td>Male</td>\n",
" <td>Adult</td>\n",
" <td>Yes</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>2nd</td>\n",
" <td>Male</td>\n",
" <td>Adult</td>\n",
" <td>Yes</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>3rd</td>\n",
" <td>Male</td>\n",
" <td>Adult</td>\n",
" <td>Yes</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>Crew</td>\n",
" <td>Male</td>\n",
" <td>Adult</td>\n",
" <td>Yes</td>\n",
" <td>192</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>1st</td>\n",
" <td>Female</td>\n",
" <td>Adult</td>\n",
" <td>Yes</td>\n",
" <td>140</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>2nd</td>\n",
" <td>Female</td>\n",
" <td>Adult</td>\n",
" <td>Yes</td>\n",
" <td>80</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>3rd</td>\n",
" <td>Female</td>\n",
" <td>Adult</td>\n",
" <td>Yes</td>\n",
" <td>76</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>Crew</td>\n",
" <td>Female</td>\n",
" <td>Adult</td>\n",
" <td>Yes</td>\n",
" <td>20</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Class Sex Age Survived Freq\n",
"1 1st Male Child No 0\n",
"2 2nd Male Child No 0\n",
"3 3rd Male Child No 35\n",
"4 Crew Male Child No 0\n",
"5 1st Female Child No 0\n",
"6 2nd Female Child No 0\n",
"7 3rd Female Child No 17\n",
"8 Crew Female Child No 0\n",
"9 1st Male Adult No 118\n",
"10 2nd Male Adult No 154\n",
"11 3rd Male Adult No 387\n",
"12 Crew Male Adult No 670\n",
"13 1st Female Adult No 4\n",
"14 2nd Female Adult No 13\n",
"15 3rd Female Adult No 89\n",
"16 Crew Female Adult No 3\n",
"17 1st Male Child Yes 5\n",
"18 2nd Male Child Yes 11\n",
"19 3rd Male Child Yes 13\n",
"20 Crew Male Child Yes 0\n",
"21 1st Female Child Yes 1\n",
"22 2nd Female Child Yes 13\n",
"23 3rd Female Child Yes 14\n",
"24 Crew Female Child Yes 0\n",
"25 1st Male Adult Yes 57\n",
"26 2nd Male Adult Yes 14\n",
"27 3rd Male Adult Yes 75\n",
"28 Crew Male Adult Yes 192\n",
"29 1st Female Adult Yes 140\n",
"30 2nd Female Adult Yes 80\n",
"31 3rd Female Adult Yes 76\n",
"32 Crew Female Adult Yes 20"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"pandas.core.frame.DataFrame"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(data)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Int64Index: 32 entries, 1 to 32\n",
"Data columns (total 5 columns):\n",
"Class 32 non-null object\n",
"Sex 32 non-null object\n",
"Age 32 non-null object\n",
"Survived 32 non-null object\n",
"Freq 32 non-null int64\n",
"dtypes: int64(1), object(4)\n",
"memory usage: 1.5+ KB\n"
]
}
],
"source": [
"data.info()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Class</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Survived</th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1st</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2nd</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3rd</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Crew</td>\n",
" <td>Male</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1st</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Class Sex Age Survived Freq\n",
"1 1st Male Child No 0\n",
"2 2nd Male Child No 0\n",
"3 3rd Male Child No 35\n",
"4 Crew Male Child No 0\n",
"5 1st Female Child No 0"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Class</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Survived</th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>3rd</td>\n",
" <td>Female</td>\n",
" <td>Adult</td>\n",
" <td>Yes</td>\n",
" <td>76</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>Crew</td>\n",
" <td>Female</td>\n",
" <td>Adult</td>\n",
" <td>Yes</td>\n",
" <td>20</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Class Sex Age Survived Freq\n",
"31 3rd Female Adult Yes 76\n",
"32 Crew Female Adult Yes 20"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.tail(2)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2201"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['Freq'].sum()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1731"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['Freq'][data['Sex'] == 'Male'].sum()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Female</th>\n",
" <td>470</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Male</th>\n",
" <td>1731</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Freq\n",
"Sex \n",
"Female 470\n",
"Male 1731"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.groupby('Sex').sum()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <th>Survived</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Female</th>\n",
" <th>No</th>\n",
" <td>126</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>344</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Male</th>\n",
" <th>No</th>\n",
" <td>1364</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>367</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Freq\n",
"Sex Survived \n",
"Female No 126\n",
" Yes 344\n",
"Male No 1364\n",
" Yes 367"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.groupby(['Sex', 'Survived']).sum()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Class</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Survived</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"8\" valign=\"top\">1st</th>\n",
" <th rowspan=\"4\" valign=\"top\">Female</th>\n",
" <th rowspan=\"2\" valign=\"top\">Adult</th>\n",
" <th>No</th>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>140</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Child</th>\n",
" <th>No</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"4\" valign=\"top\">Male</th>\n",
" <th rowspan=\"2\" valign=\"top\">Adult</th>\n",
" <th>No</th>\n",
" <td>118</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Child</th>\n",
" <th>No</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"8\" valign=\"top\">2nd</th>\n",
" <th rowspan=\"4\" valign=\"top\">Female</th>\n",
" <th rowspan=\"2\" valign=\"top\">Adult</th>\n",
" <th>No</th>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>80</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Child</th>\n",
" <th>No</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"4\" valign=\"top\">Male</th>\n",
" <th rowspan=\"2\" valign=\"top\">Adult</th>\n",
" <th>No</th>\n",
" <td>154</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Child</th>\n",
" <th>No</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"8\" valign=\"top\">3rd</th>\n",
" <th rowspan=\"4\" valign=\"top\">Female</th>\n",
" <th rowspan=\"2\" valign=\"top\">Adult</th>\n",
" <th>No</th>\n",
" <td>89</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>76</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Child</th>\n",
" <th>No</th>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"4\" valign=\"top\">Male</th>\n",
" <th rowspan=\"2\" valign=\"top\">Adult</th>\n",
" <th>No</th>\n",
" <td>387</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Child</th>\n",
" <th>No</th>\n",
" <td>35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"8\" valign=\"top\">Crew</th>\n",
" <th rowspan=\"4\" valign=\"top\">Female</th>\n",
" <th rowspan=\"2\" valign=\"top\">Adult</th>\n",
" <th>No</th>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Child</th>\n",
" <th>No</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"4\" valign=\"top\">Male</th>\n",
" <th rowspan=\"2\" valign=\"top\">Adult</th>\n",
" <th>No</th>\n",
" <td>670</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>192</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Child</th>\n",
" <th>No</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Yes</th>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Freq\n",
"Class Sex Age Survived \n",
"1st Female Adult No 4\n",
" Yes 140\n",
" Child No 0\n",
" Yes 1\n",
" Male Adult No 118\n",
" Yes 57\n",
" Child No 0\n",
" Yes 5\n",
"2nd Female Adult No 13\n",
" Yes 80\n",
" Child No 0\n",
" Yes 13\n",
" Male Adult No 154\n",
" Yes 14\n",
" Child No 0\n",
" Yes 11\n",
"3rd Female Adult No 89\n",
" Yes 76\n",
" Child No 17\n",
" Yes 14\n",
" Male Adult No 387\n",
" Yes 75\n",
" Child No 35\n",
" Yes 13\n",
"Crew Female Adult No 3\n",
" Yes 20\n",
" Child No 0\n",
" Yes 0\n",
" Male Adult No 670\n",
" Yes 192\n",
" Child No 0\n",
" Yes 0"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.groupby(['Class', 'Sex', 'Age', 'Survived']).sum()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Class</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1st</th>\n",
" <td>325</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2nd</th>\n",
" <td>285</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3rd</th>\n",
" <td>706</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Crew</th>\n",
" <td>885</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Freq\n",
"Class \n",
"1st 325\n",
"2nd 285\n",
"3rd 706\n",
"Crew 885"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.groupby(['Class']).sum()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Class</th>\n",
" <th>Sex</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">1st</th>\n",
" <th>Female</th>\n",
" <td>6.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Male</th>\n",
" <td>8.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2nd</th>\n",
" <th>Female</th>\n",
" <td>4.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Male</th>\n",
" <td>8.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">3rd</th>\n",
" <th>Female</th>\n",
" <td>8.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Male</th>\n",
" <td>23.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Crew</th>\n",
" <th>Female</th>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Male</th>\n",
" <td>39.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Freq\n",
"Class Sex \n",
"1st Female 6.6\n",
" Male 8.2\n",
"2nd Female 4.8\n",
" Male 8.1\n",
"3rd Female 8.9\n",
" Male 23.2\n",
"Crew Female 1.0\n",
" Male 39.2"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.groupby(['Class', 'Sex']).sum().apply(lambda x:\n",
" round(x / data['Freq'].sum() * 100, 1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simple Classification Problem"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from pylab import plt\n",
"plt.style.use('seaborn')\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"i = np.array((0.5, 0.75, 1, 1.5, 2.25, 3, 3.25, 3.5, 3.75, 4))"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"o = np.array((0, 0, 0, 0, 1, 0, 1, 1, 1, 1))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nAKBARAEAFIgoAIACEQUAUCCiAAAKRBQAQIGIAgAoEFEAAAUiCgCgQEQBABSIKACAAhEFAFAgogAA\nCkQUAECBiAIAKBBRAAAFIgoAoEBEAQAUiCgAgAIRBQBQIKIAAApEFABAgYgCACgQUQAABSIKAKBA\nRAEAFIgoAIACEQUAUCCiAAAKRBQAQIGIAgAoEFEAAAUiCgCgQEQBABSIKACAAhEFAFAgogAACkQU\nAECBiAIAKBBRAAAFIgoAoEBEAQAUiCgAgAIRBQBQIKIAAApEFABAgYgCACgQUQAABSIKAKBARAEA\nFIgoAICCydAdWmv7kzyc5NYk55Lc13s/OXP+h5L8nenNX+29/8vtGBQAYEwWeSXqriQHe+9Hkrw7\nyUMXT7TWviXJ30vy7UmOJHl9a+3V2zEoAMCYLBJRtyd5Mkl67yeS3DZz7veSvKH3fr73fiHJDUm+\nctWnBAAYmX3r6+tz79Ba+5kkH+u9/9r09v9O8i2997WZ++xL8lNJlnrv9897vLW18+uTyYErHhwA\nYAfs2+rE4GeikpxOsjRze/8lAXUwydEkZ5J8/9CDnTp1doGnvDIrK0tZXT2z7c+zl9nRfPYzzI7m\ns59hdjSf/QzbiR2trCxteW6Rt/OOJ3lTkrTWDid5+uKJ6StQv5zkf/Te7++9n7+yUQEA9oZFXok6\nluTO1tpT2XhJ657W2oNJTiY5kOSOJDe21t44vf97eu+f2ZZpAQBGYjCiph8Yf+CSw8/NfH3wqk4E\nALAH+GWbAAAFIgoAoEBEAQAUiCgAgAIRBQBQIKIAAApEFABAgYgCACgQUQAABSIKAKBARAEAFIgo\nAIACEQUAUCCiAAAKRBQAQIGIAgAoEFEAAAUiCgCgQEQBABSIKACAAhEFAFAgogAACkQUAECBiAIA\nKBBRAAAFIgoAoEBEAQAUiCgAgAIRBQBQIKIAAApEFABAgYgCACgQUQAABSIKAKBARAEAFIgoAIAC\nEQUAUCCiAAAKRBQAQIGIAgAoEFEAAAUiCgCgQEQBABSIKACAAhEFAFAgogAACkQUAECBiAIAKBBR\nAAAFIgoAoEBEAQAUDEZUa21/a+3DrbXPtNZ+s7X2ly85/49ba/+1tXaitfbm7Rt12I3HHs/yHUeS\nySTLdxzJjcce381x/r+ZXvzS5VHMNMYdjYn9wPbzfca1YrLAfe5KcrD3fqS1djjJQ0nemiSttZck\n+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\nRK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10b5e8710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10, 6))\n",
"plt.plot(i, o, 'ro');"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"reg = np.polyfit(i, o, deg=1)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.31695721, -0.24484945])"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"reg"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"pred = np.polyval(reg, i)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nEZE8k0rBrFnplQVffx1g551TVFVFOfHERF6vLNhSKlEiIiJ55J13AhQXF/D220G6dfO44QaXyy6L\n0a2b38myj0qUiIhIHvj6a4vaWpvf/z69suD00+OUl7vssINWFrSXSpSIiEgOi8XgrrvCTJtms3at\nxb77Jqmrcxk+XCsLtpZKlIiISI568cUgpaU2S5YE6dPHY8qUKKNHa2VBR1GJEhERyTEff2xRUVHA\n3LkhAgGPCy6Icf31Ln36+J0st6hEiYiI5Ih16+DmmyPcdluEWMzisMMS1NS47LuvVhZ0BpUoERGR\nLOd58PjjIaqrbb76KsCOO6ZXFpx0klYWdCaVKBERkSz297+nVxa89VaQggKPa691ueKKGIWFfifL\nfSpRIiIiWWjFCov6+ggPPRTG8yxOPjlOZaXLTjtpZUFXUYkSERHJIvE43HtvmClTbNassdhrryS1\ntS6HH66VBV1NJUpERCRLvPxyemWB4wTp1cujvj7KuefGCelvc19o7CIiIhnus88sKipsnn02jGV5\nnHNOjAkTYmyzjW7d+UklSkREJEOtXw8zZkS49dYIrmtxyCEJ6upc9t9fKwsygUqUiIhIhvE8eOQR\nGD++O198EWDgwBQVFVFOP10rCzKJSpSIiEgGWbgwQGmpzeuvg21bXHONy5VXxuje3e9ksjGVKBER\nkQzwzTcWkyZFePDBMKmUxamnQknJenbdVc89ZaqA3wFERETyWSIBd98dZvjw7tx/f4Q99kgxa1Yj\nTz6JClSG05UoERERn7z6apCSEptFi4IUFXlMnBjlggvihMN+J5O2UIkSERHpYp9/blFZafOHP6RX\nFvziF+mVBf3768pTNlGJEhER6SKNjfCb30T4zW8iRKMWBx2UpL4+ypAhWlmQjVSiREREOpnnwTPP\nhKiosPnXvwJsu22KadOijBqllQXZTCVKRESkE33wQYCSEpvXXgsRiXhceaXL1VfH6NHD72SytVSi\nREREOsGqVTBlis2996ZXFhx7bILq6iiDBum5p1yhEiUiItKBkkl48MEwkyZFWLkywO67p6ipaeKH\nP0z6HU06mEqUiIhIB3n99SDFxTbvvx+kRw+PysooF10UJxLxO5l0BpUoERGRrbRsmUV1tc3s2ekF\nTz/9aZySEpdtt9Wtu1ymEiUiItJO0SjMnBnhllsiNDZafO97SerqogwdqpUF+UAlSkREZAt5Hjz7\nbHplwdKlAfr3TzFpUpSf/CRBQP9DtbyhEiUiIrIFHCe9suCVV0KEQh6//GWM8eNdior8TiZdrdUS\nZYwJADOBIYALXOQ4zpJmx68FfgakgDrHcWZ3UlYRERHfrF4NU6fa3H13mGTS4uijE0yc6DJ4sG7d\n5au2XIk6DShwHGe4MWYYMA04FcAY0xu4EtgD6A68C6hEiYhIzkgm4eGHw9TVRfjmmwC77ppeWTBy\nZFLbxvNcW+7cjgDmADiOswA4qNmx9cBnpAtUd9JXo0RERHLCG28EOe64QsaPL6CpyaK01GXevPUc\ne6wKlLTtSlRPYHWz10ljTMhxnMSG158DHwBBoL61L9anTyGhUHCLg26p/v11c7o1mlHLNJ/WaUYt\n03xal6kzWrYMrr8efve79Otf/AImT7bYfnsbsLssR6bOJ5P4OaO2lKg1QPOEgWYF6gRgILDbhtdz\njTGvOY7z5ua+2KpVje0KuiX69y+ioWFtp39ONtOMWqb5tE4zapnm07pMnJHrwm23RbjppvTKgiFD\nktTWRvn+99M3Whoaui5LJs4n03TFjFoqaW25nfcacCLAhmeiFjY7tgpoAlzHcaLAt0DvdicVERHx\ngefB3LlBDj+8O7W1NoWFHtOnR5kzp/HfBUpkY225EjUbGGmMmQ9YwPnGmHHAEsdxnjbGHAMsMMak\ngFeB5zsvroiISMf65z8DlJXZvPhiiGDQY8yYGNde69Krl9/JJNO1WqIcx0kBl2709ofNjlcAFR2c\nS0REpFOtWQPTptnceWeYRMLiiCMS1Na6pK8JiLROyzZFRCSvpFLw6KMhJk60WbEiwM47p6iujnLC\nCQn9xJ1sEZUoERHJG2+/HaC4uIB33glSWOgxYYLLZZfFKCjwO5lkI5UoERHJecuXW9TU2Dz6aBiA\nM86IU17usv32ns/JJJupRImISM6KxeCOO8JMm2azfr3FvvsmqatzGT486Xc0yQEqUSIikpNeeCFI\naWkBH30UoG/fFBUVLqNHxwl2/r5nyRMqUSIiklM+/tiirKyA558PEQh4XHhhjF/9yqVPH7+TSa5R\niRIRkZywbh3cdFOE226LEI9bjBiRoKbGZZ99tLJAOodKlIiIZLVUCh57LL2yYPnyADvumKKqKspJ\nJ2llgXQulSgREcla776bXlnw178GKSjwuO46l8svj1FY6HcyyQcqUSIiknUaGizq6iI8/HAYz7M4\n5ZQ4FRUuO+2klQXSdVSiREQka8TjcPfdYaZOtVm71mLvvZPU1rqMGKGVBdL1VKJERCQr/OUvQcrK\nbBYvDtK7t0d9fZRzz40T0t9k4hOdeiIiktE+/dSivNxmzpwwgYDHeefFuP76GNtso1t34i+VKBER\nyUjr1sEtt0T47W8juK7FsGEJamtd9t9fKwskM6hEiYhIRvE8eOKJENXVNl9+GWD77VNUVkY59VSt\nLJDMohIlIiIZY+HCAMXFNm+8EcK2PcaNcxk7Nkb37n4nE/lfKlEiIuK7FSss6usjPPRQemXBiSfG\nqapy2WUXPfckmUslSkREfJNIwH33hZk82Wb1agtjktTUuPzgB1pZIJlPJUpERHzxwgtwxRWFfPhh\nkJ49PWpqopx/fpxw2O9kIm2jEiUiIl1q6VKLykqbZ54BywowenSMCRNi9OunW3eSXVSiRESkSzQ2\nwowZEW69NUI0anHooVBV1ciQIVpZINkp4HcAERHJbZ4HTz0V4rDDujNtmk3v3h4zZzbx6quoQElW\n05UoERHpNO+/H6CkxGb+/BCRiMdVV7lcdVWMHj3QzifJeipRIiLS4VauhMmTbe6/P0wqZXH88XEq\nK10GDdJzT5I7VKJERKTDJBLwwAPplQWrVlnssUd6ZcHRR2tlgeQelSgREekQ8+cHKS62+eCDID16\neFRVRbnwwjiRiN/JRDqHSpSIiGyVf/3LoqrK5qmn0guefv7zGMXFMQYM0K07yW0qUSIi0i5NTXDr\nrRFmzIjQ1GQxdGiS2tooBx6on7iT/KASJSIiW8Tz4JlnQlRW2nz+eYABA1JMmRLlzDMTBLQ4R/KI\nSpSIiLTZokUBSktt5s0LEQ57XH55jHHjXIqK/E4m0vVUokREpFXffgtTptjce2+YZNLimGMSTJwY\nZffd9dyT5C+VKBER2axkEn73uzB1dRFWrgwwaFCKiRObGDlSKwtEVKJERGSTFiwIUlJis3BhkO7d\nPcrKXC65JIZt+51MJDOoRImIyH/54guL6mqbJ55Iryw488w4ZWUu222nW3cizalEiYgIANEo3HZb\nhJtvjtDYaDFkSJK6uigHH6yVBSKbohIlIpLnPA/mzg1SVlbAZ58F6NcvRV1dlJ/+VCsLRFqiEiUi\nkscWL06vLHjppRChkMeYMTGuvdalVy+/k4lkPpUoEZE8tGYNTJ1qc/fdYRIJiyOPTFBT47Lnnrp1\nJ9JWKlEiInkklYJHHglRU2OzYkWAXXZJUV0d5fjjE1iW3+lEsotKlIhInnjrrQAlJQW8+26QwkKP\n4mKXSy+NUVDgdzKR7KQSJSKS45Yvt5g40WbWrPTKgjPOiFNe7rL99lpZILI1VKJERHKU68Idd0SY\nPj3C+vUW+++fpLbWZdgwbRsX6QgqUSIiOej554OUlhbwyScB+vZNUVXlcvbZcYJBv5OJ5A6VKBGR\nHPLRRxZlZQX8+c8hgkGPiy+Ocd11Lr17+51MJPeoRImI5IC1a2H6dJs77ggTj1scfnh6ZcHee2tl\ngUhnUYkSEcliqRTMmpVeWfD11wF22ilFVVWUH/1IKwtEOlurJcoYEwBmAkMAF7jIcZwlzY6fAFRs\nePk34HLHcfQjHyIineyddwIUFxfw9ttBunXzuP56l1/+Mka3bn4nE8kPbfm/Ip0GFDiOMxy4AZj2\n3QFjTBEwFTjJcZxhwKdAv07IKSIiG3z9tcVVVxVw3HHdefvtIKeeGue119YzfrwKlEhXakuJGgHM\nAXAcZwFwULNjhwILgWnGmHnAcsdxGjo8pYiIEIvBzJlhhg/vzu9/H2affZI8+WQjd94ZZccddQNA\npKu15ZmonsDqZq+TxpiQ4zgJ0ledjgL+D1gHzDPGvO44zuLNfbE+fQoJhTr/Z2z79y/q9M/IdppR\nyzSf1mlGLevI+cyZA1dfDY4DffvCzJlw8cVBQqHCDvsMP+gcapnm0zo/Z9SWErUGaJ4wsKFAAXwD\nvOU4zlcAxphXSBeqzZaoVasa2xm17fr3L6KhYW2nf04204xapvm0TjNqWUfN5+OPLSoqCpg7N0Qg\n4HH++XGuv96lb19YtaoDgvpI51DLNJ/WdcWMWippbSlRrwEnA7OMMcNI3777ztvAfsaYfsC3wDDg\nzvZHFRERgHXr4OabI9x2W4RYzOLQQxPU1rrsu69WFohkiraUqNnASGPMfMACzjfGjAOWOI7ztDFm\nAjB3w++d5TjOe52UVUQk53kePP54iOpqm6++CrDDDikqK6OccopWFohkmlZLlOM4KeDSjd7+sNnx\nR4BHOjiXiEje+fvf0ysL3norSEGBx/jxLmPHxijM7seeRHKWlm2KiPhsxQqL+voIDz0UxvMsTjop\nTmWly8476yfuRDKZSpSIiE/icbj33jBTptisWWOx115JamtdDj886Xc0EWkDlSgRER+8/HKQ0lIb\nxwnSq5dHXV2U886LE9KfyiJZQ9+uIiJd6LPPLCoqbJ59NoxleZxzTowbbojRr59u3YlkG5UoEZEu\nsH49zJgR4dZbI7iuxSGHJKirc9l/f60sEMlWKlEiIp3I8+DJJ0NUVdl88UWAgQNTVFREOf10rSwQ\nyXYqUSIinWThwgAlJTYLFoSIRDyuuSa9sqBHD7+TiUhHUIkSEelg33xjUV4Od9xRSCplcfzxcaqq\nXHbbTc89ieQSlSgRkQ6SSMD994eZPNnm229h8OAUNTUuRx2llQUiuUglSkSkA7z6apCSEptFi4IU\nFXlMnw5nndVIOOx3MhHpLCpRIiJb4fPPLaqqbJ5+Or2y4OyzY0yYEGPffXvQ0OB3OhHpTCpRIiLt\n0NQEv/lNhBkzIkSjFkOHJqmri/K972llgUi+UIkSEdkCngfPPBOistLm888DDBiQ4sYbo4walSAQ\n8DudiHQllSgRkTb64IMApaU2r74aIhz2GDvW5ZprtLJAJF+pRImItGLVKpgyxea++8IkkxYjRyaY\nODHKoEFaWSCSz1SiREQ2I5mEBx8MM2lShJUrAwwalKKmpoljjtHKAhFRiRIR2aQFC4IUF9u8916Q\n7t09ysujXHJJnEjE72QikilUokREmlm2zKK62mb27PSCp7POilNa6rLttrp1JyL/TSVKRASIRuG3\nv43w619HaGy0+N730isLhg7VygIR2TSVKBHJa54Hzz0XorzcZunSAP36paivj3LWWVpZICItU4kS\nkbzlOAFKSmxeeSVEKORx2WUxxo936dnT72Qikg1UokQk76xeDTfeaHPXXemVBUcdlaCmxmXwYN26\nE5G2U4kSkbyRTMLvfx+mri7CihUBdt01xcSJTRx7bBLL8judiGQblSgRyQtvvhmgpKSAv/89SGGh\nR2mpy5gxMWzb72Qikq1UokQkp331VXplwWOPpVcWjBoVp6zMZeBArSwQka2jEiUiOcl14fbbI0yf\nnl5ZcMABSWprXQ45RNvGRaRjqESJSE7xPPjTn4KUlRXw6acBttkmRU2Ny89+FicY9DudiOQSlSgR\nyRlLlliUlhbw4oshgkGPMWNiXHutS69eficTkVykEiUiWW/t2vTKgjvvDJNIWBxxRILaWhdjtLJA\nRDqPSpSIZK1UCh59NERNjU1DQ4Cdd05RXR3lhBMSWlkgIp1OJUpEstLbb6dXFvztb+mVBTfc4HLZ\nZTG6dfM7mYjkC5UoEckqy5db1NTYPPpoemXB6afHKS932WEHrSwQka6lEiUiWSEWgzvvDDNtms26\ndRb77pukrs5l+HCtLBARf6hEiUjGe+GFIKWlBXz0UYC+fVNMmeIyerRWFoiIv1SiRCRjffyxRVlZ\nAc8/HyIQ8Ljwwhi/+pVLnz5+JxMRUYkSkQy0bh3cdFOE226LEI9bjBiRoKbGZZ99tLJARDKHSpSI\nZIxUCh57LMTEiTbLlwfYcccUVVVRTjpJKwtEJPOoRIlIRnj33QDFxQX89a9BCgo8rrvO5fLLYxQW\n+p1MRGTTVKJExFcNDRZ1dREefjiM51mcckqcigqXnXbSygIRyWwqUSLii3gc7rknzNSpNmvWWOy9\nd5LaWpcRI7SyQESyg0qUiHS5l14KUlpqs3hxkN69Perro5x7bpyQ/kQSkSyiP7JEpMt8+qlFRYXN\nc8+FCQQ8zjsvxvXXx9hmG926E5HsoxIlIp1u/Xq45ZYIM2dGcF2LYcMS1Na67L+/VhaISPZSiRKR\nTuN5MHt2iKoqmy+/DDBwYIrKyiinnaaVBSKS/VSiRKRTLFwYoLjY5o03Qti2x7hxLmPHxuje3e9k\nIiIdo9USZYwJADOBIYALXOQ4zpJN/J4/Ak85jnNbZwQVkezwzTcW9fURHnwwvbLgxBPjVFa67Lqr\nnnsSkdwSaMPvOQ0ocBxnOHADMG0Tv6cG6NuRwUQkuyQScNddYYYN684DD0QYPDjFrFmN3HdfVAVK\nRHJSW0rUCGAOgOM4C4CDmh80xowCUsBzHZ5ORLLCvHlBfvjDQoqLC/A8qKmJ8pe/NHLkkdr5JCK5\nqy3PRPUEVjd7nTTGhBzHSRhj9gN+DowCytvygX36FBIKBbc86Rbq37+o0z8j22lGLdN8Wrd+fRHX\nXguPPw6WBRddBLW1FgMGFAAFfsfznc6h1mlGLdN8WufnjNpSotYAzRMGHMdJbPj1OcAOwIvArkDM\nGPOp4zhzNvfFVq1qbGfUtuvfv4iGhrWd/jnZTDNqmebTssZGuOeeIqZM8YhGLQ46KEl9fZQhQ9Ir\nCxoafA6YAXQOtU4zapnm07qumFFLJa0tJeo14GRgljFmGLDwuwOO4/zqu18bYyqBr1oqUCKS3TwP\n/vCHEBUVNsuWwbbbekyfHuXHP9bKAhHJP20pUbOBkcaY+YAFnG+MGQcscRzn6U5NJyIZ4/33A5SU\n2MyfHyIS8bjhBrjkkvX06OF3MhERf7RaohzHSQGXbvT2h5v4fZUdlElEMsjKlTB5ss3994dJpSyO\nOy5BVVWUQw7podt2IpLXtGxTRDYpmYQHHggzaZLNqlUWe+yRpKbG5eij9RN3IiKgEiUimzB/fpDi\nYpsPPgjSo4dHZWWUiy6KE4n4nUxEJHOoRInIvy1bZlFVZfPkk2EAfvazOMXFLttuq2WZIiIbU4kS\nEZqaYObMCLfcEqGpyWLo0CS1tVEOPDDldzQRkYylEiWSxzwPnn02vbJg6dIA/funmDw5yk9+kiDQ\nlv+fgYhIHlOJEslTH36YXlkwb16IcNjj8stjjBvnUqQFySIibaISJZJnVq+GqVNt7r47TDJp8cMf\nJqipibL77nruSURkS6hEieSJZBIefjhMXV2Eb74JsNtuKWpqmhg5UisLRETaQyVKJA+88UZ6ZcHC\nhUG6d/coK3O55JIYtu13MhGR7KUSJZLDvvzSorra5vHH0ysLzjwzTlmZy3bb6dadiMjWUokSyUHR\nKNx+e4SbborQ2GgxZEiSurooBx+slQUiIh1FJUokh3gezJ0bpLy8gE8/DdCvX4q6uig//alWFoiI\ndDSVKJEc8c9/BigttfnLX0KEQh5jxsS49lqXXr38TiYikptUokSy3Jo1cOONNnfdFSaRsDjyyAQ1\nNS577qlbdyIinUklSiRLpVLwyCMhampsVqwIsMsuKaqroxx/fALL8judiEjuU4kSyUJ//WuAkpIC\n3nknSGGhR3Gxy6WXxigo8DuZiEj+UIkSySLLl1tMnGgza1Z6ZcEZZ8QpL3fZfnutLBAR6WoqUSJZ\nwHXhjjsiTJ8eYf16i/33T1Jb6zJsmLaNi4j4RSVKJMP9+c9BSksL+PjjAH37pqiqcjn77DjBoN/J\nRETym0qUSIb66COLsrIC/vznEMGgx8UXx7juOpfevf1OJiIioBIlknHWrYPp0yPcfnuEeNzi8MPT\nKwv23lsrC0REMolKlEiGSKXg//2/EBMn2nz9dYCddkpRVRXlRz/SygIRkUykEiWSAd55J0BxcQFv\nvx2kWzeP6693+eUvY3Tr5ncyERHZHJUoER99/bVFXV2Ehx+OAHDqqXEqKlx23FErC0REMp1KlIgP\n4nG4664wN95os3atxT77JKmrczn0UK0sEBHJFipRIl3sL38JUlpq889/BunTx2Py5CijR8cJ6btR\nRCSr6I9tkS7yyScWFRU2c+aECQQ8zj8/xvXXu/Tt63cyERFpD5UokU62bh3cckuEmTMjxGIWhx6a\noLbWZd99tbJARCSbqUSJdBLPgyeeCFFVZfPVVwF22CFFZWWUU07RygIRkVygEiXSCRYuDDBhgs2b\nb4YoKPAYP95l7NgYhYV+JxMh1hDDAAATv0lEQVQRkY6iEiXSgVassKivj/DQQ2E8z+Kkk+JUVrrs\nvLNWFoiI5BqVKJEOEI/DffeFmTLFZvVqi732SlJb63L44VpZICKSq1SiRLbSK6+kVxZ8+GGQXr08\n6uqinHeeVhaIiOQ6/TEv0k5Ll6ZXFvzxj2Esy+Occ2LccEOMfv10605EJB+oRIlsocbG/6wsiEYt\nvv/9BPX1Lvvvr5UFIiL5RCVKpI08D556Kr2yYNmyAAMHpigvj3LGGVpZICKSj1SiRNrgvfcClJTY\nvP56iEjE4+qrXa68MkaPHn4nExERv6hEibRg5UqYNMnmgQfCpFIWxx8fp6rKZbfd9NyTiEi+U4kS\n2YREAu65J8ykSTbffmsxeHCSmhqXo47SygIREUlTiRLZyPz5QcrL4R//KKCoyKO6OsqFF8YJh/1O\nJiIimUQlSmSDf/3LorLS5umnw1gWnH12jAkTYgwYoFt3IiLyv1SiJO81NcGtt0aYMSNCU5PF0KFJ\nfvvbILvu6vodTUREMphKlOQtz4NnnglRWWnz+ecBBgxIMXVqlFGjEmy7bRENDX4nFBGRTKYSJXlp\n0aIApaU28+aFCIc9xo51ueYarSwQEZG2U4mSvPLttzBlis2994ZJJi1GjkwwcWKUQYP03JOIiGyZ\nVkuUMSYAzASGAC5wkeM4S5odvwb46YaXzzqOU9UZQUW2RjIJDz0Upr4+wsqVAQYNSlFT08Qxx2hl\ngYiItE+gDb/nNKDAcZzhwA3AtO8OGGMGAWcDhwLDgWONMQd0RlCR9lqwIMjIkYVcd10BrmtRXh7l\nlVfWq0CJiMhWaUuJGgHMAXAcZwFwULNjnwPHO46TdBwnBYSBaIenFGmHL76wuPTSAk45pZD33gty\n1llxFixYzxVXxIlE/E4nIiLZzvK8lp8FMcbcBTzuOM5zG14vBQY5jpNo9nssYCpQ5DjOmJa+XiKR\n9EKh4FYHF9mcaBSmTYO6OmhshIMPhhkz4JBD/E4mIiJZaLP/i/m2PFi+Bihq9jqwUYEqAO4B1gK/\nbO2LrVrV2IaP3Dr9+xfR0LC20z8nm+XijDwPnnsuRHm5zdKlAfr1S1Ff73LWWQkCAbZoZUEuzqej\naUYt03xapxm1TPNpXVfMqH//os0ea0uJeg04GZhljBkGLPzuwIYrUE8BLzqOM3krc4q02+LFAUpK\nbF5+OUQo5HHZZTHGj3fp2dPvZCIikqvaUqJmAyONMfNJX9I63xgzDlgCBIEfALYx5oQNv3+C4ziv\nd0pakY2sXg033mhz991hEgmLo45KUFPjMnhwyu9oIiKS41otURseGL90o7c/bPbrgg5NJNIGqRT8\n/vdhamsjrFgRYNddU0yc2MSxxyaxNnv3WkREpONo2aZknTffDFBSUsDf/x6ksNCjtNRlzJgYtu13\nMhERyScqUZI1vvrKorra5rHHwgCMGhWnrMxl4EBtGxcRka6nEiUZz3Xh9tsjTJ8eobHR4oADktTW\nuhxyiJZlioiIf1SiJGN5Hjz/fJCysgI++STANtukqKlx+dnP4gS1akxERHymEiUZackSi7KyAl54\nIUQw6DFmTIxrr3Xp1cvvZCIiImkqUZJR1q6FadNs7rgjvbLgiCMS1Na6GKOVBSIikllUoiQjpFIw\na1aIiRNtGhoC7LxziurqKCeckNDKAhERyUgqUeK7v/0tQHFxAX/7W3plwQ03uFx2WYxu3fxOJiIi\nsnkqUeKb5cstamttHnkkvbLg9NPjlJe77LCDVhaIiEjmU4mSLheLwZ13hpk2zWbdOot9901SV+cy\nfLhWFoiISPZQiZIu9cILQUpLC/joowB9+6aYMsVl9GitLBARkeyjEiVd4uOPLcrLC/jTn0IEAh4X\nXhjjV79y6dPH72QiIiLtoxIlnWrdOrjppgi33x4hFrMYMSJBTY3LPvtoZYGIiGQ3lSjpFJ4Hjz0W\norraZvnyADvumKKqKspJJ2llgYiI5AaVKOlw776bXlnw178GKSjwuO46l8svj1FY6HcyERGRjqMS\nJR2mocGiri7Cww+H8TyLk0+OU1npstNOWlkgIiK5RyVKtlo8DvfcE2bqVJs1ayz23jtJba3LiBFa\nWSAiIrlLJUq2yksvBSkttVm8OEjv3h719VHOPTdOSGeWiIjkOP1VJ+3y6acWFRU2zz0XxrI8zj03\nxg03xNhmG926ExGR/KASJVtk/Xq45ZYIM2dGcF2LYcMS1Na67L+/VhaIiEh+UYmSNvE8mD07RFWV\nzZdfBhg4MEVlZZTTTtPKAhERyU8qUdKqhQsDFBfbvPFGCNv2GDfOZezYGN27+51MRETEPypRslnf\nfGNRXx/hwQfTKwtOPDG9smDXXfXck4iIiEqU/I9EAu67L8zkyTarV1vsuWeSmhqXI4/UygIREZHv\nqETJf5k3L72yYNGiID17etTURDn//DjhsN/JREREMotKlACwdKlFZaXNM8+kVxb84hcxJkyI0b+/\nbt2JiIhsikpUnmtshBkzItx6a4Ro1OKgg5LU10cZMkQrC0RERFqiEpWnPA+efjpERYXNsmUBtt02\nxfTpUX78Y60sEBERaQuVqDz0/vsBKivh5Ze7EYl4XHmly9VXx+jRw+9kIiIi2UMlKo+sXAmTJ9vc\nf3+YVAqOOy5BVVWUQYP03JOIiMiWUonKA8kkPPBAmEmTbFatsthjjyQzZgQZOrTJ72giIiJZSyUq\nx82fH6S42OaDD4L06OFRWRnloovi7LBDEQ0NfqcTERHJXipROWrZMouqKpsnn0wvePrZz+IUF7ts\nu61u3YmIiHQElagc09QEM2dGuOWWCE1NFkOHJqmtjXLggVpZICIi0pFUonKE58Ef/xiistJm6dIA\n/funmDw5yk9+kiAQ8DudiIhI7lGJygEffhigpMRm3rwQ4bDH5ZfHGDfOpajI72QiIiK5SyUqi337\nLUydanPPPWGSSYsf/jBBTU2U3XfXc08iIiKdTSUqCyWT8Lvfhamvj/DNNwF22y1FTU0TI0cm/Y4m\nIiKSN1Sisswbb6RXFixcGKR7d4+yMpdLLolh234nExERyS8qUVniyy/TKwueeCK9suDMM+OUlbls\nt51u3YmIiPhBJSrDRaNw220Rbr45QmOjxZAhSerqohx8sFYWiIiI+EklKkN5HsydG6SsrIDPPgvQ\nr1+KurooP/2pVhaIiIhkApWoDLR4cYDSUpuXXgoRCnmMGRPj2mtdevXyO5mIiIh8RyUqg6xZk15Z\ncPfdYRIJiyOPTFBT47Lnnrp1JyIikmlUojJAKgWPPBKipsZmxYoAO++cYuLEKMcfn8Cy/E4nIiIi\nm6IS5bO33gpQUlLAu+8GKSz0KC52ufTSGAUFficTERGRlrT6iLIxJmCMuc0Y87ox5iVjzB4bHb/Y\nGPNXY8wCY8xJnRe1dfbsx+jzg+EQCtHnB8OxZz/mZ5z/ytRvYJ//yrR8ucUVVxTwox915913g5xx\nRpz589dz9dWdW6AycUaZRPMR6Xz6PpNc0ZYrUacBBY7jDDfGDAOmAacCGGO2A64EDgIKgFeNMc87\njuN2VuDNsWc/Rs8xF/z7dWjR+/QccwFrAPf0UV0dZ7OZ7DGXcvPc/Zgy9yDWr7fYb78kdXUuw4Z1\n/rbxTJxRJtF8RDqfvs8kl7Tlh+VHAHMAHMdZQLowfef7wGuO47iO46wGlgAHdHjKNii8edqm3//1\n9C5O0uyzN8r0LCewPwupeOJgbNtj6tQozz/f2CUFalN5/v2+jzPKJJqPSOfT95nkkrZcieoJrG72\nOmmMCTmOk9jEsbVAiz+I36dPIaFQcIuDtmrxh5t8O7T4Q/r3L+r4z2uLDZkWM5hruIln+RFBEoy1\nfkPVkivo06eA9AW8rs2zMV9nlEk0ny2mubRM89kEfZ9tEc2kdX7OqC0lag3QPGFgQ4Ha1LEi4NuW\nvtiqVY1bFLCt+uy5F6FF7//P+4k992JVw9pO+czWhHY/kEmLf8xNXEOcCEfzAr/mKvba22JV4lwa\nGro2TybOKJNoPlumf/8iGjSXzdJ8Nk3fZ22nc6h1XTGjlkpaW27nvQacCLDhmaiFzY69CRxujCkw\nxvQC9gbea3/U9mu8evym379qXBcnSa8sePTREHt/9RJTuJ7t+YLH+DF/5hj2431fMkFmzSgTaT4i\nnU/fZ5JL2nIlajYw0hgzH7CA840x44AljuM8bYy5BZhHupCVOI4T7by4m+eePoo1pO+rhxZ/SGLP\nvWi8alyXP6j4zjsBiosLePvtIN26eRSf/Ddu+Ocl9Fjyd5J77udLpu9kyowyleYj0vn0fSa5xPI8\nr0s/sKFhbad/oB+XQL/+2qKuLsLDD0cAOPXUOBUVLjvu2LXzbStdJm6Z5tM6zahlmk/rNKOWaT6t\n66LbeZtde61lm1spFoO77w5z4402a9da7L13emXBYYd1zU/ciYiIiD9UorbCiy8GKSuz+ec/g/Tu\n7TFpUpRzzokT0lRFRERynv66b4dPPrGoqLCZMydMIOBx/vkxrr/epW9fv5OJiIhIV1GJ2gLr1sGv\nfx3ht7+NEItZDB+eoLbWZb/9Un5HExERkS6mEtUGngePPx6iutrmq68C7LBDisrKKKecksDa7ONm\nIiIikstUolrxj38EKC62efPNELbtMX68y9ixMQoL/U4mIiIiflKJ2owVKyzq6yM89FAYz7P40Y/i\nVFa67LJLZq4sEBERka6lErWReBzuvTfMlCk2a9ZY7LVXkpoalyOO0MoCERER+Q+VqGZefjlIaamN\n4wTp1cujtjbKeefFCYf9TiYiIiKZRiUK+Oyz9MqCZ58NY1keo0fHmDAhRr9+unUnIiIim5bXJWr9\nepgxI8Ktt0ZwXYvvfz9BXZ3LAQdoZYGIiIi0LC9LlOfBU0+FqKy0+eKLAAMHpigvj3LGGVpZICIi\nIm2TdyXqvfcClJTYvP56iEjE4+qrXa68MkaPHn4nExERkWySNyVq5UqYNMnmgQfCpFIWxx8fp6rK\nZbfd9NyTiIiIbLmcL1GJBNx/f5jJk22+/dZi8OD0yoKjjtLKAhEREWm/nC5Rr70WpLjYZtGiIEVF\nHtXVUS68UCsLREREZOvlZIn67DO48soCnn46vbLg7LPTKwsGDNCtOxEREekYOVei3nknwGmnQVNT\nmKFDk9TVRfne97SyQERERDpWzpWocBgOOgjOOquJUaMSBAJ+JxIREZFclHMlar/9UrzyCjQ0JPyO\nIiIiIjlM12lERERE2kElSkRERKQdVKJERERE2kElSkRERKQdVKJERERE2kElSkRERKQdVKJERERE\n2kElSkRERKQdVKJERERE2kElSkRERKQdVKJERERE2kElSkRERKQdVKJERERE2sHyPM/vDCIiIiJZ\nR1eiRERERNpBJUpERESkHVSiRERERNpBJUpERESkHVSiRERERNpBJUpERESkHUJ+B9gaxpgAMBMY\nArjARY7jLGl2/BbgMGDthrdOdRxndZcH9Zkx5hBgsuM4R270/slAOZAA7nEc504f4mWEFmY0DrgQ\naNjw1hjHcZwujucbY0wYuAfYFbCBGsdxnm52PO/PoTbMKN/PoSBwJ2CAJHC+4zgfNTuuc6j1GeX1\nOfQdY8wA4G1gpOM4HzZ737dzKKtLFHAaUOA4znBjzDBgGnBqs+MHAsc5jrPCl3QZwBjzK2A0sH6j\n98PATcDBG469Zoz5g+M4X3V9Sn9tbkYbHAic4zjO212bKmP8AvjGcZzRxphtgHeAp0HnUDObndEG\n+X4OnQzgOM5hxpgjgels+HNa59C/bXZGG+T7OfTduXI70LSJ9307h7L9dt4IYA6A4zgLgIO+O7Dh\nKtVg4A5jzGvGmAv8iei7j4AzNvH+3sASx3FWOY4TA14FDu/SZJljczMCGApMMMa8aoyZ0IWZMsX/\nA8qavU40+7XOobSWZgR5fg45jvMkcMmGl7sAy5sd1jlEqzOCPD+HNrgRuA34YqP3fT2Hsr1E9QSa\n355LGmO+u7rWHZhB+l+JxwO/NMYc0MX5fOc4zuNAfBOHNp7dWqBXl4TKMC3MCOAR4FLgaGCEMeak\nLguWARzHWec4zlpjTBHwGFDa7LDOIVqdEeT5OQTgOE7CGHM/6T+TH2t2SOfQBi3MCPL8HDLGnAc0\nOI4zdxOHfT2Hsr1ErQGKmr0OOI7z3b8CG4FfO47T6DjOWuBF0s9OSdrGsysCvvUpS0YyxljAzY7j\nrNjwL5w/At/zOVaXM8bsBPwFeNBxnIebHdI5tMHmZqRz6D8cxzkX2BO40xjTfcPbOoea2dSMdA4B\ncAEw0hjzEvB/wAPGmO02HPP1HMr2Z6JeI30vedaGZ6IWNju2J/CIMeZA0mVxBHB/10fMWIuAwcaY\nvsA64AjSl0vlP3oC7xlj9iZ9r/1o0g8Q5w1jzLbAn4ArHMd5YaPDOododUY6h4wZDezoOE496X/c\npkg/PA06h4BWZ5T355DjOEd89+sNRerSZs88+XoOZXuJmk26nc4HLOD8DT/FsMRxnKeNMb8DFpC+\nVfOA4zjv+5g1Ixhjfg70cBznjg2zmku6ZN7jOM4yf9Nlho1mVEz6CoMLvOA4zrP+putyxUAfoMwY\n891zP3cC3XUO/VtrM8r3c+gJ4F5jzCtAGLgaOMMYoz+H/qO1GeX7OfQ/MuXvMsvzvK76LBEREZGc\nke3PRImIiIj4QiVKREREpB1UokRERETaQSVKREREpB1UokRERETaQSVKREREpB1UokRERETaQSVK\nREREpB3+Pw4S/dIshEZwAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10b7ff0b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10, 6))\n",
"plt.plot(i, o, 'ro')\n",
"plt.plot(i, pred, 'b');"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"pred = np.where(pred > 0.5, 1, 0)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nklSD/w9NevUrYD2cMQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10ed9b6a0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10, 6))\n",
"plt.plot(i, o, 'ro')\n",
"plt.plot(i, pred, 'b');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using Machine Learning"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"# !conda install scikit-learn"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"from sklearn import linear_model"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"model = linear_model.LogisticRegression()"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
" penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
" verbose=0, warm_start=False)"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.5 ],\n",
" [ 0.75],\n",
" [ 1. ],\n",
" [ 1.5 ],\n",
" [ 2.25],\n",
" [ 3. ],\n",
" [ 3.25],\n",
" [ 3.5 ],\n",
" [ 3.75],\n",
" [ 4. ]])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ir = i.reshape(-1, 1)\n",
"ir"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
" penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
" verbose=0, warm_start=False)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.fit(ir, o)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"lr_pred = model.predict(ir)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\naHvKAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a10f5c588>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10, 6))\n",
"plt.plot(i, o, 'ro')\n",
"plt.plot(i, pred, 'b', label='linear regression (\"naive\")')\n",
"plt.plot(i, lr_pred, 'm--', label='logistic regression')\n",
"plt.legend(loc=0);"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"lr_prob = model.predict_proba(ir)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.66011351, 0.33988649],\n",
" [ 0.62596672, 0.37403328],\n",
" [ 0.59051741, 0.40948259],\n",
" [ 0.51709568, 0.48290432],\n",
" [ 0.40657711, 0.59342289],\n",
" [ 0.30477182, 0.69522818],\n",
" [ 0.27417857, 0.72582143],\n",
" [ 0.24557155, 0.75442845],\n",
" [ 0.21904851, 0.78095149],\n",
" [ 0.194651 , 0.805349 ]])"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lr_prob"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nZBj+P/uVvU8qXJ5AAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a10f65358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10, 6))\n",
"plt.plot(i, o, 'ro')\n",
"plt.plot(i, lr_pred, 'b', label='logistic regression')\n",
"plt.plot(i, lr_prob[:, 0], 'm--', label='prob to fail')\n",
"plt.plot(i, lr_prob[:, 1], 'm-.', label='prob to pass')\n",
"plt.legend(loc=0);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Applying Classification to the Titanic Data Set"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Class</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Survived</th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1st</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2nd</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>3rd</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Crew</td>\n",
" <td>Female</td>\n",
" <td>Child</td>\n",
" <td>No</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1st</td>\n",
" <td>Male</td>\n",
" <td>Adult</td>\n",
" <td>No</td>\n",
" <td>118</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Class Sex Age Survived Freq\n",
"5 1st Female Child No 0\n",
"6 2nd Female Child No 0\n",
"7 3rd Female Child No 17\n",
"8 Crew Female Child No 0\n",
"9 1st Male Adult No 118"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.iloc[4:9]"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 1st\n",
"2 2nd\n",
"3 3rd\n",
"4 Crew\n",
"5 1st\n",
"Name: Class, dtype: object"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['Class'].head()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import LabelEncoder"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"le = LabelEncoder()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LabelEncoder()"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"le.fit(data['Class'])"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['1st', '2nd', '3rd', 'Crew'], dtype=object)"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"le.classes_"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2,\n",
" 3, 0, 1, 2, 3, 0, 1, 2, 3])"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"le.transform(data['Class'])"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"# fc = pd.DataFrame({'Class': le.transform(data['Class'])})"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [],
"source": [
"fc = pd.DataFrame()\n",
"for col in ['Class', 'Sex', 'Age']:\n",
" le.fit(data[col])\n",
" fc[col] = le.transform(data[col])"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Class</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Class Sex Age\n",
"0 0 1 1\n",
"1 1 1 1\n",
"2 2 1 1\n",
"3 3 1 1\n",
"4 0 0 1"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fc.head()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 0, 35, 0, 0, 0, 17, 0, 118, 154, 387, 670, 4,\n",
" 13, 89, 3, 5, 11, 13, 0, 1, 13, 14, 0, 57, 14,\n",
" 75, 192, 140, 80, 76, 20])"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['Freq'].values"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 6, 6, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 1, 0, 2, 4, 3, 2, 2, 0])"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"freq = np.digitize(data['Freq'].values, bins=[50, 75, 100, 150, 250, 350])\n",
"freq"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"fc['Freq'] = freq"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Class</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Class Sex Age Freq\n",
"0 0 1 1 0\n",
"1 1 1 1 0\n",
"2 2 1 1 0\n",
"3 3 1 1 0\n",
"4 0 0 1 0"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fc.head()"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Class</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Freq</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Class Sex Age Freq\n",
"27 3 1 0 4\n",
"28 0 0 0 3\n",
"29 1 0 0 2\n",
"30 2 0 0 2\n",
"31 3 0 0 0"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fc.tail()"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LabelEncoder()"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"le.fit(data['Survived'])"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,\n",
" 1, 1, 1, 1, 1, 1, 1, 1, 1])"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"la = le.transform(data['Survived'])\n",
"la"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [],
"source": [
"model = linear_model.LogisticRegression(C=1000)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LogisticRegression(C=1000, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
" penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
" verbose=0, warm_start=False)"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.fit(fc, la)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0,\n",
" 0, 1, 1, 1, 0, 0, 0, 0, 1])"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pred = model.predict(fc)\n",
"pred"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([False, False, False, False, True, True, True, True, True,\n",
" True, True, True, False, False, True, False, True, True,\n",
" True, True, False, False, False, False, True, True, True,\n",
" False, False, False, False, True], dtype=bool)"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pred == la"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"17"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(pred == la).sum()"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.svm import SVC"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [],
"source": [
"model = SVC()"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
" decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',\n",
" max_iter=-1, probability=False, random_state=None, shrinking=True,\n",
" tol=0.001, verbose=False)"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
" decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',\n",
" max_iter=-1, probability=False, random_state=None, shrinking=True,\n",
" tol=0.001, verbose=False)"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.fit(fc, la)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,\n",
" 1, 1, 1, 1, 1, 1, 1, 1, 1])"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pred = model.predict(fc)\n",
"pred"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([False, False, False, False, True, True, True, False, True,\n",
" True, True, True, True, True, False, False, True, True,\n",
" True, True, False, False, False, True, True, True, True,\n",
" True, True, True, True, True], dtype=bool)"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pred == la"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"22"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(pred == la).sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Excursion: dict"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"d = {'a': 10, 'b': 20, 'c': 'Hi there.'}"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'a': 10, 'b': 20, 'c': 'Hi there.'}"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(d)"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"20"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d['b']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img src='http://hilpisch.com/tpq_logo.png' width=\"300px\" align=\"right\">"
]
}
],
"metadata": {
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment