Tabelas Apresentadas no Trabalho
Distribuição global de sobrevivência. A tabela seguinte apresenta o
número total de passageiros que sobreviveram e que não sobreviveram ao
naufrágio do Titanic.
knitr::kable(
totais_survived,
col.names = c("Sobreviveu", "Total de Passageiros"),
caption = "Distribuição total de sobreviventes e não sobreviventes"
)
Distribuição total de sobreviventes e não
sobreviventes
| No |
1490 |
| Yes |
711 |
# ---------------------------------------------------------------------------
# Análise apenas dos passageiros (exclui a tripulação)
# Filtragem das classes 1ª, 2ª e 3ª (remoção da tripulação)
df_filtrado_classe = df[df$Class != "Crew" & df$Freq > 0, ]
# Frequência total de passageiros por classe (1ª, 2ª e 3ª)
freq_filtrado_classe = aggregate(Freq ~ Class, data = df_filtrado_classe, sum)
# Total de passageiros (sem tripulação)
num_passageiros_non_crew = sum(freq_filtrado_classe$Freq)
# Cálculo das percentagens de passageiros por classe
freq_filtrado_classe$Percentagem = round(
(freq_filtrado_classe$Freq / num_passageiros_non_crew) * 100
)
# Frequências por classe e estado de sobrevivência
freq_filtrado_classe_s = aggregate(Freq ~ Class + Survived,
data = df_filtrado_classe, sum)
freq_filtrado_classe_s$Percentagem = round(
(freq_filtrado_classe_s$Freq / num_passageiros_non_crew) * 100
)
# ---------------------------------------------------------------------------
# Máximos e mínimos de sobreviventes e não sobreviventes por classe
soma_por_classe = aggregate(Freq ~ Class + Survived,
data = df_filtrado_classe, sum)
soma_sobrev = soma_por_classe[soma_por_classe$Survived == "Yes", ]
soma_nao = soma_por_classe[soma_por_classe$Survived == "No", ]
max_sobrev = soma_sobrev[soma_sobrev$Freq == max(soma_sobrev$Freq), ]
min_sobrev = soma_sobrev[soma_sobrev$Freq == min(soma_sobrev$Freq), ]
max_nao = soma_nao[soma_nao$Freq == max(soma_nao$Freq), ]
min_nao = soma_nao[soma_nao$Freq == min(soma_nao$Freq), ]
# Cálculo das percentagens relativamente ao total de passageiros
max_sobrev$Percentagem = round(100 * max_sobrev$Freq / num_passageiros_non_crew, 1)
min_sobrev$Percentagem = round(100 * min_sobrev$Freq / num_passageiros_non_crew, 1)
max_nao$Percentagem = round(100 * max_nao$Freq / num_passageiros_non_crew, 1)
min_nao$Percentagem = round(100 * min_nao$Freq / num_passageiros_non_crew, 1)
# Tabela resumo de máximos e mínimos
tabela_max_min = data.frame(
Observação = c("Máximo de sobreviventes", "Mínimo de sobreviventes",
"Máximo de não sobreviventes", "Mínimo de não sobreviventes"),
Quantidade = c(max_sobrev$Freq, min_sobrev$Freq, max_nao$Freq, min_nao$Freq),
Classe = c(max_sobrev$Class, min_sobrev$Class, max_nao$Class, min_nao$Class),
Percentagem = c(max_sobrev$Percentagem, min_sobrev$Percentagem,
max_nao$Percentagem, min_nao$Percentagem)
)
# ---------------------------------------------------------------------------
Sobrevivência da tripulação. Nesta secção analisa‑se a sobrevivência
da tripulação, comparando o número de tripulantes que sobreviveram com
os que não sobreviveram.
# Análise da sobrevivência da tripulação
# Número total de tripulantes a bordo
crew_abordo = sum(df[df$Class == "Crew", ]$Freq)
# Número de tripulantes sobreviventes e não sobreviventes
crew_s = sum(df[df$Class == "Crew" & df$Survived == "Yes", ]$Freq)
crew_ns = sum(df[df$Class == "Crew" & df$Survived == "No", ]$Freq)
# Tabela com frequências e percentagens da tripulação
crew_s_tabela = data.frame(
Estado = c("Não sobreviveu", "Sobreviveu"),
Frequência = c(crew_ns, crew_s),
Percentagem = c(
round(crew_ns / crew_abordo * 100),
round(crew_s / crew_abordo * 100)
)
)
knitr::kable(
crew_s_tabela,
caption = "Sobrevivência da tripulacao"
)
Sobrevivência da tripulacao
| Não sobreviveu |
673 |
76 |
| Sobreviveu |
212 |
24 |
# Tabela de máximos e mínimos de sobreviventes e não sobreviventes por classe
knitr::kable(
tabela_max_min,
caption = "Máximos e mínimos de sobreviventes e não sobreviventes por classe"
)
Máximos e mínimos de sobreviventes e não sobreviventes por
classe
| Máximo de sobreviventes |
203 |
1st |
15.4 |
| Mínimo de sobreviventes |
118 |
2nd |
9.0 |
| Máximo de não sobreviventes |
528 |
3rd |
40.1 |
| Mínimo de não sobreviventes |
122 |
1st |
9.3 |
# Preparação da tabela de distribuição de passageiros por classe
freq_filtrado_classe_tab = freq_filtrado_classe
names(freq_filtrado_classe_tab) = c("Classe", "N.º de Passageiros", "Percentagem")
knitr::kable(
freq_filtrado_classe_tab,
caption = "Distribuição de passageiros por classe (sem tripulação)"
)
Distribuição de passageiros por classe (sem
tripulação)
| 1st |
325 |
25 |
| 2nd |
285 |
22 |
| 3rd |
706 |
54 |
Tabela de análise comparativa dos grupos de
passageiros
| 1ª |
Homens |
175 |
57 |
33 |
| 1ª |
Mulheres e Crianças |
150 |
146 |
97 |
| 2ª |
Mulheres e Crianças |
117 |
104 |
89 |
| 3ª |
Mulheres e Crianças |
244 |
103 |
42 |
Gráficos
Nesta secção apresentam‑se vários gráficos de barras e de sectores
que ilustram a sobrevivência por género, classe e grupo demográfico,
mantendo as cores originais do trabalho.
# ---------------------------------------------------------------------------
# Percentagem de sobrevivência da tripulação por género
crew_sM = sum(df[df$Class == "Crew" & df$Survived == "Yes" & df$Sex == "Female", ]$Freq)
crewM = sum(df[df$Class == "Crew" & df$Sex == "Female", ]$Freq)
crew_sH = sum(df[df$Class == "Crew" & df$Survived == "Yes" & df$Sex == "Male", ]$Freq)
crewH = sum(df[df$Class == "Crew" & df$Sex == "Male", ]$Freq)
pcrewM = round(crew_sM / crewM * 100)
pcrewH = round(crew_sH / crewH * 100)
pcrew_MH = c(pcrewH, pcrewM)
crewHM = barplot(
pcrew_MH,
main = "Percentagem de sobrevivência\nda tripulação por género",
ylab = "Percentagem (%)",
col = "lightblue",
ylim = c(0, 100),
names.arg = c("Homens", "Mulheres")
)
# Adicionar rótulos com percentagens
text(
x = crewHM,
y = pcrew_MH,
labels = paste0(pcrew_MH, "%"),
pos = 3
)

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Comparação da percentagem de sobreviventes: tripulação vs passageiros
crew_s = round(((crew_sM + crew_sH) / crew_abordo) * 100)
total_pass_sobre = round((sum(soma_sobrev$Freq) / num_passageiros_non_crew) * 100)
pCrew_Pass = c(crew_s, total_pass_sobre)
bp_crew_pass = barplot(
pCrew_Pass,
names.arg = c("Tripulação", "Passageiros"),
col = c("red", "skyblue"),
ylab = "Percentagem (%)",
main = "Percentagem de sobreviventes:\nTripulação vs Passageiros",
ylim = c(0, max(pCrew_Pass) * 1.2)
)
# Rótulos das percentagens
text(
x = bp_crew_pass,
y = pCrew_Pass + 2,
labels = paste0(pCrew_Pass, "%"),
col = "black",
cex = 0.8
)

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Percentagem de sobreviventes do total de sobreviventes, por classe
soma_sobrev$Freq_relativa = round(
soma_sobrev$Freq / sum(soma_sobrev$Freq) * 100
)
bp_soma_sobrev = barplot(
soma_sobrev$Freq_relativa,
names.arg = soma_sobrev$Class,
col = "skyblue",
ylab = "Percentagem",
xlab = "Classe",
main = "Percentagem de sobreviventes\ndo total de passageiros sobreviventes, por classe",
ylim = c(0, max(soma_sobrev$Freq_relativa) * 1.2)
)
# Rótulos de percentagem
text(
x = bp_soma_sobrev,
y = soma_sobrev$Freq_relativa + 2,
labels = paste0(soma_sobrev$Freq_relativa, "%"),
col = "black",
cex = 0.8
)

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Percentagem de sobreviventes relativamente ao total de passageiros, por classe
soma_sobrev$Freq_relativa_p = round(
(soma_sobrev$Freq / num_passageiros_non_crew) * 100
)
bp_soma_sobrev_p = barplot(
soma_sobrev$Freq_relativa_p,
names.arg = soma_sobrev$Class,
col = "black",
ylab = "Percentagem",
xlab = "Classe",
main = "Percentagem de sobreviventes\ndo total de passageiros, por classe",
ylim = c(0, max(soma_sobrev$Freq_relativa_p) * 1.2)
)
text(
x = bp_soma_sobrev_p,
y = soma_sobrev$Freq_relativa_p + 2,
labels = paste0(soma_sobrev$Freq_relativa_p, "%"),
col = "black",
cex = 0.8
)

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Percentagem de sobrevivência por classe (tabelas cruzadas)
# Coluna de frequência relativa no data frame cruzado classe x sobrevivência
soma_por_classe$Freq_relativa = (soma_por_classe$Freq / num_passageiros_non_crew)
# Novo data frame cruzado com percentagens
tabela_classes = xtabs(
round(Freq_relativa * 100) ~ Survived + Class,
data = soma_por_classe
)
graf_barras_class = barplot(
tabela_classes[, 1:3],
col = c("black", "skyblue"),
main = "Percentagem de sobrevivência por classe",
ylab = "Percentagem",
xlab = "Classes",
ylim = c(0, max(colSums(tabela_classes)) * 1.5)
)
legend(
"topright",
legend = c("Não sobreviveu", "Sobreviveu"),
fill = c("black", "skyblue"),
bty = "n",
cex = 0.8
)
# Código para colocar as percentagens dentro de cada rectângulo do gráfico (Assistência da IA)
altura_acum = apply(tabela_classes, 2, cumsum)
for (i in 1:nrow(tabela_classes)) {
for (j in 1:ncol(tabela_classes)) {
text(
x = graf_barras_class[j],
y = if (i == 1) tabela_classes[i, j] / 2
else altura_acum[i, j] - tabela_classes[i, j] / 2,
labels = paste0(round(tabela_classes[i, j], 1), "%"),
col = "white",
cex = 0.8
)
}
}

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Gráficos de sectores (pie charts) para cada classe
# Totais por classe
totais_classe = freq_filtrado_classe[, 1:2]
# Nomes das classes (caracter)
classes = as.character(totais_classe$Class)
# Títulos dos gráficos em português
titulos_pt = c("1ª Classe", "2ª Classe", "3ª Classe")
par(mfrow = c(1, 3), mar = c(1, 1, 1, 1), oma = c(0, 0, 2, 0), xpd = TRUE)
for (i in 1:3) {
cl = classes[i]
total = totais_classe$Freq[totais_classe$Class == cl]
val_graf = round(
(soma_por_classe$Freq[soma_por_classe$Class == cl] / total) * 100,
1
)
pie(
val_graf,
col = c("black", "skyblue"),
labels = paste0(val_graf, "%"),
radius = 1
)
title(titulos_pt[i], line = -5)
legend(
"bottom",
legend = c("Não sobreviveu", "Sobreviveu"),
fill = c("black", "skyblue"),
horiz = TRUE,
bty = "n",
inset = c(0, 0.20),
xpd = TRUE,
cex = 0.8
)
}

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Gráfico de barras – 1ª classe: Homens vs Mulheres e Crianças
pH1 = round(nro_passageiros_class1_homens_S / nro_passageiros_class1_homens * 100)
pMC1 = round(nro_passageiros_class1_MC_S / nro_passageiros_class1_MC * 100)
pH1MC1 = c(pH1, pMC1)
H1CM1 = barplot(
pH1MC1,
names.arg = c("Homens 1ª Classe", "Mulheres e Crianças 1ª Classe"),
xlab = "Grupo Demográfico",
ylab = "Taxa de sobrevivência (%)",
main = "1ª Classe",
col = "lightblue",
ylim = c(0, max(pH1MC1) * 1.2)
)
text(
x = H1CM1,
y = pH1MC1,
labels = paste0(pH1MC1, "%"),
pos = 3,
col = "black",
cex = 0.8
)

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Gráfico de barras – Homens 1ª classe vs Mulheres e Crianças 2ª classe
pMC2 = round(nro_passageiros_class2_MC_S / nro_passageiros_class2_MC * 100)
pH1MC2 = c(pH1, pMC2)
H1MC2 = barplot(
pH1MC2,
names.arg = c("Homens 1ª Classe", "Mulheres e Crianças 2ª Classe"),
xlab = "Grupo Demográfico",
ylab = "Taxa de sobrevivência (%)",
main = "1ª Classe vs 2ª Classe",
ylim = c(0, 100),
col = "lightblue"
)
text(
x = H1MC2,
y = pH1MC2,
labels = paste0(pH1MC2, "%"),
pos = 3,
col = "black",
cex = 0.8
)

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Gráfico de barras – Homens 1ª classe vs Mulheres e Crianças 3ª classe
pMC3 = round(nro_passageiros_class3_MC_S / nro_passageiros_class3_MC * 100)
pH1MC3 = c(pH1, pMC3)
H1MC3 = barplot(
pH1MC3,
names.arg = c("Homens 1ª Classe", "Mulheres e Crianças 3ª Classe"),
xlab = "Grupo Demográfico",
ylab = "Taxa de sobrevivência (%)",
main = "1ª Classe vs 3ª Classe",
ylim = c(0, 100),
col = "lightblue"
)
text(
x = H1MC3,
y = pH1MC3,
labels = paste0(pH1MC3, "%"),
pos = 3,
col = "black",
cex = 0.8
)

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Comparação geral da taxa de sobrevivência entre grupos e classes
# Matriz de taxas de sobrevivência:
# - 1ª linha: homens 1ª classe
# - 2ª linha: mulheres e crianças das 3 classes
all_comparation = matrix(
c(
pH1MC1, # 1ª classe
pH1MC2, # 2ª classe
pH1MC3 # 3ª classe
),
nrow = 2,
byrow = FALSE
)
# Nomes das linhas e colunas
rownames(all_comparation) = c("Homens 1ª Classe", "Mulheres e Crianças")
colnames(all_comparation) = c("1ª Classe", "2ª Classe", "3ª Classe")
# Gráfico de barras lado a lado
H1MCG = barplot(
all_comparation,
beside = TRUE,
xlab = "Classes",
ylab = "Taxa de sobrevivência (%)",
main = "Comparação da taxa de sobrevivência",
ylim = c(0, 120),
col = c("lightblue", "black")
)
# Legenda
legend(
"topright",
legend = rownames(all_comparation),
bty = "n",
fill = c("lightblue", "black")
)
# Adicionar percentagens acima de cada barra
for (i in 1:nrow(all_comparation)) {
text(
x = H1MCG[i, ],
y = all_comparation[i, ],
labels = paste0(all_comparation[i, ], "%"),
pos = 3,
col = "black",
cex = 0.8
)
}

# ---------------------------------------------------------------------------