Compartir a través de


Parte 2 del tutorial: Exploración y visualización de datos mediante cuadernos de Microsoft Fabric

En este tutorial, aprenderá a realizar análisis exploratorios de datos (EDA) para examinar e investigar los datos al resumir sus características clave mediante el uso de técnicas de visualización de datos.

Utilizaráseaborn, una biblioteca de visualización de datos de Python que proporciona una interfaz de alto nivel para la construcción de visuales en tramas de datos y matrices. Para más información sobre seaborn, consulte Seaborn: visualización de datos estadísticos.

También usará Data Wrangler, es una herramienta basada en cuadernos que le proporciona una experiencia inmersiva para realizar análisis exploratorios de datos.

Los pasos de este tutorial son:

  1. Lea los datos almacenados de una tabla delta en lakehouse.
  2. Convierta un dataframe de Spark en dataframe de Pandas, que admiten las bibliotecas de visualización de Python.
  3. Uso de Wrangler de datos para realizar la limpieza inicial y la transformación de datos.
  4. Realice un análisis exploratorio de los datos usandoseaborn.

Requisitos previos

Esta es la parte 2 de 5 de la serie de tutoriales. Para realizar este tutorial, primero complete:

Seguir en el cuaderno

2-explore-cleanse-data.ipynb es el cuaderno que acompaña a este tutorial.

Para abrir el cuaderno complementario para este tutorial, siga las instrucciones en Preparación del sistema para los tutoriales de ciencia de datos para importar el cuaderno en el área de trabajo.

Si prefiere copiar y pegar el código de esta página, puede crear un cuaderno nuevo.

Asegúrese de adjuntar una instancia de LakeHouse al cuaderno antes de empezar a ejecutar código.

Importante

Adjunte la misma casa de lago que usó en la parte 1.

Lectura de datos sin procesar desde el lago de datos

Leer los datos sin procesar del Archivos del lago de datos. Cargó estos datos en el cuaderno anterior. Asegúrese de que ha adjuntado la misma instancia de lakehouse que usó en la parte 1 de este cuaderno antes de ejecutar este código.

df = (
    spark.read.option("header", True)
    .option("inferSchema", True)
    .csv("Files/churn/raw/churn.csv")
    .cache()
)

Creación de un dataframe de Pandas a partir del conjunto de datos

Convierte el DataFrame de Spark en dataFrame de Pandas para facilitar el procesamiento y la visualización.

df = df.toPandas()

Mostrar datos sin procesar

Podemos usar display para explorar los datos sin procesar, calcular algunas estadísticas básicas o incluso mostrar vistas de gráfico. Tenga en cuenta que primero debe importar las bibliotecas necesarias, como Numpy, Pnadas, Seaborny Matplotlib para el análisis y la visualización de datos.

import seaborn as sns
sns.set_theme(style="whitegrid", palette="tab10", rc = {'figure.figsize':(9,6)})
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
from matplotlib import rc, rcParams
import numpy as np
import pandas as pd
import itertools
display(df, summary=True)

Uso de Wrangler de datos para realizar la limpieza inicial de datos

Para explorar y transformar cualquier dataframe de Pandas, inicie Data Wrangler directamente desde el cuaderno.

Nota:

El Wrangler de datos no se puede abrir mientras el kernel del cuaderno está ocupado. La ejecución de la celda debe completarse antes de iniciar Data Wrangler.

  1. En la cinta de opciones del cuaderno pestaña Data, seleccione Launch Data Wrangler. Verá una lista de dataFrames de Pandas activados disponibles para su edición.
  2. Seleccione el DataFrame que desea abrir en Data Wrangler. Dado que este cuaderno solo contiene un DataFrame, df, seleccione df.

Captura de pantalla que muestra cómo iniciar el data wrangler desde un cuaderno.

Data Wrangler inicia y genera información general descriptiva de los datos. En la tabla central se muestra cada columna de datos. En el panel Resumen situado junto a la tabla se muestra información sobre el DataFrame. Al seleccionar una columna en la tabla, el resumen se actualiza con información sobre la columna seleccionada. En algunos casos, los datos mostrados y resumidos serán una vista truncada del dataframe. Cuando esto suceda, verá la imagen de advertencia en el panel de resumen. Mantenga el puntero sobre esta advertencia para ver el texto que explica la situación.

Captura de pantalla que muestra información general sobre el data wrangler.

Cada operación que haga se puede aplicar en cuestión de clics, actualizando los datos que se muestran en tiempo real y generando código que puede guardar de nuevo en el cuaderno como una función reutilizable.

El resto de esta sección le guía cuáles son los pasos para realizar la limpieza de datos con Data Wrangler.

Excluir filas duplicadas

En el panel izquierdo se muestra una lista de operaciones (como Buscar y reemplazar, Format, Formulas, Numeric) que puede realizar en el conjunto de datos.

  1. Expanda Buscar y reemplazar y seleccione Quitar filas duplicadas.

    Captura de pantalla que muestra la colocación de filas duplicadas en buscar y reemplazar.

  2. Aparece un panel para seleccionar la lista de columnas que desea comparar para definir una fila duplicada. Seleccione RowNumber y CustomerId.

    En el panel central se muestra una vista previa de los resultados de esta operación. En la vista previa se muestra el código para realizar la operación. En esta instancia, los datos parecen no modificarse. Pero como está viendo una vista truncada, es una buena idea seguir aplicando la operación.

    Captura de pantalla que muestra la eliminación de filas duplicadas en Data Wrangler.

  3. Seleccione Aplicar (ya sea lateral o en la parte inferior) para ir al siguiente paso.

Eliminar las filas con datos faltantes

Utilice Data Wrangler para descartar las filas con datos ausentes en la totalidad de las columnas.

  1. Seleccione Quitar valores que faltan en Buscar y reemplazar.

  2. Elija Seleccionar todo en las Columnas de destino.

    Captura de pantalla que muestra la eliminación de filas que faltan en Data Wrangler.

  3. Seleccione Aplicar para ir al siguiente paso.

Quitar columnas

Use datos de Wrangler para quitar columnas que no necesite.

  1. Expanda Esquema y seleccione Quitar columnas.

  2. Seleccione RowNumber, CustomerId,Surname. Estas columnas aparecen en rojo en la versión preliminar para mostrar que el código los cambia (en este caso, se quita.)

    Captura de pantalla que muestra la eliminación de columnas en Data Wrangler.

  3. Seleccione Aplicar para ir al siguiente paso.

Agregar el código al cuaderno

Cada vez que seleccione Aplicar, se crea un nuevo paso en el panelPasos de limpieza de la parte inferior izquierda. En la parte inferior del panel, seleccione Código de vista previa para todos los pasos ver una combinación de todos los pasos independientes.

Seleccione Agregar código al cuaderno en la parte superior izquierda para cerrar Data Wrangler y agregar el código automáticamente. El Agregar código al cuaderno ajuste el código en una función y, a continuación, llame a la función.

Captura de pantalla que muestra el código de vista previa y dónde acceder a agregar al cuaderno.

Sugerencia

El código generado por Data Wrangler no se aplicará hasta que ejecute manualmente la nueva celda.

Si no usó Data Wrangler, puede usar la siguiente celda de código.

Este código es similar al código generado por Data Wrangler, pero agrega el argumento inplace=True a cada uno de los pasos generados. Al establecer inplace=True, pandas sobrescribirá el DataFrame original en lugar de generar un nuevo DataFrame como salida.

# Modified version of code generated by Data Wrangler 
# Modification is to add in-place=True to each step

# Define a new function that include all above Data Wrangler operations
def clean_data(df):
    # Drop rows with missing data across all columns
    df.dropna(inplace=True)
    # Drop duplicate rows in columns: 'RowNumber', 'CustomerId'
    df.drop_duplicates(subset=['RowNumber', 'CustomerId'], inplace=True)
    # Drop columns: 'RowNumber', 'CustomerId', 'Surname'
    df.drop(columns=['RowNumber', 'CustomerId', 'Surname'], inplace=True)
    return df

df_clean = clean_data(df.copy())
df_clean.head()

Exploración de los datos

Muestra algunos resúmenes y visualizaciones de los datos limpios.

Determine atributos categóricos, numéricos y de destino

Use este código para determinar atributos categóricos, numéricos y de destino.

# Determine the dependent (target) attribute
dependent_variable_name = "Exited"
print(dependent_variable_name)
# Determine the categorical attributes
categorical_variables = [col for col in df_clean.columns if col in "O"
                        or df_clean[col].nunique() <=5
                        and col not in "Exited"]
print(categorical_variables)
# Determine the numerical attributes
numeric_variables = [col for col in df_clean.columns if df_clean[col].dtype != "object"
                        and df_clean[col].nunique() >5]
print(numeric_variables)

Resumen de cinco números

Muestre el resumen de cinco números (la puntuación mínima, el primer cuartil, la mediana, el tercer cuartil y la puntuación máxima) para los atributos numéricos, utilizando gráficos de caja.

df_num_cols = df_clean[numeric_variables]
sns.set(font_scale = 0.7) 
fig, axes = plt.subplots(nrows = 2, ncols = 3, gridspec_kw =  dict(hspace=0.3), figsize = (17,8))
fig.tight_layout()
for ax,col in zip(axes.flatten(), df_num_cols.columns):
    sns.boxplot(x = df_num_cols[col], color='green', ax = ax)
fig.delaxes(axes[1,2])

El gráfico muestra los resúmenes de cinco números.

Distribución de clientes de salida y no salidos

Muestre la distribución de los clientes dados de baja frente a los no dados de baja en función de los atributos categóricos.

attr_list = ['Geography', 'Gender', 'HasCrCard', 'IsActiveMember', 'NumOfProducts', 'Tenure']
fig, axarr = plt.subplots(2, 3, figsize=(15, 4))
for ind, item in enumerate (attr_list):
    sns.countplot(x = item, hue = 'Exited', data = df_clean, ax = axarr[ind%2][ind//2])
fig.subplots_adjust(hspace=0.7)

Gráfico que muestra los gráficos de barras para los clientes que han salido y no están en ninguno.

Distribución de atributos numéricos

Mostrar la distribución de frecuencia de los atributos numéricos mediante histograma.

columns = df_num_cols.columns[: len(df_num_cols.columns)]
fig = plt.figure()
fig.set_size_inches(18, 8)
length = len(columns)
for i,j in itertools.zip_longest(columns, range(length)):
    plt.subplot((length // 2), 3, j+1)
    plt.subplots_adjust(wspace = 0.2, hspace = 0.5)
    df_num_cols[i].hist(bins = 20, edgecolor = 'black')
    plt.title(i)
plt.show()

Gráfico que muestra la distribución de atributos numéricos.

Realizar la ingeniería de características

Realice la ingeniería de características para generar nuevos atributos basados en los atributos actuales:

df_clean["NewTenure"] = df_clean["Tenure"]/df_clean["Age"]
df_clean["NewCreditsScore"] = pd.qcut(df_clean['CreditScore'], 6, labels = [1, 2, 3, 4, 5, 6])
df_clean["NewAgeScore"] = pd.qcut(df_clean['Age'], 8, labels = [1, 2, 3, 4, 5, 6, 7, 8])
df_clean["NewBalanceScore"] = pd.qcut(df_clean['Balance'].rank(method="first"), 5, labels = [1, 2, 3, 4, 5])
df_clean["NewEstSalaryScore"] = pd.qcut(df_clean['EstimatedSalary'], 10, labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

Uso de Wrangler de datos para realizar la codificación de un solo uso

El Wrangler de datos también se puede usar para realizar la codificación de un solo uso. Para ello, vuelva a abrir Wrangler de datos. Esta vez, seleccione los df_clean datos.

  1. Expanda Formulas y seleccione Codificación one-hot.
  2. Aparecerá un panel para seleccionar la lista de columnas en las que desea realizar la codificación de un solo uso. Seleccione Geography y Gender.

Puede copiar este código generado, cerrar Data Wrangler para volver al cuaderno y, a continuación, pegarlo en una nueva celda. O bien, seleccione Agregar código al cuaderno en la parte superior izquierda para cerrar Data Wrangler y agregar el código automáticamente.

Si no usó Data Wrangler, puede usar la siguiente celda de código:

# This is the same code that Data Wrangler will generate
 
import pandas as pd
 
def clean_data(df_clean):
    # One-hot encode columns: 'Geography', 'Gender'
    df_clean = pd.get_dummies(df_clean, columns=['Geography', 'Gender'])
    return df_clean
 
df_clean_1 = clean_data(df_clean.copy())
df_clean_1.head()

Resumen de las observaciones del análisis de datos exploratorios

  • La mayoría de los clientes son de Francia en comparación con España y Alemania, mientras que España tiene la tasa de renovación más baja en comparación con Francia y Alemania.
  • La mayoría de los clientes tienen tarjetas de crédito.
  • Hay clientes cuya edad y puntuación de crédito están por encima de 60 y por debajo de 400, respectivamente, pero no se pueden considerar valores atípicos.
  • Muy pocos clientes tienen más de dos de los productos del banco.
  • Los clientes que no están activos tienen una tasa de renovación más alta.
  • Los años de género y antigüedad no parecen tener un impacto en la decisión del cliente de cerrar la cuenta bancaria.

Creación de una tabla delta para los datos limpios

Usará estos datos en el siguiente cuaderno de esta serie.

table_name = "df_clean"
# Create Spark DataFrame from pandas
sparkDF=spark.createDataFrame(df_clean_1) 
sparkDF.write.mode("overwrite").format("delta").save(f"Tables/{table_name}")
print(f"Spark dataframe saved to delta table: {table_name}")

Paso siguiente

Entrene y registre modelos de Machine Learning con el: