{ "cells": [ { "cell_type": "code", "execution_count": 30, "source": [ "from IPython.display import display\r\n", "import numpy as np\r\n", "import pandas as pd\r\n", "import seaborn as sns" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "Let's look at some simple examples of aggregation." ], "metadata": {} }, { "cell_type": "code", "execution_count": 31, "source": [ "# aggregaton on series returns single value\r\n", "rng = np.random.RandomState(42)\r\n", "ser = pd.Series(rng.rand(5))\r\n", "display(ser)\r\n", "print(f\"\\nseries sum: {ser.sum()}\")\r\n", "print(f\"series mean: {ser.mean()}\")\r\n", "print(f\"number of items in series: {ser.count()}\")" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "0 0.374540\n", "1 0.950714\n", "2 0.731994\n", "3 0.598658\n", "4 0.156019\n", "dtype: float64" ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "\n", "series sum: 2.811925491708157\n", "series mean: 0.5623850983416314\n", "number of items in series: 5\n" ] } ], "metadata": {} }, { "cell_type": "code", "execution_count": 32, "source": [ "# for a dataframe you, by default, get a value for each column, this can be altered\r\n", "df = pd.DataFrame({'A': rng.rand(5),\r\n", " 'B': rng.rand(5)})\r\n", "display(df)\r\n", "print(f\"\\ndataframe sum:\\n{df.sum()}\")\r\n", "print(f\"\\ndataframe mean:\\n{df.mean()}\")\r\n", "print(f\"\\nnumber of items in columns:\\n{df.count()}\")" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ " A B\n", "0 0.155995 0.020584\n", "1 0.058084 0.969910\n", "2 0.866176 0.832443\n", "3 0.601115 0.212339\n", "4 0.708073 0.181825" ], "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", "
AB
00.1559950.020584
10.0580840.969910
20.8661760.832443
30.6011150.212339
40.7080730.181825
\n", "
" ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "\n", "dataframe sum:\n", "A 2.389442\n", "B 2.217101\n", "dtype: float64\n", "\n", "dataframe mean:\n", "A 0.477888\n", "B 0.443420\n", "dtype: float64\n", "\n", "number of items in columns:\n", "A 5\n", "B 5\n", "dtype: int64\n" ] } ], "metadata": {} }, { "cell_type": "code", "execution_count": 33, "source": [ "# but we can get it to operate on the rows by specifying an axis\r\n", "print(f\"\\ndataframe sum by row:\\n{df.sum(axis='columns')}\")\r\n", "print(f\"\\ndataframe mean by row:\\n{df.mean(axis='columns')}\")\r\n" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "dataframe sum by row:\n", "0 0.176579\n", "1 1.027993\n", "2 1.698619\n", "3 0.813454\n", "4 0.889898\n", "dtype: float64\n", "\n", "dataframe mean by row:\n", "0 0.088290\n", "1 0.513997\n", "2 0.849309\n", "3 0.406727\n", "4 0.444949\n", "dtype: float64\n" ] } ], "metadata": {} }, { "cell_type": "code", "execution_count": 34, "source": [ "# Let's try a more complicated dataset: Titanic\r\n", "titan = pd.read_csv('./data/titanic/train.csv')\r\n", "display(titan.head(5))" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ " PassengerId Survived Pclass \\\n", "0 1 0 3 \n", "1 2 1 1 \n", "2 3 1 3 \n", "3 4 1 1 \n", "4 5 0 3 \n", "\n", " Name Sex Age SibSp \\\n", "0 Braund, Mr. Owen Harris male 22.0 1 \n", "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", "2 Heikkinen, Miss. Laina female 26.0 0 \n", "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", "4 Allen, Mr. William Henry male 35.0 0 \n", "\n", " Parch Ticket Fare Cabin Embarked \n", "0 0 A/5 21171 7.2500 NaN S \n", "1 0 PC 17599 71.2833 C85 C \n", "2 0 STON/O2. 3101282 7.9250 NaN S \n", "3 0 113803 53.1000 C123 S \n", "4 0 373450 8.0500 NaN S " ], "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", "
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
\n", "
" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 35, "source": [ "# Let's try that describe() method\r\n", "display(titan.describe())\r\n", "print()\r\n", "display(titan.dropna().describe())" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ " PassengerId Survived Pclass Age SibSp \\\n", "count 891.000000 891.000000 891.000000 714.000000 891.000000 \n", "mean 446.000000 0.383838 2.308642 29.699118 0.523008 \n", "std 257.353842 0.486592 0.836071 14.526497 1.102743 \n", "min 1.000000 0.000000 1.000000 0.420000 0.000000 \n", "25% 223.500000 0.000000 2.000000 20.125000 0.000000 \n", "50% 446.000000 0.000000 3.000000 28.000000 0.000000 \n", "75% 668.500000 1.000000 3.000000 38.000000 1.000000 \n", "max 891.000000 1.000000 3.000000 80.000000 8.000000 \n", "\n", " Parch Fare \n", "count 891.000000 891.000000 \n", "mean 0.381594 32.204208 \n", "std 0.806057 49.693429 \n", "min 0.000000 0.000000 \n", "25% 0.000000 7.910400 \n", "50% 0.000000 14.454200 \n", "75% 0.000000 31.000000 \n", "max 6.000000 512.329200 " ], "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", "
PassengerIdSurvivedPclassAgeSibSpParchFare
count891.000000891.000000891.000000714.000000891.000000891.000000891.000000
mean446.0000000.3838382.30864229.6991180.5230080.38159432.204208
std257.3538420.4865920.83607114.5264971.1027430.80605749.693429
min1.0000000.0000001.0000000.4200000.0000000.0000000.000000
25%223.5000000.0000002.00000020.1250000.0000000.0000007.910400
50%446.0000000.0000003.00000028.0000000.0000000.00000014.454200
75%668.5000001.0000003.00000038.0000001.0000000.00000031.000000
max891.0000001.0000003.00000080.0000008.0000006.000000512.329200
\n", "
" ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ " PassengerId Survived Pclass Age SibSp \\\n", "count 183.000000 183.000000 183.000000 183.000000 183.000000 \n", "mean 455.366120 0.672131 1.191257 35.674426 0.464481 \n", "std 247.052476 0.470725 0.515187 15.643866 0.644159 \n", "min 2.000000 0.000000 1.000000 0.920000 0.000000 \n", "25% 263.500000 0.000000 1.000000 24.000000 0.000000 \n", "50% 457.000000 1.000000 1.000000 36.000000 0.000000 \n", "75% 676.000000 1.000000 1.000000 47.500000 1.000000 \n", "max 890.000000 1.000000 3.000000 80.000000 3.000000 \n", "\n", " Parch Fare \n", "count 183.000000 183.000000 \n", "mean 0.475410 78.682469 \n", "std 0.754617 76.347843 \n", "min 0.000000 0.000000 \n", "25% 0.000000 29.700000 \n", "50% 0.000000 57.000000 \n", "75% 1.000000 90.000000 \n", "max 4.000000 512.329200 " ], "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", "
PassengerIdSurvivedPclassAgeSibSpParchFare
count183.000000183.000000183.000000183.000000183.000000183.000000183.000000
mean455.3661200.6721311.19125735.6744260.4644810.47541078.682469
std247.0524760.4707250.51518715.6438660.6441590.75461776.347843
min2.0000000.0000001.0000000.9200000.0000000.0000000.000000
25%263.5000000.0000001.00000024.0000000.0000000.00000029.700000
50%457.0000001.0000001.00000036.0000000.0000000.00000057.000000
75%676.0000001.0000001.00000047.5000001.0000001.00000090.000000
max890.0000001.0000003.00000080.0000003.0000004.000000512.329200
\n", "
" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 36, "source": [ "by_sex = titan.groupby(\"Sex\")\r\n", "display(by_sex.describe())\r\n", "display(by_sex['Survived'].describe())\r\n", "display(by_sex[['Survived', 'Fare', 'SibSp', 'Parch']].mean())" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ " PassengerId \\\n", " count mean std min 25% 50% 75% max \n", "Sex \n", "female 314.0 431.028662 256.846324 2.0 231.75 414.5 641.25 889.0 \n", "male 577.0 454.147314 257.486139 1.0 222.00 464.0 680.00 891.0 \n", "\n", " Survived ... Parch Fare \\\n", " count mean ... 75% max count mean std min \n", "Sex ... \n", "female 314.0 0.742038 ... 1.0 6.0 314.0 44.479818 57.997698 6.75 \n", "male 577.0 0.188908 ... 0.0 5.0 577.0 25.523893 43.138263 0.00 \n", "\n", " \n", " 25% 50% 75% max \n", "Sex \n", "female 12.071875 23.0 55.00 512.3292 \n", "male 7.895800 10.5 26.55 512.3292 \n", "\n", "[2 rows x 56 columns]" ], "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", "
PassengerIdSurvived...ParchFare
countmeanstdmin25%50%75%maxcountmean...75%maxcountmeanstdmin25%50%75%max
Sex
female314.0431.028662256.8463242.0231.75414.5641.25889.0314.00.742038...1.06.0314.044.47981857.9976986.7512.07187523.055.00512.3292
male577.0454.147314257.4861391.0222.00464.0680.00891.0577.00.188908...0.05.0577.025.52389343.1382630.007.89580010.526.55512.3292
\n", "

2 rows × 56 columns

\n", "
" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ " count mean std min 25% 50% 75% max\n", "Sex \n", "female 314.0 0.742038 0.438211 0.0 0.0 1.0 1.0 1.0\n", "male 577.0 0.188908 0.391775 0.0 0.0 0.0 0.0 1.0" ], "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", "
countmeanstdmin25%50%75%max
Sex
female314.00.7420380.4382110.00.01.01.01.0
male577.00.1889080.3917750.00.00.00.01.0
\n", "
" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ " Survived Fare SibSp Parch\n", "Sex \n", "female 0.742038 44.479818 0.694268 0.649682\n", "male 0.188908 25.523893 0.429809 0.235702" ], "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", "
SurvivedFareSibSpParch
Sex
female0.74203844.4798180.6942680.649682
male0.18890825.5238930.4298090.235702
\n", "
" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 37, "source": [ "display(titan.groupby(\"Sex\")[\"Survived\"].count())" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Sex\n", "female 314\n", "male 577\n", "Name: Survived, dtype: int64" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 38, "source": [ "display(titan.groupby([\"Sex\", \"Age\"])[\"Survived\"].count())" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Sex Age \n", "female 0.75 2\n", " 1.00 2\n", " 2.00 6\n", " 3.00 2\n", " 4.00 5\n", " ..\n", "male 70.00 2\n", " 70.50 1\n", " 71.00 2\n", " 74.00 1\n", " 80.00 1\n", "Name: Survived, Length: 145, dtype: int64" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 39, "source": [ "# Let's look at missing data\r\n", "display(titan.isnull().sum())" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "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" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 40, "source": [ "# Ok let's just sort out missing embarked first\r\n", "display(titan.loc[titan['Embarked'].isnull()])\r\n", "# searching suitable sources, turns out both embarked at Southhampton\r\n", "# https://www.encyclopedia-titanica.org/titanic-survivor/amelia-icard.html\r\n", "# https://www.encyclopedia-titanica.org/titanic-survivor/martha-evelyn-stone.html\r\n", "titan.loc[titan['Embarked'].isnull(), 'Embarked'] = 'S'" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ " PassengerId Survived Pclass Name \\\n", "61 62 1 1 Icard, Miss. Amelie \n", "829 830 1 1 Stone, Mrs. George Nelson (Martha Evelyn) \n", "\n", " Sex Age SibSp Parch Ticket Fare Cabin Embarked \n", "61 female 38.0 0 0 113572 80.0 B28 NaN \n", "829 female 62.0 0 0 113572 80.0 B28 NaN " ], "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", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
616211Icard, Miss. Ameliefemale38.00011357280.0B28NaN
82983011Stone, Mrs. George Nelson (Martha Evelyn)female62.00011357280.0B28NaN
\n", "
" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 41, "source": [ "# Age is a bit harder, but I am going to use the median age of the data grouped on sex and passenger class\r\n", "print('Median age:')\r\n", "display(titan.groupby(['Pclass', 'Sex'])['Age'].median())\r\n", "print('\\nCount by group:')\r\n", "display(titan.groupby(['Pclass', 'Sex'])['Age'].count())\r\n", "# let's fill the missing values\r\n", "titan['Age'] = titan.groupby(['Pclass', 'Sex'])['Age'].apply(lambda x: x.fillna(x.median()))\r\n", "print()\r\n", "display(titan.isnull().sum())" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Median age:\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "Pclass Sex \n", "1 female 35.0\n", " male 40.0\n", "2 female 28.0\n", " male 30.0\n", "3 female 21.5\n", " male 25.0\n", "Name: Age, dtype: float64" ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "\n", "Count by group:\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "Pclass Sex \n", "1 female 85\n", " male 101\n", "2 female 74\n", " male 99\n", "3 female 102\n", " male 253\n", "Name: Age, dtype: int64" ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "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 687\n", "Embarked 0\n", "dtype: int64" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 42, "source": [ "# we still need to do some work with Age and Fare\r\n", "# I propose we create some more meaningful groups to more easily visualize possibilities\r\n", "titan.boxplot(column=['Age'], figsize=(15,7))" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 42 }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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eiHOABhrX/rSl/LOd75zwfecvfOd78yXvvSlUY8GAAuIMwDG3szMzItuA0APXHMGwNjbvHlzvvOd76S1lqrKq171qlGPBADPY+UMgLF22mmn5ZFHHsnZZ5+dT37ykzn77LPzyCOP5LTTThv1aACwgJUzAMbak08+mQ0bNuTBBx/Me9/73iTJhg0b8thjj414MgBYyMoZAGOttZavfe1raa1lbm5uwTYA9GRRcVZVr6yqz1TVX1bVfFX9YlVtqKrbq+qB4eP6lR4WAE5UVeWqq65asO+qq6569pb6ANCLxa6c/XaSW1prP53kzUnmk1yZZH9r7dwk+4fbANCViy++OB//+MdTVdm2bVuqKh//+Mdz8cUXj3o0AFjguHFWVT+R5J8kmUmS1trft9a+m+TSJHuHb9ub5F0rMyIALN2hQ4dOaD8AjMpiVs5+KsnfJPmvVXVPVf1eVZ2WZLK1dihJho9nrOCcALAkz3wJ9XOvOfMl1AD0aDF3a1yb5OeS7GqtfaGqfjsncApjVe1MsjNJJicnMxgMljInACzZ+973vgwGgzzxxBMZDAZ53/vel3379vlMAqArdby7VVXVa5P879bapuH2P87TcXZOkunW2qGq2phk0Fp744v9rqmpqXbgwIFlGRwAFqOqsmnTphw6dChHjhzJxMRENm7cmAcffNAdGwE45arq7tba1LFeO+5pja21byf566p6Jry2J7k/yb4kVwz3XZHkpmWYFQCW1TPfcXbOOedkdnY255xzTh588MFs2LBh1KMBwALHXTlLkqq6IMnvJfnxJF9L8r48HXafSvL6JAeTvLu19uiL/R4rZwCcauvWrcv69evz7W9/+9l9r33ta/PYY4/l8OHDI5wMgNXoxVbOFnPNWVprX0xyrF+w/STmAoAVd+TIkXz1q1/Ny172sgwGg0xPT+fJJ5/MaaedNurRAGCBRcUZAPyompiYyOte97o8/vjjz+57xStekYmJiRFOBQDPt9gvoQaAH0lr167N448/nk2bNuWTn/xkNm3alMcffzxr1/r7SQD64pMJgLH2ve99L5OTkzl06FDe+973ZmJiIpOTk3nooYdGPRoALGDlDICxd8899+Tw4cOZm5vL4cOHc88994x6JAB4HnEGwNi77LLLXnQbAHogzgAYa2eddVbuuuuubN26NY888ki2bt2au+66K2edddaoRwOABVxzBsBYO3jwYF7/+tfnrrvuyl133ZXk6WA7ePDgiCcDgIWsnAEw9g4ePJjWWubm5tJaE2YAdMnKGQCnVFWNeoSRaq2NegQAOmXlDIBTqrU2sn/O/shnR3p8YQbAixFnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHRBnAAAAHVi7mDdV1YNJ/jbJ0SRPtdamqmpDkj9MsinJg0l+tbX22MqMCQAAMN5OZOVsW2vtgtba1HD7yiT7W2vnJtk/3AYAAGAJTua0xkuT7B0+35vkXSc9DQAAwCq1qNMak7Qkt1VVS/K7rbXrk0y21g4lSWvtUFWdcawfrKqdSXYmyeTkZAaDwclPDQBL5HMIgF4tNs62tta+NQyw26vqLxd7gGHIXZ8kU1NTbXp6+sSnBIDlcMvN8TkEQK8WdVpja+1bw8eHk9yY5OeTPFRVG5Nk+PjwSg0JAAAw7o4bZ1V1WlW9/JnnSd6S5N4k+5JcMXzbFUluWqkhAQAAxt1iTmucTHJjVT3z/v/RWrulqv4syaeqakeSg0nevXJjAgAAjLfjxllr7WtJ3nyM/d9Jsn0lhgIAAFhtTuZW+gAAACwTcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANABcQYAANCBRcdZVa2pqnuq6rPD7Q1VdXtVPTB8XL9yYwIAAIy3E1k5+40k88/ZvjLJ/tbauUn2D7cBAABYgkXFWVWdmeQdSX7vObsvTbJ3+Hxvknct62QAAACryNpFvu+3kvy7JC9/zr7J1tqhJGmtHaqqM471g1W1M8nOJJmcnMxgMFjysABwsnwOAdCr48ZZVf3TJA+31u6uqukTPUBr7fok1yfJ1NRUm54+4V8BAMvjlpvjcwiAXi1m5WxrkndW1duTrEvyE1X135I8VFUbh6tmG5M8vJKDAgAAjLPjXnPWWruqtXZma21Tkvck+Z+ttV9Lsi/JFcO3XZHkphWbEgAAYMydzPecXZPk4qp6IMnFw20AAACWYLE3BEmStNYGSQbD599Jsn35RwIAAFh9TmblDAAAgGUizgAAADogzgAAADogzgAAADogzgAAADogzgAAADogzgAAADogzgAAADogzgAAADogzgAAADogzgAAADogzgAAADqwdtQDAHDqvfk3b8vjf/cPox5jJDZdefOoRxiJV7z0JfmL//CWUY8BwIsQZwCr0ON/9w958Jp3jHqMU24wGGR6enrUY4zEao1SgB8lTmsEAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADogDgDAADowHHjrKrWVdWfVtVfVNV9VfWbw/0bqur2qnpg+Lh+5ccFAAAYT4tZOTuS5Jdba29OckGSt1bVLyS5Msn+1tq5SfYPtwEAAFiC48ZZe9oTw82XDP9pSS5Nsne4f2+Sd63EgAAAAKvB2sW8qarWJLk7yTlJfqe19oWqmmytHUqS1tqhqjrjBX52Z5KdSTI5OZnBYLAsgwNwclbjf4+feOKJVfnnfsZq/rMD/ChYVJy11o4muaCqXpnkxqrastgDtNauT3J9kkxNTbXp6ekljAnAsrrl5qzG/x4PBoNV+edOsmr/nQP8KDmhuzW21r6bZJDkrUkeqqqNSTJ8fHi5hwMAAFgtFnO3xtcMV8xSVS9N8itJ/jLJviRXDN92RZKbVmhGAACAsbeY0xo3Jtk7vO7sx5J8qrX22ar6fJJPVdWOJAeTvHsF5wQAABhrx42z1tr/SfKzx9j/nSTbV2IoAACA1eaErjkDAABgZYgzAACADogzAACADogzAACADogzAACADogzAACADogzAACADogzAACADogzAACADogzAACADogzAACADqwd9QAAnHov33xlfmbvlaMeYzT2jnqA0Xj55iR5x6jHAOBFiDOAVehv56/J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" }, "metadata": { "needs_background": "light" } } ], "metadata": {} }, { "cell_type": "code", "execution_count": 43, "source": [ "# fair number of outliers, similar story for Fare\r\n", "# so let's cut our data into blocks so the outliers are less of an issue\r\n", "print(type(titan['Age'][0]))\r\n", "# ~! rerunning this cell caused errors,\r\n", "# so had to put the 'cut's in a suitable conditional\r\n", "if type(titan['Age'][0]) == np.float64:\r\n", " titan['Age'] = pd.cut(titan['Age'].astype(int), 5)\r\n", " titan['Fare'] = pd.qcut(titan['Fare'], 5)\r\n", "print(type(titan['Age'][0]))\r\n", "print(\"for age, each category has a different number of cases\")\r\n", "print(\"but each category is of a similar range\")\r\n", "display(titan['Age'].value_counts())\r\n", "print(\"for fare, each category has almost the same number of cases\")\r\n", "display(titan['Fare'].value_counts())" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "\n", "for age, each category has a different number of cases\n", "but each category is of a similar range\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "(16.0, 32.0] 495\n", "(32.0, 48.0] 216\n", "(-0.08, 16.0] 100\n", "(48.0, 64.0] 69\n", "(64.0, 80.0] 11\n", "Name: Age, dtype: int64" ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "for fare, each category has almost the same number of cases\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "(7.854, 10.5] 184\n", "(21.679, 39.688] 180\n", "(-0.001, 7.854] 179\n", "(39.688, 512.329] 176\n", "(10.5, 21.679] 172\n", "Name: Fare, dtype: int64" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 44, "source": [ "# don't need to display all that data, and going to drop Cabin for now\r\n", "#data = titan[[\"Survived\", \"Pclass\", \"Sex\", \"Age\", \"SibSp\", \"Parch\", \"Fare\", \"Embarked\"]]\r\n", "#display(data.head(5))" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 45, "source": [ "display(titan.groupby([\"Sex\"])[\"Survived\"].mean())" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Sex\n", "female 0.742038\n", "male 0.188908\n", "Name: Survived, dtype: float64" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 46, "source": [ "display(titan.groupby([\"Sex\", \"Age\"])[\"Survived\"].mean())" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Sex Age \n", "female (-0.08, 16.0] 0.673469\n", " (16.0, 32.0] 0.703030\n", " (32.0, 48.0] 0.815789\n", " (48.0, 64.0] 0.916667\n", " (64.0, 80.0] NaN\n", "male (-0.08, 16.0] 0.431373\n", " (16.0, 32.0] 0.154545\n", " (32.0, 48.0] 0.192857\n", " (48.0, 64.0] 0.177778\n", " (64.0, 80.0] 0.090909\n", "Name: Survived, dtype: float64" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 47, "source": [ "display(titan.groupby([\"Sex\", \"Age\", \"Pclass\"])[\"Survived\"].mean())" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Sex Age Pclass\n", "female (-0.08, 16.0] 1 0.833333\n", " 2 1.000000\n", " 3 0.545455\n", " (16.0, 32.0] 1 0.968750\n", " 2 0.923077\n", " 3 0.521277\n", " (32.0, 48.0] 1 1.000000\n", " 2 0.904762\n", " 3 0.250000\n", " (48.0, 64.0] 1 0.941176\n", " 2 0.833333\n", " 3 1.000000\n", " (64.0, 80.0] 1 NaN\n", " 2 NaN\n", " 3 NaN\n", "male (-0.08, 16.0] 1 1.000000\n", " 2 0.818182\n", " 3 0.270270\n", " (16.0, 32.0] 1 0.444444\n", " 2 0.086207\n", " 3 0.138776\n", " (32.0, 48.0] 1 0.366667\n", " 2 0.076923\n", " 3 0.055556\n", " (48.0, 64.0] 1 0.269231\n", " 2 0.090909\n", " 3 0.000000\n", " (64.0, 80.0] 1 0.166667\n", " 2 0.000000\n", " 3 0.000000\n", "Name: Survived, dtype: float64" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 48, "source": [ "# not very tidy looking that, so let's see if we can improve the display format (shape)\r\n", "display(titan.groupby([\"Sex\", \"Age\", \"Pclass\"])[\"Survived\"].mean().unstack())" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Pclass 1 2 3\n", "Sex Age \n", "female (-0.08, 16.0] 0.833333 1.000000 0.545455\n", " (16.0, 32.0] 0.968750 0.923077 0.521277\n", " (32.0, 48.0] 1.000000 0.904762 0.250000\n", " (48.0, 64.0] 0.941176 0.833333 1.000000\n", " (64.0, 80.0] NaN NaN NaN\n", "male (-0.08, 16.0] 1.000000 0.818182 0.270270\n", " (16.0, 32.0] 0.444444 0.086207 0.138776\n", " (32.0, 48.0] 0.366667 0.076923 0.055556\n", " (48.0, 64.0] 0.269231 0.090909 0.000000\n", " (64.0, 80.0] 0.166667 0.000000 0.000000" ], "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", "
Pclass123
SexAge
female(-0.08, 16.0]0.8333331.0000000.545455
(16.0, 32.0]0.9687500.9230770.521277
(32.0, 48.0]1.0000000.9047620.250000
(48.0, 64.0]0.9411760.8333331.000000
(64.0, 80.0]NaNNaNNaN
male(-0.08, 16.0]1.0000000.8181820.270270
(16.0, 32.0]0.4444440.0862070.138776
(32.0, 48.0]0.3666670.0769230.055556
(48.0, 64.0]0.2692310.0909090.000000
(64.0, 80.0]0.1666670.0000000.000000
\n", "
" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 49, "source": [ "titan.groupby([\"Sex\", \"Age\", \"Pclass\"])[\"Survived\"].mean().plot(kind='bar', figsize=(15,7))" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 49 }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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" }, "metadata": { "needs_background": "light" } } ], "metadata": {} }, { "cell_type": "code", "execution_count": 51, "source": [ "# let's try something else, just to see what else we might do with groupby()\r\n", "display(titan.groupby([\"Sex\", \"Pclass\", \"Age\"])[\"Pclass\"].count().unstack())" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Age (-0.08, 16.0] (16.0, 32.0] (32.0, 48.0] (48.0, 64.0] \\\n", "Sex Pclass \n", "female 1 6 32 39 17 \n", " 2 10 39 21 6 \n", " 3 33 94 16 1 \n", "male 1 3 27 60 26 \n", " 2 11 58 26 11 \n", " 3 37 245 54 8 \n", "\n", "Age (64.0, 80.0] \n", "Sex Pclass \n", "female 1 0 \n", " 2 0 \n", " 3 0 \n", "male 1 6 \n", " 2 2 \n", " 3 3 " ], "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", "
Age(-0.08, 16.0](16.0, 32.0](32.0, 48.0](48.0, 64.0](64.0, 80.0]
SexPclass
female163239170
210392160
333941610
male132760266
2115826112
3372455483
\n", "
" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [], "outputs": [], "metadata": {} } ], "metadata": { "orig_nbformat": 4, "language_info": { "name": "python", "version": "3.9.2", "mimetype": "text/x-python", "codemirror_mode": { "name": "ipython", "version": 3 }, "pygments_lexer": "ipython3", "nbconvert_exporter": "python", "file_extension": ".py" }, "kernelspec": { "name": "python3", "display_name": "Python 3.9.2 64-bit ('ds-3.9': conda)" }, "interpreter": { "hash": "a27d3f2bf68df5402465348834a2195030d3fc5bfc8e594e2a17c8c7e2447c85" } }, "nbformat": 4, "nbformat_minor": 2 }