No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Análisis exploratorio de datos

7/17
Recursos

Aportes 11

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

ahi tienen para hacerlo cortito

columns_cat = df.select_dtypes(include='object').columns

# Crear la figura y los subplots
fig, axs = plt.subplots(nrows=5, ncols=3, figsize=(20, 20))

for var, ax in zip(columns_cat, axs.flatten()):
    sns.countplot(data=df, x=var,hue='Churn', ax=ax)
le hice algunas modificaciones a la función de las columnas categóricas para que se haga de manera automática: ![](https://static.platzi.com/media/user_upload/Captura%20de%20pantalla%202024-08-08%20a%20la%28s%29%208.01.41p.m.-e5df6527-9158-4a84-8ad5-c425d10a5b34.jpg) ```python def cat_count_by_col(self, df, target, col_list= None, fig_size= (20, 10), show_max_num: bool= False): if not col_list: col_list = df_telco.select_dtypes(include= ['object', 'category']).columns col_list = col_list.drop(target) fig, axes = plt.subplots(nrows= len(col_list), figsize= fig_size) if len(col_list) == 1: axes = [axes] #lista para iterar de manera uniforme for i in range(len(col_list)): sns.countplot(data= df, x= col_list[i], hue= target, ax= axes[i]) axes[i].set_title(f'Countplot: {col_list[i]} vs {target}', fontsize= 15, fontweight= 'bold', loc= 'left', color= 'navy') axes[i].set_xlabel(col_list[i], fontsize= 12, fontweight= 'bold', color= 'navy') axes[i].set_ylabel('Count', fontsize= 12, fontweight= 'bold', color= 'navy') if show_max_num: for p in axes[i].patches: axes[i].annotate(f'{p.get_height():.0f}', # el numerito con 0 decimales (p.get_x() + p.get_width() / 2., p.get_height()), # posición de los numeritos ha= 'center', va= 'center', # alineación de los numeritos xytext= (0, 3), # posición de los numeritos (respecto a la barra) textcoords= 'offset points', fontsize= 12, )#fontweight= 'bold' ) plt.tight_layout() plt.show() #### cat_count_by_col(df= df_telco, target= 'Churn', fig_size= (15, 50), show_max_num= True) ```
def plot_categorial_plotly(column):
    fig=px.histogram(df_data, x=column, color="Churn", barmode='group')
    fig.show()

Para un mejor gráfico les dejo este código:

cat_columns = df.select_dtypes(include='object').columns
rows = 5
cols = 3
fig, ax = plt.subplots(rows,cols, figsize=(15,30), constrained_layout=True)
for i in range(rows):
    for j in range(cols):
        title = cat_columns[i+j]
        sns.countplot(
            data=df,
            x=title,
            hue='Churn',
            ax=ax[i,j]
        )
Me puse a jugar con los datos para poder de una manera más real cómo es la relación entre tiempo y valor de la cuota mensual: ```python plt.figure(figsize=(10, 5)) sns.scatterplot(data=data, x='MonthlyCharges', y='tenure', hue='Churn', alpha=0.7, s=60) plt.title('Relationship between Monthly Charges and Tenure by Churn', fontsize=16) plt.xlabel('Monthly Charges', fontsize=12) plt.ylabel('Tenure', fontsize=12) plt.xlim(0, 130) plt.ylim(0, 75) plt.legend(title='Churn', bbox_to_anchor=(1.05, 1), loc='upper left') plt.grid(True) plt.show() ``` ![](https://static.platzi.com/media/user_upload/image-f8db569e-e108-4522-8c21-7c125b232de0.jpg)
Veo que hace un analisis de correlación pero esta bien que haga eso con todas las variables, teniendo en cuenta que hay diferentes tipos de correlacion de acuerdo por tipo de variable (spearman,por ejemplo).
Una forma de visualizar la imagen en una sóla vista y eliminar la utilización de un doble for para acceder a la matriz de ax, podría ser de la siguiente forma, "aplanando" la matriz ax para poder acceder a ella de manera lineal. ```python def plot_subplots(data, n_cols, hue ): columnas = [i for i in raw_data.select_dtypes(include = 'object').columns if i not in ('customerID',hue,'TotalCharges')] len_cols = len(columnas) n_rows = (len_cols//n_cols)+1 if n_cols%2 == 0 else (len_cols//n_cols) fig,ax = plt.subplots(n_rows, n_cols, figsize=(17,17)) ax = ax.flat for column,index in zip(columnas, range(len(columnas))): sns.countplot(data = data, x = column, hue = hue, ax = ax[index]) plot_subplots(raw_data, 2, 'Churn') ```def plot\_subplots(data, n\_cols, hue ):     columnas = \[i  for i in raw\_data.select\_dtypes(include = 'object').columns if i not in ('customerID',hue,'TotalCharges')]    len\_cols = len(columnas)    n\_rows = (len\_cols//n\_cols)+1 if n\_cols%2 == 0 else  (len\_cols//n\_cols)    fig,ax = plt.subplots(n\_rows, n\_cols, figsize=(17,17))    ax = ax.flat    for column,index in zip(columnas, range(len(columnas))):         sns.countplot(data = data, x = column, hue = hue, ax = ax\[index])plot\_subplots(raw\_data, 2, 'Churn')

Estoy impresionado de que hay dos forma de clasificar los valores del dataset segun su categoria. No sabia que eso era posible. Mas bien, me llamo la atencion de que se pueda hacer.

Les dejo una función donde únicamente dejas el df y ya realiza el resto. ```js # Importando las bibliotecas necesarias import matplotlib.pyplot as plt import seaborn as sns import pandas as pd def plot_categoricals(data, ncols=2, churn_column='Churn'): """ Esta función identifica y crea gráficos de conteo para todas las variables categóricas en el DataFrame con respecto a una columna de interés. Parámetros: - data: DataFrame de pandas que contiene los datos a graficar. - ncols: número de columnas en la visualización de gráficos. El default es 2. - churn_column: nombre de la columna por la cual se desea hacer el hue. Default es 'Churn'. """ # Extrae las columnas categóricas del DataFrame categorical_columns = [col for col in data.columns if data[col].dtype == 'object' and col != churn_column] # Calcula el número total de gráficos a realizar y organiza el layout de subplots nplots = len(categorical_columns) nrows = (nplots // ncols) + (nplots % ncols > 0) fig, axes = plt.subplots(nrows, ncols, figsize=(15, nrows * 5), constrained_layout=True) # Itera sobre el número de filas y columnas para crear los gráficos for i, ax in enumerate(axes.flatten()): if i < len(categorical_columns): # Verifica si aún hay columnas para graficar title = categorical_columns[i] sns.countplot(data=data, x=title, hue=churn_column, ax=ax) ax.set_title(f'COUNT {title.upper()}') # Título del gráfico ax.set_xlabel(title) # Etiqueta del eje X ax.set_ylabel('Count') # Etiqueta del eje Y ax.legend() # Muestra la leyenda else: ax.set_visible(False) # Oculta los subplots extras plt.show() # Muestra los gráficos # Ejemplo de uso de la función # Asegúrate de reemplazar 'df' con el nombre de tu DataFrame # plot_categoricals(df, 3, 'Churn') ```
```js # Importando las bibliotecas necesarias import matplotlib.pyplot as plt import seaborn as sns import pandas as pd def plot_categoricals(data, ncols=2, churn_column='Churn'): """ Esta función identifica y crea gráficos de conteo para todas las variables categóricas en el DataFrame con respecto a una columna de interés. Parámetros: - data: DataFrame de pandas que contiene los datos a graficar. - ncols: número de columnas en la visualización de gráficos. El default es 2. - churn_column: nombre de la columna por la cual se desea hacer el hue. Default es 'Churn'. """ # Extrae las columnas categóricas del DataFrame categorical_columns = [col for col in data.columns if data[col].dtype == 'object' and col != churn_column] # Calcula el número total de gráficos a realizar y organiza el layout de subplots nplots = len(categorical_columns) nrows = (nplots // ncols) + (nplots % ncols > 0) fig, axes = plt.subplots(nrows, ncols, figsize=(15, nrows * 5), constrained_layout=True) # Itera sobre el número de filas y columnas para crear los gráficos for i, ax in enumerate(axes.flatten()): if i < len(categorical_columns): # Verifica si aún hay columnas para graficar title = categorical_columns[i] sns.countplot(data=data, x=title, hue=churn_column, ax=ax) ax.set_title(f'COUNT {title.upper()}') # Título del gráfico ax.set_xlabel(title) # Etiqueta del eje X ax.set_ylabel('Count') # Etiqueta del eje Y ax.legend() # Muestra la leyenda else: ax.set_visible(False) # Oculta los subplots extras plt.show() # Muestra los gráficos # Ejemplo de uso de la función # Asegúrate de reemplazar 'df' con el nombre de tu DataFrame # plot_categoricals(df, 3, 'Churn') ```# Importando las bibliotecas necesarias import matplotlib.pyplot as plt import seaborn as sns import pandas as pd def plot\_categoricals(data, ncols=2, churn\_column='Churn'): """ Esta función identifica y crea gráficos de conteo para todas las variables categóricas en el DataFrame con respecto a una columna de interés. Parámetros: \- data: DataFrame de pandas que contiene los datos a graficar. \- ncols: número de columnas en la visualización de gráficos. El default es 2. \- churn\_column: nombre de la columna por la cual se desea hacer el hue. Default es 'Churn'. """ \# Extrae las columnas categóricas del DataFrame categorical\_columns = \[col for col in data.columns if data\[col].dtype == 'object' and col != churn\_column] \# Calcula el número total de gráficos a realizar y organiza el layout de subplots nplots = len(categorical\_columns) nrows = (nplots // ncols) + (nplots % ncols > 0) fig, axes = plt.subplots(nrows, ncols, figsize=(15, nrows \* 5), constrained\_layout=True) \# Itera sobre el número de filas y columnas para crear los gráficos for i, ax in enumerate(axes.flatten()): if i < len(categorical\_columns): # Verifica si aún hay columnas para graficar title = categorical\_columns\[i] sns.countplot(data=data, x=title, hue=churn\_column, ax=ax) ax.set\_title(f'COUNT {title.upper()}') # Título del gráfico ax.set\_xlabel(title) # Etiqueta del eje X ax.set\_ylabel('Count') # Etiqueta del eje Y ax.legend() # Muestra la leyenda else: ax.set\_visible(False) # Oculta los subplots extras plt.show() # Muestra los gráficos \# Ejemplo de uso de la función \# Asegúrate de reemplazar 'df' con el nombre de tu DataFrame \# plot\_categoricals(df, 3, 'Churn')
Interesante: Si es un ciudadano Senior o no es en estricto sentido una variable categórica. No obstante, seaborn la graficó porque estaba ya en representación binaria.