{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Основы анализа данных с pandas & matplotlib\n", "\n", "\n", "[Pandas](http://pandas.pydata.org/) - библиотека Python для анализа данных для эффективной работы с объектами таблиц (DataFrame) с индексацией;\n", "\n", "[Matplotlib](https://matplotlib.org/#) - библиотека для визуализации данных и построения графиков и диаграмм, во многом повторяющая возможности MATLAB." ] }, { "cell_type": "code", "execution_count": 1, "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", "
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", "
" ], "text/plain": [ " PassengerId Survived Pclass \\\n", "0 1 0 3 \n", "1 2 1 1 \n", "2 3 1 3 \n", "3 4 1 1 \n", "4 5 0 3 \n", "\n", " Name Sex Age SibSp \\\n", "0 Braund, Mr. Owen Harris male 22.0 1 \n", "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", "2 Heikkinen, Miss. Laina female 26.0 0 \n", "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", "4 Allen, Mr. William Henry male 35.0 0 \n", "\n", " Parch Ticket Fare Cabin Embarked \n", "0 0 A/5 21171 7.2500 NaN S \n", "1 0 PC 17599 71.2833 C85 C \n", "2 0 STON/O2. 3101282 7.9250 NaN S \n", "3 0 113803 53.1000 C123 S \n", "4 0 373450 8.0500 NaN S " ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "TRAIN_CSV_PATH = 'titanic/train.csv'\n", "TEST_CSV_PATH = 'titanic/test.csv'\n", "\n", "# загрузка обучающей выборки данных в объект data frame и просмотр верха таблицы\n", "# обратить внимание на колонку с номером строки и на PassengerId\n", "# load training data to pandas data frame and see its top rows\n", "# pay attention to index column and PassengerId column\n", "df_train = pd.read_csv(TRAIN_CSV_PATH)\n", "df_train.head()" ] }, { "cell_type": "code", "execution_count": 2, "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", "
SurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
PassengerId
103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
503Allen, Mr. William Henrymale35.0003734508.0500NaNS
603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S
803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS
913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS
1012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708NaNC
\n", "
" ], "text/plain": [ " Survived Pclass \\\n", "PassengerId \n", "1 0 3 \n", "2 1 1 \n", "3 1 3 \n", "4 1 1 \n", "5 0 3 \n", "6 0 3 \n", "7 0 1 \n", "8 0 3 \n", "9 1 3 \n", "10 1 2 \n", "\n", " Name Sex Age \\\n", "PassengerId \n", "1 Braund, Mr. Owen Harris male 22.0 \n", "2 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 \n", "3 Heikkinen, Miss. Laina female 26.0 \n", "4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 \n", "5 Allen, Mr. William Henry male 35.0 \n", "6 Moran, Mr. James male NaN \n", "7 McCarthy, Mr. Timothy J male 54.0 \n", "8 Palsson, Master. Gosta Leonard male 2.0 \n", "9 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 \n", "10 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 \n", "\n", " SibSp Parch Ticket Fare Cabin Embarked \n", "PassengerId \n", "1 1 0 A/5 21171 7.2500 NaN S \n", "2 1 0 PC 17599 71.2833 C85 C \n", "3 0 0 STON/O2. 3101282 7.9250 NaN S \n", "4 1 0 113803 53.1000 C123 S \n", "5 0 0 373450 8.0500 NaN S \n", "6 0 0 330877 8.4583 NaN Q \n", "7 0 0 17463 51.8625 E46 S \n", "8 3 1 349909 21.0750 NaN S \n", "9 0 2 347742 11.1333 NaN S \n", "10 1 0 237736 30.0708 NaN C " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# используем PassengerId как колонку с уникальным индексом (номером), чтобы избежать двойной индексации\n", "# we should use PassengerId as index column to not have duplicated indexes\n", "df_train = pd.read_csv(TRAIN_CSV_PATH, index_col=0)\n", "df_train.head(10)" ] }, { "cell_type": "code", "execution_count": 3, "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", "
PclassNameSexAgeSibSpParchTicketFareCabinEmbarked
PassengerId
8923Kelly, Mr. Jamesmale34.5003309117.8292NaNQ
8933Wilkes, Mrs. James (Ellen Needs)female47.0103632727.0000NaNS
8942Myles, Mr. Thomas Francismale62.0002402769.6875NaNQ
8953Wirz, Mr. Albertmale27.0003151548.6625NaNS
8963Hirvonen, Mrs. Alexander (Helga E Lindqvist)female22.011310129812.2875NaNS
\n", "
" ], "text/plain": [ " Pclass Name Sex \\\n", "PassengerId \n", "892 3 Kelly, Mr. James male \n", "893 3 Wilkes, Mrs. James (Ellen Needs) female \n", "894 2 Myles, Mr. Thomas Francis male \n", "895 3 Wirz, Mr. Albert male \n", "896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female \n", "\n", " Age SibSp Parch Ticket Fare Cabin Embarked \n", "PassengerId \n", "892 34.5 0 0 330911 7.8292 NaN Q \n", "893 47.0 1 0 363272 7.0000 NaN S \n", "894 62.0 0 0 240276 9.6875 NaN Q \n", "895 27.0 0 0 315154 8.6625 NaN S \n", "896 22.0 1 1 3101298 12.2875 NaN S " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# загрузка тестовых данных, для которых нужно сделать предсказание: выживет или не выживет пассажир,\n", "# снова используем index_col - первую (нулевую) колонку, это PassengerId как счетчик или номер строки\n", "# load test dataset - a dataset for which we have to make predictions whether a passenger survives\n", "df_test = pd.read_csv(TEST_CSV_PATH, index_col=0)\n", "df_test.head()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 891 entries, 1 to 891\n", "Data columns (total 11 columns):\n", "Survived 891 non-null int64\n", "Pclass 891 non-null int64\n", "Name 891 non-null object\n", "Sex 891 non-null object\n", "Age 714 non-null float64\n", "SibSp 891 non-null int64\n", "Parch 891 non-null int64\n", "Ticket 891 non-null object\n", "Fare 891 non-null float64\n", "Cabin 204 non-null object\n", "Embarked 889 non-null object\n", "dtypes: float64(2), int64(4), object(5)\n", "memory usage: 83.5+ KB\n" ] } ], "source": [ "# проверка общей информации о данных: количество строк, столбцов, пустых значений и типов данных\n", "# check overall dataset info, how many rows, columns, null values it has and what are column types\n", "df_train.info()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 418 entries, 892 to 1309\n", "Data columns (total 10 columns):\n", "Pclass 418 non-null int64\n", "Name 418 non-null object\n", "Sex 418 non-null object\n", "Age 332 non-null float64\n", "SibSp 418 non-null int64\n", "Parch 418 non-null int64\n", "Ticket 418 non-null object\n", "Fare 417 non-null float64\n", "Cabin 91 non-null object\n", "Embarked 418 non-null object\n", "dtypes: float64(2), int64(3), object(5)\n", "memory usage: 35.9+ KB\n" ] } ], "source": [ "df_test.info()" ] }, { "cell_type": "code", "execution_count": 6, "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", "
SurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
PassengerId
1305NaN3Spector, Mr. WoolfmaleNaN00A.5. 32368.0500NaNS
1306NaN1Oliva y Ocana, Dona. Ferminafemale39.000PC 17758108.9000C105C
1307NaN3Saether, Mr. Simon Sivertsenmale38.500SOTON/O.Q. 31012627.2500NaNS
1308NaN3Ware, Mr. FrederickmaleNaN003593098.0500NaNS
1309NaN3Peter, Master. Michael JmaleNaN11266822.3583NaNC
\n", "
" ], "text/plain": [ " Survived Pclass Name Sex Age \\\n", "PassengerId \n", "1305 NaN 3 Spector, Mr. Woolf male NaN \n", "1306 NaN 1 Oliva y Ocana, Dona. Fermina female 39.0 \n", "1307 NaN 3 Saether, Mr. Simon Sivertsen male 38.5 \n", "1308 NaN 3 Ware, Mr. Frederick male NaN \n", "1309 NaN 3 Peter, Master. Michael J male NaN \n", "\n", " SibSp Parch Ticket Fare Cabin Embarked \n", "PassengerId \n", "1305 0 0 A.5. 3236 8.0500 NaN S \n", "1306 0 0 PC 17758 108.9000 C105 C \n", "1307 0 0 SOTON/O.Q. 3101262 7.2500 NaN S \n", "1308 0 0 359309 8.0500 NaN S \n", "1309 1 1 2668 22.3583 NaN C " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# unify all data to one data frame for more comprehensive analysis\n", "# объединим тестовый и тренировочный датасеты для общего анализа\n", "# средние, медианы, распределения для полного датасета будут другими\n", "# Using pandas.concat method https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html\n", "# default is unify by rows\n", "df = pd.concat([df_train, df_test], sort=False)\n", "df.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Данные в соревновании разбиты на **тренировочную (обучающую) и контрольную (тестовую) выборки** - train.csv & test.csv. Эти выборки в англоязычном data science часто называются training set и test set (validation set).\n", "\n", "Для тренировки или обучения предсказательной модели используется **обучающая выборка**. На её основе строится функция определения переменной-отклика (предсказания, результата) по признакам.\n", "\n", "**Тестовая или контрольная выборка** служит для оценки качества предсказаний модели на новых данных, т.е. данных, на которых модель не обучалась и которые она ещё не встречала.\n", "\n", "В данном случае организаторы соревнования создали для участников разбиение. Кроме того, в этом соревновании имеются контрольные данные двух видов: публичные (public test set) и приватные (private test set). Приватные данные закрыты, их нельзя получить. На публичных данных решение проверяется сразу же после загрузки, однако на них можно переобучиться то есть подогнать свою модель для очень точного предсказания на публичных данных. Время от времени проводится тестирование на приватных, закрытых для всех данных.\n", "\n", "Поэтому наивысшая отметка точности (score) 1 на публичных данных не говорит о высоком качестве предсказательной модели, а скорее всего говорит о точной подгонке к публичным тестовым данным, то есть о **переобучении** на них.\n", "\n", "Если тренировочную и тестовую выборки создаёт сам аналитик, то часто используется соотношение размеров выборок 70/30 или близкое к нему.\n", "\n", "Подробнее об оценке качества моделей можно почитать в статье [Открытый курс машинного обучения. Тема 3. Классификация, деревья решений и метод ближайших соседей (раздел Выбор параметров модели и кросс-валидация)](https://habr.com/ru/company/ods/blog/322534/#vybor-parametrov-modeli-i-kross-validaciya)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Общий анализ задачи, данных и признаков" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Класс задачи - **обучение с учителем**, так как имеются объекты (пассажиры и их признаки) и тренировочные данные с ответами.\n", "\n", "Задача - это **бинарная классификация** - предсказание, выжил пассажир (1) или нет (0).\n", "\n", "#### Categorical features / Категориальные признаки\n", "* **Pclass** - Passenger Class. Значения: 1, 2, 3. Класс каюты пассажира (1 - высокий, 3 - низкий).\n", "* **Sex** - Значения: male, female. Пол пассажира.\n", "* **Embarked** - Значения: S, C, Q. Порт посадки.\n", "\n", "#### Text features / Текстовые признаки\n", "* **Name** - имя пассажира.\n", "* **Ticket** - номер (название билета).\n", "* **Cabin** - номер каюты, много пропущенных значений. По большей части известно для первого класса (PClass = 1). Можно почитать обсуждение [Discussion: is cabin an important predictor?](https://www.kaggle.com/c/titanic/discussion/4693)\n", "\n", "#### Numeric features / Числовые признаки\n", "* **Age** - float. Возраст. Дробное число, если меньше 1 года.\n", "* **SibSp** - integer. Количество супругов или братьев-сестёр на корабле.\n", "* **Parch** - integer. Количество детей или родителей на корабле.\n", "* **Fare** - float. Цена билета.\n", "\n", "\n", "Общие наблюдения по данным: много пропусков в колонке Age (возраст) и Cabin (номер каюты) как в тренировочных, так и в тестовых данных.\n", "\n", "Есть несколько пропусков в колонке Embarked (порт посадки) и один пропуск в Fare (цена билета) в тестовых данных.\n", "\n", "Для качественной модели полезно будет заполнить эти пропуски в обеих таблицах или отбросить признаки с большими пропусками типа Cabin." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some useful info from [Titanic Kaggle Tutorial](https://www.kaggle.com/sashr07/kaggle-titanic-tutorial).\n", "\n", "\"In this case, understanding the Titanic disaster and specifically what variables might affect the outcome of survival is important. Anyone who has watched the movie Titanic would remember that **women and children were given preference to lifeboats** (as they were in real life). You would also remember the vast class disparity of the passengers.\n", "\n", "This indicates that **Age, Sex, and PClass may be good predictors** of survival.\"\n", "\n", "Вывод: имеет смысл изучить **предметную область, историю данных и внешнюю по отношению к данным информацию**: что в шлюпки сажали в первую очередь женщин и детей из высших классов." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Типы графиков, построение их в matplotlib на примере данных Titanic\n", "\n", "Рекомендации по созданию графиков по статье [Введение в визуализацию данных на Python & matplotlib](https://towardsdatascience.com/data-science-with-python-intro-to-data-visualization-and-matplotlib-5f799b7c6d82).\n", "\n", "* Выбрать подходящий тип графика.\n", "* Подписать оси графика. Это полезно для собственного исследования и показа другим участникам.\n", "* Добавить название графика.\n", "* Подписать категории данных, где это возможно.\n", "* Отметить наиболее интересные точки.\n", "* Задействовать цвета и размеры для большей информативности.\n", "\n", "Часто используемые типы графиков: линейный (linear plot), точечный график или диаграмма рассеяния (scatter plot), коробчатая диаграмма/ящик с усами (box plot), столбчатая диаграмма (bar chart), круговая диаграмма (pie chart). \n", "\n", "### 2.1. Bar chart - столбчатая диаграмма\n", "\n", "\n", "\n", "Диаграмма с прямоугольными зонами (столбцами), длины которых пропорциональны величинам, которые они отображают. Прямоугольные зоны могут быть расположены вертикально или горизонтально.\n", "\n", "Столбчатая диаграмма отображает сравнение нескольких дискретных категорий. Одна её ось перечисляет сравниваемые категории, другая показывает измеримую величину. Иногда столбчатые диаграммы отображают несколько величин для каждой сравниваемой категории.\n", "\n", "Полезны для сравнения значений категорий между собой, а не по отношению к целому.\n", "\n", "[Из википедии](https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%BE%D0%BB%D0%B1%D1%87%D0%B0%D1%82%D0%B0%D1%8F_%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 891\n", "1 319\n", "2 42\n", "4 22\n", "3 20\n", "8 9\n", "5 6\n", "Name: SibSp, dtype: int64\n", "0 891\n", "1 319\n", "2 42\n", "3 20\n", "4 22\n", "5 6\n", "8 9\n", "Name: SibSp, dtype: int64\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Show count (histogram) of different SiblingSpouses (SibSp) values - from 0 to 5\n", "# Покажем гистограмму количества пассажиров с 0-5 братьями-сёстрами или супругами на корабле\n", "sib_sps = df['SibSp'].value_counts()\n", "print(sib_sps)\n", "\n", "# need to sort the index (first column values) for more obvious data representation\n", "# значения индекса не отсортированы, полезно это исправить\n", "sib_sps.sort_index(ascending=True, inplace=True)\n", "print(sib_sps)\n", "\n", "# Add title and axis names\n", "plt.title('Histogram of Sibling-Spouses(SibSp) value counts')\n", "plt.xlabel('Number of siblings or spouses on Titanic')\n", "plt.ylabel('How many passengers has this number of siblings or spouses')\n", "\n", "sib_sps.plot(kind='bar')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2. Pie chart - круговая диаграмма\n", "\n", "\n", "\n", "Представляют данные в виде долей целого и обычно используются для сравнения групп. Рекомендуется отображать не более 7-10 категорий, чтобы не перегрузить диаграмму.\n", "\n", "Построим распределение пассажиров по классам в виде круговой диаграммы." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "3 709\n", "1 323\n", "2 277\n", "Name: Pclass, dtype: int64\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Show passenger count by classes as a pie chart\n", "# Покажем количество пассажиров в трёх классах на круговой диаграмме\n", "passenger_classes = df['Pclass'].value_counts()\n", "print(type(passenger_classes))\n", "print(passenger_classes)\n", "\n", "plt.title('Passengers distribution by classes 1, 2, 3')\n", "\n", "# this uses matplotlib underneath\n", "# эта визуализация основана на matplotlib, поэтому установка названия диаграммы выше сработала :)\n", "# параметр autopct показывает, как представлять данные на секторах в процентах\n", "passenger_classes.plot(kind='pie', autopct='%1.1f%%')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Упражнение 1. Нарисовать круговую диаграмму пассажиров по порту посадки" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "# Exercise: draw pie chart for Embarked column" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.3. Scatter plot - точечный график\n", "\n", "\n", "\n", "**Диаграмма рассеяния (также точечная диаграмма, англ. scatter plot)** — математическая диаграмма, изображающая значения двух переменных в виде точек на декартовой плоскости.\n", "\n", "Хорошо иллюстрируют зависимость величин, помогают определить их корреляцию. Независимую переменную обычно отображают на горизонтальной оси, а зависимую - на вертикальной.\n", "\n", "[Из Википедии](https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D1%80%D0%B0%D1%81%D1%81%D0%B5%D1%8F%D0%BD%D0%B8%D1%8F)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# increase plot size in the Jupyter window\n", "# увеличим размер графика\n", "plt.rcParams['figure.figsize'] = [14, 9]\n", "\n", "# scatter plot of women by age ticket fare on red - died, green survived\n", "# диаграмма рассеяния для женщин: по горизонтали - возраст, по вертикали цена билета, цвет точки - выжила или нет\n", "df_female = df[df.Sex == 'female']\n", "\n", "df_female_live = df_female[df_female.Survived == 1]\n", "df_female_dead = df_female[df_female.Survived == 0]\n", "\n", "plt.scatter(df_female_live.Age, df_female_live.Fare, s=50, c='g')\n", "plt.scatter(df_female_dead.Age, df_female_dead.Fare, s=50, c='r')\n", "\n", "# добавим название диаграммы и подписи осей\n", "# Add title and axis names\n", "plt.title('Women that survived (green) and died (red) represented by age and fare')\n", "plt.xlabel('Age')\n", "plt.ylabel('Fare')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Упражнение 2. Нарисовать график выживших и погибших мужчин с осями: возраст, цена билета" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Exercise: draw scatter plot of survived and died men by Age and Fare" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.4. Ящик с усами (box plot)\n", "\n", "**Ящик с усами (box plot, box-and-whisker plot)** - способ показать распределение значений по пяти ключевым точкам распределения: минимум или нижнияя граница, первая квартиль, медиана, третья квартиль и максимум или верхняя граница.\n", "\n", "[Ящик с усами в Википедии](https://ru.wikipedia.org/wiki/%D0%AF%D1%89%D0%B8%D0%BA_%D1%81_%D1%83%D1%81%D0%B0%D0%BC%D0%B8).\n", "\n", "**Медиана** - это такое число выборки, что ровно половина из элементов выборки больше него, а другая половина меньше него (если все элементы выборки различны). [Подробнее о медиане - в Википедии](https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B4%D0%B8%D0%B0%D0%BD%D0%B0_(%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0)).\n", "\n", "**Квартили** дают важную информацию о структуре распределения признака. Вместе с медианой они делят вариационный ряд (или выборку) на 4 равные части. Квартилей две: верхняя и нижняя квартиль. 25% значений меньше, чем нижняя квартиль, 75% значений меньше, чем верхняя квартиль.\n", "\n", "**Усы** ящика в простейшем случае - это наблюдения минимума и максимума (тогда выбросы не показаны на графике). Но концы усов могут определяться несколькими способами. Например, как разность первого квартиля и полутора межквартильных расстояний и сумма третьего квартиля и полутора межквартильных расстояний. Тогда всё, что не входит в усы графика, считается \"выбросами\" данной выброки.\n", "\n", "Pandas+matplotlib по умолчанию показывают \"усами\" значения Q3 + 1.5\\*IQR и Q1 - 1.5\\*IQR то есть полтора интерквартильных размаха вверх от верхней квартили и вниз от нижней ([по документации] (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.boxplot.html)).\n", "\n", "[Пример использования box plot для удаления выбросов](https://www.youtube.com/watch?v=qpihk7KepDI&t=124s) в значениях Fare и подсчёте пропущенных значений Fare по оставшемуся распределению без выбросов (на языке R).\n", "\n", "[Understanding Boxplots](https://towardsdatascience.com/understanding-boxplots-5e2df7bcbd51) статья на английском про коробочные диаграммы (ящики с усами)." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'Fare value')" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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1q9fn0svvTSHDx/OOL/PAfC9W+rtulfKzRcA4Hty+PDhU68XFhZedQwAZ7PcnzECgKGpqld9BYClEkYArBpXXXVVHnzwwVx11VWjHgWAMeNSOgBWharKE088kRtuuOHUsc8XAbBUdowAWBVaa7n22mvzqU99Ktdee60oAuCc2DECYNV47LHH8thjj416DADGkB0jAACge8IIAADonjACYNW46KKLsmvXrlx00UWjHgWAMeMzRgCsGvPz87n11ltHPQYAY8iOEQAA0D1hBAAAdE8YAQAA3RNGAABA94QRAKvGxo0bc99992Xjxo2jHgWAMeOudACsGseOHcvNN9886jEAGEN2jAAAgO4JIwAAoHvCCAAA6J4wAgAAuieMAFg1JiYm8sADD2RiYmLUowAwZtyVDoBV4/Dhw7nxxhtHPQYAY8iOEQCrxtVXX50HH3wwV1999ahHAWDM2DECYNV44okncsMNN4x6DADGkB0jAACge3aMABiKqhr1CEmWb47W2rL8PQAMhx0jAIaitbZsf26//fasXbs2d999dy7/R5/O3XffnbVr1+b2229fthkAGG92jAAYex//+MeTJB/+8IezsLCQD69fn507d55aB4CzqXH+v1zT09PtwIEDox4DgBVk4s5fz+GP/vioxwBghaiqx1tr02c7z6V0AABA94QRAADQPWEEAAB0TxgBAADdE0YAAED3hBEAANA9YQQAAHRPGAEAAN0TRgAAQPeEEQAA0D1hBAAAdE8YAQAA3RNGAABA94QRAADQPWEEAAB0TxgBAADdE0YAAED3hBEAANA9YQQAAHRPGAEAAN0TRgAAQPeEEQAA0D1hBAAAdE8YAQAA3RNGAABA99aOegAAhu9dP/9ovvXnL456jGUzceevj3qEoXvrW87P7/+zD4x6DIBVQxgBdOBbf/5iDn/0x0c9xrKYm5vLzMzMqMcYuh7iD2A5uZQOAADonjACAAC6J4wAAIDuCSMAAKB7wggAAOieMAIAALonjAAAgO4JIwAAoHvCCAAA6J4wAgAAuieMAACA7gkjAACge8IIAADo3tpRDwDA8H3fO+/M5P13jnqM5XP/qAcYvu97Z5L8+KjHAFg1hBFAB7795Y/m8Ef7+I/oubm5zMzMjHqMoZu489dHPQLAquJSOgAAoHvCCAAA6J4wAgAAuieMAACA7rn5AkAnuvqw/m+u/n/rW99y/qhHAFhVhBFAB3q5I11yIgB7+vcC8OZwKR0AANC9FRVGVfU3q+r/q6onq6qjJxECAACjtGLCqKrOS/Ivk/xYkquS3FBVV412KgAAoAcrJoySvDfJk621r7XWXkjy75JsH/FMAABAB1ZSGG1O8vRpx0cGawAAAEO1ku5KV2dYa991UtUtSW5Jkk2bNmVubm7IYwHwRmzZsmVkf3f9wvL/nfv371/+vxSAN81KCqMjSS4/7fiyJM+89qTW2r1J7k2S6enpNjMzsyzDAXBuWvuu/7e1LObm5uK9AYBztZIupfvdJFdW1Q/2to93AAACeklEQVRW1bokP5lk74hnAgAAOrBidoxaay9V1e1JHklyXpJ/3Vp7YsRjAQAAHVgxYZQkrbXPJPnMqOcAAAD6spIupQMAABgJYQQAAHRPGAEAAN0TRgAAQPeEEQAA0D1hBAAAdE8YAQAA3RNGAABA94QRAADQPWEEAAB0TxgBAADdE0YAAED3hBEAANA9YQQAAHRPGAEAAN0TRgAAQPeEEQAA0L1qrY16hjesqv5Lkj8c9RwArChvS/Inox4CgBXjL7bWvv9sJ411GAHAa1XVgdba9KjnAGC8uJQOAADonjACAAC6J4wAWG3uHfUAAIwfnzECAAC6Z8cIAADo3tpRDwAAS1FVLyc5dNrSB1trh0c0DgCrjEvpABgLVTXfWrvoDfzcea21l4cxEwCrh0vpABhbVTVRVf9vVf3e4M+1g/WZqtpfVf82g12mqvp7VfWFqvpiVf0fVXXeSIcHYEVxKR0A4+ItVfXFweunWmt/O8lzSba21r5TVVcmeTDJyYe7vjfJNa21p6rqnUn+TpIfbq29WFX3JPmpJJ9c5n8DACuUMAJgXPx5a+3dr1k7P8knqurdSV5O8l+d9r0vtNaeGrx+f5L/OsnvVlWSvCUnogoAkggjAMbbP0ryx0nelROXh3/ntO8dP+11Jbm/tXbXMs4GwBjxGSMAxtlbkzzbWnslyY1JXu9zQ59Ncn1VvT1JquriqvqLyzQjAGNAGAEwzu5JclNV/XZOXEZ3/Ewntdb+IMk/TfJoVR1Msi/Jpcs2JQArntt1AwAA3bNjBAAAdE8YAQAA3RNGAABA94QRAADQPWEEAAB0TxgBAADdE0YAAED3hBEAANC9/x9r34Ke8w3DNgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "boxplot = df.boxplot(column=['Fare'])\n", "\n", "plt.ylabel('Fare value')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В нашем случае значения Fare дают много выбросов над верхней границей графика." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Детальный анализ связи признаков и выживания\n", "### 3.1. Связь пола и выживания" ] }, { "cell_type": "code", "execution_count": 29, "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", "
SexSurvived
PassengerId
1male0
2female1
3female1
4female1
5male0
\n", "
" ], "text/plain": [ " Sex Survived\n", "PassengerId \n", "1 male 0\n", "2 female 1\n", "3 female 1\n", "4 female 1\n", "5 male 0" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# выберем только колонки Sex (пол) и Survived (выживаемость), сохраним это в новый датафрейм\n", "# select only dataframe part with Sex and Survived colums, save to new dataframe\n", "df_sex = df_train.loc[:, ['Sex', 'Survived']]\n", "df_sex.head()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 577 entries, 1 to 891\n", "Data columns (total 2 columns):\n", "Sex 577 non-null object\n", "Survived 577 non-null int64\n", "dtypes: int64(1), object(1)\n", "memory usage: 13.5+ KB\n" ] } ], "source": [ "# select only male part\n", "# выберем только мужскую часть пассажиров\n", "df_male = df_sex[df_sex.Sex == 'male']\n", "df_male.info()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 314 entries, 2 to 889\n", "Data columns (total 2 columns):\n", "Sex 314 non-null object\n", "Survived 314 non-null int64\n", "dtypes: int64(1), object(1)\n", "memory usage: 7.4+ KB\n" ] } ], "source": [ "# select only female part\n", "# выберем только женскую часть пассажиров\n", "df_female = df_sex[df_sex.Sex == 'female']\n", "df_female.info()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.18890814558058924\n", "0.7420382165605095\n", "\n", "Percent of males survived is 19%\n", "Percent of females survived is 74%\n" ] } ], "source": [ "# Процент выживших мужчин - это среднее значение колонки Survived для них в датасете df_male\n", "# percent of males survived - is a mean of Survived values in df_male\n", "# Процент выживших женщин - это среднее значение колонки Survived для них в датасете df_female\n", "# percent of females survived - is a mean of Survived values in df_female\n", "\n", "male_survived_percent = df_male['Survived'].mean()\n", "female_survived_percent = df_female['Survived'].mean()\n", "\n", "print(male_survived_percent)\n", "print(female_survived_percent)\n", "\n", "print()\n", "\n", "print(\"Percent of males survived is {0:.0f}%\".format(male_survived_percent*100))\n", "print(\"Percent of females survived is {0:.0f}%\".format(female_survived_percent*100))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Survived\n", "Sex \n", "female 0.742038\n", "male 0.188908\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzUAAAIyCAYAAADynuTgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAHkxJREFUeJzt3X+wnnV55/HPRQLEikoH0rUlQNIa21JRu0RYx7GNtkUcbdhZQYLT2m7dTVcbZetOZ8NYGYZqd5d22rUO0yWd7eo60oB2W6PNltna6mz90U3iptqQska0yynMNIDQRQch9do/cmAOh5Och3CSJ194vWbO+Nz38z33uU5mnDNv7h9PdXcAAABGddK0BwAAAHgqRA0AADA0UQMAAAxN1AAAAEMTNQAAwNBEDQAAMDRRAwAADE3UAAAAQxM1AADA0JZP6wefeeaZvXr16mn9eAAA4AS3e/fue7p75WLrphY1q1evzq5du6b14wEAgBNcVf3NJOtcfgYAAAxN1AAAAEMTNQAAwNCmdk8NAAA8nTzyyCOZmZnJQw89NO1RhrNixYqsWrUqJ5988lF9v6gBAIAlMDMzk+c85zlZvXp1qmra4wyju3PvvfdmZmYma9asOapjuPwMAACWwEMPPZQzzjhD0DxJVZUzzjjjKZ3hEjUAALBEBM3Rear/bqIGAAAYmntqAADgGFi95Y+W9Hhf+/evm2jde9/73tx0001ZtmxZTjrppNx444256KKLntLP3r59e2677bZs2bLlKR0nSU477bQ8+OCDT/k4c4kaAAB4mvjc5z6XT3ziE/nCF76QU089Nffcc08efvjhib734MGDWb584TzYsGFDNmzYsJSjLimXnwEAwNPE3XffnTPPPDOnnnpqkuTMM8/M93zP92T16tW55557kiS7du3K+vXrkyTXXnttNm3alIsvvjhvfvObc9FFF2Xv3r2PHW/9+vXZvXt3PvCBD2Tz5s154IEHsnr16nz7299Oknzzm9/M2WefnUceeSRf+cpXcskll+SCCy7IK1/5yvz1X/91kuSrX/1qXv7yl+dlL3tZ3v3udx+T31vUAADA08TFF1+cO++8My984Qvztre9LZ/+9KcX/Z7du3fnYx/7WG666aZs3Lgxt9xyS5JDgXTXXXflggsueGzt8573vLzkJS957Lgf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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# короткий путь построения данных вероятности выживания по полу - pivot_table (сводная таблица) с агрегацией средним\n", "# survived by sex - shorter way is creating a pivot table with pandas with its default mean aggregation\n", "sex_pivot = df_train.pivot_table(index=\"Sex\", values=\"Survived\", aggfunc='mean')\n", "print(sex_pivot)\n", "\n", "sex_pivot.plot.bar()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2. Упражнение 3. Связь класса пассажира и выживания" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# Exercise: calculate percent of survived in each Pclass and show on bar chart or other plot" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "survived by class and sex\n", "Pclass Sex Survived\n", "1 female 1 0.968085\n", " 0 0.031915\n", " male 0 0.631148\n", " 1 0.368852\n", "2 female 1 0.921053\n", " 0 0.078947\n", " male 0 0.842593\n", " 1 0.157407\n", "3 female 0 0.500000\n", " 1 0.500000\n", " male 0 0.864553\n", " 1 0.135447\n", "Name: Survived, dtype: float64\n" ] } ], "source": [ "# Check how people survived by their class and sex\n", "print(\"survived by class and sex\")\n", "print(df_train.groupby([\"Pclass\", \"Sex\"])[\"Survived\"].value_counts(normalize=True))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "B96 B98 4\n", "C23 C25 C27 4\n", "G6 4\n", "E101 3\n", "F2 3\n", "Name: Cabin, dtype: int64" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check how Cabin feature looks\n", "# there are some strange cabin values like 2 or 3 cabins for one passenger, no idea ho to process them\n", "# просмотр, как выглядит признак Cabin (каюта), для некоторых пассажиров указано несколько кают\n", "df_train['Cabin'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CA. 2343 7\n", "347082 7\n", "1601 7\n", "3101295 6\n", "CA 2144 6\n", "347088 6\n", "382652 5\n", "S.O.C. 14879 5\n", "PC 17757 4\n", "113781 4\n", "Name: Ticket, dtype: int64" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check how Ticket feature looks\n", "# also quite strange data without any clear form to process\n", "# просмотр, как выглядит признак Ticket (билет)\n", "df_train['Ticket'].value_counts().head(10)" ] }, { "cell_type": "code", "execution_count": 22, "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", "
SurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkedAgeGrp
PassengerId
10.03Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS2.0
21.01Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C3.0
31.03Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS2.0
41.01Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S3.0
50.03Allen, Mr. William Henrymale35.0003734508.0500NaNS3.0
\n", "
" ], "text/plain": [ " Survived Pclass \\\n", "PassengerId \n", "1 0.0 3 \n", "2 1.0 1 \n", "3 1.0 3 \n", "4 1.0 1 \n", "5 0.0 3 \n", "\n", " Name Sex Age \\\n", "PassengerId \n", "1 Braund, Mr. Owen Harris male 22.0 \n", "2 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 \n", "3 Heikkinen, Miss. Laina female 26.0 \n", "4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 \n", "5 Allen, Mr. William Henry male 35.0 \n", "\n", " SibSp Parch Ticket Fare Cabin Embarked AgeGrp \n", "PassengerId \n", "1 1 0 A/5 21171 7.2500 NaN S 2.0 \n", "2 1 0 PC 17599 71.2833 C85 C 3.0 \n", "3 0 0 STON/O2. 3101282 7.9250 NaN S 2.0 \n", "4 1 0 113803 53.1000 C123 S 3.0 \n", "5 0 0 373450 8.0500 NaN S 3.0 " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check survival by age groups by creating such groups\n", "# Проверим выживаемость по возрастным группам, например по десяткам лет. Создадим такой новый признак.\n", "\n", "# https://stackoverflow.com/questions/5584586/find-the-division-remainder-of-a-number\n", "# In division a % b give modulo\n", "# В делении a % b даёт остаток от деления\n", "# a / b gives divisor as float\n", "# a // b gives divisor as integer, which will serve as a group\n", "def make_age_group(row):\n", " return row['Age'] // 10\n", "\n", "df['AgeGrp'] = df.apply(make_age_group, axis=1)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "survived by AgeGroup\n", "AgeGrp Survived\n", "0.0 1.0 0.612903\n", " 0.0 0.387097\n", "1.0 0.0 0.598039\n", " 1.0 0.401961\n", "2.0 0.0 0.650000\n", " 1.0 0.350000\n", "3.0 0.0 0.562874\n", " 1.0 0.437126\n", "4.0 0.0 0.617978\n", " 1.0 0.382022\n", "5.0 0.0 0.583333\n", " 1.0 0.416667\n", "6.0 0.0 0.684211\n", " 1.0 0.315789\n", "7.0 0.0 1.000000\n", "8.0 1.0 1.000000\n", "Name: Survived, dtype: float64\n" ] } ], "source": [ "# Check how each age group survives\n", "# Проверим, какая выживаемость в каждой возрастной группе\n", "print(\"survived by AgeGroup\")\n", "print(df.groupby([\"AgeGrp\"])[\"Survived\"].value_counts(normalize=True))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.0 344\n", "3.0 232\n", "1.0 143\n", "4.0 135\n", "0.0 82\n", "5.0 70\n", "6.0 32\n", "7.0 7\n", "8.0 1\n", "Name: AgeGrp, dtype: int64\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(df['AgeGrp'].value_counts())\n", "\n", "indexes = df['AgeGrp'].value_counts().index\n", "values = df['AgeGrp'].value_counts().values\n", "\n", "plt.bar(indexes, values)\n", " \n", "# Add title and axis names\n", "plt.title('Passengers by age group')\n", "plt.xlabel('Age groups (example 1 is age from 10 to 20)')\n", "plt.ylabel('Number of passengers')\n", " \n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Упражнение 4 (на дом). Определить процент выживших в каждой группе возраста " ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "# Exercise: calculate percent of survived in each Age Group" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Создание простейшей модели, вывод предсказания и посылка на Kaggle\n", "\n", "Построим простую модель, напоминающую дерево решений, которая предсказывает, что женщины и дети из класса 1 и 2 выживут, мужчины из 3 точно погибнут, а дети любого пола до 10 лет выживут, только если у них 1 или более родителей на корабле.\n", "\n", "### 4.1. Функция предсказания выживания" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "# this model has a bit higher score\n", "def get_survival(df_row):\n", " is_female = df_row['Sex'] == 'female'\n", " pclass = df_row['Pclass']\n", " parent_child_count = df_row['Parch']\n", " siblings = df_row['SibSp']\n", " age_less_10 = df_row['AgeGrp'] == 0\n", " \n", " if (is_female):\n", " if (pclass != '3'):\n", " return 1\n", " elif (age_less_10 and parent_child_count > 0):\n", " return 1\n", " else:\n", " return 0\n", " else:\n", " if (pclass == '3'):\n", " return 0\n", " elif (age_less_10 and parent_child_count > 0):\n", " return 1\n", " else:\n", " return 0\n", " \n", "# this model has lower score\n", "# для сравнения также построим простейшую модель: выживают только женщины\n", "def get_simple_female_survive(df_row):\n", " return int(df_row['Sex'] == 'female');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.2. Создание файла с предсказанием" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 800\n", "1 509\n", "Name: survive_predict, dtype: int64\n", "\n", "\n", "Int64Index: 418 entries, 892 to 1309\n", "Data columns (total 1 columns):\n", "survive_predict 418 non-null int64\n", "dtypes: int64(1)\n", "memory usage: 6.5 KB\n", "None\n", " Survived\n", "PassengerId \n", "892 0\n", "893 1\n", "894 0\n", "895 0\n", "896 1\n" ] } ], "source": [ "# Создаём новую колонку - предсказание выживаемости с помощью функции apply - применить функцию к датасету\n", "df['survive_predict'] = df.apply(get_survival, axis=1)\n", "print (df['survive_predict'].value_counts())\n", "\n", "# Отделим только тестовую часть датастета для вывода - это наши ряды с 891 и ниже\n", "# Create output dataset with only predicted rows from test dataset\n", "df_out = df.iloc[891:, [12]]\n", "print()\n", "print(df_out.info())\n", "\n", "# Rename our new prediction to Survived column\n", "# переименуем предсказание в Survived, такое название требуется для отправки результата\n", "df_out = df_out.rename(index=str, columns={\"survive_predict\": \"Survived\"})\n", "print(df_out.head())\n", "\n", "# write output to file\n", "# запись ответа в файл\n", "df_out.to_csv(\"evaluation_submission.csv\") # got 0.77033 score and place 6079 on public leaderboard\n", "\n", "# Полученный файл evaluation_submission.csv загружаем на Kaggle\n", "# File evaluation_submission.csv should be uploaded to Kaggle competition page in \"Submit Predictions\" section" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Домашнее задание и дополнительное чтение\n", "\n", "### 5.1. Домашнее задание\n", "\n", "Улучшить данную модель любым способом и получить оценку выше, чем текущая простая модель (больше 0.77033).\n", "\n", "### 5.2. Дополнительное чтение\n", "\n", "1. [«Айсберг вместо Оскара!» или как я пробовал освоить азы DataScience на kaggle](https://habr.com/ru/post/331992/) Полезно для начинающих и для понимания, как использовать Kaggle для учёбы.\n", "2. [Kaggle и Titanic — еще одно решение задачи с помощью Python](https://habr.com/ru/post/274171/)\n", "3. [Титаник на Kaggle: вы не дочитаете этот пост до конца](https://habr.com/ru/company/mlclass/blog/270973/) Глубокий анализ данных, код на языке R.\n", "4. [Много обучающих статей на Kaggle - Tutorials on Titanic](https://www.kaggle.com/c/titanic#tutorials)\n", "5. [Data Science with Python: Intro to Data Visualization with Matplotlib](https://towardsdatascience.com/data-science-with-python-intro-to-data-visualization-and-matplotlib-5f799b7c6d82)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }