Saltar navegación

Actividade 3: Análise Exploratoria

📌 Obxectivo

Copilot (CC BY-SA)

Xa tendes os datos limpos e preparados! Agora é momento de ir máis aló e descubrir patróns ocultos dentro do dataset do Titanic.

A análise exploratoria permítenos entender como as variables están relacionadas entre si e que impacto poden ter .

Visualizarás os datos para atopar tendencias, analizarás as correlacións entre variables e identificarás patróns clave que axuden ao modelo a facer predicións.

Cadernos de programación listos? Continuamos!

Para realizar estas actividades, podes executar de novo o caderno de programación da actividade 2 para ter o dataset preparado, ou descargar o arquivo cos datos limpos e escalados (csv - 95303 B) e usalo de novo dataset, eu escollín esta segunda opción por comodidade. Abro un novo caderno de programación en Colab, e cargo o novo dataset.Tes o programa na actividade 1.

📈 Paso 1: Visualización de datos clave

Para identificar distribucións e posibles tendencias, usaremos seaborn e matplotlib para visualizar os datos.

 Distribución de datos : Queremos ver como se distribúen os datos das persoas a bordo 

👉Idades:

Código Python: Distribución de idades

import seaborn as sns
import matplotlib.pyplot as plt

# Crear o histograma de Idade
plt.figure(figsize=(12,6))
ax = sns.histplot(df['Age'], bins=30, kde=True,color="brown")

# Engadir etiquetas con valores en cada barra
for p in ax.patches:
    ax.annotate(f'{int(p.get_height())}', 
                (p.get_x() + p.get_width() / 2., p.get_height()), 
                ha='center', va='center', fontsize=10, color='black')

plt.title("Distribución das idades no Titanic")
plt.xlabel("Idade")
plt.ylabel("Número de Pasaxeiros")
plt.show()    

👉 Tarifas:

Código Python: Distribución das tarifas

# Crear o histograma de Tarifas
plt.figure(figsize=(14,6))
ax = sns.histplot(df['Fare'], bins=30, kde=True , color="yellow")

# Engadir etiquetas con valores en cada barra
for p in ax.patches:
    ax.annotate(f'{int(p.get_height())}', 
                (p.get_x() + p.get_width() / 2., p.get_height()), 
                ha='center', va='center', fontsize=10, color='black')

plt.title("Distribución das Tarifas no Titanic")
plt.xlabel("Tarifa")
plt.ylabel("Número de Pasaxeiros")
plt.show()    

👉 Sexos:

Código Python: Distribución por sexos

plt.figure(figsize=(8,6))
ax = sns.countplot(x=df["Sex_male"],color="red")

# Engadir etiquetas
for p in ax.patches:
    ax.annotate(f'{p.get_height()}', (p.get_x() + p.get_width() / 2., p.get_height()), 
                ha='center', va='center', fontsize=12, color='black')

plt.title("Distribución por Sexos no Titanic")
plt.xlabel("Sexo: False:Mulleres      True=homes")
plt.ylabel("Número de Pasaxeiros")
plt.show()    

👉 Clase:

Código Python:Distribución por clases

plt.figure(figsize=(8,6))
ax = sns.countplot(x=df["Pclass"],color="purple")

# Engadir etiquetas
for p in ax.patches:
    ax.annotate(f'{p.get_height()}', (p.get_x() + p.get_width() / 2., p.get_height()), 
                ha='center', va='center', fontsize=12, color='black')

plt.title("Distribución por clases no Titanic")
plt.xlabel("Clase")
plt.ylabel("Número de Pasaxeiros")
plt.show()    

💡 Preguntas para reflexionar:

  • Hai grupos de idade que predominan na distribución? Crees que iso puido influír na supervivencia? Os menores aparecen en gran número ou son unha minoría? Como podería afectar isto ás súas posibilidades de sobrevivir?  As persoas maiores representan unha parte significativa do total? Cres que a idade afectou as súas opcións de salvación?

  • Ves moita variabilidade nos prezos dos billetes? Cres que iso podería estar relacionado co acceso aos botes salvavidas? Os billetes máis caros eran frecuentes ou só estaban dispoñibles para un pequeno grupo? Que implicacións pode ter iso na supervivencia? Crees que os pasaxeiros con tarifas máis altas tiveron máis oportunidades de salvarse? Por que?

  • O número de homes e mulleres no barco estaba equilibrado ou había unha diferenza notable? Nesa época seguíuse a regra de "mulleres e nenos primeiro", como crees que esta distribución pode estar relacionada coa taxa de supervivencia? Consideras que o sexo foi un factor clave na supervivencia ou cres que outras variables tiveron maior impacto?

  •  Que clase tiña máis pasaxeiros? Crees que isto puido influír na taxa de supervivencia?  Se os pasaxeiros de terceira clase eran maioría, cres que iso afectou a súa capacidade para salvarse? Como?  As persoas de primeira clase tiñan mellores condicións a bordo, podería iso estar vinculado cunha maior taxa de supervivencia?

❓ Paso 2: Correlación entre datos clave e supervivencia

Primeiro ides analizar cada variable por separado respecto á supervivencia para comprender a súa influencia de maneira illada.

Código Python: Heatmap variables clave e supervivencia

# Definir as variables que queremos analizar
variables = ["Pclass", "Fare", "Age","Sex_male"]
fig, axes = plt.subplots(1, 4, figsize=(15, 5))  # Distribución horizontal dos gráficos

# Xerar os heatmaps individuais
for i, var in enumerate(variables):
    corr_matrix = df[["Survived", var]].corr()  # Matriz de correlación entre supervivencia e a variable
    ax = axes[i]  # Posición do gráfico
    sns.heatmap(corr_matrix, annot=True, cmap="coolwarm", fmt=".2f", linewidths=0.5, ax=ax)
    ax.set_title(f"Correlación entre {var} e Supervivencia", fontsize=12)

plt.tight_layout()
plt.show()    

💡 Preguntas para reflexionar:

  • Que patróns observas nas correlacións entre as variables e a supervivencia? Son as relacións débiles ou fortes?
  • Que significa que unha correlación sexa negativa? Como afecta iso á interpretación dos datos?
  • Existe unha relación entre o prezo do billete e a supervivencia? Por que cres que isto ocorre?
  • Como influíu o xénero na taxa de supervivencia? Que normas sociais poderían estar relacionadas con esta tendencia?
  • Que indica a relación entre a idade e a supervivencia? Era a idade realmente un factor decisivo?
  • Segundo os datos, que grupo tiña maior probabilidade de sobrevivir? Como podes explicalo?
  • Antes de ver os datos, que pensabas sobre os factores que afectaban a supervivencia? Coinciden cos resultados da análise?
  • Hai algunha correlación que che sorprenda? Por que?
  • A correlación indica causalidade? Por que é importante ter en conta outras variables antes de sacar conclusións definitivas?
  • Que outras variables cres que poderían influír na taxa de supervivencia, pero que non aparecen nestes heatmaps?

❓ Paso 3: Correlación entre varios datos clave e supervivencia

Chegados a este punto, entenderás que a tarifa e a clase, están moi relacionadas. Imos ver agora as correlacións entre 2 variables clave e a supervivencia. Aínda que a idade demostrou non ser un factor determinante, imos ver a correlación coas outras igualmente, para seguir analizando os datos.

Código Python: Correlación de supervivencia coas variables 2 a 2

# Definir as combinacións de variables
correlacions = [
    ["Pclass", "Sex_male", "Survived"],
    ["Age", "Pclass", "Survived"],
    ["Sex_male", "Age", "Survived"]
]

# Configurar unha paleta de cores personalizada
color_palettes = ["coolwarm", "magma", "viridis"]  # Paletas de cores diferentes

# Crear múltiples heatmaps
fig, axes = plt.subplots(1, 3, figsize=(18, 6))  # Unha fila con tres gráficos

for i, vars_corr in enumerate(correlacions):
    corr_matrix = df[vars_corr].corr()  # Calcular a correlación entre as variables seleccionadas
    ax = axes[i]  # Posición do gráfico na cuadrícula
    sns.heatmap(corr_matrix, annot=True, cmap=color_palettes[i], fmt=".2f", linewidths=0.5, ax=ax)
    ax.set_title(f"Correlación entre {', '.join(vars_corr)}", fontsize=12)

plt.tight_layout()
plt.show()    

💡 Preguntas para reflexionar:

  • Analiza os heatmap e extrae conclusións sobre o impacto das combinacións de variables e a supervivencia.
  • Intenta realizar e analizar un heatmap con "Survived", "Pclass", "Sex_male", "Age".

👉 Queres máis?

Se queres comprobar as túas hipóteses, ou visualizar máis correlacións, podes usar:

📜 Códigos empregados

Comprobación de hipótesis basadas nos datos

E máis correlacións...

✅ Feito

Despós desta exhaustiva análise dos datos e das súas relacións, podemos concluir que: A clase e o xénero foron os factores máis determinantes na supervivencia dos pasaxeiros do Titanic, cos de primeira clase e as mulleres tendo maior probabilidade de sobrevivir. A idade tivo unha influencia mínima, e a xente máis nova concentrábase precisamente nas clases con menos poder adquisitivo.

Código Python: Programa para cargar como novo dataset o arquivo xenerado na actividade 2 cos datos procesados

import pandas as pd # Incluímos pandas para traballar con datos
import seaborn as sns    #E seaborn para gráficos
# Ruta do ficheiro en Colab, tes que telo subido en arquivos, e cambia o nome se lle tes un distinto  
df = pd.read_csv("/content/datasetTitanicProcesado.csv")  
df.head(10)  # Mostra as 10 primeiras filas do DataFrame    

Lembra que escalamos os datos.Se queres visualizar os datos reais, só tes que executar estos programas co dataset inicial cos cambios no nome de columna pertinentes. O resultado é o mesmo, pero escalado ós valores máis recoñecibles para humanos.

# Crear a gráfica de Idade por Clase plt.figure(figsize=(8, 5)) sns.stripplot(x=df["Pclass"], y=df["Age"],hue=df["Pclass"], palette="coolwarm") # Etiquetas plt.xlabel("Clase", fontsize=12) plt.ylabel("Idade", fontsize=12) plt.title("Distribución da Idade por Clase", fontsize=14) # Mostrar a gráfica plt.show()

sns.countplot(x='Sex_male', hue='Survived', data=df)

sns.countplot(x='Pclass', hue='Survived', data=df)

# Contar total de pasaxeiros por idade age_counts = df['Age'].value_counts() # Contar superviventes por idade survived_counts = df[df['Survived'] == 1]['Age'].value_counts() # Calcular porcentaxe de supervivencia percentage_survived = (survived_counts / age_counts) * 100 # Crear o gráfico plt.figure(figsize=(10,6)) sns.scatterplot(x=percentage_survived.index, y=percentage_survived, color='blue') # Etiquetas e título plt.xlabel('Idade') plt.ylabel('Porcentaxe de supervivencia') plt.title('Porcentaxe de supervivencia por idade') # Mostrar gráfico plt.show()

sns.heatmap(df.corr(numeric_only=True), cmap='coolwarm', annot=True) plt.title("Mapa de correlacións entre variables") plt.show()

df.corr(numeric_only=True)

Autoavaliación

Lista de Cotexo

📊 Actividade 3: Análise Exploratoria

Realicei e analicei as gráficas de datos clave para a supervivencia

Esta lista axúdache a organizar e verificar o teu progreso nesta actividade.