Закажи экспресс-аудит своего дела онлайн всего за 199 ₽
и получи рекомендации по улучшению - Жми сюда !

Изучение закономерностей выживания на основе данных о катастрофе «Титаника».

Учебное пособие для начинающих по разведочному анализу данных с использованием Pandas, Matplotlib и Seaborn.

Делиться

31809937f977fc676693611b1c2a3d69
Фотография предоставлена Museums Victoria на Unsplash.

Введение

Крушение «Титаника» стало важным историческим событием, изменившим наше представление о выживании человека во время катастроф. Даже спустя столетие эта трагическая история по-прежнему предлагает ценные уроки и идеи.

«Титаник» был одним из крупнейших и самых роскошных кораблей своего времени. Его гордые создатели прозвали его «Непотопляемым». 10 апреля 1912 года он отправился в свой первый рейс из Англии в Нью-Йорк. На борту «Титаника» находились люди всех слоёв общества, как богатые, так и бедные. Командовал им старший капитан Эдвард Джон Смит. Во время плавания «Титаник» неоднократно получал предупреждения о льде в Атлантике, что дважды заставляло его менять курс. Но на четвёртый день плавания, 14 апреля, он столкнулся с огромным айсбергом, что положило начало медленному затоплению этого роскошного корабля. Судно отправило радиосигналы другим находящимся поблизости судам с просьбой о помощи, но ответил только один из них. Капитан приказал эвакуировать пассажиров. Согласно протоколу, женщин и детей следовало эвакуировать первыми, используя имеющиеся на корабле спасательные шлюпки. Но, как мы увидим в ходе нашего исследования, на самом деле этого не произошло. На выживание пассажиров на борту повлияли и другие факторы. Казалось, что у некоторых групп людей шансы на выживание были выше, чем у других, и именно это мы рассмотрим в данной статье.

Крушение этого «непотопляемого» корабля привело к гибели 1502 из 2224 пассажиров и членов экипажа.

Проект

Набор данных о «Титанике» очень удобен для начинающих, и именно поэтому он широко используется в качестве отправной точки в изучении науки о данных. Он не только предоставляет интересные закономерности для анализа данных, но и сохраняет свою ценность, сочетая исторический контекст с реальными решениями, принимаемыми людьми в кризисных условиях.

В этой статье мы проведем разведочный анализ данных о «Титанике». Мы рассмотрим, как выглядят данные, какие различные атрибуты влияют на выживание пассажиров и как эти атрибуты повлияли на их судьбу. Это руководство для начинающих, требующее базового понимания основ Python, импорта библиотек и использования его функций для анализа данных. Сочетая повествование на основе данных и распознавание образов, это руководство дополняет предыдущие статьи и проекты, рассматривая влияние социального неравенства, поведения при эвакуации и структуры семьи на результаты выживания.

Набор данных

В этом уроке мы получим доступ к набору данных о «Титанике» и, используя Python pandas, matplotlib и seaborn, изучим, как различные факторы повлияли на выживание пассажиров. Давайте загрузим данные, чтобы они были доступны в нашем коде.

Вы можете получить набор данных по следующей ссылке: ссылка на Github.

Загрузка набора данных

Получив URL-адрес данных, вы можете получить к ним доступ как к датафрейму pandas. Для этого нам потребуется установить/импортировать pandas. Pandas — это мощная библиотека Python для анализа и обработки данных. Если она еще не установлена в вашей IDE, установите ее из терминала через pip следующим образом:

 pip install pandas

После завершения установки импортируйте библиотеку в свой Python-файл, указав в качестве её псевдонима pd:

 import pandas as pd

Далее, считайте данные с помощью функции read_csv библиотеки Pandas. Убедитесь, что вы добавили URL-адрес следующим образом:

 url = "https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv" df = pd.read_csv(url)

Это загрузит файл в переменную «df» в виде датафрейма pandas. Мы будем проводить анализ и исследование данных, используя этот датафрейм, содержащий необходимые нам данные. Давайте прочитаем данные из этого датафрейма, используя функцию head() , которая по умолчанию возвращает первые 5 строк датафрейма:

 print(df.head()) 
a0920ccdd54ca1af40510861d8910f84
df.head() (Изображение предоставлено автором)

Мы также можем использовать функции iloc[0] из библиотеки Pandas для доступа ко всем именам/атрибутам столбцов:

 print(df.iloc[0]) 
89c5587e42537c6064d3fdfe3c2257a3
df.iloc[0] (Изображение предоставлено автором)

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

  1. PassengerId — это идентификатор пассажира, числовое значение для идентификации каждого пассажира.
  2. Выжил — это означает, выжил ли пассажир на борту после кораблекрушения или нет.
  3. Pclass — это класс пассажира.
  4. Имя — это имя пассажира с указанием соответствующих титулов.
  5. Пол — гендерная принадлежность пассажиров
  6. Возраст — возрастная группа пассажиров на борту.
  7. SibSp — это количество братьев и сестер или супругов, находящихся на борту.
  8. Парч — это количество родителей или детей на борту.
  9. Билет — это номер билета пассажира.
  10. Стоимость проезда — это цена билета.
  11. Кабина — это номер каюты пассажира.
  12. Место отправления — это место, откуда пассажир сошел на борт. C = Шербур, Q = Куинстаун, S = Саутгемптон.

Как видно из приведенных выше данных, существует несколько столбцов или атрибутов, представляющих для нас интерес при определении того, выжил ли человек на «Титанике» или нет. Такие атрибуты, как имя и номер билета, по-видимому, не влияют на выживание пассажиров. Чтобы получить более ясное представление об этом, давайте проведем анализ данных, чтобы выяснить взаимосвязь между различными атрибутами и то, как каждый из них влияет на выживание по отдельности и в комбинациях:

Анализ данных

Прежде чем официально приступить к анализу данных, давайте установим/импортируем необходимые библиотеки Python.

Первая библиотека — Matplotlib . Она предоставляет возможности визуализации данных. Мы будем строить графики, используя эту библиотеку. Вторая — Seaborn . Seaborn — это библиотека визуализации данных на Python, основанная на Matplotlib, которая позволяет создавать визуализации, графики и диаграммы на основе данных. Давайте установим и импортируем их в наш файл Python.

 pip install matplotlib pip install seaborn

Теперь импортируйте их с псевдонимами, как мы это делали с библиотекой pandas , в основной файл кода.

 import seaborn as sns import matplotlib.pyplot as plt

Теперь давайте посмотрим, как различные характеристики влияли на выживаемость:

Описание набора данных

Для начала давайте получим общий обзор данных. Для этого мы воспользуемся функцией describe() . Мы также добавили pd.set_option , чтобы предотвратить усечение данных.

 pd.set_option('display.max_columns', None) print(df.describe()) 
3e6319a08aaabc1be6aa057a725d249d
Функция describe() (Изображение предоставлено автором)

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

  • Всего зарегистрировано 891 пассажир (из общего числа = 891).
  • Показатель выживаемости составляет 38% (из среднего числа выживших = 0,38).
  • Большинство пассажиров принадлежали к 3-му классу (среднее значение Pclass = 2,3 ближе к 3-му).
  • Данные о возрасте некоторых пассажиров отсутствуют (количество записей «Возраст» не совпадает с количеством записей).
  • Большинство пассажиров были молодыми (средний возраст = 29,6 лет).
  • Самому молодому пассажиру было 0,4 года (менее 6 месяцев), а самому старшему — 80 лет.
  • Средняя цена билета составляла около 32,38 фунтов стерлингов (средняя стоимость проезда).
  • Цена билетов сильно варьировалась (максимальное стандартное отклонение цены составило 49,69).
  • Огромное экономическое неравенство: для одних стоимость проезда составляла 0 фунтов стерлингов, а для других — до 512 фунтов стерлингов.
  • Возрастные квартили: 25% были моложе 20 лет, половина — моложе 28 лет, и 75% — моложе 38 лет.

Теперь, когда мы знаем общие закономерности, связанные с датами, давайте углубимся в более детальный анализ.

Факты о выживании

Для начала проведём общий анализ выживаемости:

 survival_counts = df['Survived'].value_counts() print(survival_counts) 
a8a2f7d771ce5be567717cd8dad4a0ae
Факты о выживании (Изображение предоставлено автором)
 plt.figure(figsize=(6,4)) sns.countplot( x='Survived', data=df ) plt.title("Titanic Survival Distribution") 
8e4a11e5bdd96c0384579e53963beb50
Распределение припасов с «Титаника» (Изображение предоставлено автором)

Мы использовали атрибут survival и получили значение 549 для 0, что означает, что существо не выжило, и 342 для 1, что означает, что существо выжило. Это соответствует 38% выживаемости, как было ранее получено с помощью функции describe(). Теперь перейдем к факторам, повлиявшим на эту выживаемость.

Выживаемость в зависимости от пола

Давайте посмотрим, как на этот показатель выживаемости влиял пол. Было ли у одного пола преимущество в выживаемости перед другим? Мы знаем, что приоритетами были женщины и дети, но что именно показывают данные?

 gender_survival = pd.crosstab( df['Sex'], df['Survived'], normalize='index' ) print(gender_survival) plt.figure(figsize=(6,4)) sns.barplot( x='Sex', y='Survived', data=df ) plt.title("Survival Rate by Gender") plt.ylabel("Survival Rate") plt.show() 
f88da1b1b61e6684d415563d0dff4eed
Показатели выживаемости по полу (Изображение предоставлено автором)
18b971f5decc04f1316466ee1fd5ead7
Показатели выживаемости по полу (Изображение предоставлено автором)

Как видно из отчета и приведенного выше графика, процент выживших среди мужчин составил всего 18%. В то время как среди женщин выжило 74% погибших в результате кораблекрушения.

Выживание в пассажирском классе

Теперь давайте проанализируем, как пассажиры разных классов выжили в этом инциденте.

 class_survival = pd.crosstab( df['Pclass'], df['Survived'], normalize='index' ) print(class_survival) plt.figure(figsize=(7,5)) sns.barplot( x='Pclass', y='Survived', data=df ) plt.title("Survival Rate by Passenger Class") plt.xlabel("Passenger Class") plt.ylabel("Survival Rate") plt.show() 
70a68e0e5394faeec0cae176734aaf60
Выживание пассажиров разных классов (Изображение предоставлено автором)
ba80726537f725402ec55b7508de7056
Выживание пассажиров разных классов (Изображение предоставлено автором)

Как видно из приведенного выше отчета и графика, выжило около 62% пассажиров первого класса, 47% второго класса и только 24% третьего класса. Из этого очень простого графика можно сделать вывод, что у первого класса, который дорого платил за роскошь на корабле, было больше шансов на выживание; им отдавали предпочтение перед двумя другими классами.

Выживаемость по возрасту

Давайте посмотрим, как выжили пассажиры разного возраста. Были ли у детей более высокие шансы на выживание?

 plt.figure(figsize=(10,6)) sns.histplot( data=df, x='Age', hue='Survived', bins=30, multiple='stack', alpha=0.6 ) plt.title("Age Distribution by Survival") plt.show() 
2e67e297b1f9f74ea2453dc77029fcdb
Возрастное распределение по выживаемости (изображение предоставлено автором)

На основе этой гистограммы с накоплением данных мы можем сделать несколько важных выводов о том, как возраст связан с выживанием на «Титанике».

  • Большинство пассажиров на борту были молодыми людьми в возрасте от 20 до 30 лет.
  • У детей младше 10 лет наблюдается более высокая представленность выживаемости, при этом оранжевый столбец данных больше, чем синий.
  • В наборе данных преобладали взрослые, не выжившие после болезни, причем столбцы, представляющие не выживших в возрасте от 20 до 40 лет, были больше по размеру.
  • Выживаемость снижается в старшей возрастной группе; это может быть связано с тем, что пожилые пассажиры сталкиваются с определенными возрастными ограничениями при эвакуации.
  • В столбчатой диаграмме преобладают данные по большинству возрастных групп, что указывает на то, что в целом погибло больше пассажиров, чем выжило, что соответствует общему показателю выживаемости, составляющему приблизительно 38%.

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

Приоритет детей

Действительно ли детям отдавали приоритет? Давайте ответим на этот вопрос с помощью аналитики:

 df['IsChild'] = df['Age'] < 16 child_survival = pd.crosstab( df['IsChild'], df['Survived'], normalize='index' ) print(child_survival) sns.barplot( x='IsChild', y='Survived', data=df ) plt.title("Child vs Adult Survival") plt.show() 
0dc94c8a21c263d352906857dec14f0a
Выживание детей и взрослых (Изображение предоставлено автором)
a6e6c0ab7e79ed41ec644e3f9c1aaf19
Приоритеты для детей (Изображение предоставлено автором)

Как видно из вышеизложенного, выжило около 59% детей, что является прямым отражением того, как на самом деле определялись приоритеты для детей.

Теперь давайте проанализируем, как размер семьи влиял на выживаемость.

Анализ размера семьи

Атрибут размера семьи зависит от двух различных атрибутов набора данных: SibSp и Parch. SibSp — это количество братьев и сестер, а также супругов пассажира на борту. Parch же — это количество родителей и детей пассажира.

Давайте посмотрим, как размер семьи влиял на выживаемость:

 df['FamilySize'] = ( df['SibSp'] + df['Parch'] + 1 ) plt.figure(figsize=(10,6)) sns.barplot( x='FamilySize', y='Survived', data=df ) plt.title("Survival Rate by Family Size") plt.show() 
afb15ffaafdf1469365e17859a7b836c
Уровень выживаемости в зависимости от размера семьи (Изображение предоставлено автором)

Приведенный выше график показывает, как менялась вероятность выживания в зависимости от количества членов семьи, путешествовавших вместе на «Титанике». Код прост: он суммирует количество братьев и сестер/супругов и родителей/детей, а также самого пассажира в качестве размера семьи. Ось Y графика представляет вероятность выживания, поэтому каждый столбец показывает процент пассажиров с определенным размером семьи, которые выжили. Из приведенной выше гистограммы видно, что:

  • Пассажиры, путешествующие в одиночку, имели более низкий уровень выживаемости, вероятно, потому что у них было меньше социальной поддержки, не было помощи во время эвакуации или они имели меньший приоритет по сравнению с членами семьи.
  • У небольших семей численностью примерно 2, 3 и 4 человека были самые высокие показатели выживаемости, что, возможно, объясняется тем, что они помогали друг другу во время эвакуации, поддерживали координацию действий и получали приоритет при посадке в спасательные шлюпки.
  • В очень больших семьях, где численность семьи превышала 6 человек, показатели выживаемости были ниже, вероятно, из-за трудностей в координации эвакуации и отказа семей разделяться в спасательных шлюпках.

Как мы видим, выживаемость не была линейно связана с размером семьи, но в семьях среднего размера наблюдался более высокий уровень выживаемости.

Выживание за счет оплаченного проезда

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

 plt.figure(figsize=(12,6)) sns.violinplot( data=df, x='Survived', y='Fare', inner='quartile' ) plt.xticks( [0,1], ['Did Not Survive', 'Survived'] ) plt.title( "Ticket Fare Distribution by Survival" ) plt.ylabel("Fare Paid") plt.show() 
0b41ebcde53eca7ffeea8263e4640ecf
Распределение стоимости билетов (изображение предоставлено автором)

Скрипичный график показывает четкую взаимосвязь между стоимостью билета и выживанием на «Титанике». Выжившие, как правило, платили более высокие цены, в то время как большинство погибших были сосредоточены в более низких ценовых диапазонах. Это говорит о том, что пассажиры первого класса и более состоятельные пассажиры имели значительное преимущество в выживании, вероятно, из-за лучшего расположения кают и более легкого доступа к спасательным шлюпкам. Однако совпадение между этими двумя группами также указывает на то, что богатство само по себе не определяло выживание, поскольку такие факторы, как пол, возраст и время эвакуации, также играли важную роль.

Подведение итогов исследования.

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

 # CREATE FEATURES # Child column df['IsChild'] = df['Age'] < 16 # Family size column df['FamilySize'] = ( df['SibSp'] + df['Parch'] + 1 ) # Moderate family size df['ModerateFamily'] = ( (df['FamilySize'] >= 2) & (df['FamilySize'] <= 4) ) # Combine all favorable conditions combined_condition = ( (df['Sex'] == 'female') & (df['Pclass'] == 1) & (df['ModerateFamily'] == True) ) | ( (df['IsChild'] == True) ) # Create a new category column df['HighSurvivalGroup'] = combined_condition # PLOT SURVIVAL RATE plt.figure(figsize=(8,5)) sns.barplot( data=df, x='HighSurvivalGroup', y='Survived' ) plt.xticks( [0,1], ['Other Passengers', 'High Survival Group'] ) plt.ylabel("Survival Rate") plt.title( "Survival Rate Based on Combined Passenger Factors" ) plt.show() 
fcb583a77b4442c79195114b66fce01c
Показатель выживаемости, рассчитанный на основе совокупности предпочтительных факторов.

Приведенный выше код объединял все благоприятные обстоятельства для выживания и сравнивал пассажиров с такими характеристиками.
по сравнению со всеми остальными. Как видно из графика, у «Группы с высокой выживаемостью» показатели выживаемости были значительно выше.

Заключение

В этой статье мы успешно проанализировали набор данных о «Титанике», используя библиотеки pandas, matplotlib и seaborn. Это простое и доступное для начинающих руководство, которое поможет понять, как интерпретировать данные, строить графики и извлекать из них полезную информацию. На основе полученных результатов мы можем легко сгруппировать определенные признаки как благоприятные для выживания. Более того, этот анализ данных и полученные результаты могут помочь нам в создании эффективного алгоритма машинного обучения для прогнозирования выживаемости пассажиров «Титаника».

Махнур Джавед. Посмотреть все публикации Махнур Джавед.

Источник: towardsdatascience.com

✅ Найденные теги: Выживания, Данных, Закономерностей, изучение, новости, Основе

Добавить комментарий

Нет других записей в этой рубрике.

Новости других рубрик

Архив рубрики ~Обо всем~: Don't Touch the Snail — это анти-уютная игра, которая выводит концепцию перманентной смерти на новый уровень. Архив рубрики ~Обо всем~: Это мои любимые гаджеты для создания уютной атмосферы в доме, и все они сейчас продаются со скидкой. Архив рубрики ~Обо всем~: Лучшие телевизоры 2026 года: тестирование и обзоры экспертов. Архив рубрики ~Обо всем~: Переход к эффективным токенам: решение проблемы агентского сжигания токенов Архив рубрики ~Обо всем~: Обзор Ultrahuman Ring Pro: будущее умных колец очень похоже на настоящее. Архив рубрики ~Обо всем~: 5 аксессуаров для iPad, о покупке которых я никогда не пожалею (включая альтернативу Apple Pencil за 35 долларов) Архив рубрики ~Обо всем~: Sony выплатит 7,85 млн долларов в виде подарочных сертификатов для PlayStation Store в рамках урегулирования спора по поводу игровых ваучеров. Архив рубрики ~Обо всем~: Гибридный ИИ: сочетание детерминированного анализа с логическим мышлением на основе логики LLM.