Resultado 01
# librerias
from loguru import logger
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 500)
pd.set_option('display.float_format', lambda x: '%.3f' % x)
def plot_histogram(data, column, figsize=(8, 4)):
"""
Crea y muestra un histograma de la distribución de los datos de una columna dada en un DataFrame.
Parámetros:
data (pandas DataFrame): El DataFrame que contiene los datos.
column (str): El nombre de la columna para la cual se creará el histograma.
figsize (tuple, opcional): El tamaño de la figura del histograma. Por defecto es (8, 4).
Returns:
None
"""
# Configurar el estilo de Seaborn
sns.set(style='whitegrid')
# Crear una figura con el tamaño especificado
plt.figure(figsize=figsize)
# Crear el histograma utilizando Seaborn
sns.histplot(data[column].dropna(), bins=20, color='#bce4b5', edgecolor='black')
# Agregar título y etiquetas a los ejes
plt.title(f'Distribución de la columna {column}')
plt.xlabel(column)
plt.ylabel('Frecuencia')
# Mostrar la cuadrícula en el gráfico
plt.grid(True)
# Mostrar el histograma
plt.show()
def plot_histogram_vo(data, column, vo, figsize=(8, 4)):
"""
Crea y muestra un histograma de la distribución de los datos de una columna dada en un DataFrame,
dividido por una variable categórica (variable objetivo).
Parámetros:
data (pandas DataFrame): El DataFrame que contiene los datos.
column (str): El nombre de la columna para la cual se creará el histograma.
vo (str): El nombre de la variable objetivo para dividir los datos en el histograma.
figsize (tuple, opcional): El tamaño de la figura del histograma. Por defecto es (8, 4).
Returns:
None
"""
# Configurar el estilo de Seaborn
sns.set(style='whitegrid')
# Crear una figura con el tamaño especificado
plt.figure(figsize=figsize)
# Crear histogramas utilizando Seaborn
sns.histplot(x=column, hue=vo, data=data, palette='Greens', edgecolor='black')
# Agregar título y etiquetas a los ejes
plt.title(f'Distribución de la columna {column}')
plt.xlabel(column)
plt.ylabel('Frecuencia')
# Mostrar el histograma
plt.show()
def plot_range_distribution(data, column, bins, figsize=(8, 4)):
"""
Crea y muestra un gráfico de barras que representa la distribución de una columna
dividida en rangos específicos en un DataFrame.
Parámetros:
data (pandas DataFrame): El DataFrame que contiene los datos.
column (str): El nombre de la columna para la cual se creará la distribución por rangos.
bins (int or sequence of scalars): El número de contenedores (bins) o los límites de los contenedores para la división.
figsize (tuple, opcional): El tamaño de la figura del gráfico de barras. Por defecto es (8, 4).
Returns:
None
"""
# Configurar el estilo de Seaborn
sns.set(style='whitegrid')
# Agregar una nueva columna al DataFrame con los rangos de la columna específica
data[column + 'Range'] = pd.cut(data[column], bins=bins, right=False)
# Contar el número de elementos en cada rango
temp_counts = data[column + 'Range'].value_counts().sort_index()
# Calcular los porcentajes en lugar de contar el número de elementos
temp_percentages = (temp_counts / temp_counts.sum()) * 100 # Calcular los porcentajes relativos
# Crear el gráfico de barras
plt.figure(figsize=figsize)
sns.barplot(x=temp_percentages.index, y=temp_percentages.values, color='#bce4b5', edgecolor='black')
# Añadir anotaciones de valores en las barras (porcentajes)
for i, value in enumerate(temp_percentages):
plt.text(i, value + 0.2, f'{value:.2f}%', ha='center', va='bottom', fontsize=9)
# Establecer título y etiquetas de los ejes
plt.title(f'Distribución por Rango de la columna {column}')
plt.xlabel('Rangos')
plt.ylabel('Frecuencia')
plt.xticks(rotation=0) # Rotar las etiquetas del eje x para mayor legibilidad
plt.tight_layout()
# Mostrar el gráfico
plt.show()
# eliminar columna extra
data.drop(column + 'Range',axis=1,inplace=True)
def plot_range_distribution_vo(data, column, bins, vo, figsize=(8, 4)):
"""
Crea y muestra un gráfico de barras que representa la distribución de una columna dividida en rangos específicos en un DataFrame,
agrupados por una variable objetivo y visualizando los porcentajes relativos en cada grupo.
Parámetros:
data (pandas DataFrame): El DataFrame que contiene los datos.
column (str): El nombre de la columna para la cual se creará la distribución por rangos.
bins (int or sequence of scalars): El número de contenedores (bins) o los límites de los contenedores para la división.
vo (str): El nombre de la variable objetivo para agrupar los datos en el gráfico de barras.
figsize (tuple, opcional): El tamaño de la figura del gráfico de barras. Por defecto es (8, 4).
Returns:
None
"""
# Configurar el estilo de Seaborn
sns.set(style='whitegrid')
# Agregar una nueva columna al DataFrame con los rangos de la columna específica
data[column + 'Range'] = pd.cut(data[column], bins=bins, right=False)
# Calcular el conteo de cada grupo y reestructurar los datos
counts = data.groupby([vo, column + 'Range']).size().reset_index(name='Count')
# Calcular los porcentajes por categoría
counts['Percentage'] = counts.groupby(vo)['Count'].transform(lambda x: (x / x.sum()))
# Gráfico de barras con Seaborn
plt.figure(figsize=figsize)
ax = sns.barplot(data=counts, x=column + 'Range', y='Percentage', hue=vo, palette='Greens', edgecolor='black')
# Rotar los ejes x (45 grados) y añadir los valores en cada barra (excluyendo 0%)
for p in ax.patches:
if p.get_height() != 0: # Si el valor no es 0%
ax.annotate(f'{p.get_height():.2%}', (p.get_x() + p.get_width() / 2., p.get_height()), ha='center',
va='center', xytext=(0, 10), textcoords='offset points', fontsize=8)
# Establecer título y etiquetas de los ejes
plt.title(f'Distribución por Rango de la columna {column}')
plt.xlabel('Rangos')
plt.ylabel('Frecuencia')
plt.xticks(rotation=0) # Rotar etiquetas del eje x para mejor legibilidad
plt.tight_layout()
# Mostrar el gráfico
plt.show()
# eliminar columna extra
data.drop(column + 'Range', axis=1, inplace=True)
def plot_barplot(data, column, figsize=(8, 4)):
"""
Crea y muestra un gráfico de barras que representa la distribución de una columna en un DataFrame.
Parámetros:
data (pandas DataFrame): El DataFrame que contiene los datos.
column (str): El nombre de la columna para la cual se creará el gráfico de barras.
figsize (tuple, opcional): El tamaño de la figura del gráfico de barras. Por defecto es (8, 4).
Returns:
None
"""
# Configurar el estilo de Seaborn
sns.set(style='whitegrid')
# Calcular los porcentajes de cada categoría en la columna especificada
temp_percentages = (data[column].value_counts(normalize=True) * 100).sort_index()
# Crear el gráfico de barras con porcentajes
plt.figure(figsize=figsize)
temp_percentages.plot(kind='bar', color='#bce4b5', edgecolor='black')
# Añadir anotaciones de valores en las barras (porcentajes)
for i, value in enumerate(temp_percentages):
plt.text(i, value + 1, f'{value:.2f}%', ha='center', va='bottom', fontsize=9)
# Establecer título y etiquetas de los ejes
plt.title(f'Distribución de la columna {column}')
plt.xlabel(column)
plt.ylabel('Frecuencia')
plt.xticks(rotation=0) # Rotar las etiquetas del eje x para mayor legibilidad
plt.ylim(0, 100) # Establecer el rango del eje y de 0 a 100 para porcentajes
plt.show()
def plot_barplot_vo(data, column, vo, figsize=(8, 4)):
"""
Crea y muestra un gráfico de barras que representa la distribución de una columna dividida por una variable objetivo.
Parámetros:
data (pandas DataFrame): El DataFrame que contiene los datos.
column (str): El nombre de la columna para la cual se creará el gráfico de barras.
vo (str): El nombre de la variable objetivo para agrupar los datos en el gráfico de barras.
figsize (tuple, opcional): El tamaño de la figura del gráfico de barras. Por defecto es (8, 4).
Returns:
None
"""
# Configurar el estilo de Seaborn
sns.set(style='whitegrid')
# Calcular el conteo de cada grupo y reestructurar los datos
counts = data.groupby([vo, column]).size().reset_index(name='Count')
# Calcular los porcentajes por categoría
counts['Percentage'] = counts.groupby(vo)['Count'].transform(lambda x: (x / x.sum()))
# Gráfico de barras con Seaborn
plt.figure(figsize=figsize)
ax = sns.barplot(data=counts, x=column, y='Percentage', hue=vo, palette='Greens', edgecolor='black')
# Rotar los ejes x (45 grados) y añadir los valores en cada barra (excluyendo 0%)
for p in ax.patches:
if p.get_height() != 0: # Si el valor no es 0%
ax.annotate(f'{p.get_height():.2%}', (p.get_x() + p.get_width() / 2., p.get_height()), ha='center',
va='center', xytext=(0, 10), textcoords='offset points', fontsize=8)
# Establecer título y etiquetas de los ejes
plt.title(f'Distribución por Rango de la columna {column}')
plt.xlabel('Rangos')
plt.ylabel('Frecuencia')
plt.xticks(rotation=0) # Rotar etiquetas del eje x para mejor legibilidad
plt.tight_layout()
# Mostrar el gráfico
plt.show()
def calculate_percentage_vo_int(data, column, vo):
"""
Calcula los porcentajes relativos de cada grupo dividido por una variable objetivo (vo) en un DataFrame,
manteniendo la columna de interés como índice en la tabla pivote.
Parámetros:
data (pandas DataFrame): El DataFrame que contiene los datos.
column (str): El nombre de la columna para la cual se calcularán los porcentajes.
vo (str): El nombre de la variable objetivo para agrupar los datos y calcular los porcentajes.
Returns:
pandas DataFrame: Una tabla pivotante con los porcentajes relativos.
"""
# Calcular el conteo de cada grupo y reestructurar los datos
counts = data.groupby([vo, column]).size().reset_index(name='Count')
# Calcular los porcentajes por categoría
counts['Percentage'] = counts.groupby(vo)['Count'].transform(lambda x: (x / x.sum()))
# Crear una tabla pivote con los porcentajes
pivot_counts = counts.pivot_table(values=['Count', 'Percentage'], index=column, columns=vo)
return pivot_counts
def calculate_percentage_vo(data, column, bins, vo):
"""
Calcula los porcentajes relativos de cada grupo dividido por una variable objetivo (vo) en un DataFrame,
dentro de rangos específicos definidos por column y bins.
Parámetros:
data (pandas DataFrame): El DataFrame que contiene los datos.
column (str): El nombre de la columna para la cual se calcularán los porcentajes.
bins (int or sequence of scalars): El número de contenedores (bins) o los límites de los contenedores para la división.
vo (str): El nombre de la variable objetivo para agrupar los datos y calcular los porcentajes.
Returns:
pandas DataFrame: Una tabla pivotante con los porcentajes relativos.
"""
# Agregar una nueva columna al DataFrame con los rangos de la columna específica
data[column + 'Range'] = pd.cut(data[column], bins=bins, right=False)
# Calcular el conteo de cada grupo y reestructurar los datos
counts = data.groupby([vo, column + 'Range']).size().reset_index(name='Count')
# Calcular los porcentajes por categoría
counts['Percentage'] = counts.groupby(vo)['Count'].transform(lambda x: (x / x.sum()))
# Crear una tabla pivote con los porcentajes
pivot_counts = counts.pivot_table(values=['Count', 'Percentage'], index=column + 'Range', columns=vo)
# eliminar columna extra
data.drop(column + 'Range', axis=1, inplace=True)
return pivot_counts
Lectura de datos¶
logger.info("Leer Datos")
# paths
path_raw = "../../data/raw/"
path_procesed = "../../data/procesed/"
path_final = "../../data/final/"
2024-04-02 22:32:22.585 | INFO | __main__:<module>:1 - Leer Datos
# leer datos
train = pd.read_csv(path_raw + "train.csv")
test = pd.read_csv(path_raw + "test.csv")
# Información sobre los tipos de datos y valores no nulos en cada columna
print("TRAIN:")
train.info()
TRAIN: <class 'pandas.core.frame.DataFrame'> RangeIndex: 891 entries, 0 to 890 Data columns (total 12 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 PassengerId 891 non-null int64 1 Survived 891 non-null int64 2 Pclass 891 non-null int64 3 Name 891 non-null object 4 Sex 891 non-null object 5 Age 714 non-null float64 6 SibSp 891 non-null int64 7 Parch 891 non-null int64 8 Ticket 891 non-null object 9 Fare 891 non-null float64 10 Cabin 204 non-null object 11 Embarked 889 non-null object dtypes: float64(2), int64(5), object(5) memory usage: 83.7+ KB
Nota: Por ahora nos centraremos en el
train, pero se debe hacer lo mismo para eltest
# Verificar duplicados en el conjunto de datos
duplicates = train.duplicated()
# Contar el número de filas duplicadas
num_duplicates = duplicates.sum()
print("Número de filas duplicadas:", num_duplicates)
Número de filas duplicadas: 0
Para llevar a cabo un Análisis Exploratorio de Datos (EDA) con gráficos, ya sea univariado, bivariado, u otros, es crucial considerar el tipo de datos con el que estemos trabajando. Además, es posible realizar un análisis global de las columnas, como un análisis exhaustivo por columnas, dependiendo de la velocidad deseada para nuestro EDA. Se procurará presentar todos los casos de forma detallada y clara, buscando la máxima comprensión posible.
# Obtener nombres de columnas según tipos de datos
variable_objetivo = 'Survived'
columnas_flotantes = [x for x in list(train.select_dtypes(include=['float64']).columns) if x!=variable_objetivo]
columnas_enteras = [x for x in list(train.select_dtypes(include=['int32', 'int64']).columns) if x!=variable_objetivo]
columnas_objetos = [x for x in list(train.select_dtypes(include=['object']).columns) if x!=variable_objetivo]
# Mostrar nombres de columnas por tipo de datos
print(f"Variable Objetivo: {variable_objetivo}")
print()
print("Total Columnas flotantes:", len(columnas_flotantes))
print("Columnas flotantes:", columnas_flotantes)
print()
print("Total Columnas enteras:", len(columnas_enteras))
print("Columnas enteras:", columnas_enteras)
print()
print("Total Columnas objetos:", len(columnas_objetos))
print("Columnas objetos:", columnas_objetos)
Variable Objetivo: Survived Total Columnas flotantes: 2 Columnas flotantes: ['Age', 'Fare'] Total Columnas enteras: 4 Columnas enteras: ['PassengerId', 'Pclass', 'SibSp', 'Parch'] Total Columnas objetos: 5 Columnas objetos: ['Name', 'Sex', 'Ticket', 'Cabin', 'Embarked']
En este caso, la columna 'Age' debería ser entera, pero tiene datos Nulos (o NaN), por lo cual se convierte automáticamente en una columna tipo float.
De momento tratemosla como una columna tipo float.
EDA¶
logger.info("EDA")
2024-04-02 22:32:22.662 | INFO | __main__:<module>:1 - EDA
Se disponen de columnas que sirven para identificar a cada individuo, comúnmente identificadas por el término 'ID' en su nombre. Es esencial que estos identificadores no tengan el valor cero.
Es importante notar que estos identificadores no deben estar duplicados, a menos que haya más de un registro debido al análisis en relación con otras columnas (por ejemplo, el período). En estos casos específicos, la duplicación puede ser relevante y está asociada con ciertos contextos de análisis que involucran otras variables o períodos temporales.
logger.info('PassengerId')
total_nulos = train['PassengerId'].isnull().sum()
print(f"total de valores nulos: {total_nulos} ")
2024-04-02 22:32:22.677 | INFO | __main__:<module>:1 - PassengerId
total de valores nulos: 0
# Dejar en el index
train = train.set_index('PassengerId')
train.head()
| Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| PassengerId | |||||||||||
| 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.000 | 1 | 0 | A/5 21171 | 7.250 | NaN | S |
| 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.000 | 1 | 0 | PC 17599 | 71.283 | C85 | C |
| 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.000 | 0 | 0 | STON/O2. 3101282 | 7.925 | NaN | S |
| 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.000 | 1 | 0 | 113803 | 53.100 | C123 | S |
| 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.000 | 0 | 0 | 373450 | 8.050 | NaN | S |
Ahora, procederemos a trabajar el resto de las columnas:
logger.info(f"flotantes:{columnas_flotantes}")
logger.info('Age')
2024-04-02 22:32:22.708 | INFO | __main__:<module>:1 - flotantes:['Age', 'Fare'] 2024-04-02 22:32:22.709 | INFO | __main__:<module>:2 - Age
# Primer Caso: Crear el histograma para la columna Objetivo
logger.info("Primer Caso: histograma")
# Llamada a la función
col = 'Age'
plot_histogram(train, col)
2024-04-02 22:32:22.723 | INFO | __main__:<module>:2 - Primer Caso: histograma
# Llamada a la función
columna = 'Age'
variable_objetivo = 'Survived'
plot_histogram_vo(train, columna, variable_objetivo)
# Llamada a la función
bins = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
columna = 'Age'
variable_objetivo = 'Survived'
plot_range_distribution(train, columna, bins, figsize=(10, 5))
# Llamada a la función
bins = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
columna = 'Age'
variable_objetivo = 'Survived'
plot_range_distribution_vo(train, col, bins, variable_objetivo, figsize=(10, 5))
# Llamada a la función
bins = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
columna = 'Age'
variable_objetivo = 'Survived'
tabla = calculate_percentage_vo(train, columna, bins, variable_objetivo)
tabla
| Count | Percentage | |||
|---|---|---|---|---|
| Survived | 0 | 1 | 0 | 1 |
| AgeRange | ||||
| [0, 10) | 24.000 | 38.000 | 0.057 | 0.131 |
| [10, 20) | 61.000 | 41.000 | 0.144 | 0.141 |
| [20, 30) | 143.000 | 77.000 | 0.337 | 0.266 |
| [30, 40) | 94.000 | 73.000 | 0.222 | 0.252 |
| [40, 50) | 55.000 | 34.000 | 0.130 | 0.117 |
| [50, 60) | 28.000 | 20.000 | 0.066 | 0.069 |
| [60, 70) | 13.000 | 6.000 | 0.031 | 0.021 |
| [70, 80) | 6.000 | 0.000 | 0.014 | 0.000 |
| [80, 90) | 0.000 | 1.000 | 0.000 | 0.003 |
Para analizar variables con valores float, el enfoque depende de la distribución de los datos. En el caso de un análisis univariado, se suele emplear un Histograma como punto de partida (Primer Caso). Sin embargo, si el conjunto de datos es extenso o si hay una concentración notoria de valores alrededor de cero (un escenario común), es más efectivo transformar los datos en intervalos discretos (Segundo Caso).
La definición de estos intervalos puede hacerse de manera automática mediante una función que genere rangos equidistantes. No obstante, en ocasiones, es preferible definir manualmente estos intervalos, ya que la automatización podría generar numerosos bins, dificultando la interpretación y el análisis de los datos. En tales casos, un enfoque manual permite ajustar los intervalos de forma más acorde con la naturaleza específica de los datos, facilitando su comprensión y análisis.
logger.info('Fare')
# Primer Caso: Crear el histograma para la columna Objetivo
logger.info("Primer Caso: histograma")
# Llamada a la función
col = 'Fare'
plot_histogram(train, col)
2024-04-02 22:32:23.628 | INFO | __main__:<module>:1 - Fare 2024-04-02 22:32:23.629 | INFO | __main__:<module>:4 - Primer Caso: histograma
# Llamada a la función
columna = 'Fare'
variable_objetivo = 'Survived'
plot_histogram_vo(train, columna, variable_objetivo)
# Llamada a la función
bins = [0, 10, 25, 50, 100, 1000]
columna = 'Fare'
variable_objetivo = 'Survived'
plot_range_distribution(train, col, bins, figsize=(10, 5))
# Llamada a la función
bins = [0, 10, 25, 50, 100, 1000]
columna = 'Fare'
variable_objetivo = 'Survived'
plot_range_distribution_vo(train, col, bins, variable_objetivo, figsize=(10, 5))
# Llamada a la función
bins = [0, 10, 25, 50, 100, 1000]
columna = 'Fare'
variable_objetivo = 'Survived'
tabla = calculate_percentage_vo(train, columna, bins, variable_objetivo)
tabla
| Count | Percentage | |||
|---|---|---|---|---|
| Survived | 0 | 1 | 0 | 1 |
| FareRange | ||||
| [0, 10) | 269.000 | 67.000 | 0.490 | 0.196 |
| [10, 25) | 128.000 | 93.000 | 0.233 | 0.272 |
| [25, 50) | 100.000 | 73.000 | 0.182 | 0.213 |
| [50, 100) | 38.000 | 70.000 | 0.069 | 0.205 |
| [100, 1000) | 14.000 | 39.000 | 0.026 | 0.114 |
logger.info(f"Enteras:{columnas_enteras}")
logger.info(f"Object:{columnas_objetos}")
2024-04-02 22:32:24.455 | INFO | __main__:<module>:1 - Enteras:['PassengerId', 'Pclass', 'SibSp', 'Parch'] 2024-04-02 22:32:24.455 | INFO | __main__:<module>:2 - Object:['Name', 'Sex', 'Ticket', 'Cabin', 'Embarked']
Para representar gráficamente variables de tipo int o object, se recomienda inicialmente utilizar el método value_counts de Pandas para contar los valores únicos en esa columna. Sin embargo, existen diferentes consideraciones a tener en cuenta:
- En casos donde la cantidad de valores únicos es reducida, es apropiado emplear directamente
value_counts, tanto para variables de tipointcomoobject. - Para variables de tipo
intcon una extensa cantidad de categorías, es útil trabajar con intervalos de valores antes de la visualización gráfica. - En el caso de variables de tipo
objectcon múltiples categorías, se puede considerar priorizar aquellas con mayor frecuencia y agrupar el resto bajo una etiqueta general como "otros". Sin embargo, si la mayoría de los valores son únicos, es posible que esa variable no aporte información relevante para ser representada en un gráfico (por ejemplo, información como domicilio, números de teléfono, correos electrónicos, etc.).s.
# Llamada a la función
columna = 'Pclass'
logger.info(columna)
plot_barplot(train, columna)
2024-04-02 22:32:24.471 | INFO | __main__:<module>:3 - Pclass
col = 'Pclass'
vo = 'Survived'
plot_barplot_vo(train, col, variable_objetivo, figsize=(10, 5))
# Llamada a la función
col = 'Pclass'
vo = 'Survived'
calculate_percentage_vo_int(train,col,vo)
| Count | Percentage | |||
|---|---|---|---|---|
| Survived | 0 | 1 | 0 | 1 |
| Pclass | ||||
| 1 | 80.000 | 136.000 | 0.146 | 0.398 |
| 2 | 97.000 | 87.000 | 0.177 | 0.254 |
| 3 | 372.000 | 119.000 | 0.678 | 0.348 |
# Llamada a la función
columna = 'SibSp'
logger.info(columna)
plot_barplot(train, columna)
2024-04-02 22:32:24.767 | INFO | __main__:<module>:3 - SibSp
col = 'SibSp'
vo = 'Survived'
plot_barplot_vo(train, col, variable_objetivo, figsize=(10, 5))
# Llamada a la función
col = 'SibSp'
vo = 'Survived'
calculate_percentage_vo_int(train,col,vo)
| Count | Percentage | |||
|---|---|---|---|---|
| Survived | 0 | 1 | 0 | 1 |
| SibSp | ||||
| 0 | 398.000 | 210.000 | 0.725 | 0.614 |
| 1 | 97.000 | 112.000 | 0.177 | 0.327 |
| 2 | 15.000 | 13.000 | 0.027 | 0.038 |
| 3 | 12.000 | 4.000 | 0.022 | 0.012 |
| 4 | 15.000 | 3.000 | 0.027 | 0.009 |
| 5 | 5.000 | NaN | 0.009 | NaN |
| 8 | 7.000 | NaN | 0.013 | NaN |
# Llamada a la función
columna = 'Parch'
logger.info(columna)
plot_barplot(train, columna)
2024-04-02 22:32:25.122 | INFO | __main__:<module>:3 - Parch
col = 'Parch'
vo = 'Survived'
plot_barplot_vo(train, col, variable_objetivo, figsize=(10, 5))
# Llamada a la función
col = 'Parch'
vo = 'Survived'
calculate_percentage_vo_int(train,col,vo).fillna(0)
| Count | Percentage | |||
|---|---|---|---|---|
| Survived | 0 | 1 | 0 | 1 |
| Parch | ||||
| 0 | 445.000 | 233.000 | 0.811 | 0.681 |
| 1 | 53.000 | 65.000 | 0.097 | 0.190 |
| 2 | 40.000 | 40.000 | 0.073 | 0.117 |
| 3 | 2.000 | 3.000 | 0.004 | 0.009 |
| 4 | 4.000 | 0.000 | 0.007 | 0.000 |
| 5 | 4.000 | 1.000 | 0.007 | 0.003 |
| 6 | 1.000 | 0.000 | 0.002 | 0.000 |
# Llamada a la función
columna = 'Sex'
logger.info(columna)
plot_barplot(train, columna)
2024-04-02 22:32:25.557 | INFO | __main__:<module>:3 - Sex
col = 'Sex'
vo = 'Survived'
plot_barplot_vo(train, col, variable_objetivo, figsize=(10, 5))
# Llamada a la función
col = 'Sex'
vo = 'Survived'
calculate_percentage_vo_int(train,col,vo).fillna(0)
| Count | Percentage | |||
|---|---|---|---|---|
| Survived | 0 | 1 | 0 | 1 |
| Sex | ||||
| female | 81.000 | 233.000 | 0.148 | 0.681 |
| male | 468.000 | 109.000 | 0.852 | 0.319 |
# Llamada a la función
columna = 'Embarked'
logger.info(columna)
plot_barplot(train, columna)
2024-04-02 22:32:25.849 | INFO | __main__:<module>:3 - Embarked
col = 'Embarked'
vo = 'Survived'
plot_barplot_vo(train, col, variable_objetivo, figsize=(10, 6))
# Llamada a la función
col = 'Embarked'
vo = 'Survived'
calculate_percentage_vo_int(train,col,vo).fillna(0)
| Count | Percentage | |||
|---|---|---|---|---|
| Survived | 0 | 1 | 0 | 1 |
| Embarked | ||||
| C | 75.000 | 93.000 | 0.137 | 0.274 |
| Q | 47.000 | 30.000 | 0.086 | 0.088 |
| S | 427.000 | 217.000 | 0.778 | 0.638 |
Para realizar análisis exploratorios sobre las columnas 'Cabin', 'Name' y 'Ticket' del conjunto de datos del Titanic, puedes seguir varios enfoques dependiendo de la información que contengan y el objetivo específico de tu análisis.