Original size 1140x1600

Исследование o пассажирах с Титаника

8

Описание проекта

big
Original size 2048x1024

В этом исследовании моей целью было проанализировать данные о пассажирах лайнера Титаник, затонувшего почти 113 лет назад в апреле 1912 года и понять, какими признаками обладали те, кто пережил катастрофу, и по каким признакам можно было бы однозначно предсказать, что у пассажира нет шансов спастись.

Я буду использовать набор данных titanic, являющийся встроенным набором данных в библиотеку визуализации seaborn, которая так же будет использоваться в исследовании для построения графиков.

Визуальное оформление

Было решено подобрать цветовую палитру, которая как-то ассоциировалась бы с этим событием:

  1. базовые цвета — цвета ледяной воды, айсберга и снега BASE_COLORS = [»#F5F5F5», «#B0E0E6», «#003366», «#4B0082», «#C0C0C0»]

  2. золотой и красный — цвета надежды и трагедии SURVIVED_COLORS = [»#FFD700», «#8B0000»]

  3. бордовый и изумрудный были популярными цветами в мужских и женских костюмах начала XX века SEX_COLORS = [»#800020», «#50C878»]

big
Original size 1600x900

Палитра основных цветов + референс визуального стиля для нейросети

Все изображения были сгенерированы нейросетью Recraft, (все промпты здесь) в качестве стилевого референса было взято изображение Титаника в стиле начала 20 века + наложение цветов палитры.

Начало работы: общие данные

Сначала мне стали интересны общие данные: сколько среди пассажиров было мужчин и женщин, сколько выжило, сколько погибло, сколько путешествовало первым, вторым и третьим классом.

plt.figure (figsize=(10, 6))

Построение сравнительной диаграммы sns.countplot ( x='pclass', hue='sex', data=df, palette=SEX_COLORS, hue_order=['male', 'female'] )

Настройка заголовка и подписей plt.title ('Количество мужчин и женщин в каждом классе', fontsize=16, fontfamily='serif') plt.xlabel ('Класс билета', fontsize=14, fontfamily='serif') plt.ylabel ('Количество пассажиров', fontsize=14, fontfamily='serif')

Легенда plt.legend (title='Пол', labels=['Мужчины', 'Женщины'], fontsize=12)

Отображение графика plt.show ()

Original size 851x554

Получается, что большинство пассажиров было мужчинами, и большая часть путешествовала третьим классом.

Теперь исследуем распределение по выжившим и погибшим. Хочется детальнее понять, какой процент пассажиров погиб и выжил относительно класса, которым они путешествовали.

plt.figure (figsize=(10, 6))

sns.countplot ( x='pclass', hue='survived', data=df, palette=[»#8B0000», «#FFD700»] )

plt.title ('Сравнение выживших и погибших пассажиров по классам', fontsize=16, fontfamily='serif') plt.xlabel ('Класс', fontsize=14, fontfamily='serif') plt.ylabel ('Количество пассажиров', fontsize=14, fontfamily='serif')

plt.legend (title='Выжил', labels=['Погиб', 'Выжил'], fontsize=12)

plt.show ()

Original size 851x555

Пока графики подтверждают очевидный факт: большинство погибших путешествовало третьим классом.

Анализ по гендеру

Original size 2048x1024

Теперь проведем следующее исследование: посмотрим статистику по выживаемости мужчин и женщин в каждом классе.

g = sns.catplot ( x='pclass', # Ось X: класс пассажира hue='sex', # Разделение по полу col='survived', # Разделение по выживаемости (фасеты) data=df, # Данные kind='count', # Тип графика (гистограмма) palette=SEX_COLORS, # Цветовая палитра height=5, # Высота каждого графика aspect=1.2, # Соотношение сторон hue_order=['male', 'female'], # Порядок отображения пола col_order=[1, 0] # Порядок фасетов: сначала выжившие, затем погибшие )

Настройка заголовков и подписей g.set_titles ('{col_name}') # Убираем стандартные заголовки g.set_axis_labels ('Класс билета', 'Количество пассажиров') # Подписи осей g.fig.suptitle ('Распределение пассажиров по классу, полу и выживаемости', fontsize=16, fontfamily='serif', y=1.05) # Общий заголовок for ax, title in zip (g.axes.flat, ['Выжили', 'Погибли']): ax.set_title (title, fontsize=14, fontfamily='serif')

Легенда g.add_legend (title='Пол') # Добавление легенды

Отображение графика plt.show ()

Original size 1371x530

Среди первого и второго класса заметна интересная тенденция: почти нет погибших женщин. Отсюда можно сделать вывод, что состоятельные пассажиры пропускали женщин вперед к шлюпкам.

Анализ по возрасту

Original size 2048x1024

Теперь хочется исследовать влияние возраста на шансы спастись. Для этого нужно обработать исходные данные, создав возрастные категории.

def age_category (age): if pd.isnull (age): return 'Unknown' elif age < 12: return 'Child' elif age < 18: return 'Teenager' elif age < 60: return 'Adult' else: return 'Elderly'

Добавление новой колонки с возрастными категориями df['age_category'] = df['age'].apply (age_category)

Уберем тех, чей возраст неизвестен with_age = df.loc[df['age_category'] ≠ 'Unknown', : ]

age_counts = with_age['age_category'].value_counts ()

plt.figure (figsize=(8, 8)) plt.pie ( age_counts, labels=age_counts.index, # Подписи colors=BASE_COLORS, # Цвета autopct='%1.1f%%', # Отображение процентов startangle=90, # Начальный угол shadow=True # Тень )

Заголовок plt.title ('Распределение пассажиров по возрастным категориям', fontsize=16, fontfamily='serif')

Отображение диаграммы plt.show ()

Original size 675x661

Создание фасетного графика g = sns.catplot ( x='pclass', # Ось X: класс пассажира hue='survived', # Разделение по выживаемости row='age_category', # Разделение по возрастным категориям (фасеты) data=with_age, # Данные kind='count', # Тип графика (гистограмма) palette=SURVIVED_COLORS, # Цветовая палитра height=5, # Высота каждого графика aspect=1.2, # Соотношение сторон row_order=['Child', 'Teenager', 'Adult', 'Elderly'], col_order=[1, 0]# Порядок фасетов )

Настройка заголовков и подписей g.set_titles ('Возрастная категория: {row_name}') # Заголовки для фасетов g.set_axis_labels ('Класс', 'Количество пассажиров') # Подписи осей g.fig.suptitle ('Выживаемость пассажиров по классу и возрастным категориям', fontsize=16, fontfamily='serif', y=1.05) # Общий заголовок

Отображение графика plt.show ()

Далее посмотрим на выживаемост:

0

Выводы, конечно, выходят очевидные: наибольшие шансы спастись были у взрослых, путешествовавших первым классом.

Выводы

Original size 2048x1024

Можно сделать вывод, что портрет пассажира, у которого были самые большие шансы на спасение выглядит следующим образом: взрослая женщина первого класса, из чего следует еще один факт про более высокую степень альтруизма и самопожертвования среди обеспеченных пассажиров мужского пола.

Портрет же пассажира, который скорее всего не выжил на Титанике следующий: мужчина среднего возраста из третьего класса, что становится очевидным, исходя из первого портрета и всех вышеприведенных данных.

Исследование o пассажирах с Титаника
8
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more