O naufrágio do RMS Titanic em 1912 continua sendo um dos desastres marítimos mais mortíferos da história. Mais de 1.500 pessoas perderam a vida quando o navio atingiu um iceberg e afundou no Oceano Atlântico Norte. Nos anos que se seguiram, uma extensa pesquisa foi realizada para entender os fatores que contribuíram para o alto número de mortes.
Apenas 38% dos passageiros sobreviveram a este evento devastador, levando-me a questionar sobre as pessoas que estavam a bordo do Titanic naquela noite fatídica.
As distinções de classe desempenharam um papel na determinação do destino daqueles a bordo, criando uma divisão entre privilégio e perigo? Como a idade e o gênero influenciaram quem sobreviveu e quem sucumbiu ao mar implacável? Em meio ao caos, a presença dos familiares trouxe conforto e apoio, incentivando os passageiros a enfrentarem juntos a tempestade? E o porto de embarque influenciou os destinos dos que embarcaram de diferentes localidades?
Felizmente, podemos responder a essas perguntas usando o conjunto de dados do Titanic disponível no Kaggle. Mais de cem anos após o naufrágio, podemos usar os dados para entender como o preço de uma passagem pode ter influenciado a sobrevivência e se certas localizações de cabines forneceram refúgio durante os trágicos eventos. Esta Análise Exploratória de Dados (EDA) revelará insights sobre as experiências dos passageiros, lançando luz sobre suas histórias de coragem e perda naquela noite fatídica.
Aqui estão alguns dos insights que iremos explorar durante a análise:
O conjunto de dados do Titanic é uma coleção de dados sobre os passageiros e a tripulação do RMS Titanic, que afundou em 1912. O conjunto de dados contém informações sobre o nome, idade, sexo, classe do bilhete de cada passageiro e se eles sobreviveram ao naufrágio. O conjunto de dados Titanic é um conjunto de dados popular para projetos de aprendizado de máquina e ciência de dados. É frequentemente usado para treinar modelos para prever se os passageiros sobreviveram ao naufrágio com base em suas características. O conjunto de dados do Titanic também é usado para estudar redes sociais e comportamento humano.
O conjunto de dados do Titanic foi criado pela Kaggle, uma comunidade de ciência de dados. O conjunto de dados está disponível para download gratuito no site da Kaggle.
Você pode obter o conjunto de dados aqui
Vamos começar nossa análise carregando os módulos necessários e o conjunto de dados titânico
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # Load the Titanic dataset df = pd.read_csv('/kaggle/input/titanic/train.csv') df.head()
Você pode ver que esse conjunto de dados contém todas as informações sobre cada passageiro que discuti na seção de introdução deste artigo.
Agora, vamos começar nossa análise usando pandas e visualizar os insights usando matplotlib e seaborn.
# Calculate the overall survival rate survival_rate = df['Survived'].mean() * 100 # Create a bar plot to visualize the survival rate sns.set(style='darkgrid') plt.figure(figsize=(6, 4)) sns.countplot(x='Survived', data=df) plt.xlabel('Survived') plt.ylabel('Passenger Count') plt.title('Survival Rate: {:.2f}%'.format(survival_rate)) plt.xticks([0, 1], ['No', 'Yes']) plt.show()
O gráfico de barras fornece uma representação visual clara e concisa da taxa geral de sobrevivência dos passageiros do Titanic. Ele revela que apenas 38% dos passageiros conseguiram sobreviver ao desastre.
A altura das barras representa o número de passageiros em cada categoria (0 para não sobreviventes e 1 para sobreviventes). A taxa de sobrevivência, indicada no título da trama, destaca a porcentagem de passageiros que sobreviveram ao trágico acontecimento.
# Calculate the survival rate by gender survival_by_gender = df.groupby('Sex')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rate by gender sns.set(style='darkgrid') plt.figure(figsize=(6, 4)) sns.barplot(x=survival_by_gender.index, y=survival_by_gender.values) plt.xlabel('Gender') plt.ylabel('Survival Rate') plt.title('Survival Rate by Gender') plt.show()
Você pode ver que de todos os passageiros sobreviventes, mais de 70% deles são mulheres. A taxa de sobrevivência significativamente maior para as mulheres em comparação com os homens é uma observação impressionante.
Essa discrepância sugere que o gênero desempenhou um papel crucial na determinação das chances de sobrevivência durante a tragédia do Titanic.
# Plot the distribution of passenger ages sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.histplot(data=df, x='Age', bins=20, kde=True) plt.xlabel('Age') plt.ylabel('Count') plt.title('Distribution of Passenger Ages') plt.show()
O histograma com plotagem do KDE ilustra a distribuição das idades dos passageiros a bordo do Titanic. Os dados mostram uma distribuição assimétrica à esquerda, indicando que havia mais adultos jovens, principalmente entre 18 e 35 anos, em comparação com adultos mais velhos ou crianças entre os passageiros.
Para analisar a distribuição das idades dos passageiros, utilizamos um histograma com gráfico KDE (Kernel Density Estimation). O eixo x representa diferentes intervalos de idade (bins), enquanto o eixo y exibe a contagem de passageiros em cada faixa etária. Ao visualizar os dados dessa maneira, pudemos discernir a natureza distorcida da distribuição etária no Titanic, destacando a prevalência de jovens adultos entre os passageiros.
# Calculate the survival rates by passenger class survival_by_class = df.groupby('Pclass')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by passenger class sns.set(style='darkgrid') plt.figure(figsize=(6, 4)) sns.barplot(x=survival_by_class.index, y=survival_by_class.values) plt.xlabel('Passenger Class') plt.ylabel('Survival Rate') plt.title('Survival Rate by Passenger Class') plt.show()
O gráfico de barras mostra as taxas de sobrevivência com base na classe de passageiros para os passageiros no conjunto de dados do Titanic. É evidente no gráfico que quanto maior a classe de passageiros, maior a taxa de sobrevivência. Essa observação alinha-se com o entendimento histórico de que os passageiros das classes mais altas (1ª classe) tinham melhor acesso aos botes salva-vidas e medidas de segurança, o que provavelmente contribuiu para suas maiores chances de sobrevivência. Em contraste, os passageiros das classes mais baixas (3ª classe) enfrentaram mais desafios durante o processo de evacuação, levando potencialmente a uma menor taxa de sobrevivência para esse grupo.
Para analisar as taxas de sobrevivência com base na classe do passageiro, criamos um bar plot. Cada barra representa a porcentagem de passageiros que sobreviveram para cada categoria de classe (1ª, 2ª ou 3ª classe). Ao examinar visualmente o terreno, fomos capazes de identificar quaisquer disparidades nas taxas de sobrevivência entre as diferentes classes de passageiros. As alturas das barras indicam as taxas de sobrevivência, com barras mais altas indicando porcentagens mais altas de sobreviventes para classes específicas de passageiros.
# Create age groups age_bins = [0, 12, 18, 30, 50, 100] # Define the age group boundaries age_labels = ['Child', 'Teenager', 'Young Adult', 'Adult', 'Elderly'] # Define the age group labels df['AgeGroup'] = pd.cut(df['Age'], bins=age_bins, labels=age_labels, right=False) # Calculate the survival rates by age group survival_by_age_group = df.groupby('AgeGroup')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by age group sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.barplot(x=survival_by_age_group.index, y=survival_by_age_group.values) plt.xlabel('Age Group') plt.ylabel('Survival Rate') plt.title('Survival Rate by Age Group') plt.show()
O gráfico de barras ilustra as taxas de sobrevivência para diferentes faixas etárias entre os passageiros no conjunto de dados do Titanic. Revela que determinadas faixas etárias, como crianças, adultos e idosos, tiveram maiores chances de sobrevivência durante o desastre. Essa observação indica que foi dada prioridade a esses grupos etários vulneráveis durante o processo de evacuação, resultando em maiores taxas de sobrevivência para eles.
Para analisar as taxas de sobrevivência com base nas faixas etárias, criamos um gráfico de barras. Cada barra representa a porcentagem de sobreviventes em uma faixa etária específica. Ao examinar o gráfico, pudemos observar as variações nas taxas de sobrevivência entre diferentes faixas etárias. Isso nos permitiu inferir que determinadas faixas etárias, como crianças, adultos e idosos, receberam prioridade e tiveram melhores chances de sobrevivência durante o trágico evento. A metodologia empregada aqui forneceu informações valiosas sobre o impacto da idade nos resultados de sobrevivência, refletindo os esforços humanitários para proteger os passageiros mais vulneráveis durante o desastre.
# Calculate the survival rates by port of embarkation survival_by_embarkation = df.groupby('Embarked')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by port of embarkation sns.set(style='darkgrid') plt.figure(figsize=(6, 4)) sns.barplot(x=survival_by_embarkation.index, y=survival_by_embarkation.values) plt.xlabel('Port of Embarkation') plt.ylabel('Survival Rate') plt.title('Survival Rate by Port of Embarkation') plt.show()
O gráfico de barras mostra as taxas de sobrevivência com base no porto de embarque para os passageiros no conjunto de dados do Titanic. Ao analisar o gráfico, podemos observar claramente que a maior taxa de sobrevivência está associada aos passageiros que embarcaram em Cherbourg, enquanto a menor taxa de sobrevivência está associada aos que embarcaram em Southampton.
Essa visualização oferece informações valiosas sobre as variações nas taxas de sobrevivência com base no porto de embarque, sugerindo fatores potenciais que podem ter influenciado as chances de sobrevivência dos passageiros.
Para analisar as taxas de sobrevivência com base no porto de embarque, criamos um bar plot. Cada barra representa a porcentagem de sobreviventes para cada categoria de porto de embarque (Cherbourg, Queenstown, Southampton). Ao examinar visualmente a parcela, pudemos identificar diferenças significativas nas taxas de sobrevivência entre os diferentes pontos de embarque.
# Create fare groups fare_bins = [0, 50, 100, 150, 200, 300, 1000] # Define the fare group boundaries fare_labels = ['0-50', '50-100', '100-150', '150-200', '200-300', '300+'] # Define the fare group labels df['FareGroup'] = pd.cut(df['Fare'], bins=fare_bins, labels=fare_labels, right=False) # Calculate the survival rates by fare group survival_by_fare_group = df.groupby('FareGroup')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by fare group sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.barplot(x=survival_by_fare_group.index, y=survival_by_fare_group.values) plt.xlabel('Fare Group') plt.ylabel('Survival Rate') plt.title('Survival Rate by Fare Group') plt.show()
O gráfico mostra que a taxa de sobrevivência foi maior para passageiros no grupo de tarifa mais alta (300+), seguido pelo segundo grupo de tarifa mais alta (200-300). Por outro lado, a taxa de sobrevivência diminuiu à medida que o grupo tarifário diminuiu, com a menor taxa de sobrevivência para passageiros no grupo tarifário mais baixo (0-50).
Esta análise sugere que a tarifa paga teve um papel significativo na determinação das chances de sobrevivência no Titanic. Os passageiros que pagavam tarifas mais altas tinham maior probabilidade de estar na primeira classe, que tinha uma taxa de sobrevivência geral mais alta.
Além disso, esses passageiros com salários mais altos podem ter recebido prioridade durante os esforços de resgate, contribuindo para sua maior taxa de sobrevivência. Para analisar a relação entre grupos de tarifa e taxas de sobrevivência, criamos um gráfico de barras mostrando as porcentagens de sobrevivência para cada grupo de tarifa. O gráfico permitiu observar a tendência das taxas de sobrevivência com base nos grupos tarifários, revelando que tarifas mais altas estavam associadas a taxas de sobrevivência mais altas.
# Extract the cabin deck from the Cabin column df['CabinDeck'] = df['Cabin'].str.extract(r'([A-Za-z])') # Plot the distribution of passenger cabin locations sns.set(style='darkgrid') plt.figure(figsize=(10, 6)) sns.countplot(data=df, x='CabinDeck', order=sorted(df['CabinDeck'].dropna().unique())) plt.xlabel('Cabin Deck') plt.ylabel('Count') plt.title('Distribution of Passenger Cabin Locations') plt.show() # Calculate the survival rates by cabin deck survival_by_cabin_deck = df.groupby('CabinDeck')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by cabin deck sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.barplot(x=survival_by_cabin_deck.index, y=survival_by_cabin_deck.values) plt.xlabel('Cabin Deck') plt.ylabel('Survival Rate') plt.title('Survival Rate by Cabin Deck') plt.show()
O gráfico demonstra claramente uma tendência decrescente nas taxas de sobrevivência à medida que o nível do convés da cabine diminui, com a menor taxa de sobrevivência observada para os passageiros no convés A.
Esta análise sugere que a localização da cabine de um passageiro foi de fato um fator significativo em suas chances de sobrevivência no Titanic. Os passageiros nos conveses mais altos provavelmente teriam melhor acesso aos botes salva-vidas e seriam resgatados com mais facilidade.
Além disso, eles podem ter recebido prioridade durante as operações de resgate, contribuindo para suas maiores taxas de sobrevivência. Para analisar a relação entre os níveis do convés da cabine e as taxas de sobrevivência, criamos um gráfico de barras exibindo as porcentagens de sobrevivência para cada convés. Ao examinar o gráfico, pudemos identificar as tendências nas taxas de sobrevivência com base nos níveis do convés da cabine.
# Create age groups age_bins = [0, 12, 18, 30, 50, 100] # Define the age group boundaries age_labels = ['Child', 'Teenager', 'Young Adult', 'Adult', 'Elderly'] # Define the age group labels df['AgeGroup'] = pd.cut(df['Age'], bins=age_bins, labels=age_labels, right=False) # Calculate the survival rates by age group and gender survival_by_age_gender = df.groupby(['AgeGroup', 'Sex'])['Survived'].mean() * 100 # Convert the survival rates into a pivot table for easier visualization survival_pivot = survival_by_age_gender.unstack() # Create a heatmap to visualize the survival rates by age group and gender sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.heatmap(data=survival_pivot, annot=True, cmap='coolwarm', fmt=".2f", cbar=True) plt.xlabel('Gender') plt.ylabel('Age Group') plt.title('Survival Rate by Age Group and Gender') plt.show()
O mapa de calor fornece uma representação visual das taxas de sobrevivência para diferentes faixas etárias e sexos entre os passageiros no conjunto de dados do Titanic. Ao analisar o mapa de calor, podemos observar padrões e tendências nas taxas de sobrevivência com base na idade e sexo, permitindo identificar quais grupos de idade e sexo tiveram maiores ou menores chances de sobrevivência durante o desastre. A intensidade da cor no mapa de calor serve como um indicador claro, com cores mais escuras representando taxas de sobrevivência mais altas e cores mais claras indicando taxas de sobrevivência mais baixas.
A partir do mapa de calor, podemos extrair vários insights. As passageiras idosas tiveram a maior probabilidade de sobrevivência, enquanto os passageiros idosos do sexo masculino tiveram as menores chances de sobrevivência. Além disso, o mapa de calor revela que, em geral, as mulheres tinham maior probabilidade de sobreviver em todas as faixas etárias. Essas observações lançam luz sobre a influência significativa da idade e do sexo na determinação dos resultados de sobrevivência dos passageiros durante essa tragédia histórica.
Para visualizar as taxas de sobrevivência com base em faixas etárias e sexos, usamos um mapa de calor. Cada célula no mapa de calor representa a taxa de sobrevivência (porcentagem) para uma combinação específica de faixa etária e gênero. Ao examinar a intensidade da cor no mapa de calor, conseguimos discernir as diferenças nas taxas de sobrevivência entre vários grupos de idade e sexo.
# Calculate the total number of family members for each passenger df['FamilySize'] = df['SibSp'] + df['Parch'] + 1 # Calculate the survival rates by family size survival_by_family_size = df.groupby('FamilySize')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by family size sns.set(style='darkgrid') plt.figure(figsize=(10, 6)) sns.barplot(x=survival_by_family_size.index, y=survival_by_family_size.values) plt.xlabel('Family Size') plt.ylabel('Survival Rate') plt.title('Survival Rate by Family Size') plt.show()
O gráfico mostra que os passageiros com famílias maiores tinham maior probabilidade de sobreviver ao naufrágio do Titanic. A taxa de sobrevivência para passageiros com tamanhos de família variando de 1 a 4 aumentou à medida que o número de membros da família aumentou.
Essa percepção é significativa, pois destaca o tamanho da família como um dos mais fortes indicadores de sobrevivência no Titanic. Os passageiros com famílias maiores provavelmente viajavam juntos, tornando-os uma prioridade para os esforços de resgate.
Além disso, ter mais membros na família pode ter facilitado o apoio mútuo, como o compartilhamento de recursos como comida e água, o que pode ter contribuído para maiores chances de sobrevivência.
Para analisar a relação entre o tamanho da família e as taxas de sobrevivência, criamos um gráfico de barras exibindo as porcentagens de sobrevivência para cada categoria de tamanho da família. Ao examinar visualmente o gráfico, pudemos identificar como o tamanho da família influenciou os resultados de sobrevivência dos passageiros.
# Calculate the survival rates by port of embarkation and passenger class survival_by_embark_class = df.groupby(['Embarked', 'Pclass'])['Survived'].mean() * 100 # Convert the survival rates into a pivot table for easier visualization survival_pivot = survival_by_embark_class.unstack() # Create a heatmap to visualize the survival rates sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.heatmap(data=survival_pivot, annot=True, cmap='coolwarm', fmt=".2f", cbar=True) plt.xlabel('Passenger Class') plt.ylabel('Port of Embarkation') plt.title('Survival Rate by Port of Embarkation and Passenger Class') plt.show()
O gráfico revela vários padrões importantes em relação às taxas de sobrevivência com base no porto de embarque e na classe do passageiro. Os passageiros que embarcaram em Cherbourg tiveram uma taxa de sobrevivência maior em comparação com os de Queenstown ou Southampton.
Isso possivelmente se deve ao fato de Cherbourg ser o primeiro porto de escala e a probabilidade de mais passageiros de primeira classe embarcarem lá. Além disso, como porto francês, pode ter havido uma tendência a salvar passageiros franceses.
Além disso, o gráfico indica que os passageiros da primeira classe tiveram uma taxa de sobrevivência maior em comparação com os da segunda ou terceira classe. Isso pode ser atribuído aos passageiros da primeira classe sendo vistos como prioridade para resgate e tendo melhor acesso aos botes salva-vidas devido ao seu status social mais elevado e capacidade potencial de arcar com medidas de salvamento.
Por fim, uma tendência notável em todos os portos é a taxa de sobrevivência decrescente à medida que a classe de passageiros diminui. Isso sugere que a classe do passageiro foi um determinante significativo da sobrevivência no Titanic, com os passageiros da primeira classe tendo as maiores chances de sobrevivência. Para analisar a relação entre o porto de embarque, a classe do passageiro e as taxas de sobrevivência, criamos um mapa de calor. O mapa de calor representa as porcentagens da taxa de sobrevivência para diferentes combinações de porto de embarque e classe de passageiro. Ao examinar o mapa de calor, conseguimos identificar padrões e tendências nas taxas de sobrevivência com base nesses dois fatores.