Instalação e Carregamento de Pacotes
# install.packages(c("shiny", "dplyr", "ggplot2", "titanic", "scales", "treemapify"))
library(dplyr)
##
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:stats':
##
## filter, lag
## Os seguintes objetos são mascarados por 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(titanic)
library(scales)
library(treemapify)
Análises Exploratórias
table(df$Sobreviventes)
##
## Não Sobreviveu Sobreviveu
## 549 342
round(prop.table(table(df$Sobreviventes)) * 100, 1)
##
## Não Sobreviveu Sobreviveu
## 61.6 38.4
round(prop.table(table(df$Sexo, df$Sobreviventes), 1) * 100, 1)
##
## Não Sobreviveu Sobreviveu
## Feminino 25.8 74.2
## Masculino 81.1 18.9
round(prop.table(table(df$Classe, df$Sobreviventes), 1) * 100, 1)
##
## Não Sobreviveu Sobreviveu
## 1ª Classe 37.0 63.0
## 2ª Classe 52.7 47.3
## 3ª Classe 75.8 24.2
round(prop.table(table(df$FaixaIdade, df$Sobreviventes), 1) * 100, 1)
##
## Não Sobreviveu Sobreviveu
## Criança 42.6 57.4
## Adolescente 57.1 42.9
## Jovem 59.4 40.6
## Adulto 67.5 32.5
## Idoso 65.6 34.4
Distribuição por Sexo
sexo_pizza <- df %>%
count(Sexo) %>%
mutate(percent = n / sum(n) * 100,
label = paste0(Sexo, ": ", round(percent, 1), "%"))
ggplot(sexo_pizza, aes(x = "", y = percent, fill = Sexo)) +
geom_col(width = 1) +
coord_polar("y") +
geom_text(aes(label = label), position = position_stack(vjust = 0.5)) +
labs(title = "Distribuição por Sexo") +
theme_void()

Proporção de Sobrevivência por Sexo
ggplot(df, aes(x = Sexo, fill = factor(Sobreviventes))) +
geom_bar(position = "fill") +
geom_text(
stat = "count",
aes(label = scales::percent(..count../tapply(..count.., ..x.., sum)[..x..])),
position = position_fill(vjust = 0.5),
color = "white",
size = 4
) +
labs(
title = "Proporção de Sobrevivência por Sexo",
y = "Proporção",
fill = "Legenda"
) +
scale_y_continuous(labels = scales::percent_format())
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Sobrevivência por Idade
ggplot(df, aes(x = Idade, fill = factor(Sobreviventes))) +
geom_histogram(position = "identity", alpha = 0.8, bins = 30) +
labs(title = "Distribuição de Idade por Sobrevivência", fill = "Legenda")

Sobrevivência por Classe e Sexo
ggplot(df, aes(x = Classe, fill = factor(Sobreviventes))) +
geom_bar(position = "fill") +
geom_text(
stat = "count",
aes(label = scales::percent(..count../tapply(..count.., interaction(..x.., ..PANEL..), sum)[interaction(..x.., ..PANEL..)])),
position = position_fill(vjust = 0.5),
color = "white",
size = 3
) +
facet_wrap(~Sexo) +
labs(
title = "Proporção de Sobrevivência por Classe e Sexo",
y = "Proporção",
fill = "Legenda"
) +
scale_y_continuous(labels = scales::percent_format())

Boxplot de Idade por Sobrevivência
ggplot(df, aes(x = factor(Sobreviventes), y = Idade, fill = factor(Sobreviventes))) +
geom_boxplot() +
labs(title = "Distribuição da Idade por Sobrevivência", x = "Sobreviveu", y = "Idade", fill = "Legenda") +
scale_x_discrete(labels = c("Não", "Sim")) +
theme_minimal()

Barras Empilhadas: Classe × Sobrevivência
ggplot(df, aes(x = factor(Classe), fill = factor(Sobreviventes))) +
geom_bar(position = "stack") +
geom_text(stat = "count",
aes(label = ..count..),
position = position_stack(vjust = 0.5),
color = "white", size = 4) +
labs(title = "Número de Sobreviventes por Classe",
x = "Classe",
y = "Quantidade Total",
fill = "Legenda") +
scale_fill_manual(values = c("red", "darkgreen")) +
theme_minimal()

Facet Grid: Sexo × Faixa Etária:
ggplot(df, aes(x = FaixaIdade, fill = factor(Sobreviventes))) +
geom_bar(position = "fill") +
geom_text(stat = "count",
aes(label = scales::percent(..count../tapply(..count.., interaction(..x.., ..PANEL..), sum)[interaction(..x.., ..PANEL..)])),
position = position_fill(vjust = 0.5),
color = "white", size = 3) +
facet_wrap(~Sexo) +
labs(title = "Sobrevivência por Faixa Etária e Sexo", y = "Proporção", fill = "Legenda") +
theme_minimal() +
scale_y_continuous(labels = scales::percent_format())

Gráfico Combinado: Barras e Linha
idade_por_classe <- df %>%
group_by(Classe) %>%
summarise(media_idade = mean(Idade, na.rm = TRUE),
total = n())
ggplot(idade_por_classe, aes(x = factor(Classe))) +
geom_col(aes(y = total), fill = "lightblue") +
geom_line(aes(y = media_idade * 10, group = 1), color = "red") +
geom_point(aes(y = media_idade * 10), color = "red") +
scale_y_continuous(
name = "Total de Passageiros",
sec.axis = sec_axis(~./10, name = "Média de Idade")
) +
labs(title = "Total de Passageiros vs Média de Idade por Classe") +
theme_minimal()

Histograma da Idade
ggplot(df, aes(x = Idade)) +
geom_histogram(bins = 30, fill = "steelblue", color = "white") +
geom_text(
stat = "bin",
aes(label = ..count..),
bins = 30,
vjust = -0.5,
size = 3
) +
labs(
title = "Distribuição de Idade",
x = "Idade",
y = "Frequência"
) +
theme_minimal()

Treemap: Classe e Sexo
df_plot <- df %>% count(Classe, Sexo)
ggplot(df_plot, aes(area = n, fill = Classe, label = paste(Sexo, n))) +
geom_treemap() +
geom_treemap_text(colour = "white") +
labs(title = "Distribuição de Passageiros por Classe e Sexo")

Total pago por Classe
total_pago_classe <- df %>%
group_by(Classe) %>%
summarise(Total_Pago = sum(`Preço Ticket R$`, na.rm = TRUE))
# Gráfico de barras com legenda
ggplot(total_pago_classe, aes(x = Classe, y = Total_Pago, fill = Classe)) +
geom_col() +
geom_text(aes(label = paste0("R$ ", format(Total_Pago, big.mark = ".", decimal.mark = ","))),
vjust = -0.5, size = 4, color = "black") +
labs(
title = "Total Pago por Classe",
x = "Classe",
y = "Total Pago (R$)",
fill = "Classe"
) +
scale_y_continuous(labels = scales::label_number(big.mark = ".", decimal.mark = ",")) +
theme_minimal()

Resumo das Análises
## Resumo e Insights da Análise
# Taxa de sobrevivência: Aproximadamente 38% dos passageiros sobreviveram ao naufrágio.
# A sobrevivência entre as mulheres foi significativamente maior do que entre os homens. Enquanto a maioria dos homens não sobreviveu, a maioria das mulheres foi salva, o que indica uma política de evacuação com prioridade para mulheres e crianças.
# Passageiros da 1ª classe tiveram maiores taxas de sobrevivência, seguidos pela 2ª classe, enquanto a 3ª classe apresentou os menores índices. Isso reflete desigualdades de acesso aos botes salva-vidas e localização das cabines.
# Crianças e adolescentes tiveram maiores chances de sobreviver, especialmente do sexo feminino. Já passageiros idosos ou adultos jovens do sexo masculino tiveram taxas de sobrevivência menores.
#Passageiros que pagaram valores mais altos (geralmente associados à 1ª classe) tiveram maiores chances de sobreviver, reforçando o impacto da classe social na tragédia.