El 15 de abril de 1912, durante su viaje inaugural, el considerado “insumergible” RMS Titanic se hundió después de chocar con un iceberg. Desafortunadamente, no había suficientes botes salvavidas para todos a bordo, lo que resultó en la muerte de 1502 de 2224 pasajeros y tripulantes. Si bien hubo algún elemento de suerte involucrado en la supervivencia, parece que algunos grupos de personas tenían más probabilidades de sobrevivir que otros.
Los datos se pueden descargar desde: link datos
Y el diccionario de las variables en: link diccionario
Datos
Se descargan los datos, y se hara un analisis exploratorio.
## ï..columna descripcion
## 1 IdPasajero Código de identificación del pasajero
## 2 Sobrevivio Sobrevivió o no
## 3 ClaseDelTicket Se venieron tickets en 1era, 2da o 3era clase
## 4 Nombre Apellidos y nombres
## 5 Genero Male si es hombre, female si es mujer
## 6 Edad Edad
## 7 Hermanos_o_esposas Número de hermanos más cónyuges a bordo
## 8 Padres_o_hijos Numero de padres más hijos a bordo
## 9 Ticket Número del ticket
## 10 Precio_Ticket Precio del ticket
## 11 Numero_Cabina Número de la cabina donde se alojaba
## 12 Puerto_embarque Puerto de Embarque
## [1] "ï..columna" "descripcion"
Se cambian los nombres de las variables y se recodifican la descripcion para entender de mejor forma.
diccionario## variable descripcion
## 1 IdPasajero Código de identificación del pasajero
## 2 Sobrevivio Sobrevivió o no
## 3 ClaseDelTicket Se venieron tickets en 1era, 2da o 3era clase
## 4 Nombre Apellidos y nombres
## 5 Genero Male si es hombre, female si es mujer
## 6 Edad Edad
## 7 Hermanos_o_esposas Número de hermanos más cónyuges a bordo
## 8 Padres_o_hijos Numero de padres más hijos a bordo
## 9 Ticket Número del ticket
## 10 Precio_Ticket Precio del ticket
## 11 Numero_Cabina Número de la cabina donde se alojaba
## 12 Puerto_embarque Puerto de Embarque
limpieza de datos
Analicemos el tipo de dato que se tienen en la data train
str(train)## 'data.frame': 891 obs. of 12 variables:
## $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
## $ Survived : int 0 1 1 1 0 0 0 0 1 1 ...
## $ Pclass : int 3 1 3 1 3 3 1 3 3 2 ...
## $ Name : chr "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
## $ Sex : chr "male" "female" "female" "female" ...
## $ Age : num 22 38 26 35 35 NA 54 2 27 14 ...
## $ SibSp : int 1 1 0 1 0 0 0 3 0 1 ...
## $ Parch : int 0 0 0 0 0 0 0 1 2 0 ...
## $ Ticket : chr "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
## $ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
## $ Cabin : chr "" "C85" "" "C123" ...
## $ Embarked : chr "S" "C" "S" "S" ...
## Se tienen 891 observaciones y 12 variables
Valores perdidos
Se identifican los valores perdidos por variable y se representa gráficamente.
missmap(train)debido a que los missing values representan el 2% de la data total, se procede a eliminarlos.
data1 <- na.omit(train)se han eliminado las observaciones con los valores perdidos encontrados en el paso anterior.
Se realizan las correcciones de los tipos de datos,
data1$Survived <- as.factor(data1$Survived)
data1$Pclass <- factor(data1$Pclass,order=TRUE, levels = c(3,2,1))
data1$Sex <- as.factor(data1$Sex)
data1$Embarked <- as.factor(data1$Embarked)Se realiza un analisis de estadistica descriptiva de las variables en la data
summary(data1)## PassengerId Survived Pclass Name Sex
## Min. : 1.0 0:424 3:355 Length:714 female:261
## 1st Qu.:222.2 1:290 2:173 Class :character male :453
## Median :445.0 1:186 Mode :character
## Mean :448.6
## 3rd Qu.:677.8
## Max. :891.0
## Age SibSp Parch Ticket
## Min. : 0.42 Min. :0.0000 Min. :0.0000 Length:714
## 1st Qu.:20.12 1st Qu.:0.0000 1st Qu.:0.0000 Class :character
## Median :28.00 Median :0.0000 Median :0.0000 Mode :character
## Mean :29.70 Mean :0.5126 Mean :0.4314
## 3rd Qu.:38.00 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :80.00 Max. :5.0000 Max. :6.0000
## Fare Cabin Embarked
## Min. : 0.00 Length:714 : 2
## 1st Qu.: 8.05 Class :character C:130
## Median : 15.74 Mode :character Q: 28
## Mean : 34.69 S:554
## 3rd Qu.: 33.38
## Max. :512.33
Observando en resumen anterior se plantean algunas preguntas
¿Qué porcentaje de personas sobrevivio?
d2 <- data.frame(sobrevivio=round(prop.table(table(data1$Survived)),4))
names(d2) <- c("Sobrevivio","%")
d2## Sobrevivio %
## 1 0 0.5938
## 2 1 0.4062
Se tiene que al rededor de 59% de personas sobrevivieron despues del acidente.
¿Que porcentaje de mujeres y hombres estaban en barco?
d1 <- data.frame(sexo=round(prop.table(table(data1$Sex)),4))
names(d1) <- c("genero","%")
d1## genero %
## 1 female 0.3655
## 2 male 0.6345
Se tiene alrededor del 63% de personas del genero masculino abordo del barco
Visualizacion de datos
Para un mejor entendimiento se realizan graficas que permitan describir a los pasajeros abordo del barco.
data_nume <- data1 %>% select(SibSp,Parch,Fare, Age)
# cor(data_nume) # matriz de correlacion
# corrplot(cor(data_nume)) # grafico de correlacion
corrplot.mixed(cor(data_nume),lower = "number", upper="circle", tl.col="black")La medida o índice de correlación r puede variar entre -1 y +1, y ademas se conoce que:
- correlación despreciable: r < |0.1|
- correlación baja: |0.1| < r \(\le\) |0.3|
- correlación mediana : |0.3| < r \(\le\) |0.5|
- correlación fuerte o alta: r > |0.5|
Entonces existe una correlación mediana entre las variables numéricas.
Cantidad de personas que han sobrevivido
ggplot(data1, aes(x = Survived, fill=Survived)) +
geom_bar(width=0.5) +
geom_text(stat='count', aes(label=stat(count)), vjust=-0.5) +
xlab("Sobrevivió")+ylab("Conteo")+ggtitle("Diagrama de barras variable: sobrevivió")+
theme_classic()ggplot(data1, aes(x = Survived, fill=Sex)) +
geom_bar(position = position_dodge()) +
geom_text(stat="count",aes(label=stat(count)),
position = position_dodge(width=1), vjust=-0.5)+xlab("Sobrevivió")+ylab("Conteo")+ggtitle("Sobrevivir de acuerdo al sexo")+
theme_classic()Se puede observar que sobrevivió un número muy reducido de personas y en ellas sobrevivió un mayor número de mujeres que de hombres.
ggplot(data1, aes(x = Survived, fill=Pclass)) +
geom_bar(position = position_dodge()) +
geom_text(stat="count",
aes(label=stat(count)),
position = position_dodge(width=1),
vjust=-0.5)+xlab("Sobrevivió")+ylab("Conteo")+ggtitle("Sobrevivir por Pclass")+
theme_classic()Para analizar si sobrevive por edad, se realiza una discretizacion d ela variable edad, en este caso se van agrupar por deciles, es decir, considerando grupos de edades de la siguiente forma:
[0,10)
[10,20)
[20,30)
y asi sicesivamente.
data1$Discret.edad = cut(data1$Age, c(0,10,20,30,40,50,60,70,80,100))
#grafica
ggplot(data1, aes(x = Discret.edad, fill=Survived)) +
geom_bar(position = position_dodge()) +
geom_text(stat='count', aes(label=stat(count)), position = position_dodge(width=1), vjust=-0.5)+xlab("Rango de edad")+ylab("Conteo")+ggtitle("Sobrevivir por rango de edad")+
theme_classic()table(data1$Embarked)##
## C Q S
## 2 130 28 554
ggplot(data1,aes(Embarked,fill=Survived))+geom_bar(position="dodge2")+theme_classic()data1 %>%
ggplot() +
aes(Age, Fare, color =Survived) +
geom_point() +
xlab("Edad") +
ylab("Precio Ticket") +
ggtitle("Gráfico de dispersión de la Edad vs Precio")+
theme_classic()