You Yang

我们趋行在人生这个亘古的旅途,在坎坷中奔跑,在挫折里涅槃,忧愁缠满全身,痛苦飘洒一地。我们累,却无从止歇;我们苦,却无法回避。——《百年孤独》

泰坦尼克号救援之谜

泰坦尼克号数据分析

1.提出问题

1.泰坦尼克号救生船上的男女比例是否符合电影情节(优先保护女性)?

2.救生船的安放是否合理?是否出现慌乱?

2.数据预处理

2.1 缺失值可视化

1
2
3
4
5
6
library('vcd')
library('grid')
lb <- Lifeboats # 导入数据
# 查看缺失值 -------------------------------------------------------------------
library(VIM)
matrixplot(lb)

image-20220405101922483

发现数据良好,无缺失值。

3.方差分析

3.1 交互作用分析

1
2
3
4
library(stats)
# 被救援总人数与women和men之间的关系
wm <- aov(total~women*men*crew, data = lb)
summary(wm)
1
2
3
4
5
6
7
8
9
10
11
12
> summary(wm)
Df Sum Sq Mean Sq F value Pr(>F)
women 1 4465 4465 5.380e+32 <2e-16 ***
men 1 449 449 5.415e+31 <2e-16 ***
crew 1 106 106 1.275e+31 <2e-16 ***
women:men 1 0 0 1.170e-01 0.7394
women:crew 1 0 0 3.520e+00 0.0901 .
men:crew 1 0 0 1.628e+00 0.2308
women:men:crew 1 0 0 2.900e-02 0.8681
Residuals 10 0 0
---
Signif. codes: 0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

通过方差交互效应分析我们发现,船员优先保护女性,女性获救比例比男性高很多(women : men 的 p 值0.7394)

4.数据可视化

4.1 女性、男性、船上船员获救比例图

1
2
3
4
5
6
7
8
9
type <- c('women','men','crew')
nums <- c(sum(lb$women), sum(lb$men), sum(lb$crew))
df <- data.frame(type = type, nums = nums)
p <- ggplot(data = df, mapping = aes(x = 'Content', y = nums, fill
= type))+
geom_bar(stat = 'identity', position = 'stack')
p + coord_polar(theta = 'y') +
labs(x = '', y = '', title = 'The relation of W&M&C') +
theme(axis.text = element_blank(),panel.grid=element_blank())

image-20220405103320713

可以看出女性获救比例很高,事实上确实先保护了女性。

4.2 关于救生船

1
2
3
4
5
qplot(total/cap, data = lb, geom = 'density',color=side)
# 查看船容量与实际乘坐人数的关系
# Port是左侧 Starboard是右侧
qplot(women/total, data = lb,geom = c('density'),color = side)
# 查看女性占获救占比总数

image-20220405104815283

image-20220405104754578

  • 我们明显发现Starboard这一侧做的比较空,可能遇到了慌乱,也许不同侧当时遇到的情况不同。
  • 女性获救比例在右舷侧更高。
1
2
3
4
5
qplot(side,total/cap,data = lb, geom = 'boxplot', main = '')+
#geom_jitter(shape=16, position = position_jitter(0.2))
#stat_summary(fun.y = mean, geom = "point", shape = 23, size=4)
geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = 0.5,color = 'black')
# 添加描点

image-20220405105234701

箱线图可以更好的体现当时的情景。明显左舷侧做的比较满,而右舷侧比较空。左侧也遇到了超载的情况。

1
2
3
4
> sum(lb$total)
[1] 854
> sum(lb$cap)
[1] 1084

通过计算发现实际获救人数比救生船容量少了许多。

泰坦尼克号的救生艇其实设计得非常结实,可以承受70个人的重量,但是船员们却不知道这一点。实际上本可以总共搭载1178人的救生艇,最后只上去了651人(还有一些人是跳海之后被救上救生艇)。在船的左舷,救生船只载妇女和儿童。在右舷,则是妇女优先逃生之后允许男性登艇。所以,在右舷获救的人数比在左舷获救的多。

泰坦尼克号(英国1912年沉没的巨型游轮)_百度百科 (baidu.com)

由于数据量太小,通过查阅资料发现, 实际上右舷侧确实引发了慌乱救援过程出现了骚乱

1:20:水从E甲板的工作走廊直接往后漫,灌入4号锅炉舱。D层的前部餐厅几乎已成了潜水训练场,船体重心不断缓慢前移。原先平静的顶层甲板乱成一片,乘客终于发觉事态的严重,纷纷挤向救生艇。骚乱在不断地升级,船员开枪压制乘客,疏散工作开始失去控制。

1:30:此时船上的人开始发生骚动,当舱侧14号救生艇搭载了60人准备放出时,人群企图跳入艇中,被身处艇中的五等船员劳尔(Lowe)向天开枪吓止。留在泰坦尼克号的人陷入了绝望之中。

1
2
3
qplot(time , total/cap,geom = 'line',color = side) + geom_smooth(aes(group = side), method = "loess"
, se = T,alpha = 0.2,color = 'black')
# 查看左右侧乘坐率的区别
  • image-20220405111519655

发现

  • 左侧一开始没有坐满,后期却又超载不少.
  • 右侧乘坐率越来越多,但是始终没有坐满,在右侧发生骚乱后,出现了乘坐率突然下降的趋势,此时情景慌乱.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
data("Lifeboats")
attach(Lifeboats)
ternaryplot(
Lifeboats[,4:6],
pch = ifelse(side == "Port", 1, 19), # 3,17代表小圆点类型
col = ifelse(side == "Port", "red", "steelblue"),
id = ifelse(men / total > 0.1, as.character(boat)),
prop_size = 1.3,
dimnames_position = "corner",# 把三项图元素写在角
main = "Lifeboats on the Titanic", # 标题
labels = 'outside', # 表内标签的位置写在外面

)
grid_legend(1.2, 0.9, c(1, 19), c("red", "steelblue"), # 加上标注
c("Port", "Starboard"), title = "SIDE")
detach(Lifeboats)

image-20220406190014230

从三相图可以看出,女性被救援比例高,船员负责航行船只,所以获救也比男性高。

5.Consequence

5.1 回答疑问

  1. 女性乘客在这个悲剧中首先获救,其次是船员(为了航行船只),男性乘客获救比例最低
  2. .救生船大部分没有做满,而且左右侧的情况不一样.

5.2 过程中的发现

通过对左舷右舷数据的处理发现

  1. 船员对于救生船能坐的人数不清楚,起始阶段很多船没有被利用好,乘座率并不高.

  2. 右舷侧发生了骚乱,在救援时候人们发生了争执,由于争夺,导致最后右舷获救反而变少,还出现了停止上船的事故.