{ "cells": [ { "cell_type": "markdown", "id": "210c766e", "metadata": {}, "source": [ "Goals Today:\n", " \n", "1. Revision of last class (5 mins)\n", "2. More Data Exploration \n", "- Interesting questions that can be asked of this data (10 mins)\n", "- More visualisations (5 mins)\n", "- Data structures - https://pandas.pydata.org/docs/user_guide/dsintro.html (5 mins)\n", "- Data types - https://www.w3schools.com/python/python_datatypes.asp\n", "3. Preprocessing \n", "\n", "Learn how to convert the Raw Data set to a matrix (that can be used for Machine Learning algorithms)\n", "\n", "- What should we look into before pre-processing? (10 mins)\n", " - Addressing Duplicates \n", " - Handling missing values \n", " - Types of data in columns \n", "- One hot-encoding (10 mins)\n", "- Normalisation (10 mins)\n", "- Logistic Regression - Introduction (5 mins)\n", "\n", "\n", "Question: What kind of Machine LEarning tast is the prediciton of survived/non-survived in the the titanic dataset?" ] }, { "cell_type": "code", "execution_count": 1, "id": "75abf707", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from sklearn.preprocessing import StandardScaler" ] }, { "cell_type": "markdown", "id": "6e3caff5", "metadata": {}, "source": [ "## Load the data from your computer" ] }, { "cell_type": "code", "execution_count": 2, "id": "304b5c34", "metadata": {}, "outputs": [], "source": [ "titanic = pd.read_csv(\"http://stanford.io/3AjuPH0\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "cf967fb3", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SurvivedPclassNameSexAgeSiblings/Spouses AboardParents/Children AboardFare
003Mr. Owen Harris Braundmale22.0107.2500
111Mrs. John Bradley (Florence Briggs Thayer) Cum...female38.01071.2833
213Miss. Laina Heikkinenfemale26.0007.9250
311Mrs. Jacques Heath (Lily May Peel) Futrellefemale35.01053.1000
403Mr. William Henry Allenmale35.0008.0500
...........................
88202Rev. Juozas Montvilamale27.00013.0000
88311Miss. Margaret Edith Grahamfemale19.00030.0000
88403Miss. Catherine Helen Johnstonfemale7.01223.4500
88511Mr. Karl Howell Behrmale26.00030.0000
88603Mr. Patrick Dooleymale32.0007.7500
\n", "

887 rows × 8 columns

\n", "
" ], "text/plain": [ " Survived Pclass Name \\\n", "0 0 3 Mr. Owen Harris Braund \n", "1 1 1 Mrs. John Bradley (Florence Briggs Thayer) Cum... \n", "2 1 3 Miss. Laina Heikkinen \n", "3 1 1 Mrs. Jacques Heath (Lily May Peel) Futrelle \n", "4 0 3 Mr. William Henry Allen \n", ".. ... ... ... \n", "882 0 2 Rev. Juozas Montvila \n", "883 1 1 Miss. Margaret Edith Graham \n", "884 0 3 Miss. Catherine Helen Johnston \n", "885 1 1 Mr. Karl Howell Behr \n", "886 0 3 Mr. Patrick Dooley \n", "\n", " Sex Age Siblings/Spouses Aboard Parents/Children Aboard Fare \n", "0 male 22.0 1 0 7.2500 \n", "1 female 38.0 1 0 71.2833 \n", "2 female 26.0 0 0 7.9250 \n", "3 female 35.0 1 0 53.1000 \n", "4 male 35.0 0 0 8.0500 \n", ".. ... ... ... ... ... \n", "882 male 27.0 0 0 13.0000 \n", "883 female 19.0 0 0 30.0000 \n", "884 female 7.0 1 2 23.4500 \n", "885 male 26.0 0 0 30.0000 \n", "886 male 32.0 0 0 7.7500 \n", "\n", "[887 rows x 8 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic" ] }, { "cell_type": "code", "execution_count": 4, "id": "c58d39a4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "test.csv train.csv\r\n" ] } ], "source": [ "ls ../data/titanic/" ] }, { "cell_type": "code", "execution_count": 5, "id": "bf9e8df6", "metadata": {}, "outputs": [], "source": [ "## IMPORT CSV DATA:\n", "\n", "# TRAINING SET: Used for EDA and model training\n", "titanic = pd.read_csv(\"../data/titanic/train.csv\")" ] }, { "cell_type": "markdown", "id": "008d9378", "metadata": {}, "source": [ "## Observe your data" ] }, { "cell_type": "code", "execution_count": 6, "id": "56fb3a77", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
.......................................
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen \"Carrie\"femaleNaN12W./C. 660723.4500NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ
\n", "

891 rows × 12 columns

\n", "
" ], "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", "886 887 0 2 \n", "887 888 1 1 \n", "888 889 0 3 \n", "889 890 1 1 \n", "890 891 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", "886 Montvila, Rev. Juozas male 27.0 0 \n", "887 Graham, Miss. Margaret Edith female 19.0 0 \n", "888 Johnston, Miss. Catherine Helen \"Carrie\" female NaN 1 \n", "889 Behr, Mr. Karl Howell male 26.0 0 \n", "890 Dooley, Mr. Patrick male 32.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 \n", ".. ... ... ... ... ... \n", "886 0 211536 13.0000 NaN S \n", "887 0 112053 30.0000 B42 S \n", "888 2 W./C. 6607 23.4500 NaN S \n", "889 0 111369 30.0000 C148 C \n", "890 0 370376 7.7500 NaN Q \n", "\n", "[891 rows x 12 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(titanic)" ] }, { "cell_type": "markdown", "id": "6530b059", "metadata": {}, "source": [ "## Observe Features\n", "\n", "### Feature Descriptions: \n", "- **Survived**: The dependent/response variable we intend to predict. This is a binary numeric variable, where 1 = Survived and 0 = did not survive. \n", "- **PassengerID**: Random unique identifier for passenger.\n", "- **Ticket**: Random unique identifier for ticket purchased.\n", "- **Pclass**: Ordinal variable, representing socio-economic status. The values are: 1 = upper class, 2 = middle class, and 3 = lower class.\n", "- **Name**: Nominal datatype. Individual's name including prefix (e.g. Mr., Miss, Dr., etc.).\n", "- **Sex**: Individual's biological sex. Nominal variable.\n", "- **Embarked**: Nominal datatype. Port where passenger boarded the Titanic. C = Cherbourg; Q = Queenstown; S = Southampton\n", "- **Age**: Continuous variable for individual's age.\n", "- **Fare**: Continuous variable for price of individual's ticket. Discrete numeric variable.\n", "- **SibSp**: The number of siblings and/or spouse aboard. Discrete numeric variable.\n", "- **Parch**: The number of parents/children aboard.\n", "- **Cabin**: Nominal variable. Represents location of room on ship.\n", "\n", "#### Print and inspect feature names with Pandas:" ] }, { "cell_type": "code", "execution_count": 7, "id": "6425df0b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 891 entries, 0 to 890\n", "Data columns (total 12 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 PassengerId 891 non-null int64 \n", " 1 Survived 891 non-null int64 \n", " 2 Pclass 891 non-null int64 \n", " 3 Name 891 non-null object \n", " 4 Sex 891 non-null object \n", " 5 Age 714 non-null float64\n", " 6 SibSp 891 non-null int64 \n", " 7 Parch 891 non-null int64 \n", " 8 Ticket 891 non-null object \n", " 9 Fare 891 non-null float64\n", " 10 Cabin 204 non-null object \n", " 11 Embarked 889 non-null object \n", "dtypes: float64(2), int64(5), object(5)\n", "memory usage: 83.7+ KB\n" ] } ], "source": [ "titanic.info()" ] }, { "cell_type": "markdown", "id": "2d2048e1", "metadata": {}, "source": [ "## Revision of last class\n", "\n", "- Accessing the data\n", "- Making some basic plots" ] }, { "cell_type": "markdown", "id": "66d0ae19", "metadata": {}, "source": [ "### Accessing the data" ] }, { "cell_type": "code", "execution_count": 8, "id": "03855a25", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 1\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", " ... \n", "886 887\n", "887 888\n", "888 889\n", "889 890\n", "890 891\n", "Name: PassengerId, Length: 891, dtype: int64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic[\"PassengerId\"]" ] }, { "cell_type": "code", "execution_count": 9, "id": "f24fd8ae", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 1\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", " ... \n", "886 887\n", "887 888\n", "888 889\n", "889 890\n", "890 891\n", "Name: PassengerId, Length: 891, dtype: int64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.PassengerId" ] }, { "cell_type": "code", "execution_count": 10, "id": "595b25b0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerId
01
12
23
34
45
......
886887
887888
888889
889890
890891
\n", "

891 rows × 1 columns

\n", "
" ], "text/plain": [ " PassengerId\n", "0 1\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", ".. ...\n", "886 887\n", "887 888\n", "888 889\n", "889 890\n", "890 891\n", "\n", "[891 rows x 1 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic[[\"PassengerId\"]]" ] }, { "cell_type": "code", "execution_count": 11, "id": "39fb97a9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSex
01male
12female
23female
34female
45male
.........
886887male
887888female
888889female
889890male
890891male
\n", "

891 rows × 2 columns

\n", "
" ], "text/plain": [ " PassengerId Sex\n", "0 1 male\n", "1 2 female\n", "2 3 female\n", "3 4 female\n", "4 5 male\n", ".. ... ...\n", "886 887 male\n", "887 888 female\n", "888 889 female\n", "889 890 male\n", "890 891 male\n", "\n", "[891 rows x 2 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic[[\"PassengerId\", \"Sex\"]]" ] }, { "cell_type": "code", "execution_count": 12, "id": "3e392c8a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PassengerId 889\n", "Survived 0\n", "Pclass 3\n", "Name Johnston, Miss. Catherine Helen \"Carrie\"\n", "Sex female\n", "Age NaN\n", "SibSp 1\n", "Parch 2\n", "Ticket W./C. 6607\n", "Fare 23.45\n", "Cabin NaN\n", "Embarked S\n", "Name: 888, dtype: object" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.loc[888]" ] }, { "cell_type": "code", "execution_count": 13, "id": "d7bc2155", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameAge
0Braund, Mr. Owen Harris22.0
1Cumings, Mrs. John Bradley (Florence Briggs Th...38.0
2Heikkinen, Miss. Laina26.0
3Futrelle, Mrs. Jacques Heath (Lily May Peel)35.0
4Allen, Mr. William Henry35.0
.........
886Montvila, Rev. Juozas27.0
887Graham, Miss. Margaret Edith19.0
888Johnston, Miss. Catherine Helen \"Carrie\"NaN
889Behr, Mr. Karl Howell26.0
890Dooley, Mr. Patrick32.0
\n", "

891 rows × 2 columns

\n", "
" ], "text/plain": [ " Name Age\n", "0 Braund, Mr. Owen Harris 22.0\n", "1 Cumings, Mrs. John Bradley (Florence Briggs Th... 38.0\n", "2 Heikkinen, Miss. Laina 26.0\n", "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) 35.0\n", "4 Allen, Mr. William Henry 35.0\n", ".. ... ...\n", "886 Montvila, Rev. Juozas 27.0\n", "887 Graham, Miss. Margaret Edith 19.0\n", "888 Johnston, Miss. Catherine Helen \"Carrie\" NaN\n", "889 Behr, Mr. Karl Howell 26.0\n", "890 Dooley, Mr. Patrick 32.0\n", "\n", "[891 rows x 2 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.loc[:, [\"Name\", \"Age\"]]" ] }, { "cell_type": "code", "execution_count": 14, "id": "ce67a252", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
88888903Johnston, Miss. Catherine Helen \"Carrie\"femaleNaN12W./C. 660723.4500NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
5603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
\n", "
" ], "text/plain": [ " PassengerId Survived Pclass \\\n", "888 889 0 3 \n", "3 4 1 1 \n", "5 6 0 3 \n", "\n", " Name Sex Age SibSp Parch \\\n", "888 Johnston, Miss. Catherine Helen \"Carrie\" female NaN 1 2 \n", "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 \n", "5 Moran, Mr. James male NaN 0 0 \n", "\n", " Ticket Fare Cabin Embarked \n", "888 W./C. 6607 23.4500 NaN S \n", "3 113803 53.1000 C123 S \n", "5 330877 8.4583 NaN Q " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.loc[[888, 3, 5]]" ] }, { "cell_type": "code", "execution_count": 15, "id": "ecc66f42", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Sex female\n", "Cabin NaN\n", "Name: 888, dtype: object" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.loc[888, [\"Sex\", \"Cabin\"]]" ] }, { "cell_type": "code", "execution_count": 16, "id": "379c04c5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Sex female\n", "Cabin NaN\n", "Name: 888, dtype: object" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.iloc[888, [4, 10]]" ] }, { "cell_type": "code", "execution_count": 17, "id": "df040cfd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameCabin
1Cumings, Mrs. John Bradley (Florence Briggs Th...C85
2Heikkinen, Miss. LainaNaN
3Futrelle, Mrs. Jacques Heath (Lily May Peel)C123
8Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)NaN
9Nasser, Mrs. Nicholas (Adele Achem)NaN
.........
875Najib, Miss. Adele Kiamie \"Jane\"NaN
879Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)C50
880Shelley, Mrs. William (Imanita Parrish Hall)NaN
887Graham, Miss. Margaret EdithB42
889Behr, Mr. Karl HowellC148
\n", "

342 rows × 2 columns

\n", "
" ], "text/plain": [ " Name Cabin\n", "1 Cumings, Mrs. John Bradley (Florence Briggs Th... C85\n", "2 Heikkinen, Miss. Laina NaN\n", "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) C123\n", "8 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) NaN\n", "9 Nasser, Mrs. Nicholas (Adele Achem) NaN\n", ".. ... ...\n", "875 Najib, Miss. Adele Kiamie \"Jane\" NaN\n", "879 Potter, Mrs. Thomas Jr (Lily Alexenia Wilson) C50\n", "880 Shelley, Mrs. William (Imanita Parrish Hall) NaN\n", "887 Graham, Miss. Margaret Edith B42\n", "889 Behr, Mr. Karl Howell C148\n", "\n", "[342 rows x 2 columns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.loc[titanic[\"Survived\"]==1, [\"Name\", \"Cabin\"]]" ] }, { "cell_type": "code", "execution_count": 18, "id": "633200ab", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SexCabin
1femaleC85
2femaleNaN
3femaleC123
8femaleNaN
9femaleNaN
.........
875femaleNaN
879femaleC50
880femaleNaN
887femaleB42
889maleC148
\n", "

342 rows × 2 columns

\n", "
" ], "text/plain": [ " Sex Cabin\n", "1 female C85\n", "2 female NaN\n", "3 female C123\n", "8 female NaN\n", "9 female NaN\n", ".. ... ...\n", "875 female NaN\n", "879 female C50\n", "880 female NaN\n", "887 female B42\n", "889 male C148\n", "\n", "[342 rows x 2 columns]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.loc[titanic[\"Survived\"]==1, [\"Sex\", \"Cabin\"]]" ] }, { "cell_type": "markdown", "id": "495de6dd", "metadata": {}, "source": [ "### Other interesting questions that can asked of data" ] }, { "cell_type": "code", "execution_count": 19, "id": "1efab6ef", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.42" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.Age.min()" ] }, { "cell_type": "code", "execution_count": 20, "id": "f28ffc85", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "80.0" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.Age.max()" ] }, { "cell_type": "code", "execution_count": 21, "id": "2821bf36", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3 491\n", "1 216\n", "2 184\n", "Name: Pclass, dtype: int64" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic[\"Pclass\"].value_counts()" ] }, { "cell_type": "code", "execution_count": 22, "id": "0a5ef7d0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Pclass\n", "1 84.154687\n", "2 20.662183\n", "3 13.675550\n", "Name: Fare, dtype: float64" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby(\"Pclass\").Fare.mean()" ] }, { "cell_type": "markdown", "id": "adb0dae3", "metadata": {}, "source": [ "### New" ] }, { "cell_type": "code", "execution_count": 23, "id": "139579ef", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Survived\n", "0 22.117887\n", "1 48.395408\n", "Name: Fare, dtype: float64" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby(\"Survived\").Fare.mean()" ] }, { "cell_type": "code", "execution_count": 24, "id": "e22343e3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Survived\n", "0 30.626179\n", "1 28.343690\n", "Name: Age, dtype: float64" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby(\"Survived\").Age.mean()" ] }, { "cell_type": "code", "execution_count": 25, "id": "cff878c9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedNameSexAgeSibSpParchTicketFareCabinEmbarked
Pclass
1216216216216186216216216216176214
218418418418417318418418418416184
349149149149135549149149149112491
\n", "
" ], "text/plain": [ " PassengerId Survived Name Sex Age SibSp Parch Ticket Fare \\\n", "Pclass \n", "1 216 216 216 216 186 216 216 216 216 \n", "2 184 184 184 184 173 184 184 184 184 \n", "3 491 491 491 491 355 491 491 491 491 \n", "\n", " Cabin Embarked \n", "Pclass \n", "1 176 214 \n", "2 16 184 \n", "3 12 491 " ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby(\"Pclass\").count()\n", "\n", "#Counts after ignoring NaN and None values" ] }, { "cell_type": "code", "execution_count": 26, "id": "1f1063b5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Pclass\n", "1 84.154687\n", "2 20.662183\n", "3 13.675550\n", "Name: Fare, dtype: float64" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby(\"Pclass\").Fare.mean()" ] }, { "cell_type": "code", "execution_count": 27, "id": "b0a8d9f7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Pclass\n", "1 216\n", "2 184\n", "3 491\n", "Name: Survived, dtype: int64" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby(\"Pclass\").Survived.count()" ] }, { "cell_type": "code", "execution_count": 28, "id": "9393c099", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Pclass\n", "1 136\n", "2 87\n", "3 119\n", "Name: Survived, dtype: int64" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby(\"Pclass\").Survived.sum()" ] }, { "cell_type": "code", "execution_count": 29, "id": "e094688d", "metadata": {}, "outputs": [], "source": [ "#Overall survival rate" ] }, { "cell_type": "code", "execution_count": 30, "id": "ee75203d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "38.38383838383838" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100*titanic.Survived.sum()/len(titanic)" ] }, { "cell_type": "code", "execution_count": 31, "id": "90c9d7d6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Pclass\n", "1 62.962963\n", "2 47.282609\n", "3 24.236253\n", "Name: Survived, dtype: float64" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100*titanic.groupby(\"Pclass\").Survived.sum()/titanic.groupby(\"Pclass\").Survived.count()" ] }, { "cell_type": "code", "execution_count": 32, "id": "0e424442", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Sex\n", "female 74.203822\n", "male 18.890815\n", "Name: Survived, dtype: float64" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100*titanic.groupby(\"Sex\").Survived.sum()/titanic.groupby(\"Sex\").Survived.count()" ] }, { "cell_type": "code", "execution_count": 33, "id": "d67c94df", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Embarked\n", "C 55.357143\n", "Q 38.961039\n", "S 33.695652\n", "Name: Survived, dtype: float64" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100*titanic.groupby(\"Embarked\").Survived.sum()/titanic.groupby(\"Embarked\").Survived.count()" ] }, { "cell_type": "code", "execution_count": 34, "id": "38119cd9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Embarked Pclass\n", "C 1 85\n", " 2 17\n", " 3 66\n", "Q 1 2\n", " 2 3\n", " 3 72\n", "S 1 127\n", " 2 164\n", " 3 353\n", "dtype: int64" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby([\"Embarked\", \"Pclass\"]).size()" ] }, { "cell_type": "code", "execution_count": 35, "id": "bb7b8dc2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SibSp\n", "0 34.539474\n", "1 53.588517\n", "2 46.428571\n", "3 25.000000\n", "4 16.666667\n", "5 0.000000\n", "8 0.000000\n", "Name: Survived, dtype: float64" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100*titanic.groupby(\"SibSp\").Survived.sum()/titanic.groupby(\"SibSp\").Survived.count()" ] }, { "cell_type": "code", "execution_count": 36, "id": "adc3973a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SibSp\n", "0 608\n", "1 209\n", "2 28\n", "3 16\n", "4 18\n", "5 5\n", "8 7\n", "Name: Survived, dtype: int64" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby(\"SibSp\").Survived.count()" ] }, { "cell_type": "markdown", "id": "940aabb6", "metadata": {}, "source": [ "### How to find distributions? Histograms, boxplots, normal curves, etc." ] }, { "cell_type": "code", "execution_count": 37, "id": "bb5010fe", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "titanic[\"Age\"].hist(bins = 10)" ] }, { "cell_type": "code", "execution_count": 38, "id": "d73e6d39", "metadata": {}, "outputs": [], "source": [ "titanic[\"Age\"]\n", "cleanedAge = [x for x in titanic[\"Age\"] if str(x) != 'nan']" ] }, { "cell_type": "code", "execution_count": 39, "id": "6025606b", "metadata": {}, "outputs": [ { "data": { "image/png": "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4QTMoAAAIm/SpEkDrjOZOHGiPvjggyh0hEjgLB4AgLFKSkq+dBHs8ePHVVJSEtmGYCQCCgAgYrq6urR9+3ZJks1mU2lpqd59912VlpbKZrNJkrZv366urq5otgkDEFAAABGzdOlS635ra6umTZumTZs2adq0aWptbR2wDiMTa1AAABGTk5OjTz/9VBMnTtQnn3wSci2ehIQEjRs3Th9++KGuvPJKtbS0RLFTDAXWoAAAjNTX1yfp87UmA12L58MPPwypw8hFQAEARExRUZF1/8MPP9R9992nvLw83XfffVY4+WIdRiYCCgAgYm655RbrfmZmplauXKmjR49q5cqVyszMHLAOIxMbtQEAIub//u//rPvnzp1TdXW1qqurv7IOIxMzKACAiOm/xs6ECRMGHB8/fnxIHUYuAgoAIGIefPBBJSQkqKurS5999plKSkpUWFiokpISffbZZzp79qwSEhL04IMPRrtVRBkBBQAQMf3X4vF6vZo4caIaGhp0+vRpNTQ0aOLEifJ6vaqoqOBaPGAfFABA5GVmZsrn811wPCMjI2TDNgwv7IMCADDWpEmTBgwnkuTz+TRp0qQIdwQTEVAAABHj8/msCwXm5uaGbNSWm5sr6fNN3L4swGDk4CseAEDEfPOb35Tb7ZbdbldHR4cSEv6w20VPT49SU1MVCATkcrm0d+/eKHaKocBXPAAAI73//vuSpMrKypBwIn1+LZ6/+qu/CqnDyEVAAQBETHJysiTp7bffHnB83759IXUYuQgoAICIWbp0qSSptrZWnZ2dIWOdnZ3as2dPSB1GLgIKACBili9fbt1PTU1VcXGx3nzzTRUXFys1NXXAOoxMBBQAQMTY7XZVVVVZj9944w3deuuteuONN6xjVVVVbNQGLhYIAIis/osD/uIXv9D5J5LabDYtX758wIsHYuRhBgUAEHG1tbX64i4XwWBQtbW10WkIxiGgAAAiaubMmaqrq5PNZlNpaaneffddlZaWymazqa6uTjNnzox2izAAG7UBACKmvb1d6enpstls6uzs1KhRo6yxs2fPKiUlRcFgUG1tbUpLS4tipxgKbNQGADBSaWmpJGnRokUKBoMqLy9XcXGxysvLFQwGde+994bUYeRikSwAIGL6r8PT2NiolJQU6/gbb7yhDRs26Fvf+lZIHUYuAgoAIGImTpyohoYG7d69W4mJ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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.boxplot([titanic[\"Age\"][~np.isnan(titanic[\"Age\"])], titanic[\"Fare\"][~np.isnan(titanic[\"Fare\"])]])\n", "\n", "# show plot\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 40, "id": "bde5fcd0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
.......................................
88588603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ
\n", "

714 rows × 12 columns

\n", "
" ], "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", "885 886 0 3 \n", "886 887 0 2 \n", "887 888 1 1 \n", "889 890 1 1 \n", "890 891 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", "885 Rice, Mrs. William (Margaret Norton) female 39.0 0 \n", "886 Montvila, Rev. Juozas male 27.0 0 \n", "887 Graham, Miss. Margaret Edith female 19.0 0 \n", "889 Behr, Mr. Karl Howell male 26.0 0 \n", "890 Dooley, Mr. Patrick male 32.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 \n", ".. ... ... ... ... ... \n", "885 5 382652 29.1250 NaN Q \n", "886 0 211536 13.0000 NaN S \n", "887 0 112053 30.0000 B42 S \n", "889 0 111369 30.0000 C148 C \n", "890 0 370376 7.7500 NaN Q \n", "\n", "[714 rows x 12 columns]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.loc[~np.isnan(titanic[\"Age\"])]" ] }, { "cell_type": "code", "execution_count": 41, "id": "44bbd775", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAHNCAYAAADWsJtQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABHhUlEQVR4nO3de1xU1f7/8fdwvwmKF5AEJC2xtDxhAmkXDCHN0tSysrLy1PmVWYrmV/sdM82ytNRStDzHtIuW6VGzi7e8W1JGR9NKk/KWCl4KUBAYYP3+8Md8m0BzFB22vJ6PBw+ctdde8xk2e3i795q9bcYYIwAAAIvwcHcBAAAAriC8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AOeRzWbTc8895+4yLnpr1qyRzWbTmjVrTtvvueeek81m05EjRy5MYTWMu34fZ82aJZvNpt27d1/w58bFifACS6p4M/zjV6NGjZSUlKQlS5a4u7xz9sMPP+i5557jzd6iysvL9c477yg+Pl6hoaGqU6eOLr/8cj3wwAPKyMhwd3mA5Xm5uwDgXIwePVoxMTEyxignJ0ezZs1Sly5d9PHHH6tr167uLu+s/fDDDxo1apRuuukmNW3a1N3lwEVPPvmk0tPT1a1bN/Xp00deXl7asWOHlixZoksvvVQJCQluqevEiRPy8uJtH9bHbzEsrXPnzmrbtq3jcb9+/RQWFqb333/f0uHlQiotLVV5ebl8fHzcXcpFIScnR1OnTtUjjzyi6dOnOy2bNGmSDh8+XC3PY4xRUVGR/P39z3gdPz+/anluwN04bYSLSt26deXv71/pf5cFBQUaPHiwIiMj5evrqxYtWuiVV15RxU3VT5w4odjYWMXGxurEiROO9X777Tc1btxY1113ncrKyiRJDz74oIKCgvTLL78oNTVVgYGBioiI0OjRo3UmN2n/73//q86dOys4OFhBQUG6+eabnU4lzJo1S3feeackKSkpyXFa7K/mc8ybN09XXHGF/Pz81KpVKy1cuFAPPvig05Gb3bt3y2az6ZVXXtGkSZPUrFkz+fr66ocffpAkrVq1Stdff70CAwNVt25ddevWTT/++KPT8/x5zAoV80n+yGaz6YknntDs2bPVokUL+fn5KS4uTuvWrau0/v79+/Xwww8rLCxMvr6+uvLKK/XWW29V6vfrr7+qe/fuCgwMVKNGjTRo0CAVFxef9mfzZ0eOHNFdd92l4OBg1a9fX0899ZSKioocy2+88UZdffXVVa7bokULpaamnnLsXbt2yRij9u3bV1pWcXqzQlU/M6nqOSJNmzZV165dtWzZMrVt21b+/v5688031apVKyUlJVUao7y8XJdccol69erl9PwVc17mz58vm82mtWvXVlr3zTfflM1m07Zt2xxt27dvV69evRQaGio/Pz+1bdtWixcvrrTu999/r44dO8rf319NmjTRmDFjVF5eXvUPCzhLHHmBpeXl5enIkSMyxujQoUOaPHmyjh8/rvvuu8/Rxxij22+/XatXr1a/fv3Upk0bLVu2TE8//bT279+viRMnyt/fX2+//bbat2+v//t//68mTJggSerfv7/y8vI0a9YseXp6OsYsKyvTLbfcooSEBI0bN05Lly7VyJEjVVpaqtGjR5+y3u+//17XX3+9goODNXToUHl7e+vNN9/UTTfdpLVr1yo+Pl433HCDnnzySb3++ut65pln1LJlS0lyfK/Kp59+qt69e6t169YaO3asfv/9d/Xr10+XXHJJlf1nzpypoqIiPfroo/L19VVoaKg+//xzde7cWZdeeqmee+45nThxQpMnT1b79u317bffnvXpq7Vr12ru3Ll68skn5evrq6lTp+qWW27R119/rVatWkk6ebQiISHBEXYaNmyoJUuWqF+/fsrPz9fAgQMlnQyZN998s/bu3asnn3xSERERevfdd7Vq1SqXarrrrrvUtGlTjR07VhkZGXr99df1+++/65133pEk3X///XrkkUe0bds2R42StGnTJv3000/65z//ecqxo6OjJZ0Mk3feeacCAgJcqu10duzYoXvuuUf/+Mc/9Mgjj6hFixbq3bu3nnvuOWVnZys8PNzRd8OGDTpw4IDuvvvuKse69dZbFRQUpA8//FA33nij07K5c+fqyiuvdLz277//Xu3bt9cll1yiYcOGKTAwUB9++KG6d++u//znP7rjjjskSdnZ2UpKSlJpaamj3/Tp0106OgScEQNY0MyZM42kSl++vr5m1qxZTn0XLVpkJJkxY8Y4tffq1cvYbDaTlZXlaBs+fLjx8PAw69atM/PmzTOSzKRJk5zW69u3r5FkBgwY4GgrLy83t956q/Hx8TGHDx92tEsyI0eO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7zgCm3TyUz5bt279y/UlqXHjxmrTpo3efvttp+fctm2bli9fri5dujjamjVrpry8PH333XeOtoMHD2rhwoVVjr1x40Z9++23jsf79u3TRx99pJSUFHl6esrT01M9e/bUf/7zH6eP5lb443VRunTpogMHDmj+/PmOtsLCwkrXU/kr6enpTo8nT54sSY7fhQr333+/fv/9d/3jH/+o9Cm2U8nOznZ89PyPSkpKtHLlSnl4eDiOVDRr1kySnD46XlBQoLffftul1yOdDCEZGRl66623dOTIkb88ZVQhOTlZoaGhmjt3rubOnat27do5BbtGjRrppptu0ptvvqmDBw9WWv/P2ycjI0Nff/210/LZs2e7/HqA03LvlBvg7FRMaBw9erR59913zbvvvmteffVVExcXZySZYcOGOfqWlZWZpKQkY7PZzKOPPmrS09NNt27djCQzcOBAR79nn33W2Gw2s2rVKkfbmDFjjCTz6aefOtr69u1r/Pz8zGWXXWYeeOABk56ebrp27VrlpFn9aYLktm3bTGBgoLnkkkvMCy+8YF5++WVz6aWXGl9fX5ORkeHod/DgQePp6WkSEhLMrFmzzPvvv29ycnJO+fNYvHixsdls5qqrrjITJ040zz77rAkNDTWtWrUyTZs2dfSrmLA7fvz4SmOsWLHCeHl5mdjYWDN+/HgzevRo07BhQ1OvXj3zyy+/OPodOXLEBAYGmksvvdRMmjTJvPjiiyYyMtIxOfXPr79Vq1amQYMGZvTo0ebll1820dHRxs/Pz/HJHmOMyc7ONtHR0SYgIMA89dRT5s033zRjx441d955p6lXr56jX8Uniyo+CTRp0iQTFxdnrrrqKpcm7LZu3drcdtttJj093dx3331Gkrn33nurXKdVq1ZGkmnZsuVpx66wadMmY7PZzM0332xefPFF89Zbb5mXXnrJXH311ZV+50pKSkxUVJRp0KCBefnll80rr7xirrjiCsfv8Z8n7N56662nfN59+/YZm81m6tSpY0JDQ01JSUmlPn/+fazw97//3QQFBRmbzWZeffXVSsu///57U69ePVO/fn0zbNgwM336dPP888+bLl26mKuuusrR78CBA6Z+/fqmXr165rnnnjPjx483l112mWP7MGEX1YXwAkuq6qPSfn5+pk2bNmbatGmVPo1y7NgxM2jQIBMREWG8vb3NZZddZsaPH+/ol5mZaby8vJw+/mzMyU9tXHvttSYiIsL8/vvvxpiT4SUwMND8/PPPJiUlxQQEBJiwsDAzcuRIU1ZW5rR+VX8svv32W5OammqCgoJMQECASUpKMl9++WWl1/ivf/3LXHrppcbT0/OM/jB/8MEHJjY21vj6+ppWrVqZxYsXm549e5rY2FhHn9OFF2OM+fzzz0379u2Nv7+/CQ4ONrfddpv54YcfKvVbvny5adWqlfHx8TEtWrQw77333ik/bdS/f3/z3nvvmcsuu8z4+vqav/3tb1W+lpycHNO/f38TGRlpvL29TXh4uLn55pvN9OnTnfrt2bPH3H777SYgIMA0aNDAPPXUU2bp0qUuhZcffvjB9OrVy9SpU8fUq1fPPPHEE+bEiRNVrlPxSaYXX3zxtGNXyM/PN6+99ppJTU01TZo0Md7e3qZOnTomMTHR/Otf/6r0u5mZmWni4+ONj4+PiYqKMhMmTDjlp41OF16MMaZ9+/ZGkvn73/9e5fJThZcVK1YYScZms5l9+/ZVue7PP/9sHnjgARMeHm68vb3NJZdcYrp27Wrmz5/v1O+7774zN954o/Hz8zOXXHKJef75582MGTMIL6hWNmPO4JKgABwefPBBzZ8/3+kUTU3Vpk0bNWzYUCtWrHDL89tsNvXv37/SKTsree211zRo0CDt3r1bUVFR7i4HgJjzAlwU7Ha7Y6JyhTVr1mjLli266aab3FPURcAYoxkzZujGG28kuAA1CJ82Ai4C+/fvV3Jysu677z5FRERo+/bteuONNxQeHq7/83/+j7vLs5yCggItXrxYq1ev1tatW/XRRx+5uyQAf0B4AS4C9erVU1xcnP7973/r8OHDCgwM1K233qqXXnpJ9evXd2ttW7dulc1mU7t27fTVV1+5tZYzdfjwYd17772qW7eunnnmGd1+++3uLgnAHzDnBcB51b59ex04cEC7d+/Wzp07uaAZgHPGnBcA582uXbv05ZdfasKECWrYsCHX+wBQLQgvAM6b2bNnq169err11lvVq1evKsPL0aNHdf/99ys4OFh169ZV3759tWXLFtlsNs2aNcup7/bt29WrVy+FhobKz89Pbdu21eLFiy/QqwFQUxBeAJw3s2fPVo8ePeTj46N77rlHO3fu1KZNmxzLy8vLddttt+n9999X37599cILL+jgwYNV3uPo+++/V0JCgn788UcNGzZMr776qgIDAx335gFQezDnBcB5kZmZqbZt22rFihVKTk6WMUZRUVHq2bOnJk2aJElasGCB4/FTTz0l6WSg6dSpk1atWqWZM2fqwQcflHTyMvaHDh3Spk2bHPfsMcaoQ4cOOnz4sOPeUgAufhx5AXBezJ49W2FhYUpKSpJ08oJ1vXv31gcffOC4a/LSpUvl7e2tRx55xLGeh4eH+vfv7zTWb7/9plWrVumuu+7SsWPHdOTIER05ckRHjx5Vamqqdu7cqf3791+4FwfArQgvAKpdWVmZPvjgAyUlJWnXrl3KyspSVlaW4uPjlZOTo5UrV0o6effkxo0bKyAgwGn9P38iKSsrS8YYjRgxQg0bNnT6GjlypCTp0KFDF+bFAXA7rvMCoNqtWrVKBw8e1AcffKAPPvig0vLZs2crJSXljMcrLy+XJA0ZMkSpqalV9uEj2EDtQXgBUO1mz56tRo0aKT09vdKyBQsWaOHChXrjjTcUHR2t1atXq7Cw0OnoS1ZWltM6l156qSTJ29tbycnJ57d4ADUeE3YBVKsTJ04oLCxMd955p2bMmFFp+Zdffqn27dvrgw8+kJeXl3r16nVGE3aTkpL03Xffadu2bWrcuLHTmIcPH1bDhg3P+2sDUDNw5AVAtVq8eLGOHTt2ykvqJyQkOC5Yt3DhQrVr106DBw9WVlaWYmNjtXjxYv3222+STk7yrZCenq4OHTqodevWeuSRR3TppZcqJydHGzdu1K+//qotW7ZckNcHwP0ILwCq1ezZs+Xn56dOnTpVudzDw0O33nqrZs+erdzcXH366ad66qmn9Pbbb8vDw0N33HGHRo4cqfbt28vPz8+x3hVXXKFvvvlGo0aN0qxZs3T06FE1atRIf/vb3/Tss89eqJcHoAbgtBGAGmfRokW64447tGHDBrVv397d5QCoYQgvANzqxIkT8vf3dzwuKytTSkqKvvnmG2VnZzstAwCJ00YA3GzAgAE6ceKEEhMTVVxcrAULFujLL7/Uiy++SHABUCWOvABwqzlz5ujVV19VVlaWioqK1Lx5cz322GN64okn3F0agBqK8AIAACyF2wMAAABLIbwAAABLqXETdsvLy3XgwAHVqVPH6QJVAADg4mWM0bFjxxQRESEPj9MfW6lx4eXAgQOKjIx0dxkAAMAN9u3bpyZNmpy2T40LL3Xq1JF0svjg4GA3V4MLzW63a/ny5UpJSZG3t7e7ywFwAbH/1275+fmKjIx05IDTqXHhpeJUUXBwMOGlFrLb7QoICFBwcDBvXkAtw/4PSWc0ZYQJuwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAtysrK9PatWu1bt06rV27VmVlZe4uCTWYS+GlrKxMI0aMUExMjPz9/dWsWTM9//zzMsY4+hhj9Oyzz6px48by9/dXcnKydu7cWe2FAwAuDgsWLFDz5s3VqVMnTZgwQZ06dVLz5s21YMECd5eGGsql8PLyyy9r2rRpmjJlin788Ue9/PLLGjdunCZPnuzoM27cOL3++ut644039NVXXykwMFCpqakqKiqq9uIBANa2YMEC9erVS61bt9b69ev1/vvva/369WrdurV69epFgEGVbOaPh03+QteuXRUWFqYZM2Y42nr27Cl/f3+99957MsYoIiJCgwcP1pAhQyRJeXl5CgsL06xZs3T33Xf/5XPk5+crJCREeXl53NuoFrLb7frss8/UpUsX7m0CXOTKysrUvHlztW7dWosWLVJZWZlj//f09FT37t21bds27dy5U56enu4uF+eZK3//Xbox43XXXafp06frp59+0uWXX64tW7Zow4YNmjBhgiRp165dys7OVnJysmOdkJAQxcfHa+PGjVWGl+LiYhUXFzsVL538I2a3210pDxeBim3OtgcufmvXrtXu3bv17rvvqqysrNL+//TTT+uGG27Q6tWrdeONN7qzVFwArrzvuxRehg0bpvz8fMXGxsrT01NlZWV64YUX1KdPH0lSdna2JCksLMxpvbCwMMeyPxs7dqxGjRpVqX358uUKCAhwpTxcRFasWOHuEgCcZ+vWrZMk/frrrzp69KijvWL/P3HihCRpyZIlKigouPAF4oIqLCw8474uhZcPP/xQs2fP1pw5c3TllVdq8+bNGjhwoCIiItS3b1+XC5Wk4cOHKy0tzfE4Pz9fkZGRSklJ4bRRLWS327VixQp16tSJ00bARS4wMFATJkxQkyZNFB8fX2n/z8jIkCR17tyZIy+1QMWZlzPhUnh5+umnNWzYMMfpn9atW2vPnj0aO3as+vbtq/DwcElSTk6OGjdu7FgvJydHbdq0qXJMX19f+fr6Vmr39vbmj1ctxvYHLn5JSUlq2rSpxo0bp0WLFjnavb295enpqfHjxysmJkZJSUnMeakFXHnPd+nTRoWFhfLwcF7F09NT5eXlkqSYmBiFh4dr5cqVjuX5+fn66quvlJiY6MpTAQAucp6ennr11Vf1ySefqHv37srIyNCJEyeUkZGh7t2765NPPtErr7xCcEElLh15ue222/TCCy8oKipKV155pf773/9qwoQJevjhhyVJNptNAwcO1JgxY3TZZZcpJiZGI0aMUEREhLp3734+6gcAWFiPHj00f/58DR48WDfccIOjPSYmRvPnz1ePHj3cWB1qKpfCy+TJkzVixAg9/vjjOnTokCIiIvSPf/xDzz77rKPP0KFDVVBQoEcffVS5ubnq0KGDli5dKj8/v2ovHgBgfT169FC3bt20evVqLVmyRJ07d+ZUEU7Lpeu8XAhc56V24zovQO3F/l+7ufL3n3sbAQAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8oMYoKyvT2rVrtW7dOq1du1ZlZWXuLgkAUAMRXlAjLFiwQM2bN1enTp00YcIEderUSc2bN9eCBQvcXRoAoIYhvMDtFixYoF69eql169Zav3693n//fa1fv16tW7dWr169CDAAACeEF7hVWVmZBg8erK5du2rRokWKj4+Xv7+/4uPjtWjRInXt2lVDhgzhFBIAwIHwArdav369du/erWeeeUYeHs6/jh4eHho+fLh27dql9evXu6lCAEBNQ3iBWx08eFCS1KpVqyqXV7RX9AMAgPACt2rcuLEkadu2bVUur2iv6AcAAOEFbnX99deradOmevHFF1VeXu60rLy8XGPHjlVMTIyuv/56N1UIAKhpCC9wK09PT7366qv65JNP1L17d2VkZOjEiRPKyMhQ9+7d9cknn+iVV16Rp6enu0sFANQQXu4uAOjRo4fmz5+vwYMH64YbbnC0x8TEaP78+erRo4cbqwMA1DSEF9QIPXr0ULdu3bR69WotWbJEnTt3VlJSEkdcAACVEF5QY3h6eurGG29UQUGBbrzxRoILAKBKhBfUGCUlJZo8ebJWrVqlrKwsDRgwQD4+Pu4uCwBQwzBhFzXC0KFDFRgYqCFDhuizzz7TkCFDFBgYqKFDh7q7NABADcOR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cpvNptGjR2v06NHnVBgAAEBVuDEjAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFJfCy3PPPSebzeb0FRsb61heVFSk/v37q379+goKClLPnj2Vk5NT7UUDAIDay+UjL1deeaUOHjzo+NqwYYNj2aBBg/Txxx9r3rx5Wrt2rQ4cOKAePXpUa8EAAKB283J5BS8vhYeHV2rPy8vTjBkzNGfOHHXs2FGSNHPmTLVs2VIZGRlKSEiocrzi4mIVFxc7Hufn50uS7Ha77Ha7q+XB4kpLSx3f2f5A7cL+X7u5ss1dDi87d+5URESE/Pz8lJiYqLFjxyoqKkqZmZmy2+1KTk529I2NjVVUVJQ2btx4yvAyduxYjRo1qlL78uXLFRAQ4Gp5sLh9xyXJSxkZGdq/zd3VALiQ2P9rt8LCwjPu61J4iY+P16xZs9SiRQsdPHhQo0aN0vXXX69t27YpOztbPj4+qlu3rtM6YWFhys7OPuWYw4cPV1pamuNxfn6+IiMjlZKSouDgYFfKw0Vgy97fpK3fKCEhQVdHhbq7HAAXEPt/7VZx5uVMuBReOnfu7Pj3VVddpfj4eEVHR+vDDz+Uv7+/K0M5+Pr6ytfXt1K7t7e3vL29z2pMWJeXl5fjO9sfqF3Y/2s3V7b5OX1Uum7durr88suVlZWl8PBwlZSUKDc316lPTk5OlXNkAAAAzsY5hZfjx4/r559/VuPGjRUXFydvb2+tXLnSsXzHjh3au3evEhMTz7lQAAAAycXTRkOGDNFtt92m6OhoHThwQCNHjpSnp6fuuecehYSEqF+/fkpLS1NoaKiCg4M1YMAAJSYmnnKyLgAAgKtcCi+//vqr7rnnHh09elQNGzZUhw4dlJGRoYYNG0qSJk6cKA8PD/Xs2VPFxcVKTU3V1KlTz0vhAACgdnIpvHzwwQenXe7n56f09HSlp6efU1EAAACnwr2NAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApZxTeHnppZdks9k0cOBAR1tRUZH69++v+vXrKygoSD179lROTs651gkAACDpHMLLpk2b9Oabb+qqq65yah80aJA+/vhjzZs3T2vXrtWBAwfUo0ePcy4UAABAOsvwcvz4cfXp00f/+te/VK9ePUd7Xl6eZsyYoQkTJqhjx46Ki4vTzJkz9eWXXyojI6PaigYAALWX19ms1L9/f916661KTk7WmDFjHO2ZmZmy2+1KTk52tMXGxioqKkobN25UQkJCpbGKi4tVXFzseJyfny9JstvtstvtZ1MeLKy0tNTxne0P1C7s/7WbK9vc5fDywQcf6Ntvv9WmTZsqLcvOzpaPj4/q1q3r1B4WFqbs7Owqxxs7dqxGjRpVqX358uUKCAhwtTxY3L7jkuSljIwM7d/m7moAXEjs/7VbYWHhGfd1Kbzs27dPTz31lFasWCE/Pz+XC6vK8OHDlZaW5nicn5+vyMhIpaSkKDg4uFqeA9axZe9v0tZvlJCQoKujQt1dDoALiP2/dqs483ImXAovmZmZOnTokK655hpHW1lZmdatW6cpU6Zo2bJlKikpUW5urtPRl5ycHIWHh1c5pq+vr3x9fSu1e3t7y9vb25XycBHw8vJyfGf7A7UL+3/t5so2dym83Hzzzdq6datT20MPPaTY2Fj9z//8jyIjI+Xt7a2VK1eqZ8+ekqQdO3Zo7969SkxMdOWpYDG7jhSooLj0nMf5+XCB43vFG9m5CvT1UkyDwGoZCwDgfi79dahTp45atWrl1BYYGKj69es72vv166e0tDSFhoYqODhYAwYMUGJiYpWTdXFx2HWkQEmvrKnWMQfP3/rXnVyweshNBBgAuEhUz39t/2DixIny8PBQz549VVxcrNTUVE2dOrW6nwY1SMURl0m926h5o6BzG+tEsT5Zs1Fdb0pUoH/l04muyjp0XAPnbq6Wo0IAgJrhnMPLmjVrnB77+fkpPT1d6enp5zo0LKZ5oyC1uiTknMaw2+3KbihdE12Pc94AgCpxbyMAAGAphBcAAGAphBcAAGAphBcAAGAphBcAAGAphBcAAGAphBcAAGAphBcAAGAp1X6FXQBA7cK9zXChEV4AAGeNe5vBHQgvAICzxr3N4A6EFwDAOePeZriQmLALAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAsxaXwMm3aNF111VUKDg5WcHCwEhMTtWTJEsfyoqIi9e/fX/Xr11dQUJB69uypnJycai8aAADUXi6FlyZNmuill15SZmamvvnmG3Xs2FHdunXT999/L0kaNGiQPv74Y82bN09r167VgQMH1KNHj/NSOAAAqJ28XOl82223OT1+4YUXNG3aNGVkZKhJkyaaMWOG5syZo44dO0qSZs6cqZYtWyojI0MJCQnVVzUAAKi1XAovf1RWVqZ58+apoKBAiYmJyszMlN1uV3JysqNPbGysoqKitHHjxlOGl+LiYhUXFzse5+fnS5LsdrvsdvvZlocLqLS01PH9XLdZxfrVte2rszYAlbH/o7q4so1cDi9bt25VYmKiioqKFBQUpIULF+qKK67Q5s2b5ePjo7p16zr1DwsLU3Z29inHGzt2rEaNGlWpffny5QoICHC1PLjBvuOS5KUNGzZoT1D1jLlixYpqGed81Abgf7H/o7oUFhaecV+Xw0uLFi20efNm5eXlaf78+erbt6/Wrl3r6jAOw4cPV1pamuNxfn6+IiMjlZKSouDg4LMeFxfO9wfy9crWDHXo0EFXRpzbNrPb7VqxYoU6deokb2/vGlUbgMrY/1FdKs68nAmXw4uPj4+aN28uSYqLi9OmTZv02muvqXfv3iopKVFubq7T0ZecnByFh4efcjxfX1/5+vpWavf29q6WX16cf15eXo7v1bXNqmv7n4/aAPwv9n9UF1e20Tlf56W8vFzFxcWKi4uTt7e3Vq5c6Vi2Y8cO7d27V4mJief6NAAAAJJcPPIyfPhwde7cWVFRUTp27JjmzJmjNWvWaNmyZQoJCVG/fv2Ulpam0NBQBQcHa8CAAUpMTOSTRgAAoNq4FF4OHTqkBx54QAcPHlRISIiuuuoqLVu2TJ06dZIkTZw4UR4eHurZ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orvvvvsv+y9dulTff/+9Vq1a5RR2rrnmGu3cuVONGjVS8+bNnb5CQkIUEhKixo0b66uvvnKsU1paqszMzDOuF0DNQHgBcEpHjx5Vx44d9d577+m7777Trl27NG/ePI0bN07dunWTv7+/EhISHBNx165dq3/+859nPH6PHj107NgxPfbYY0pKSlJERMRp+99www0KDw9Xnz59FBMT43QKqE+fPmrQoIG6deum9evXa9euXVqzZo2efPJJ/frrr5Kkp556Si+99JIWLVqk7du36/HHHz/vF8EDUP0ILwBOKSgoSPHx8Zo4caJuuOEGtWrVSiNGjNAjjzyiKVOmSJLeeustlZaWKi4uTgMHDtSYMWPOePw6derotttu05YtW057yqiCzWbTPffcU2X/gIAArVu3TlFRUerRo4datmypfv36qaioSMHBwZKkwYMH6/7771ffvn2VmJioOnXq6I477nDhJwKgJrAZw0UOAACAdXDkBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWMr/A8uy8OFE0H2EAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "\n", "titanic.loc[~np.isnan(titanic[\"Age\"])].boxplot(column = \"Age\", by = \"Survived\")\n", "\n", "# show plot\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 42, "id": "f7b8ae34", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Pclass\n", "1 84.154687\n", "2 20.662183\n", "3 13.675550\n", "Name: Fare, dtype: float64" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby(\"Pclass\").Fare.mean()" ] }, { "cell_type": "code", "execution_count": 43, "id": "c54b12eb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAHNCAYAAADWsJtQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABHhUlEQVR4nO3de1xU1f7/8fdwvwmKF5AEJC2xtDxhAmkXDCHN0tSysrLy1PmVWYrmV/sdM82ytNRStDzHtIuW6VGzi7e8W1JGR9NKk/KWCl4KUBAYYP3+8Md8m0BzFB22vJ6PBw+ctdde8xk2e3i795q9bcYYIwAAAIvwcHcBAAAAriC8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AOeRzWbTc8895+4yLnpr1qyRzWbTmjVrTtvvueeek81m05EjRy5MYTWMu34fZ82aJZvNpt27d1/w58bFifACS6p4M/zjV6NGjZSUlKQlS5a4u7xz9sMPP+i5557jzd6iysvL9c477yg+Pl6hoaGqU6eOLr/8cj3wwAPKyMhwd3mA5Xm5uwDgXIwePVoxMTEyxignJ0ezZs1Sly5d9PHHH6tr167uLu+s/fDDDxo1apRuuukmNW3a1N3lwEVPPvmk0tPT1a1bN/Xp00deXl7asWOHlixZoksvvVQJCQluqevEiRPy8uJtH9bHbzEsrXPnzmrbtq3jcb9+/RQWFqb333/f0uHlQiotLVV5ebl8fHzcXcpFIScnR1OnTtUjjzyi6dOnOy2bNGmSDh8+XC3PY4xRUVGR/P39z3gdPz+/anluwN04bYSLSt26deXv71/pf5cFBQUaPHiwIiMj5evrqxYtWuiVV15RxU3VT5w4odjYWMXGxurEiROO9X777Tc1btxY1113ncrKyiRJDz74oIKCgvTLL78oNTVVgYGBioiI0OjRo3UmN2n/73//q86dOys4OFhBQUG6+eabnU4lzJo1S3feeackKSkpyXFa7K/mc8ybN09XXHGF/Pz81KpVKy1cuFAPPvig05Gb3bt3y2az6ZVXXtGkSZPUrFkz+fr66ocffpAkrVq1Stdff70CAwNVt25ddevWTT/++KPT8/x5zAoV80n+yGaz6YknntDs2bPVokUL+fn5KS4uTuvWrau0/v79+/Xwww8rLCxMvr6+uvLKK/XWW29V6vfrr7+qe/fuCgwMVKNGjTRo0CAVFxef9mfzZ0eOHNFdd92l4OBg1a9fX0899ZSKioocy2+88UZdffXVVa7bokULpaamnnLsXbt2yRij9u3bV1pWcXqzQlU/M6nqOSJNmzZV165dtWzZMrVt21b+/v5688031apVKyUlJVUao7y8XJdccol69erl9PwVc17mz58vm82mtWvXVlr3zTfflM1m07Zt2xxt27dvV69evRQaGio/Pz+1bdtWixcvrrTu999/r44dO8rf319NmjTRmDFjVF5eXvUPCzhLHHmBpeXl5enIkSMyxujQoUOaPHmyjh8/rvvuu8/Rxxij22+/XatXr1a/fv3Upk0bLVu2TE8//bT279+viRMnyt/fX2+//bbat2+v//t//68mTJggSerfv7/y8vI0a9YseXp6OsYsKyvTLbfcooSEBI0bN05Lly7VyJEjVVpaqtGjR5+y3u+//17XX3+9goODNXToUHl7e+vNN9/UTTfdpLVr1yo+Pl433HCDnnzySb3++ut65pln1LJlS0lyfK/Kp59+qt69e6t169YaO3asfv/9d/Xr10+XXHJJlf1nzpypoqIiPfroo/L19VVoaKg+//xzde7cWZdeeqmee+45nThxQpMnT1b79u317bffnvXpq7Vr12ru3Ll68skn5evrq6lTp+qWW27R119/rVatWkk6ebQiISHBEXYaNmyoJUuWqF+/fsrPz9fAgQMlnQyZN998s/bu3asnn3xSERERevfdd7Vq1SqXarrrrrvUtGlTjR07VhkZGXr99df1+++/65133pEk3X///XrkkUe0bds2R42StGnTJv3000/65z//ecqxo6OjJZ0Mk3feeacCAgJcqu10duzYoXvuuUf/+Mc/9Mgjj6hFixbq3bu3nnvuOWVnZys8PNzRd8OGDTpw4IDuvvvuKse69dZbFRQUpA8//FA33nij07K5c+fqyiuvdLz277//Xu3bt9cll1yiYcOGKTAwUB9++KG6d++u//znP7rjjjskSdnZ2UpKSlJpaamj3/Tp0106OgScEQNY0MyZM42kSl++vr5m1qxZTn0XLVpkJJkxY8Y4tffq1cvYbDaTlZXlaBs+fLjx8PAw69atM/PmzTOSzKRJk5zW69u3r5FkBgwY4GgrLy83t956q/Hx8TGHDx92tEsyI0eO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7zgCm3TyUz5bt279y/UlqXHjxmrTpo3efvttp+fctm2bli9fri5dujjamjVrpry8PH333XeOtoMHD2rhwoVVjr1x40Z9++23jsf79u3TRx99pJSUFHl6esrT01M9e/bUf/7zH6eP5lb443VRunTpogMHDmj+/PmOtsLCwkrXU/kr6enpTo8nT54sSY7fhQr333+/fv/9d/3jH/+o9Cm2U8nOznZ89PyPSkpKtHLlSnl4eDiOVDRr1kySnD46XlBQoLffftul1yOdDCEZGRl66623dOTIkb88ZVQhOTlZoaGhmjt3rubOnat27do5BbtGjRrppptu0ptvvqmDBw9WWv/P2ycjI0Nff/210/LZs2e7/HqA03LvlBvg7FRMaBw9erR59913zbvvvmteffVVExcXZySZYcOGOfqWlZWZpKQkY7PZzKOPPmrS09NNt27djCQzcOBAR79nn33W2Gw2s2rVKkfbmDFjjCTz6aefOtr69u1r/Pz8zGWXXWYeeOABk56ebrp27VrlpFn9aYLktm3bTGBgoLnkkkvMCy+8YF5++WVz6aWXGl9fX5ORkeHod/DgQePp6WkSEhLMrFmzzPvvv29ycnJO+fNYvHixsdls5qqrrjITJ040zz77rAkNDTWtWrUyTZs2dfSrmLA7fvz4SmOsWLHCeHl5mdjYWDN+/HgzevRo07BhQ1OvXj3zyy+/OPodOXLEBAYGmksvvdRMmjTJvPjiiyYyMtIxOfXPr79Vq1amQYMGZvTo0ebll1820dHRxs/Pz/HJHmOMyc7ONtHR0SYgIMA89dRT5s033zRjx441d955p6lXr56jX8Uniyo+CTRp0iQTFxdnrrrqKpcm7LZu3drcdtttJj093dx3331Gkrn33nurXKdVq1ZGkmnZsuVpx66wadMmY7PZzM0332xefPFF89Zbb5mXXnrJXH311ZV+50pKSkxUVJRp0KCBefnll80rr7xirrjiCsfv8Z8n7N56662nfN59+/YZm81m6tSpY0JDQ01JSUmlPn/+fazw97//3QQFBRmbzWZeffXVSsu///57U69ePVO/fn0zbNgwM336dPP888+bLl26mKuuusrR78CBA6Z+/fqmXr165rnnnjPjx483l112mWP7MGEX1YXwAkuq6qPSfn5+pk2bNmbatGmVPo1y7NgxM2jQIBMREWG8vb3NZZdd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1JF0svjg4GA3V4MLzW63a/ny5UpJSZG3t7e7ywFwAbH/1275+fmKjIx05IDTqXHhpeJUUXBwMOGlFrLb7QoICFBwcDBvXkAtw/4PSWc0ZYQJuwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAtysrK9PatWu1bt06rV27VmVlZe4uCTWYS+GlrKxMI0aMUExMjPz9/dWsWTM9//zzMsY4+hhj9Oyzz6px48by9/dXcnKydu7cWe2FAwAuDgsWLFDz5s3VqVMnTZgwQZ06dVLz5s21YMECd5eGGsql8PLyyy9r2rRpmjJlin788Ue9/PLLGjdunCZPnuzoM27cOL3++ut644039NVXXykwMFCpqakqKiqq9uIBANa2YMEC9erVS61bt9b69ev1/vvva/369WrdurV69epFgEGVbOaPh03+QteuXRUWFqYZM2Y42nr27Cl/f3+99957MsYoIiJCgwcP1pAhQyRJeXl5CgsL06xZs3T33Xf/5XPk5+crJCREeXl53NuoFrLb7frss8/UpUsX7m0CXOTKysrUvHlztW7dWosWLVJZWZlj//f09FT37t21bds27dy5U56enu4uF+eZK3//Xbox43XXXafp06frp59+0uWXX64tW7Zow4YNmjBhgiRp165dys7OVnJysmOdkJAQxcfHa+PGjVWGl+LiYhUXFzsVL538I2a3210pDxeBim3OtgcufmvXrtXu3bv17rvvqqysrNL+//TTT+uGG27Q6tWrdeONN7qzVFwArrzvuxRehg0bpvz8fMXGxsrT01NlZWV64YUX1KdPH0lSdna2JCksLMxpvbCwMMeyPxs7dqxGjRpVqX358uUKCAhwpTxcRFasWOHuEgCcZ+vWrZMk/frrrzp69KijvWL/P3HihCRpyZIlKigouPAF4oIqLCw8474uhZcPP/xQs2fP1pw5c3TllVdq8+bNGjhwoCIiItS3b1+XC5Wk4cOHKy0tzfE4Pz9fkZGRSklJ4bRRLWS327VixQp16tSJ00bARS4wMFATJkxQkyZNFB8fX2n/z8jIkCR17tyZIy+1QMWZlzPhUnh5+umnNWzYMMfpn9atW2vPnj0aO3as+vbtq/DwcElSTk6OGjdu7FgvJydHbdq0qXJMX19f+fr6Vmr39vbmj1ctxvYHLn5JSUlq2rSpxo0bp0WLFjnavb295enpqfHjxysmJkZJSUnMeakFXHnPd+nTRoWFhfLwcF7F09NT5eXlkqSYmBiFh4dr5cqVjuX5+fn66quvlJiY6MpTAQAucp6ennr11Vf1ySefqHv37srIyNCJEyeUkZGh7t2765NPPtErr7xCcEElLh15ue222/TCCy8oKipKV155pf773/9qwoQJevjhhyVJNptNAwcO1JgxY3TZZZcpJiZGI0aMUEREhLp3734+6gcAWFiPHj00f/58DR48WDfccIOjPSYmRvPnz1ePHj3cWB1qKpfCy+TJkzVixAg9/vjjOnTokCIiIvSPf/xDzz77rKPP0KFDVVBQoEcffVS5ubnq0KGDli5dKj8/v2ovHgBgfT169FC3bt20evVqLVmyRJ07d+ZUEU7Lpeu8XAhc56V24zovQO3F/l+7ufL3n3sbAQAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8AAAASyG8oMYoKyvT2rVrtW7dOq1du1ZlZWXuLgkAUAMRXlAjLFiwQM2bN1enTp00YcIEderUSc2bN9eCBQvcXRoAoIYhvMDtFixYoF69eql169Zav3693n//fa1fv16tW7dWr169CDAAACeEF7hVWVmZBg8erK5du2rRokWKj4+Xv7+/4uPjtWjRInXt2lVDhgzhFBIAwIHwArdav369du/erWeeeUYeHs6/jh4eHho+fLh27dql9evXu6lCAEBNQ3iBWx08eFCS1KpVqyqXV7RX9AMAgPACt2rcuLEkadu2bVUur2iv6AcAAOEFbnX99deradOmevHFF1VeXu60rLy8XGPHjlVMTIyuv/56N1UIAKhpCC9wK09PT7366qv65JNP1L17d2VkZOjEiRPKyMhQ9+7d9cknn+iVV16Rp6enu0sFANQQXu4uAOjRo4fmz5+vwYMH64YbbnC0x8TEaP78+erRo4cbqwMA1DSEF9QIPXr0ULdu3bR69WotWbJEnTt3VlJSEkdcAACVEF5QY3h6eurGG29UQUGBbrzxRoILAKBKhBfUGCUlJZo8ebJWrVqlrKwsDRgwQD4+Pu4uCwBQwzBhFzXC0KFDFRgYqCFDhuizzz7TkCFDFBgYqKFDh7q7NABADcORF7jd0KFDNX78eIWFhenee+9VQUGBAgMDNWfOHI0fP16SNG7cODdXCQCoKWzGGOPuIv4oPz9fISEhysvLU3BwsLvLwXlWUlKiwMBABQYGqm7dutqzZ49jWXR0tHJzc1VQUKCCggJOIQEXObvdrs8++0xdunSRt7e3u8vBBebK339OG8Gtpk6dqtLSUuXl5alVq1YaMGCAUlJSNGDAALVq1Up5eXkqLS3V1KlT3V0qAKCGcCm8NG3aVDabrdJX//79JUlFRUXq37+/6tevr6CgIPXs2VM5OTnnpXBcHHbu3Cnp5FGWZcuWafLkyVq+fLkmT56sZcuWKTo62qkfAAAuhZdNmzbp4MGDjq8VK1ZIku68805J0qBBg/Txxx9r3rx5Wrt2rQ4cOMAFxnBaNptNkrRnzx7Vr19fb7zxhmbOnKk33nhD9evXd5xGqugHAIBLE3YbNmzo9Pill15Ss2bNdOONNyovL08zZszQnDlz1LFjR0nSzJkz1bJlS2VkZCghIaH6qsZFIy4uTtLJcLJ79255eno6znn37dtXAQEBMsY4+gEAcNafNiopKdF7772ntLQ02Ww2ZWZmym63Kzk52dEnNjZWUVFR2rhx4ynDS3FxsYqLix2P8/PzJZ2cuGW328+2PFjE119/LUkyxig6OlojRoxQYGCg3nzzTT3//POqmE/+9ddf67777nNnqQDOs4r3fN77aydXtvtZh5dFixYpNzdXDz74oCQpOztbPj4+qlu3rlO/sLAwZWdnn3KcsWPHatSoUZXaly9froCAgLMtDxaxe/duSVKDBg105MgRDRgwwLHMw8PD0b5792599tlnbqoSwIVUMSUBtUthYeEZ9z3r8DJjxgx17txZERERZzuEJGn48OFKS0tzPM7Pz1dkZKRSUlL4qHQtkJWVpaVLl+rIkSPq0qWLmjZtqqysLDVv3twpsCQnJ6tLly5urhbA+WS327VixQp16tSJj0rXQhVnXs7EWYWXPXv26PPPP9eCBQscbeHh4SopKVFubq7T0ZecnByFh4efcixfX1/5+vpWavf29uaXtxYYMGCAhg0bpsDAQG3bts0RVpYvX67o6GiFhISooKBAAwYM4PcBqCV4/6+dXNnmZ3Wdl5kzZ6pRo0a69dZbHW1xcXHy9vbWypUrHW07duzQ3r17lZiYeDZPg1rAx8dHgwYNUl5enoqLizVw4EA9+uijGjhwoIqKipSXl6dBgwZxgToAgIPLR17Ky8s1c+ZM9e3bV15e/7t6SEiI+vXrp7S0NIWGhio4OFgDBgxQYmIinzTCaVVc+n/ixImaNGmSo93Ly0tPP/00twYAADhxObx8/vnn2rt3rx5++OFKyyZOnCgPDw/17NlTxcXFSk1N5cqoOCPjxo3TmDFjHHeV7tixI3eVBgBUiXsboUbh3iZA7cX+X7txbyMAAHDRIrwAAABLIbwAAABLIbwAAABLIbwAAABLIbwAAABLIbwAAABLIbwAAABLIbwAAABLOau7SgNno7CwUNu3bz9tn+MnivXl1p9Vr8E3CvKvfLfxP4uNjVVAQEB1lQgAsADCCy6Y7du3Ky4u7oz6numtGDMzM3XNNdecfVEAAMshvOCCiY2NVWZm5mn77DiYq7R5WzXhztZq0bjuGY0JAKhdCC+4YAICAv7yKInHnqPyXX9CLVtdrTbR9S9QZQAAK2HCLgAAsBTCCwAAsBTCCwAAsBTCCwAAsBQm7AIA3K6kpESTJ0/WqlWrlJWVpQEDBsjHx8fdZaGG4sgLAMCthg4dqsDAQA0ZMkSfffaZhgwZosDAQA0dOtTdpaGG4sgLAMBthg4dqvHjxyssLEyjRo2Sr6+viouLNXLkSI0fP16SNG7cmV62ErUFR14AAG5RUlKiiRMnKiwsTL/++qsefvhh1atXTw8//LB+/fVXhYWFaeLEiSopKXF3qahhCC8AALeYOnWqSktLNWbMGJWXl+v111/X9OnT9frrr6u8vFyjR49WaWmppk6d6u5SUcMQXgAAbvHzzz9Lkr799tsq57xs3rzZqR9QgTkvAAC3aNasmSRp2rRpVc55mTZtmlM/oAJHXgAAbvH3v/9dkmSz2bR7926nOS+7d++WzWZz6gdUILwAANzi3//+tyTJGKOmTZvq3//+t3777Tf9+9//VtOmTWWMceoHVOC0EQDALSrmsjz22GP617/+pccff9yxzMvLS4899pimTZvGnBdUwpEXAIBbVMxlueaaa1RQUKBXXnlFXbp00SuvvKKCggK1adPGqR9QwWYqjsvVEPn5+QoJCVFeXp6Cg4PdXQ4usM17jqr7tAwteixBbaLru7scAOdRSUmJAgMDVb9+ff36668yxuizzz5Tly5dZLPZ1KRJEx09elQFBQXcKqAWcOXvP0deAABu4ePjo0GDBiknJ0dNmjRxmvPSpEkT5eTkaNCgQQQXVMKcFwCA21Rc+n/ixImV5rw8/fTT3BoAVXL5yMv+/ft13333qX79+vL391fr1q31zTffOJYbY/Tss8+qcePG8vf3V3Jysnbu3FmtRQMALh7jxo2rcs4LwQWn4tKRl99//13t27dXUlKSlixZooYNG2rnzp2qV6+eo8+4ceP0+uuv6+2331ZMTIxGjBih1NRU/fDDD/Lz86v2FwAAsD4fHx89+eSTat68ubp06SJvb293l4QazKXw8vLLLysyMlIzZ850tMXExDj+bYzRpEmT9M9//lPdunWTJL3zzjsKCwvTokWLdPfdd1cas7i4WMXFxY7H+fn5kiS73S673e7aq4HllZaWOr6z/YGLR2FhoXbs2HHaPsdPFOvLrT+rTt0MBfn7/uWYLVq0UEBAQHWVCDdz5T3fpfCyePFipaam6s4779TatWt1ySWX6PHHH9cjjzwiSdq1a5eys7OVnJzsWCckJETx8fHauHFjleFl7NixGjVqVKX25cuX80tZC+07LkleysjI0P5t7q4GQHX5+eefNXjw4DPqe6Yni1599VU+Rn0RKSwsPOO+LoWXX375RdOmTVNaWpqeeeYZbdq0SU8++aR8fHzUt29fZWdnS5LCwsKc1gsLC3Ms+7Phw4crLS3N8Tg/P1+RkZFKSUnho9K10Ja9v0lbv1FCQoKujgp1dzkAqklhYaE6dOhw2j4/HczT0wt/0Pg7rtDljUP+ckyOvFxcKs68nAmXwkt5ebnatm2rF198UZL0t7/9Tdu2bdMbb7yhvn37ulbl/+fr6ytf38qHB729vTnnWQt5eXk5vrP9gYtHSEiI2rVrd9o+PnuOyndjiVq1uYbrPNVCrrznu/Rpo8aNG+uKK65wamvZsqX27t0rSQoPD5ck5eTkOPXJyclxLAMAADgXLoWX9u3bV5pw9dNPPyk6OlrSycm74eHhWrlypWN5fn6+vvrqKyUmJlZDuQAAoLZz6bTRoEGDdN111+nFF1/UXXfdpa+//lrTp0/X9OnTJZ28rfnAgQM1ZswYXXbZZY6PSkdERKh79+7no34AAFDLuBRerr32Wi1cuFDDhw/X6NGjFRMTo0mTJqlPnz6OPkOHDlVBQYEeffRR5ebmqkOHDlq6dCnXeAEAANXC5dsDdO3aVV27dj3lcpvNptGjR2v06NHnVBgAAEBVuDEjAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFMILAACwFJfCy3PPPSebzeb0FRsb61heVFSk/v37q379+goKClLPnj2Vk5NT7UUDAIDay+UjL1deeaUOHjzo+NqwYYNj2aBBg/Txxx9r3rx5Wrt2rQ4cOKAePXpUa8EAAKB283J5BS8vhYeHV2rPy8vTjBkzNGfOHHXs2FGSNHPmTLVs2VIZGRlKSEiocrzi4mIVFxc7Hufn50uS7Ha77Ha7q+XB4kpLSx3f2f5A7cL+X7u5ss1dDi87d+5URESE/Pz8lJiYqLFjxyoqKkqZmZmy2+1KTk529I2NjVVUVJQ2btx4yvAyduxYjRo1qlL78uXLFRAQ4Gp5sLh9xyXJSxkZGdq/zd3VALiQ2P9rt8LCwjPu61J4iY+P16xZs9SiRQsdPHhQo0aN0vXXX69t27YpOztbPj4+qlu3rtM6YWFhys7OPuWYw4cPV1pamuNxfn6+IiMjlZKSouDgYFfKw0Vgy97fpK3fKCEhQVdHhbq7HAAXEPt/7VZx5uVMuBReOnfu7Pj3VVddpfj4eEVHR+vDDz+Uv7+/K0M5+Pr6ytfXt1K7t7e3vL29z2pMWJeXl5fjO9sfqF3Y/2s3V7b5OX1Uum7durr88suVlZWl8PBwlZSUKDc316lPTk5OlXNkAAAAzsY5hZfjx4/r559/VuPGjRUXFydvb2+tXLnSsXzHjh3au3evEhMTz7lQAAAAycXTRkOGDNFtt92m6OhoHThwQCNHjpSnp6fuuecehYSEqF+/fkpLS1NoaKiCg4M1YMAAJSYmnnKyLgAAgKtcCi+//vqr7rnnHh09elQNGzZUhw4dlJGRoYYNG0qSJk6cKA8PD/Xs2VPFxcVKTU3V1KlTz0vhAACgdnIpvHzwwQenXe7n56f09HSlp6efU1EAAACnwr2NAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApRBeAACApZxTeHnppZdks9k0cOBAR1tRUZH69++v+vXrKygoSD179lROTs651gkAACDpHMLLpk2b9Oabb+qqq65yah80aJA+/vhjzZs3T2vXrtWBAwfUo0ePcy4UAABAOsvwcvz4cfXp00f/+te/VK9ePUd7Xl6eZsyYoQkTJqhjx46Ki4vTzJkz9eWXXyojI6PaigYAALWX19ms1L9/f916661KTk7WmDFjHO2ZmZmy2+1KTk52tMXGxioqKkobN25UQkJCpbGKi4tVXFzseJyfny9JstvtstvtZ1MeLKy0tNTxne0P1C7s/7WbK9vc5fDywQcf6Ntvv9WmTZsqLcvOzpaPj4/q1q3r1B4WFqbs7Owqxxs7dqxGjRpVqX358uUKCAhwtTxY3L7jkuSljIwM7d/m7moAXEjs/7VbYWHhGfd1Kbzs27dPTz31lFasWCE/Pz+XC6vK8OHDlZaW5nicn5+vyMhIpaSkKDg4uFqeA9axZe9v0tZvlJCQoKujQt1dDoALiP2/dqs483ImXAovmZmZOnTokK655hpHW1lZmdatW6cpU6Zo2bJlKikpUW5urtPRl5ycHIWHh1c5pq+vr3x9fSu1e3t7y9vb25XycBHw8vJyfGf7A7UL+3/t5so2dym83Hzzzdq6datT20MPPaTY2Fj9z//8jyIjI+Xt7a2VK1eqZ8+ekqQdO3Zo7969SkxMdOWpYDG7jhSooLj0nMf5+XCB43vFG9m5CvT1UkyDwGoZCwDgfi79dahTp45atWrl1BYYGKj69es72vv166e0tDSFhoYqODhYAwYMUGJiYpWTdXFx2HWkQEmvrKnWMQfP3/rXnVyweshNBBgAuEhUz39t/2DixIny8PBQz549VVxcrNTUVE2dOrW6nwY1SMURl0m926h5o6BzG+tEsT5Zs1Fdb0pUoH/l04muyjp0XAPnbq6Wo0IAgJrhnMPLmjVrnB77+fkpPT1d6enp5zo0LKZ5oyC1uiTknMaw2+3KbihdE12Pc94AgCpxbyMAAGAphBcAAGAphBcAAGAphBcAAGAphBcAAGAphBcAAGAphBcAAGAphBcAAGAp1X6FXQBA7cK9zXChEV4AAGeNe5vBHQgvAICzxr3N4A6EFwDAOePeZriQmLALAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAsxaXwMm3aNF111VUKDg5WcHCwEhMTtWTJEsfyoqIi9e/fX/Xr11dQUJB69uypnJycai8aAADUXi6FlyZNmuill15SZmamvvnmG3Xs2FHdunXT999/L0kaNGiQPv74Y82bN09r167VgQMH1KNHj/NSOAAAqJ28XOl82223OT1+4YUXNG3aNGVkZKhJkyaaMWOG5syZo44dO0qSZs6cqZYtWyojI0MJCQnVVzUAAKi1XAovf1RWVqZ58+apoKBAiYmJyszMlN1uV3JysqNPbGysoqKitHHjxlOGl+LiYhUXFzse5+fnS5LsdrvsdvvZlocLqLS01PH9XLdZxfrVte2rszYAlbH/o7q4so1cDi9bt25VYmKiioqKFBQUpIULF+qKK67Q5s2b5ePjo7p16zr1DwsLU3Z29inHGzt2rEaNGlWpffny5QoICHC1PLjBvuOS5KUNGzZoT1D1jLlixYpqGed81Abgf7H/o7oUFhaecV+Xw0uLFi20efNm5eXlaf78+erbt6/Wrl3r6jAOw4cPV1pamuNxfn6+IiMjlZKSouDg4LMeFxfO9wfy9crWDHXo0EFXRpzbNrPb7VqxYoU6deokb2/vGlUbgMrY/1FdKs68nAmXw4uPj4+aN28uSYqLi9OmTZv02muvqXfv3iopKVFubq7T0ZecnByFh4efcjxfX1/5+vpWavf29q6WX16cf15eXo7v1bXNqmv7n4/aAPwv9n9UF1e20Tlf56W8vFzFxcWKi4uTt7e3Vq5c6Vi2Y8cO7d27V4mJief6NAAAAJJcPPIyfPhwde7cWVFRUTp27JjmzJmjNWvWaNmyZQoJCVG/fv2Ulpam0NBQBQcHa8CAAUpMTOSTRgAAoNq4FF4OHTqkBx54QAcPHlRISIiuuuoqLVu2TJ06dZIkTZw4UR4eHurZ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orvvvvsv+y9dulTff/+9Vq1a5RR2rrnmGu3cuVONGjVS8+bNnb5CQkIUEhKixo0b66uvvnKsU1paqszMzDOuF0DNQHgBcEpHjx5Vx44d9d577+m7777Trl27NG/ePI0bN07dunWTv7+/EhISHBNx165dq3/+859nPH6PHj107NgxPfbYY0pKSlJERMRp+99www0KDw9Xnz59FBMT43QKqE+fPmrQoIG6deum9evXa9euXVqzZo2efPJJ/frrr5Kkp556Si+99JIWLVqk7du36/HHHz/vF8EDUP0ILwBOKSgoSPHx8Zo4caJuuOEGtWrVSiNGjNAjjzyiKVOmSJLeeustlZaWKi4uTgMHDtSYMWPOePw6derotttu05YtW057yqiCzWbTPffcU2X/gIAArVu3TlFRUerRo4datmypfv36qaioSMHBwZKkwYMH6/7771ffvn2VmJioOnXq6I477nDhJwKgJrAZw0UOAACAdXDkBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWMr/A8uy8OFE0H2EAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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zMyUpFKnwCrq22+/Vd++fR3XSoWGhurJJ5+UJEfA6dmzp4YMGaKpU6eqXr16uvnmm5WamlrqeqXRo0erWbNmSkxMVIMGDXTfffdp+fLlla4HcAauwQEuwcPDQ71799bMmTO1d+9etWzZstLrWLFihSTp3Llz2rt3b5kwYAbnHwGorIsdXSi5CLuySj4X5q677lJycnK5bdq0aXNF666o8rYpISFB9evX17x589SjRw/NmzdP4eHh6tu3b4XWGRAQUOG2lZGZmak+ffooNjZWr732mqKiouTj46Ovv/5ar7/+umN/WiwWLVq0SBs3btSXX36pFStW6L777tOrr76qjRs3qlatWgoLC1NGRoZWrFihZcuWadmyZUpNTdU999yj999/3+m1A5fCERzgMgoLCyVJeXl5kqSGDRsqOztbZ86cKdVu9+7djvklfvzxR02bNk333nuv2rVrp/vvv9/xF/H5iouL9fPPP5ea9tNPP0nSRS/GDQ0Nlb+/v/bs2VNm3u7du+Xh4aGoqChJlz9Fcb6S+vft21dmXnnTLrWOi9VWr149x2mZOnXq6PTp02XanX8k7Hx79+4tM+2nn36Sv7+/40hNYGCgioqKHEfjLnyFhYU56szMzCxzt1p5dV/KhTXt27dPxcXFpb53np6eGj58uBYtWqRTp05pyZIluuOOO0pdbP5nNGnSRJK0ffv2Si335Zdfymaz6YsvvtCDDz6ogQMHqm/fvhcNrV27dtV///d/a/PmzZo/f7527Nihjz76yDHfx8dHSUlJeuutt5SZmakHH3xQH3zwQYXHDuAsBBzgEux2u9LS0uTj4+M4BTVw4EAVFRXpzTffLNX29ddfl8ViUWJiomPZESNGKDIyUjNnztTcuXN19OhRTZw4sdy+zl+fYRh688035e3trT59+pTb3tPTU/3799fnn39e6lTI0aNHtWDBAnXv3l1BQUGS5AgT5QWJC0VGRqpVq1b64IMPHKFO+uPupW3btl12eemP64Di4uL0/vvvl+pz+/btSktL08CBAx3TmjRpopycHP3444+OaYcPH9bixYvLXfeGDRsc19BI0qFDh/T555+rf//+8vT0lKenp4YMGaJPP/203F/2599SPXDgQGVnZ2vRokWOaQUFBXrnnXcqtJ0lZs+eXer9rFmzJMkxFkrcfffdOnXqlB588MEyd+f9We3bt1fjxo01Y8aMMt/nCwPc+UoC1vltcnJylJqaWqrdqVOnyqwnLi5OkhynqX777bdS8z08PBxHyyp76z3wZ3GKCjjPsmXLHEdijh07pgULFmjv3r164oknHGEhKSlJvXv31t/+9jft379fbdu2VVpamj7//HNNmDDB8Zf0888/r4yMDK1atUqBgYFq06aNnnnmGT311FMaOnRoqV/yvr6+Wr58uZKTk9WlSxctW7ZMX331lZ588slSF+9e6Pnnn1d6erq6d++u0aNHy8vLS3//+99ls9n00ksvOdrFxcXJ09NTL774onJycmS1Wh2fe1KeF154QTfffLO6deume++9V6dOndKbb76pVq1alQo9l/Lyyy8rMTFR8fHxGjlypOM28dq1a5d6ntawYcP0+OOP65ZbbtH48eNVUFCgOXPmqFmzZqWCTIlWrVopISGh1G3ikjR16lRHm+nTp2v16tXq0qWLRo0apRYtWujkyZPaunWrVq5cqZMnT0qSRo0apTfffFP33HOPtmzZooiICH344Yfy9/ev0DaWyMrK0qBBgzRgwABt2LBB8+bN0/Dhw8t89k27du3UqlUrLVy4UM2bN1f79u0r1c+leHh4aM6cOUpKSlJcXJzuvfdeRUREaPfu3dqxY4fjVOmF+vfv7zjqUhK83n33XYWFhenw4cOOdu+//77eeust3XLLLWrSpInOnDmjd999V0FBQY6xfP/99+vkyZO64YYb1KBBAx04cECzZs1SXFzcJT+WAHAJt92/BVxFyrtN3NfX14iLizPmzJlT6jZbwzCMM2fOGBMnTjQiIyMNb29v47rrrjNefvllR7stW7YYXl5epW79Now/buXt1KmTERkZ6biVNzk52QgICDAyMzON/v37G/7+/kb9+vWNZ5991igqKiq1vC64TdwwDGPr1q1GQkKCUatWLcPf39/o3bu38d1335XZxnfffde49tprDU9PzwrdAv3RRx8ZsbGxhtVqNVq1amV88cUXxpAhQ4zY2FhHm5LbxF9++eVy17Fy5UqjW7duhp+fnxEUFGQkJSUZO3fuLNMuLS3NaNWqleHj42PExMQY8+bNu+ht4mPGjDHmzZtnXHfddYbVajXatWtX7rYcPXrUGDNmjBEVFWV4e3sb4eHhRp8+fYx33nmnVLsDBw4YgwYNMvz9/Y169eoZjzzyiLF8+fJK3Sa+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TEy8ZBur1arw8PBy5+3atUvLly/Xpk2b1LFjR0nSrFmzNHDgQL3yyiuKjIysbEkAAAClVDrgVMSaNWsUFhamOnXq6IYbbtDzzz+vunXrSpI2bNig4OBgR7iRpL59+8rDw0Pff/+9brnlljLrs9lsstlsjve5ubmSJLvdLrvd7opNqHEKCwsdX9mnuJqVjE/GKa52jFXnq8y+dHrAGTBggP7yl7+ocePGyszM1JNPPqnExERt2LBBnp6eOnLkiMLCwkoX4eWlkJAQHTlypNx1pqSkaOrUqWWmp6Wlyd/f39mbUCMdypMkL23cuFG/bnd3NcDlpaenu7sEoEIYq85TUFBQ4bZODzjDhg1z/Lt169Zq06aNmjRpojVr1qhPnz5XtM7Jkydr0qRJjve5ubmKiopS//79FRQU9KdrhvTDwZPSts3q2rWr2kaHuLsc4KLsdrvS09PVr18/eXt7u7sc4KIYq85XcganIlxyiup81157rerVq6d9+/apT58+Cg8P17Fjx0q1KSws1MmTJy963Y7VapXVai0z3dvbm0HjJF5eXo6v7FNUB/z8o7pgrDpPZfajyz8H55dfftFvv/2miIgISVJ8fLxOnz6tLVu2ONp88803Ki4uVpcuXVxdDgAAqAEqfQQnLy9P+/btc7zPyspSRkaGQkJCFBISoqlTp2rIkCEKDw9XZmamHnvsMTVt2lQJCQmSpObNm2vAgAEaNWqU3n77bdntdo0dO1bDhg3jDioAAOAUlT6Cs3nzZrVr107t2rWTJE2aNEnt2rXTM888I09PT/34448aNGiQmjVrppEjR6pDhw7617/+VeoU0/z58xUbG6s+ffpo4MCB6t69u9555x3nbRUAAKjRKn0Ep1evXjIM46LzV6xYcdl1hISEaMGCBZXtGgAAoEJ4FhUAADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADCdSgecdevWKSkpSZGRkbJYLFqyZIljnt1u1+OPP67WrVsrICBAkZGRuueee5SdnV1qHY0aNZLFYin1mj59+p/eGAAAAOkKAk5+fr7atm2r2bNnl5lXUFCgrVu36umnn9bWrVv12Wefac+ePRo0aFCZttOmTdPhw4cdr3Hjxl3ZFgAAAFzAq7ILJCYmKjExsdx5tWvXVnp6eqlpb775pjp37qyDBw8qOjraMT0wMFDh4eGV7R4AAOCyKh1wKisnJ0cWi0XBwcGlpk+fPl3PPfecoqOjNXz4cE2cOFFeXuWXY7PZZLPZHO9zc3Ml/XFKzG63u6z2mqSwsNDxlX2Kq1nJ+GSc4mrHWHW+yuxLlwacc+fO6fHHH9cdd9yhoKAgx/Tx48erffv2CgkJ0XfffafJkyfr8OHDeu2118pdT0pKiqZOnVpmelpamvz9/V1Wf01yKE+SvLRx40b9ut3d1QCXd+HRYuBqxVh1noKCggq3tRiGYVxpRxaLRYsXL9bgwYPLzLPb7RoyZIh++eUXrVmzplTAudB7772nBx98UHl5ebJarWXml3cEJyoqSidOnLjkelFxPxw8qaHvbtaiUR3VNjrE3eUAF2W325Wenq5+/frJ29vb3eUAF8VYdb7c3FzVq1dPOTk5l/3975IjOHa7XbfddpsOHDigb7755rJFdOnSRYWFhdq/f79iYmLKzLdareUGH29vbwaNk5ScHvTy8mKfolrg5x/VBWPVeSqzH50ecErCzd69e7V69WrVrVv3sstkZGTIw8NDYWFhzi4HAADUQJUOOHl5edq3b5/jfVZWljIyMhQSEqKIiAgNHTpUW7du1dKlS1VUVKQjR45IkkJCQuTj46MNGzbo+++/V+/evRUYGKgNGzZo4sSJuuuuu1SnTh3nbRkAAKixKh1wNm/erN69ezveT5o0SZKUnJysKVOm6IsvvpAkxcXFlVpu9erV6tWrl6xWqz766CNNmTJFNptNjRs31sSJEx3rAQAA+LMqHXB69eqlS12XfLlrltu3b6+NGzdWtlsAAIAK41lUAADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdCodcNatW6ekpCRFRkbKYrFoyZIlpeYbhqFnnnlGERER8vPzU9++fbV3795SbU6ePKk777xTQUFBCg4O1siRI5WXl/enNgQAAKBEpQNOfn6+2rZtq9mzZ5c7/6WXXtIbb7yht99+W99//70CAgKUkJCgc+fOOdrceeed2rFjh9LT07V06VKtW7dODzzwwJVvBQAAwHm8KrtAYmKiEhMTy51nGIZmzJihp556SjfffLMk6YMPPlD9+vW1ZMkSDRs2TLt27dLy5cu1adMmdezYUZI0a9YsDRw4UK+88ooiIyP/xOYAAABcQcC5lKysLB05ckR9+/Z1TKtdu7a6dOmiDRs2aNiwYdqwYYOCg4Md4UaS+vbtKw8PD33//fe65ZZbyqzXZrPJZrM53ufm5kqS7Ha77Ha7MzehxiosLHR8ZZ/ialYyPhmnuNoxVp2vMvvSqQHnyJEjkqT69euXml6/fn3HvCNHjigsLKx0EV5eCgkJcbS5UEpKiqZOnVpmelpamvz9/Z1Reo13KE+SvLRx40b9ut3d1QCXl56e7u4SgAphrDpPQUFBhds6NeC4yuTJkzVp0iTH+9zcXEVFRal///4KCgpyY2Xm8cPBk9K2zeratavaRoe4uxzgoux2u9LT09WvXz95e3u7uxzgohirzldyBqcinBpwwsPDJUlHjx5VRESEY/rRo0cVFxfnaHPs2LFSyxUWFurkyZOO5S9ktVpltVrLTPf29mbQOImXl5fjK/sU1QE//6guGKvOU5n96NTPwWncuLHCw8O1atUqx7Tc3Fx9//33io+PlyTFx8fr9OnT2rJli6PNN998o+LiYnXp0sWZ5QAAgBqq0kdw8vLytG/fPsf7rKwsZWRkKCQkRNHR0ZowYYKef/55XXfddWrcuLGefvppRUZGavDgwZKk5s2ba8CAARo1apTefvtt2e12jR07VsOGDeMOKgAA4BSVDjibN29W7969He9Lro1JTk7W3Llz9dhjjyk/P18PPPCATp8+re7du2v58uXy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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAHNCAYAAAATwgHBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9TElEQVR4nO3de3zP9f//8ft7p/fOYw6bMVoSiuyDsKjIMuRUFKVaPqLvN5LW91P0C1k+RAfCIp9v6EAfHT7kUxcy5xQSEUJoyQcb0sy2Nu9tz98f/fb+9W7DZu+dXrtdLxeX9Xq+nq/n6/Ha6/1+797r8H7ZjDFGAAAAFuJR2QUAAAC4GwEHAABYDgEHAABYDgEHAABYDgEHAABYDgEHAABYDgEHAABYDgEHAABYDgEHAABYDgEHqGQ2m00vvPBCZZdheRs3bpTNZtPGjRsv2++FF16QzWbT2bNnK6awKqayXo+LFy+WzWbTTz/9VOHrhjURcGBZhR+Yf/xXv359devWTatWrars8srs+++/1wsvvMAfhGqqoKBA77zzjjp27KjQ0FAFBQXp+uuv18MPP6xt27ZVdnlAtedV2QUA5S0xMVFRUVEyxigtLU2LFy9W79699e9//1t9+vSp7PKu2vfff6/Jkyera9euuuaaayq7HJTSmDFjlJSUpP79+2vo0KHy8vLSoUOHtGrVKl177bXq1KlTpdT122+/ycuLPw2o/ngVw/J69eql9u3bO6eHDx+usLAwvf/++9U64FSkvLw8FRQUyMfHp7JLsYS0tDS98cYbGjFihBYsWOAyb9asWTpz5oxb1mOMUU5Ojvz8/Eq8jK+vr1vWDVQ2TlGhxqlVq5b8/PyK/F9qVlaWnn76aUVGRsput6t58+Z65ZVXZIyR9Pv/2bZo0UItWrTQb7/95lzu3LlzatCggW655Rbl5+dLkh555BEFBgbqxx9/VFxcnAICAhQREaHExETneJfz7bffqlevXgoODlZgYKC6d+/uctpi8eLFuvfeeyVJ3bp1c56Cu9L1JR9++KFuuOEG+fr6qlWrVlq+fLkeeeQRlyNAP/30k2w2m1555RXNmjVLTZs2ld1u1/fffy9JWr9+vW699VYFBASoVq1a6t+/vw4cOOCynj+PWajw+pY/stlsGj16tJYsWaLmzZvL19dX7dq10+bNm4ssf+LECf31r39VWFiY7Ha7brzxRi1cuLBIv//85z8aMGCAAgICVL9+fT311FPKzc297O/mz86ePav77rtPwcHBqlOnjp588knl5OQ4599+++1q06ZNscs2b95ccXFxlxw7JSVFxhh17ty5yLzCU6mFivudScVfs3LNNdeoT58++vzzz9W+fXv5+fnpzTffVKtWrdStW7ciYxQUFKhhw4YaNGiQy/oLr8H56KOPZLPZtGnTpiLLvvnmm7LZbNq3b5+z7eDBgxo0aJBCQ0Pl6+ur9u3ba+XKlUWW3b9/v+644w75+fmpUaNGmjJligoKCor/ZQFXiSM4sLzz58/r7NmzMsbo9OnTmjNnjjIzM/Xggw86+xhj1K9fP23YsEHDhw9XdHS0Pv/8c/3tb3/TiRMnNHPmTPn5+entt99W586d9X/+z//Ra6+9JkkaNWqUzp8/r8WLF8vT09M5Zn5+vnr27KlOnTppxowZWr16tSZNmqS8vDwlJiZest79+/fr1ltvVXBwsJ555hl5e3vrzTffVNeuXbVp0yZ17NhRt912m8aMGaPZs2frueeeU8uWLSXJ+bM4n332mQYPHqzWrVtr2rRp+vXXXzV8+HA1bNiw2P6LFi1STk6ORo4cKbvdrtDQUK1du1a9evXStddeqxdeeEG//fab5syZo86dO2vXrl1Xfaps06ZNWrZsmcaMGSO73a433nhDPXv21Ndff61WrVpJ+v2oR6dOnZyBqF69elq1apWGDx+ujIwMjR07VtLvQbR79+76+eefNWbMGEVEROjdd9/V+vXrS1XTfffdp2uuuUbTpk3Ttm3bNHv2bP3666965513JEkPPfSQRowYoX379jlrlKQdO3bohx9+0PPPP3/JsZs0aSLp98B57733yt/fv1S1Xc6hQ4d0//3367HHHtOIESPUvHlzDR48WC+88IJSU1MVHh7u7LtlyxadPHlSQ4YMKXasu+66S4GBgfrggw90++23u8xbtmyZbrzxRue279+/X507d1bDhg01btw4BQQE6IMPPtCAAQP08ccf6+6775Ykpaamqlu3bsrLy3P2W7BgQamOMgElYgCLWrRokZFU5J/dbjeLFy926btixQojyUyZMsWlfdCgQcZms5kjR44428aPH288PDzM5s2bzYcffmgkmVmzZrksFx8fbySZJ554wtlWUFBg7rrrLuPj42POnDnjbJdkJk2a5JweMGCA8fHxMUePHnW2nTx50gQFBZnbbrvN2Va47g0bNpTo99G6dWvTqFEjc+HCBWfbxo0bjSTTpEkTZ1tKSoqRZIKDg83p06ddxoiOjjb169c3v/zyi7Ntz549xsPDwzz88MMu2//HMQtNmjTJ/Pljp3C/fPPNN862Y8eOGV9fX3P33Xc724YPH24aNGhgzp4967L8kCFDTEhIiMnOzjbGGDNr1iwjyXzwwQfOPllZWea6664r0e+rsMZ+/fq5tD/++ONGktmzZ48xxpj09HTj6+trnn32WZd+Y8aMMQEBASYzM/Oy63n44YeNJFO7dm1z9913m1deecUcOHDgkvX8WeHrOyUlxdnWpEkTI8msXr3ape+hQ4eMJDNnzpwi2xQYGOj83RlT9PV4//33m/r165u8vDxn26lTp4yHh4dJTEx0tnXv3t20bt3a5OTkONsKCgrMLbfcYpo1a+ZsGzt2rJFktm/f7mw7ffq0CQkJKbI9QFkQcGBZhX8AkpKSTHJysklOTjbvvfee6dmzp/Hy8jIff/yxs+/IkSONp6enycjIcBlj69atRf4w5ObmmtatW5uoqChTr149c/vtt5uCggKX5QoDzqFDh1zaV61aZSSZ999/39n2xz8oeXl5xt/f39x3331Ftuexxx4zHh4e5vz588aY0gWcEydOGEnmueeeKzKvdevWxQacYcOGufQ7efKkkWSeeeaZImPExcWZunXrumx/aQJOTExMkb6DBw82/v7+Ji8vzxQUFJhatWqZkSNHmjNnzrj8K9zPW7ZsMcYY06NHD9OgQYMi+2TGjBmlCjiff/65S/uBAweMJDNt2jSXGhs3buxcV15engkLCzNDhw697DqMMSY/P9/MnTvXtG3b1iWA33HHHeY///nPZX9nxlw64ERFRRW7vujoaNOlSxfndF5enqlfv765//77Xfr9OeAUhv+1a9c62+bMmePy+v7ll1+MzWYzL774YpH9M3nyZCPJuU3XX3+96dSpU5H6CgMkAQfuwjU4sLwOHTooNjZWsbGxGjp0qD777DPdcMMNGj16tC5evChJOnbsmCIiIhQUFOSybOEpn2PHjjnbfHx8tHDhQqWkpOjChQtatGhRsddIeHh46Nprr3Vpu/766yXpkrd2nzlzRtnZ2WrevHmReS1btlRBQYGOHz9e8o3/fwrrv+6664rMK65NkqKioood41K1nT17VllZWaWuTZKaNWtWpO36669Xdna2zpw5ozNnzig9PV0LFixQvXr1XP4NGzZMknT69Glnndddd12RfVJc3aWpqWnTpvLw8HDZdw8//LB+/vlnffHFF5KktWvXKi0tTQ899NAVx/fw8NCoUaO0c+dOnT17Vp988ol69eql9evXX/KUUUn8eb8VGjx4sL788kudOHFC0u/fC3T69GkNHjz4suP17NlTISEhWrZsmbNt2bJlio6Odr6ejxw5ImOMJkyYUGT/TJo0SZLr/iluf5d2/wBXwjU4qHE8PDzUrVs3vf766zp8+LBuvPHGUo/x+eefS5JycnJ0+PDhS/5Rqc7Kck1EcYFPkvMi7NIqvAD1wQcfVHx8fLF9brrppqsau6SK26a4uDiFhYXpvffe02233ab33ntP4eHhio2NLdXYderUUb9+/dSvXz/ntVbHjh1TkyZNSv27vNR+Gzx4sMaPH68PP/xQY8eO1QcffKCQkBD17NnzsrXZ7XYNGDBAy5cv1xtvvKG0tDR9+eWXmjp1qrNP4f75n//5n0teXH2pIA2UFwIOaqS8vDxJUmZmpqTfL/pcu3atLly44HIU5+DBg875hb777jslJiZq2LBh2r17tx599FHt3btXISEhLusoKCjQjz/+6Py/XEn64YcfJOmSF+PWq1dP/v7+OnToUJF5Bw8elIeHhyIjIyVdOkQUp7D+I0eOFJlXXNvlxrhUbXXr1lVAQIAkqXbt2kpPTy/S749Hwv7o8OHDRdp++OEH+fv7q169epKkoKAg5efnXzE8NGnSRPv27ZMxxuV3VFzdl/Pn4HrkyBEVFBS47DtPT0898MADWrx4saZPn64VK1ZoxIgRLhebl1b79u21adMmnTp1Sk2aNFHt2rUlSenp6apVq5az36V+l5cSFRWlDh06aNmyZRo9erT+9a9/acCAAbLb7VdcdvDgwXr77be1bt06HThwQMYYlyM/hUcqvb29S7R/itvfpd0/wJVwigo1jsPh0Jo1a+Tj4+M8BdW7d2/l5+dr7ty5Ln1nzpwpm82mXr16OZd95JFHFBERoddff12LFy9WWlqannrqqWLX9cfxjDGaO3euvL291b1792L7e3p6qkePHvrkk09cToWkpaVp6dKl6tKli4KDgyXJGSaKCxJ/FhERoVatWumdd95xhjrp97uX9u7de8XlJalBgwaKjo7W22+/7bLOffv2ac2aNerdu7ezrWnTpjp//ry+++47Z9upU6e0fPnyYsfeunWrdu3a5Zw+fvy4PvnkE/Xo0UOenp7y9PTUwIED9fHHH7vcllzoj98b07t3b508eVIfffSRsy07O7vI981cSVJSksv0nDlzJMn5Wij00EMP6ddff9Vjjz1W5O68S0lNTXXedv9HFy9e1Lp16+Th4eE84tG0aVNJcrltPisrS2+//Xaptkf6Pahs27ZNCxcu1NmzZ694eqpQbGysQkNDtWzZMi1btkwdOnRwCX/169dX165d9eabb+rUqVNFlv/z/tm2bZu+/vprl/lLliwp9fYAl1W5lwAB5afwIszExETz7rvvmnfffde8+uqrpl27dkaSGTdunLNvfn6+6datm7HZbGbkyJEmKSnJ9O/f30gyY8eOdfabOHGisdlsZv369c62KVOmGEnms88+c7bFx8cbX19f06xZM/Pwww+bpKQk06dPn2Iv9NWfLurct2+fCQgIMA0bNjR///vfzfTp0821115r7Ha72bZtm7PfqVOnjKenp+nUqZNZvHixef/9901aWtolfx8rV640NpvN3HTTTWbmzJlm4sSJJjQ01LRq1cpcc801zn6FFxm//PLLRcZITk42Xl5epkWLFubll182iYmJpl69eqZ27drmxx9/dPY7e/asCQgIMNdee62ZNWuWmTp1qomMjHReUPvn7W/VqpWpW7euSUxMNNOnTzdNmjQxvr6+zjuWjDEmNTXVNGnSxPj7+5snn3zSvPnmm2batGnm3nvvNbVr13b2K7xjqvAOp1mzZpl27dqZm266qVQXGbdu3dr07dvXJCUlmQcffNBIMg888ECxy7Rq1cpIMi1btrzs2IV27NhhbDab6d69u5k6dapZuHCheemll0ybNm2KvOYuXrxoGjdubOrWrWumT59uXnnlFXPDDTc4X8d/vsj4rrvuuuR6jx8/bmw2mwkKCjKhoaHm4sWLRfr8+fVY6NFHHzWBgYHGZrOZV199tcj8/fv3m9q1a5s6deqYcePGmQULFpgXX3zR9O7d29x0003OfidPnjR16tQxtWvXNi+88IJ5+eWXTbNmzZz7h4uM4S4EHFhWcbeJ+/r6mujoaDNv3rwid9lcuHDBPPXUUyYiIsJ4e3ubZs2amZdfftnZb+fOncbLy8vl1m9jfr8b5eabbzYRERHm119/Ncb8HnACAgLM0aNHTY8ePYy/v78JCwszkyZNMvn5+S7LF/cHZdeuXSYuLs4EBgYaf39/061bN/PVV18V2cZ//OMf5tprrzWenp4l+uP9z3/+07Ro0cLY7XbTqlUrs3LlSjNw4EDTokULZ5/LBRxjjFm7dq3p3Lmz8fPzM8HBwaZv377m+++/L9JvzZo1plWrVsbHx8c0b97cvPfee5e8i2rUqFHmvffeM82aNTN2u9385S9/KXZb0tLSzKhRo0xkZKTx9vY24eHhpnv37mbBggUu/Y4dO2b69etn/P39Td26dc2TTz5pVq9eXaqA8/3335tBgwaZoKAgU7t2bTN69Gjz22+/FbtM4R1aU6dOvezYhTIyMszrr79u4uLiTKNGjYy3t7cJCgoyMTEx5h//+EeR1+bOnTtNx44djY+Pj2ncuLF57bXXLnkX1eUCjjHGdO7c2Ugyjz76aLHzLxVwkpOTjSRjs9nM8ePHi1326NGj5uGHHzbh4eHG29vbNGzY0PTp08d89NFHLv2+++47c/vttxtfX1/TsGFD8+KLL5q33nqLgAO3shlTgq9VBVAqjzzyiD766COX00FVVXR0tOrVq6fk5ORKWb/NZtOoUaOKnB6sTl5//XU99dRT+umnn9S4cePKLgeAuAYHqDEcDofz4upCGzdu1J49e9S1a9fKKcoCjDF66623dPvttxNugCqEu6iAGuLEiROKjY3Vgw8+qIiICB08eFDz589XeHi4/uu//quyy6t2srKytHLlSm3YsEF79+7VJ598UtklAfgDjuAANUTt2rXVrl07/e///q+eeOIJLV68WHfddZe2bNmiOnXqVGgthQ+KLLyNOykpyTk9bty4Cq3lap05c0YPPPCAPvzwQz333HPq169fZZcE4A+4BgdAhVu8eLGGDRumxMTEIl+S2KpVK0VHR1dOYQAsg1NUACpNr1691L59e7eNl5WV5fx+IAA1G6eoAFQpx44d0+OPP67mzZvLz89PderU0b333lvk+V2Fp7k2bdqkxx9/XPXr11ejRo2c81etWqVbb71VAQEBCgoK0l133aX9+/dX8NYAqCwcwQFQac6fP6+zZ8+6tO3YsUNfffWVhgwZokaNGumnn37SvHnz1LVrV33//ffy9/d36f/444+rXr16mjhxovNhn+++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eu211/TXv/5VkmSz2TR27FhNmTJFzZo1U1RUlCZMmKCIiAgNGDDA3eUAAIAayO0BZ86cOZowYYIef/xxnT59WhEREXrsscc0ceJEZ59nnnlGWVlZGjlypNLT09WlSxetXr1avr6+7i4HAADUQG4POEFBQZo1a5ZmzZp1yT42m02JiYlKTEx09+oBAAB4FhUAALAeAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALAcAg4AALCccgk4J06c0IMPPqg6derIz89PrVu31jfffOOcb4zRxIkT1aBBA/n5+Sk2NlaHDx8uj1IAAEAN5PaA8+uvv6pz587y9vbWqlWr9P333+vVV19V7dq1nX1mzJih2bNna/78+dq+fbsCAgIUFxennJwcd5cDAABqIC93Dzh9+nRFRkZq0aJFzraoqCjnfxtjNGvWLD3//PPq37+/JOmdd95RWFiYVqxYoSFDhri7JAAAUMO4PeCsXLlScXFxuvfee7Vp0yY1bNhQjz/+uEaMGCFJSklJUWpqqmJjY53LhISEqGPHjtq6dWuxASc3N1e5ubnO6YyMDEmSw+GQw+Fw9yagiivc5+x7oObJy8tz/uQzoOYpzT53e8D58ccfNW/ePCUkJOi5557Tjh07NGbMGPn4+Cg+Pl6pqamSpLCwMJflwsLCnPP+bNq0aZo8eXKR9jVr1sjf39/dm4BqIjk5ubJLAFDBjmdKkpe2bdumE/squxpUtOzs7BL3dXvAKSgoUPv27TV16lRJ0l/+8hft27dP8+fPV3x8/FWNOX78eCUkJDinMzIyFBkZqR49eig4ONgtdaP6cDgcSk5O1p133ilvb+/KLgdABdrz8zlp7zfq1KmT2jQOrexyUMEKz+CUhNsDToMGDXTDDTe4tLVs2VIf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sgYfHx8NGjTIpf/gwYOdFytnZmaqXbt22r17t8u/H374odjTXgCqNwIOALe74YYblJWVpXr16kmSTp065Zz3xwuOr2To0KFatmyZtm7dqh9//FFDhgy5Yv/Vq1dr//79Wr9+vUsgatu2rQ4fPqz69evruuuuc/kXEhKikJAQNWjQQNu3b3cuk5eXp507d5a4XgBVBwEHwFX75ZdfdMcdd+i9997Td999p5SUFH344YeaMWOG+vfvLz8/P3Xq1Ml58fCmTZv0/PPPl3j8e+65RxcuXNB///d/q1u3boqIiLhs/9tuu03h4eEaOnSooqKiXE43DR06VHXr1lX//v31xRdfKCUlRRs3btSYMWP0n//8R5L05JNP6qWXXtKKFSt08OBBPf744+X+RYIAygcBB8BVCwwMVMeOHTVz5kzddtttatWqlSZMmKARI0Zo7ty5kqSFCxcqLy9P7dq109ixYzVlypQSjx8UFKS+fftqz549lz09Vchms+n+++8vtr+/v782b96sxo0b65577lHLli01fPhw5eTkKDg4WJL09NNP66GHHlJ8fLxiYmIUFBSku+++uxS/EQBVhc0YvuQBAABYC0dwAACA5RBwAACA5RBwAACA5RBwAACA5RBwAACA5RBwAACA5RBwAACA5RBwAACA5RBwAACA5RBwAACA5RBwAACA5fxff6eqXPK+t5MAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "\n", "titanic.loc[~np.isnan(titanic[\"Age\"])].boxplot(column = \"Age\", by = \"Survived\")\n", "\n", "titanic.loc[~np.isnan(titanic[\"Fare\"])].boxplot(column = \"Fare\", by = \"Pclass\", showfliers = False)\n", "\n", "titanic.loc[~np.isnan(titanic[\"Fare\"])].boxplot(column = \"Fare\", by = \"Survived\", showfliers = False)\n", "\n", "# By default, they extend no more than 1.5 * IQR (IQR = Q3 - Q1) from the edges of the box, ending at the farthest data point within that interval. Outliers are plotted as separate dots." ] }, { "cell_type": "markdown", "id": "5e57d1be", "metadata": {}, "source": [ "## Cleaning the dataset" ] }, { "cell_type": "markdown", "id": "1e33d331", "metadata": {}, "source": [ "### Quality Checks" ] }, { "cell_type": "markdown", "id": "7f49552f", "metadata": {}, "source": [ "### Check for duplicate patients" ] }, { "cell_type": "code", "execution_count": 46, "id": "8f2ea12b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked]\n", "Index: []" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.loc[titanic.duplicated(subset=['PassengerId'])]" ] }, { "cell_type": "code", "execution_count": 47, "id": "b4afc229", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked]\n", "Index: []" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.loc[titanic.duplicated(subset=['Name'])]" ] }, { "cell_type": "code", "execution_count": 48, "id": "9c2bba88", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PassengerId int64\n", "Survived int64\n", "Pclass int64\n", "Name object\n", "Sex object\n", "Age float64\n", "SibSp int64\n", "Parch int64\n", "Ticket object\n", "Fare float64\n", "Cabin object\n", "Embarked object\n", "dtype: object" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.dtypes" ] }, { "cell_type": "code", "execution_count": 49, "id": "6c56b204", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 891 entries, 0 to 890\n", "Data columns (total 12 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 PassengerId 891 non-null int64 \n", " 1 Survived 891 non-null int64 \n", " 2 Pclass 891 non-null int64 \n", " 3 Name 891 non-null object \n", " 4 Sex 891 non-null object \n", " 5 Age 714 non-null float64\n", " 6 SibSp 891 non-null int64 \n", " 7 Parch 891 non-null int64 \n", " 8 Ticket 891 non-null object \n", " 9 Fare 891 non-null float64\n", " 10 Cabin 204 non-null object \n", " 11 Embarked 889 non-null object \n", "dtypes: float64(2), int64(5), object(5)\n", "memory usage: 83.7+ KB\n" ] } ], "source": [ "titanic.info()\n", "\n", "# Object is either string or mixed" ] }, { "cell_type": "code", "execution_count": 50, "id": "4676d238", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassAgeSibSpParchFare
010322.0107.2500
121138.01071.2833
231326.0007.9250
\n", "
" ], "text/plain": [ " PassengerId Survived Pclass Age SibSp Parch Fare\n", "0 1 0 3 22.0 1 0 7.2500\n", "1 2 1 1 38.0 1 0 71.2833\n", "2 3 1 3 26.0 0 0 7.9250" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.select_dtypes(include=['number']).head(3)" ] }, { "cell_type": "code", "execution_count": 51, "id": "cb576216", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameSexTicketCabinEmbarked
0Braund, Mr. Owen HarrismaleA/5 21171NaNS
1Cumings, Mrs. John Bradley (Florence Briggs Th...femalePC 17599C85C
2Heikkinen, Miss. LainafemaleSTON/O2. 3101282NaNS
\n", "
" ], "text/plain": [ " Name Sex \\\n", "0 Braund, Mr. Owen Harris male \n", "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female \n", "2 Heikkinen, Miss. Laina female \n", "\n", " Ticket Cabin Embarked \n", "0 A/5 21171 NaN S \n", "1 PC 17599 C85 C \n", "2 STON/O2. 3101282 NaN S " ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.select_dtypes(exclude=['number']).head(3)" ] }, { "cell_type": "markdown", "id": "f55772d3", "metadata": {}, "source": [ "### Handling missing values" ] }, { "cell_type": "code", "execution_count": 52, "id": "b762dab0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Titanic DATA columns with null values:\n", " PassengerId 0\n", "Survived 0\n", "Pclass 0\n", "Name 0\n", "Sex 0\n", "Age 177\n", "SibSp 0\n", "Parch 0\n", "Ticket 0\n", "Fare 0\n", "Cabin 687\n", "Embarked 2\n", "dtype: int64\n" ] } ], "source": [ "print('Titanic DATA columns with null values:\\n', titanic.isnull().sum())" ] }, { "cell_type": "code", "execution_count": 53, "id": "e3f67ec1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LR.png \u001b[34mdata\u001b[m\u001b[m/ datatypes.png\r\n", "\u001b[34mbootcamp_code\u001b[m\u001b[m/ data_types2.png\r\n" ] } ], "source": [ "ls .." ] }, { "cell_type": "markdown", "id": "044aa9d2", "metadata": {}, "source": [ "### Types of data attributes" ] }, { "cell_type": "markdown", "id": "b7a0f324", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "e356bd89", "metadata": {}, "source": [ "Source: Marena's slides" ] }, { "cell_type": "code", "execution_count": 54, "id": "77afc204", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 B96 B98\n", "1 C23 C25 C27\n", "2 G6\n", "Name: Cabin, dtype: object" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic['Cabin'].mode()" ] }, { "cell_type": "code", "execution_count": 55, "id": "72030554", "metadata": {}, "outputs": [], "source": [ "# When inplace = True, the data is modified in place, which means it will return nothing and the dataframe is now updated\n", "\n", "# When inplace = Fale, which is the default, then the operation is performed and it returns a copy of the object\n", "\n", "\n", "\n", "# Fill missing \"Age\" with column's median\n", "titanic['Age'].fillna(titanic['Age'].median(), inplace = True)\n", "\n", "# Fill missing \"Embarked\" values with column's mode\n", "titanic['Embarked'].fillna(titanic['Embarked'].mode()[0], inplace = True)\n", "\n", "# Fill missing \"Fare\" values with the column's median\n", "titanic['Cabin'].fillna(titanic['Cabin'].mode()[0], inplace = True)" ] }, { "cell_type": "code", "execution_count": 56, "id": "0e9a18bc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Titanic DATA columns with null values:\n", " PassengerId 0\n", "Survived 0\n", "Pclass 0\n", "Name 0\n", "Sex 0\n", "Age 0\n", "SibSp 0\n", "Parch 0\n", "Ticket 0\n", "Fare 0\n", "Cabin 0\n", "Embarked 0\n", "dtype: int64\n" ] } ], "source": [ "print('Titanic DATA columns with null values:\\n', titanic.isnull().sum())" ] }, { "cell_type": "code", "execution_count": 57, "id": "a68de63b", "metadata": {}, "outputs": [], "source": [ "def to_str(val):\n", " return str(val)" ] }, { "cell_type": "markdown", "id": "226ce258", "metadata": {}, "source": [ "### Handle different datatypes" ] }, { "cell_type": "code", "execution_count": 58, "id": "952488df", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "147" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(np.unique(titanic[\"Cabin\"]))" ] }, { "cell_type": "code", "execution_count": 59, "id": "0efa8d02", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "147" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(np.unique(titanic[\"Cabin\"].apply(to_str)))" ] }, { "cell_type": "code", "execution_count": 60, "id": "95734024", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "681" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(np.unique(titanic[\"Ticket\"]))" ] }, { "cell_type": "code", "execution_count": 62, "id": "e1fa689f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "891" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(np.unique(titanic[\"PassengerId\"]))" ] }, { "cell_type": "markdown", "id": "2d4226eb", "metadata": {}, "source": [ "### Drop unnecessary features" ] }, { "cell_type": "code", "execution_count": 63, "id": "56e46146", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500B96 B98S
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250B96 B98S
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500B96 B98S
.......................................
88688702Montvila, Rev. Juozasmale27.00021153613.0000B96 B98S
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen \"Carrie\"female28.012W./C. 660723.4500B96 B98S
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500B96 B98Q
\n", "

891 rows × 12 columns

\n", "
" ], "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", "886 887 0 2 \n", "887 888 1 1 \n", "888 889 0 3 \n", "889 890 1 1 \n", "890 891 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", "886 Montvila, Rev. Juozas male 27.0 0 \n", "887 Graham, Miss. Margaret Edith female 19.0 0 \n", "888 Johnston, Miss. Catherine Helen \"Carrie\" female 28.0 1 \n", "889 Behr, Mr. Karl Howell male 26.0 0 \n", "890 Dooley, Mr. Patrick male 32.0 0 \n", "\n", " Parch Ticket Fare Cabin Embarked \n", "0 0 A/5 21171 7.2500 B96 B98 S \n", "1 0 PC 17599 71.2833 C85 C \n", "2 0 STON/O2. 3101282 7.9250 B96 B98 S \n", "3 0 113803 53.1000 C123 S \n", "4 0 373450 8.0500 B96 B98 S \n", ".. ... ... ... ... ... \n", "886 0 211536 13.0000 B96 B98 S \n", "887 0 112053 30.0000 B42 S \n", "888 2 W./C. 6607 23.4500 B96 B98 S \n", "889 0 111369 30.0000 C148 C \n", "890 0 370376 7.7500 B96 B98 Q \n", "\n", "[891 rows x 12 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(titanic)" ] }, { "cell_type": "code", "execution_count": 64, "id": "1b114cd6", "metadata": {}, "outputs": [], "source": [ "#titanic.dropna(subset=['PassengerId','Cabin', 'Ticket'])" ] }, { "cell_type": "code", "execution_count": 65, "id": "b3de375d", "metadata": {}, "outputs": [], "source": [ "drop_columns = ['PassengerId','Cabin', 'Ticket']\n", "titanic.drop(drop_columns, axis=1, inplace = True)" ] }, { "cell_type": "markdown", "id": "f5b6801c", "metadata": {}, "source": [ "### Add new features:\n", "Recall, \"women and children\" (families) were given priority on lifeboats. Add features to better represent this.\n", "\n", "Key tools involve [pandas.DataFrame.loc](https://pandas.pydata.org/pandas-docs/stable/docs/reference/api/pandas.cut.html), [lambda functions](https://www.w3schools.com/python/python_lambda.asp), [str.split()](https://www.w3schools.com/python/ref_string_split.asp) and [df.apply()](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.apply.html)." ] }, { "cell_type": "code", "execution_count": 66, "id": "3b30e074", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 891 entries, 0 to 890\n", "Data columns (total 12 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Survived 891 non-null int64 \n", " 1 Pclass 891 non-null int64 \n", " 2 Name 891 non-null object \n", " 3 Sex 891 non-null object \n", " 4 Age 891 non-null float64\n", " 5 SibSp 891 non-null int64 \n", " 6 Parch 891 non-null int64 \n", " 7 Fare 891 non-null float64\n", " 8 Embarked 891 non-null object \n", " 9 FamilySize 891 non-null int64 \n", " 10 IsAlone 891 non-null int64 \n", " 11 Title 891 non-null object \n", "dtypes: float64(2), int64(6), object(4)\n", "memory usage: 83.7+ KB\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/8s/gln687hj5tq147hdqz6xjs240000gp/T/ipykernel_74598/3451468052.py:4: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " titanic['IsAlone'].loc[titanic['FamilySize'] > 1] = 0 # Update to no/0 if family size is greater than 1\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SurvivedPclassNameSexAgeSibSpParchFareEmbarkedFamilySizeIsAloneTitle
34012Navratil, Master. Edmond Rogermale2.01126.00S30Master
45002West, Mr. Edwy Arthurmale36.01227.75S40Mr
73202Knight, Mr. Robert Jmale28.0000.00S11Mr
\n", "
" ], "text/plain": [ " Survived Pclass Name Sex Age SibSp \\\n", "340 1 2 Navratil, Master. Edmond Roger male 2.0 1 \n", "450 0 2 West, Mr. Edwy Arthur male 36.0 1 \n", "732 0 2 Knight, Mr. Robert J male 28.0 0 \n", "\n", " Parch Fare Embarked FamilySize IsAlone Title \n", "340 1 26.00 S 3 0 Master \n", "450 2 27.75 S 4 0 Mr \n", "732 0 0.00 S 1 1 Mr " ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# BINARY VARIABLES: FamilySize and IsAlone\n", "titanic['FamilySize'] = titanic['SibSp'] + titanic['Parch'] + 1\n", "titanic['IsAlone'] = 1 # Initialize variable by setting to yes/1 for is alone\n", "titanic['IsAlone'].loc[titanic['FamilySize'] > 1] = 0 # Update to no/0 if family size is greater than 1\n", "\n", "# NOMINAL VARIABLES: Title or prefix in person's name\n", "titanic['Title'] = titanic['Name'].str.split(\", \", expand=True)[1].str.split(\".\", expand=True)[0]\n", " \n", "# CLEAN RARE TITLES\n", "min_freq = 10 # Min Freq\n", "rare_titles = (titanic['Title'].value_counts() < min_freq) \n", "titanic['Title'] = titanic['Title'].apply(lambda x: 'Misc' if rare_titles.loc[x] == True else x)\n", "\n", "# Preview cleaned data\n", "titanic.info()\n", "\n", "titanic.sample(3) # Show random sample of data" ] }, { "cell_type": "markdown", "id": "7a7ae2b6", "metadata": {}, "source": [ "## One-hot encoding" ] }, { "cell_type": "markdown", "id": "32be213d", "metadata": {}, "source": [ "Some algorithms can work with categorical data directly.\n", "\n", "For example, a decision tree can be learned directly from categorical data with no data transform required (this depends on the specific implementation).\n", "\n", "Many machine learning algorithms cannot operate on label data directly. They require all input variables and output variables to be numeric.\n", "\n", "In general, this is mostly a constraint of the efficient implementation of machine learning algorithms rather than hard limitations on the algorithms themselves.\n", "\n", "- Integer Encoding\n", " \n", "As a first step, each unique category value is assigned an integer value.\n", "\n", "For example, “red” is 1, “green” is 2, and “blue” is 3.\n", "\n", "This is called a label encoding or an integer encoding and is easily reversible.\n", "\n", "For some variables, this may be enough.\n", "\n", "The integer values have a natural ordered relationship between each other and machine learning algorithms may be able to understand and harness this relationship.\n", "\n", "For example, ordinal variables like the “place” example above would be a good example where a label encoding would be sufficient.\n", "\n", "2. One-Hot Encoding\n", "\n", "For categorical variables where no such ordinal relationship exists, the integer encoding is not enough.\n", "\n", "In fact, using this encoding and allowing the model to assume a natural ordering between categories may result in poor performance or unexpected results (predictions halfway between categories).\n", "\n", "In this case, a one-hot encoding can be applied to the integer representation. This is where the integer encoded variable is removed and a new binary variable is added for each unique integer value.\n", "\n", "In the “color” variable example, there are 3 categories and therefore 3 binary variables are needed. A “1” value is placed in the binary variable for the color and “0” values for the other colors.\n", "\n", "Source - https://machinelearningmastery.com/why-one-hot-encode-data-in-machine-learning/" ] }, { "cell_type": "code", "execution_count": 67, "id": "452ed8e1", "metadata": {}, "outputs": [], "source": [ "Target = ['Survived']\n", "\n", "categorical_features = [x for x in titanic.select_dtypes(exclude=['number']).columns.values if x != \"Name\"]\n", "numeric_features = [x for x in titanic.select_dtypes(include=['number']).columns.values if x not in Target]" ] }, { "cell_type": "code", "execution_count": 68, "id": "e452cffc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Sex', 'Embarked', 'Title']" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "categorical_features" ] }, { "cell_type": "code", "execution_count": 69, "id": "1a358b8d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Pclass', 'Age', 'SibSp', 'Parch', 'Fare', 'FamilySize', 'IsAlone']" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numeric_features" ] }, { "cell_type": "code", "execution_count": 72, "id": "7fb2acec", "metadata": {}, "outputs": [], "source": [ "## Make Pclass also categorical\n", "\n", "titanic.Pclass = titanic.Pclass.apply(to_str)" ] }, { "cell_type": "code", "execution_count": 73, "id": "5aa7ccf0", "metadata": {}, "outputs": [], "source": [ "Target = ['Survived']\n", "\n", "categorical_features = [x for x in titanic.select_dtypes(exclude=['number']).columns.values if x != \"Name\"]\n", "numeric_features = [x for x in titanic.select_dtypes(include=['number']).columns.values if x not in Target]" ] }, { "cell_type": "code", "execution_count": 74, "id": "903229a8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Pclass', 'Sex', 'Embarked', 'Title']" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "categorical_features" ] }, { "cell_type": "code", "execution_count": 75, "id": "73ec8870", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SurvivedPclassNameSexAgeSibSpParchFareEmbarkedFamilySizeIsAloneTitle
003Braund, Mr. Owen Harrismale22.0107.2500S20Mr
111Cumings, Mrs. John Bradley (Florence Briggs Th...female38.01071.2833C20Mrs
213Heikkinen, Miss. Lainafemale26.0007.9250S11Miss
311Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01053.1000S20Mrs
403Allen, Mr. William Henrymale35.0008.0500S11Mr
.......................................
88602Montvila, Rev. Juozasmale27.00013.0000S11Misc
88711Graham, Miss. Margaret Edithfemale19.00030.0000S11Miss
88803Johnston, Miss. Catherine Helen \"Carrie\"female28.01223.4500S40Miss
88911Behr, Mr. Karl Howellmale26.00030.0000C11Mr
89003Dooley, Mr. Patrickmale32.0007.7500Q11Mr
\n", "

891 rows × 12 columns

\n", "
" ], "text/plain": [ " Survived Pclass Name \\\n", "0 0 3 Braund, Mr. Owen Harris \n", "1 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... \n", "2 1 3 Heikkinen, Miss. Laina \n", "3 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) \n", "4 0 3 Allen, Mr. William Henry \n", ".. ... ... ... \n", "886 0 2 Montvila, Rev. Juozas \n", "887 1 1 Graham, Miss. Margaret Edith \n", "888 0 3 Johnston, Miss. Catherine Helen \"Carrie\" \n", "889 1 1 Behr, Mr. Karl Howell \n", "890 0 3 Dooley, Mr. Patrick \n", "\n", " Sex Age SibSp Parch Fare Embarked FamilySize IsAlone Title \n", "0 male 22.0 1 0 7.2500 S 2 0 Mr \n", "1 female 38.0 1 0 71.2833 C 2 0 Mrs \n", "2 female 26.0 0 0 7.9250 S 1 1 Miss \n", "3 female 35.0 1 0 53.1000 S 2 0 Mrs \n", "4 male 35.0 0 0 8.0500 S 1 1 Mr \n", ".. ... ... ... ... ... ... ... ... ... \n", "886 male 27.0 0 0 13.0000 S 1 1 Misc \n", "887 female 19.0 0 0 30.0000 S 1 1 Miss \n", "888 female 28.0 1 2 23.4500 S 4 0 Miss \n", "889 male 26.0 0 0 30.0000 C 1 1 Mr \n", "890 male 32.0 0 0 7.7500 Q 1 1 Mr \n", "\n", "[891 rows x 12 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(titanic)" ] }, { "cell_type": "code", "execution_count": 76, "id": "db7dd48d", "metadata": {}, "outputs": [], "source": [ "# ONE-HOT-ENCODE\n", "titanic = pd.get_dummies(titanic[categorical_features+numeric_features+Target])" ] }, { "cell_type": "markdown", "id": "cf5dd80b", "metadata": {}, "source": [ "## Normalisation" ] }, { "cell_type": "markdown", "id": "bb18f5f4", "metadata": {}, "source": [ "The goal of normalization is to transform features to be on a similar scale. This improves the performance and training stability of the model.\n", "\n", "Four common normalization techniques may be useful:\n", "\n", "scaling to a range\n", "clipping\n", "log scaling\n", "z-score\n", "\n", "#### Scaling to a range\n", "\n", "Scaling means converting floating-point feature values from their natural range (for example, 100 to 900) into a standard range—usually 0 and 1 (or sometimes -1 to +1). Use a simple formula to scale to a range:\n", "\n", "x' = (x - x_min)/(x_max - x_min)\n", "\n", "Scaling to a range is a good choice when both of the following conditions are met:\n", "\n", "You know the approximate upper and lower bounds on your data with few or no outliers.\n", "Your data is approximately uniformly distributed across that range.\n", "\n", "#### Feature Clipping\n", "\n", "If your data set contains extreme outliers, you might try feature clipping, which caps all feature values above (or below) a certain value to fixed value. \n", "\n", "#### Log Scaling\n", "\n", "Log scaling computes the log of your values to compress a wide range to a narrow range.\n", "\n", "x' = log(x)\n", "\n", "Log scaling is helpful when a handful of your values have many points, while most other values have few points. This data distribution is known as the power law distribution. Social networks are a good example. Log scaling changes the distribution, helping to improve linear model performance.\n", "\n", "#### Z-Score\n", "\n", "Z-score is a variation of scaling that represents the number of standard deviations away from the mean. You would use z-score to ensure your feature distributions have mean = 0 and std = 1. It’s useful when there are a few outliers, but not so extreme that you need clipping.\n", "\n", "The formula for calculating the z-score of a point, x, is as follows:\n", "\n", "x' = (x - x_mean)/std_dev\n", "\n", "Source - https://developers.google.com/machine-learning/data-prep/transform/normalization" ] }, { "cell_type": "markdown", "id": "bdad1307", "metadata": {}, "source": [ "#### Min_Max " ] }, { "cell_type": "code", "execution_count": 77, "id": "4b35ba46", "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import MinMaxScaler" ] }, { "cell_type": "code", "execution_count": 78, "id": "0f4a55c1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
MinMaxScaler()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "MinMaxScaler()" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scaler = MinMaxScaler()\n", "scaler.fit(titanic[['Age', 'SibSp', 'Parch', 'Fare', 'FamilySize']])" ] }, { "cell_type": "code", "execution_count": 79, "id": "8ffa7e30", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 80. 8. 6. 512.3292 11. ]\n" ] } ], "source": [ "print(scaler.data_max_)" ] }, { "cell_type": "code", "execution_count": 80, "id": "886460fe", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.27117366 0.125 0. 0.01415106 0.1 ]\n", " [0.4722292 0.125 0. 0.13913574 0.1 ]\n", " [0.32143755 0. 0. 0.01546857 0. ]\n", " ...\n", " [0.34656949 0.125 0.33333333 0.04577135 0.3 ]\n", " [0.32143755 0. 0. 0.0585561 0. ]\n", " [0.39683338 0. 0. 0.01512699 0. ]]\n" ] } ], "source": [ "print(scaler.transform(titanic[['Age', 'SibSp', 'Parch', 'Fare', 'FamilySize']]))" ] }, { "cell_type": "markdown", "id": "4abb84dc", "metadata": {}, "source": [ "#### Z-score" ] }, { "cell_type": "code", "execution_count": 81, "id": "75bbae75", "metadata": {}, "outputs": [], "source": [ "from scipy.stats import zscore" ] }, { "cell_type": "code", "execution_count": 82, "id": "7a24f5b1", "metadata": {}, "outputs": [], "source": [ "def get_zscore(elem_list):\n", " return zscore(elem_list)" ] }, { "cell_type": "code", "execution_count": 83, "id": "7058a92c", "metadata": {}, "outputs": [], "source": [ "for feat in ['Age', 'SibSp', 'Parch', 'Fare', 'FamilySize']:\n", " titanic[feat] = get_zscore(titanic[feat])\n" ] }, { "cell_type": "code", "execution_count": 84, "id": "4bbbaa55", "metadata": {}, "outputs": [], "source": [ "feat = \"Age\"\n", "titanic[feat] = get_zscore(titanic[feat])" ] }, { "cell_type": "code", "execution_count": 85, "id": "1aa2a64e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 -0.565736\n", "1 0.663861\n", "2 -0.258337\n", "3 0.433312\n", "4 0.433312\n", " ... \n", "886 -0.181487\n", "887 -0.796286\n", "888 -0.104637\n", "889 -0.258337\n", "890 0.202762\n", "Name: Age, Length: 891, dtype: float64" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic[\"Age\"]" ] }, { "cell_type": "code", "execution_count": 86, "id": "74ea9aac", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AgeSibSpParchFareFamilySizeIsAloneSurvivedPclass_1Pclass_2Pclass_3Sex_femaleSex_maleEmbarked_CEmbarked_QEmbarked_STitle_MasterTitle_MiscTitle_MissTitle_MrTitle_Mrs
0-0.5657360.432793-0.473674-0.5024450.059160000010100100010
10.6638610.432793-0.4736740.7868450.059160011001010000001
2-0.258337-0.474545-0.473674-0.488854-0.560975110011000100100
30.4333120.432793-0.4736740.4207300.059160011001000100001
40.433312-0.474545-0.473674-0.486337-0.560975100010100100010
...............................................................
886-0.181487-0.474545-0.473674-0.386671-0.560975100100100101000
887-0.796286-0.474545-0.473674-0.044381-0.560975111001000100100
888-0.1046370.4327932.008933-0.1762631.299429000011000100100
889-0.258337-0.474545-0.473674-0.044381-0.560975111000110000010
8900.202762-0.474545-0.473674-0.492378-0.560975100010101000010
\n", "

891 rows × 20 columns

\n", "
" ], "text/plain": [ " Age SibSp Parch Fare FamilySize IsAlone Survived \\\n", "0 -0.565736 0.432793 -0.473674 -0.502445 0.059160 0 0 \n", "1 0.663861 0.432793 -0.473674 0.786845 0.059160 0 1 \n", "2 -0.258337 -0.474545 -0.473674 -0.488854 -0.560975 1 1 \n", "3 0.433312 0.432793 -0.473674 0.420730 0.059160 0 1 \n", "4 0.433312 -0.474545 -0.473674 -0.486337 -0.560975 1 0 \n", ".. ... ... ... ... ... ... ... \n", "886 -0.181487 -0.474545 -0.473674 -0.386671 -0.560975 1 0 \n", "887 -0.796286 -0.474545 -0.473674 -0.044381 -0.560975 1 1 \n", "888 -0.104637 0.432793 2.008933 -0.176263 1.299429 0 0 \n", "889 -0.258337 -0.474545 -0.473674 -0.044381 -0.560975 1 1 \n", "890 0.202762 -0.474545 -0.473674 -0.492378 -0.560975 1 0 \n", "\n", " Pclass_1 Pclass_2 Pclass_3 Sex_female Sex_male Embarked_C \\\n", "0 0 0 1 0 1 0 \n", "1 1 0 0 1 0 1 \n", "2 0 0 1 1 0 0 \n", "3 1 0 0 1 0 0 \n", "4 0 0 1 0 1 0 \n", ".. ... ... ... ... ... ... \n", "886 0 1 0 0 1 0 \n", "887 1 0 0 1 0 0 \n", "888 0 0 1 1 0 0 \n", "889 1 0 0 0 1 1 \n", "890 0 0 1 0 1 0 \n", "\n", " Embarked_Q Embarked_S Title_Master Title_Misc Title_Miss Title_Mr \\\n", "0 0 1 0 0 0 1 \n", "1 0 0 0 0 0 0 \n", "2 0 1 0 0 1 0 \n", "3 0 1 0 0 0 0 \n", "4 0 1 0 0 0 1 \n", ".. ... ... ... ... ... ... \n", "886 0 1 0 1 0 0 \n", "887 0 1 0 0 1 0 \n", "888 0 1 0 0 1 0 \n", "889 0 0 0 0 0 1 \n", "890 1 0 0 0 0 1 \n", "\n", " Title_Mrs \n", "0 0 \n", "1 1 \n", "2 0 \n", "3 1 \n", "4 0 \n", ".. ... \n", "886 0 \n", "887 0 \n", "888 0 \n", "889 0 \n", "890 0 \n", "\n", "[891 rows x 20 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(titanic)" ] }, { "cell_type": "markdown", "id": "5e30214f", "metadata": {}, "source": [ "## Train a logistic Regression model" ] }, { "cell_type": "markdown", "id": "c53319b1", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "0eaf7a90", "metadata": {}, "source": [ "### Source - Prof. Radivojac's slides from CS 6140" ] }, { "cell_type": "code", "execution_count": 88, "id": "016d1259", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Age', 'SibSp', 'Parch', 'Fare', 'FamilySize', 'IsAlone', 'Survived',\n", " 'Pclass_1', 'Pclass_2', 'Pclass_3', 'Sex_female', 'Sex_male',\n", " 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Title_Master', 'Title_Misc',\n", " 'Title_Miss', 'Title_Mr', 'Title_Mrs'],\n", " dtype='object')" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.columns" ] }, { "cell_type": "code", "execution_count": 89, "id": "04b818f3", "metadata": {}, "outputs": [], "source": [ "from sklearn.linear_model import LogisticRegression\n", "\n", "clf = LogisticRegression(random_state = 0).fit(titanic[['Age', 'SibSp', 'Parch', 'Fare', 'FamilySize', 'IsAlone',\n", " 'Pclass_1', 'Pclass_2', 'Pclass_3', 'Sex_female', 'Sex_male',\n", " 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Title_Master', 'Title_Misc',\n", " 'Title_Miss', 'Title_Mr', 'Title_Mrs']], titanic[\"Survived\"])" ] }, { "cell_type": "code", "execution_count": 90, "id": "f204270d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
LogisticRegression(random_state=0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "LogisticRegression(random_state=0)" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf" ] }, { "cell_type": "code", "execution_count": 91, "id": "253f1c01", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.33033338, -0.41956684, -0.14435624, 0.17326743, -0.3588775 ,\n", " -0.42079248, 0.96309018, 0.01834236, -0.9813072 , 0.98148529,\n", " -0.98135995, 0.13830465, 0.08691227, -0.22509158, 1.84698932,\n", " -0.72021441, -0.27634155, -1.17079351, 0.32048549]])" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf.coef_" ] }, { "cell_type": "code", "execution_count": 92, "id": "99dd9087", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Age',\n", " 'SibSp',\n", " 'Parch',\n", " 'Fare',\n", " 'FamilySize',\n", " 'IsAlone',\n", " 'Pclass_1',\n", " 'Pclass_2',\n", " 'Pclass_3',\n", " 'Sex_female',\n", " 'Sex_male',\n", " 'Embarked_C',\n", " 'Embarked_Q',\n", " 'Embarked_S',\n", " 'Title_Master',\n", " 'Title_Misc',\n", " 'Title_Miss',\n", " 'Title_Mr',\n", " 'Title_Mrs']" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "['Age', 'SibSp', 'Parch', 'Fare', 'FamilySize', 'IsAlone',\n", " 'Pclass_1', 'Pclass_2', 'Pclass_3', 'Sex_female', 'Sex_male',\n", " 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Title_Master', 'Title_Misc',\n", " 'Title_Miss', 'Title_Mr', 'Title_Mrs']" ] }, { "cell_type": "code", "execution_count": 93, "id": "941837c9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.92175835, 0.07824165],\n", " [0.04258839, 0.95741161],\n", " [0.383652 , 0.616348 ],\n", " ...,\n", " [0.6244473 , 0.3755527 ],\n", " [0.49960376, 0.50039624],\n", " [0.90239683, 0.09760317]])" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf.predict_proba(titanic[['Age', 'SibSp', 'Parch', 'Fare', 'FamilySize', 'IsAlone',\n", " 'Pclass_1', 'Pclass_2', 'Pclass_3', 'Sex_female', 'Sex_male',\n", " 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Title_Master', 'Title_Misc',\n", " 'Title_Miss', 'Title_Mr', 'Title_Mrs']])" ] }, { "cell_type": "code", "execution_count": 94, "id": "4c347c12", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0,\n", " 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,\n", " 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1,\n", " 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0,\n", " 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1,\n", " 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0,\n", " 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,\n", " 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,\n", " 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0,\n", " 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0,\n", " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1,\n", " 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,\n", " 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n", " 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1,\n", " 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1,\n", " 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,\n", " 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1,\n", " 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0,\n", " 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1,\n", " 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0,\n", " 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1,\n", " 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1,\n", " 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1,\n", " 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1,\n", " 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1,\n", " 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1,\n", " 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1,\n", " 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,\n", " 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,\n", " 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0,\n", " 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,\n", " 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,\n", " 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0,\n", " 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,\n", " 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,\n", " 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1,\n", " 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0,\n", " 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1,\n", " 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0])" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf.predict(titanic[['Age', 'SibSp', 'Parch', 'Fare', 'FamilySize', 'IsAlone',\n", " 'Pclass_1', 'Pclass_2', 'Pclass_3', 'Sex_female', 'Sex_male',\n", " 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Title_Master', 'Title_Misc',\n", " 'Title_Miss', 'Title_Mr', 'Title_Mrs']])" ] }, { "cell_type": "code", "execution_count": 95, "id": "6f354dbf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8361391694725028" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf.score(titanic[['Age', 'SibSp', 'Parch', 'Fare', 'FamilySize', 'IsAlone',\n", " 'Pclass_1', 'Pclass_2', 'Pclass_3', 'Sex_female', 'Sex_male',\n", " 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Title_Master', 'Title_Misc',\n", " 'Title_Miss', 'Title_Mr', 'Title_Mrs']], titanic[\"Survived\"])" ] } ], "metadata": { "kernelspec": { "display_name": "Python (bootcamp)", "language": "python", "name": "bootcamp" }, "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.10.4" } }, "nbformat": 4, "nbformat_minor": 5 }