Exploración de datos con Azure Databricks

Azure Databricks es una versión basada en Microsoft Azure de la conocida plataforma de código abierto Databricks.

Azure Databricks facilita el análisis exploratorio de datos (EDA), lo que permite a los usuarios detectar rápidamente información e impulsar la toma de decisiones.

Se integra con una variedad de herramientas y técnicas para EDA, incluidos métodos estadísticos y visualizaciones, para resumir las características de los datos e identificar cualquier problema subyacente.

Este ejercicio debería tardar en completarse 30 minutos aproximadamente.

Aprovisiona un área de trabajo de Azure Databricks.

Sugerencia: si ya tienes un área de trabajo de Azure Databricks, puedes omitir este procedimiento y usar el área de trabajo existente.

En este ejercicio, se incluye un script para aprovisionar una nueva área de trabajo de Azure Databricks. El script intenta crear un recurso de área de trabajo de Azure Databricks de nivel Premium en una región en la que la suscripción de Azure tiene cuota suficiente para los núcleos de proceso necesarios en este ejercicio, y da por hecho que la cuenta de usuario tiene permisos suficientes en la suscripción para crear un recurso de área de trabajo de Azure Databricks.

Si se produjese un error en el script debido a cuota o permisos insuficientes, intenta crear un área de trabajo de Azure Databricks de forma interactiva en Azure Portal.

  1. En un explorador web, inicia sesión en Azure Portal en https://portal.azure.com.
  2. Usa el botón [>_] a la derecha de la barra de búsqueda en la parte superior de la página para crear un nuevo Cloud Shell en Azure Portal, selecciona un entorno de PowerShell y crea almacenamiento si se te solicita. Cloud Shell proporciona una interfaz de línea de comandos en un panel situado en la parte inferior de Azure Portal, como se muestra a continuación:

    Azure Portal con un panel de Cloud Shell

    Nota: Si ha creado previamente un cloud shell que usa un entorno de Bash, use el menú desplegable de la parte superior izquierda del panel de cloud shell para cambiarlo a PowerShell.

  3. Tenga en cuenta que puede cambiar el tamaño de Cloud Shell arrastrando la barra de separación en la parte superior del panel, o usando los iconos , y X en la parte superior derecha para minimizar, maximizar y cerrar el panel. Para obtener más información sobre el uso de Azure Cloud Shell, consulta la documentación de Azure Cloud Shell.

  4. En el panel de PowerShell, introduce los siguientes comandos para clonar este repositorio:

     rm -r mslearn-databricks -f
     git clone https://github.com/MicrosoftLearning/mslearn-databricks
    
  5. Una vez clonado el repositorio, escribe el siguiente comando para ejecutar el script setup.ps1, que aprovisiona un área de trabajo de Azure Databricks en una región disponible:

     ./mslearn-databricks/setup.ps1
    
  6. Si se solicita, elige la suscripción que quieres usar (esto solo ocurrirá si tienes acceso a varias suscripciones de Azure).
  7. Espera a que se complete el script: normalmente tarda unos 5 minutos, pero en algunos casos puede tardar más. Mientras esperas, revisa el artículo Análisis de datos exploratorios en Azure Databricks en la documentación de Azure Databricks.

Crear un clúster

Azure Databricks es una plataforma de procesamiento distribuido que usa clústeres* de Apache Spark *para procesar datos en paralelo en varios nodos. Cada clúster consta de un nodo de controlador para coordinar el trabajo y nodos de trabajo para hacer tareas de procesamiento.

En este ejercicio, crearás un clúster de nodo único para minimizar los recursos de proceso usados en el entorno de laboratorio (en los que se pueden restringir los recursos). En un entorno de producción, normalmente crearías un clúster con varios nodos de trabajo.

Sugerencia: si ya dispones de un clúster con una versión de runtime 13.3 LTS o superior en tu área de trabajo de Azure Databricks, puedes utilizarlo para completar este ejercicio y omitir este procedimiento.

  1. En Azure Portal, ve al grupo de recursos msl-xxxxxxx que se creó con el script (o al grupo de recursos que contiene el área de trabajo de Azure Databricks existente)
  2. Selecciona el recurso Azure Databricks Service (llamado databricks-xxxxxxx si usaste el script de instalación para crearlo).
  3. En la página Información general del área de trabajo, usa el botón Inicio del área de trabajo para abrir el área de trabajo de Azure Databricks en una nueva pestaña del explorador; inicia sesión si se solicita.

    Sugerencia: al usar el portal del área de trabajo de Databricks, se pueden mostrar varias sugerencias y notificaciones. Descártalas y sigue las instrucciones proporcionadas para completar las tareas de este ejercicio.

  4. En la barra lateral de la izquierda, selecciona la tarea (+) Nuevo y luego selecciona Clúster.
  5. En la página Nuevo clúster, crea un clúster con la siguiente configuración:
    • Nombre del clúster: clúster del Nombre de usuario (el nombre del clúster predeterminado)
    • Directiva: Unrestricted (Sin restricciones)
    • Modo de clúster de un solo nodo
    • Modo de acceso: usuario único (con la cuenta de usuario seleccionada)
    • Versión de runtime de Databricks: 13.3 LTS (Spark 3.4.1, Scala 2.12) o posterior
    • Usar aceleración de Photon: seleccionado
    • Tipo de nodo: Standard_D4ds_v5
    • Finaliza después de 20 minutos de inactividad
  6. Espera a que se cree el clúster. Esto puede tardar un par de minutos.

Nota: si el clúster no se inicia, es posible que la suscripción no tenga cuota suficiente en la región donde se aprovisiona el área de trabajo de Azure Databricks. Para obtener más información, consulta El límite de núcleos de la CPU impide la creación de clústeres. Si esto sucede, puedes intentar eliminar el área de trabajo y crear una nueva en otra región. Puedes especificar una región como parámetro para el script de configuración de la siguiente manera: ./mslearn-databricks/setup.ps1 eastus

Crear un cuaderno

  1. En la barra lateral, usa el vínculo (+) Nuevo para crear un cuaderno.

  2. Cambia el nombre por defecto del cuaderno (Cuaderno sin título [fecha]) por Explore data with Spark y en la lista desplegable Conectar, selecciona tu clúster si aún no está seleccionado. Si el clúster no se está ejecutando, puede tardar un minuto en iniciarse.

Ingerir datos

  1. En la primera celda del cuaderno, escribe el siguiente código, que utiliza comandos del shell para descargar los archivos de datos de GitHub en el sistema de archivos utilizado por el clúster.

     %sh
     rm -r /dbfs/spark_lab
     mkdir /dbfs/spark_lab
     wget -O /dbfs/spark_lab/2019.csv https://raw.githubusercontent.com/MicrosoftLearning/mslearn-databricks/main/data/2019.csv
     wget -O /dbfs/spark_lab/2020.csv https://raw.githubusercontent.com/MicrosoftLearning/mslearn-databricks/main/data/2020.csv
     wget -O /dbfs/spark_lab/2021.csv https://raw.githubusercontent.com/MicrosoftLearning/mslearn-databricks/main/data/2021.csv
    
  2. Usa la opción del menú ▸ Ejecutar celda situado a la izquierda de la celda para ejecutarla. A continuación, espere a que se complete el trabajo de Spark ejecutado por el código.

Consulta de datos en archivos

  1. Debajo de la celda de código existente, usa el icono + para agregar una nueva celda de código. A continuación, en la nueva celda, escriba y ejecute el siguiente código para cargar los datos de los archivos y ver las primeras 100 filas.

    df = spark.read.load('spark_lab/*.csv', format='csv')
    display(df.limit(100))
    
  2. Revise la salida y observe que los datos del archivo se relacionan con pedidos de ventas, pero no incluye los encabezados de columna ni la información sobre los tipos de datos. Para que los datos tengan más sentido, puede definir un esquema para el DataFrame.

  3. Agregue una nueva celda de código y úsela para ejecutar el código siguiente, que define un esquema para los datos:

    from pyspark.sql.types import *
    from pyspark.sql.functions import *
    orderSchema = StructType([
         StructField("SalesOrderNumber", StringType()),
         StructField("SalesOrderLineNumber", IntegerType()),
         StructField("OrderDate", DateType()),
         StructField("CustomerName", StringType()),
         StructField("Email", StringType()),
         StructField("Item", StringType()),
         StructField("Quantity", IntegerType()),
         StructField("UnitPrice", FloatType()),
         StructField("Tax", FloatType())
    ])
    df = spark.read.load('/spark_lab/*.csv', format='csv', schema=orderSchema)
    display(df.limit(100))
    
  4. Observe que esta vez, el DataFrame incluye encabezados de columna. A continuación, agregue una nueva celda de código y úsela para ejecutar el código siguiente a fin de mostrar los detalles del esquema del DataFrame y comprobar que se han aplicado los tipos de datos correctos:

    df.printSchema()
    

Consulta de datos con Spark SQL

  1. Agregue una nueva celda de código y úsela para ejecutar el código siguiente:

    df.createOrReplaceTempView("salesorders")
    spark_df = spark.sql("SELECT * FROM salesorders")
    display(spark_df)
    

    Los métodos nativos del DataFrame que usó anteriormente le permiten consultar y analizar datos de forma bastante eficaz. Sin embargo, a muchos analistas de datos les gusta más trabajar con sintaxis SQL. Spark SQL es una API de lenguaje SQL en Spark que puedes usar para ejecutar instrucciones SQL o incluso conservar datos en tablas relacionales.

    El código que acaba de ejecutar crea una vista relacional de los datos de un DataFrame y, a continuación, usa la biblioteca spark.sql para insertar la sintaxis de Spark SQL en el código de Python, consultar la vista y devolver los resultados como un DataFrame.

Ver los resultados como una visualización

  1. En una nueva celda de código, ejecute el código siguiente para consultar la tabla salesorders:

    %sql
        
    SELECT * FROM salesorders
    
  2. Encima de la tabla de resultados, selecciona + y luego Visualización para ver el editor de visualización y luego aplica las siguientes opciones:
    • Tipo de visualización: barra
    • Columna X: Elemento
    • Columna Y: Agregue una nueva columna y seleccione Cantidad. Aplique la agregación Suma**.
  3. Guarde la visualización y vuelva a ejecutar la celda de código para ver el gráfico resultante en el cuaderno.

Introducción a matplotlib

  1. En una nueva celda de código, ejecute el código siguiente para recuperar algunos datos de pedidos de ventas en un DataFrame:

    sqlQuery = "SELECT CAST(YEAR(OrderDate) AS CHAR(4)) AS OrderYear, \
                    SUM((UnitPrice * Quantity) + Tax) AS GrossRevenue \
             FROM salesorders \
             GROUP BY CAST(YEAR(OrderDate) AS CHAR(4)) \
             ORDER BY OrderYear"
    df_spark = spark.sql(sqlQuery)
    df_spark.show()
    
  2. Agrega una nueva celda de código y úsala para ejecutar el código siguiente, que importa matplotlb y la usa para crear un gráfico:

    from matplotlib import pyplot as plt
        
    # matplotlib requires a Pandas dataframe, not a Spark one
    df_sales = df_spark.toPandas()
    # Create a bar plot of revenue by year
    plt.bar(x=df_sales['OrderYear'], height=df_sales['GrossRevenue'])
    # Display the plot
    plt.show()
    
  3. Revise los resultados, que incluyen un gráfico de columnas con los ingresos brutos totales de cada año. Observe las siguientes características del código usado para generar este gráfico:
    • La biblioteca matplotlib requiere un DataFrame de Pandas, por lo que debe convertir el DataFrame de Spark devuelto por la consulta de Spark SQL a este formato.
    • En el centro de la biblioteca matplotlib se encuentra el objeto pyplot. Esta es la base de la mayor parte de la funcionalidad de trazado.
  4. La configuración predeterminada da como resultado un gráfico utilizable, pero hay un margen considerable para personalizarla. Agregue una nueva celda de código con el código siguiente y ejecútelo:

    # Clear the plot area
    plt.clf()
    # Create a bar plot of revenue by year
    plt.bar(x=df_sales['OrderYear'], height=df_sales['GrossRevenue'], color='orange')
    # Customize the chart
    plt.title('Revenue by Year')
    plt.xlabel('Year')
    plt.ylabel('Revenue')
    plt.grid(color='#95a5a6', linestyle='--', linewidth=2, axis='y', alpha=0.7)
    plt.xticks(rotation=45)
    # Show the figure
    plt.show()
    
  5. Un gráfico está técnicamente contenido con una Figura. En los ejemplos anteriores, la figura se creó implícitamente; pero puede crearla explícitamente. Intente ejecutar lo siguiente en una nueva celda:

    # Clear the plot area
    plt.clf()
    # Create a Figure
    fig = plt.figure(figsize=(8,3))
    # Create a bar plot of revenue by year
    plt.bar(x=df_sales['OrderYear'], height=df_sales['GrossRevenue'], color='orange')
    # Customize the chart
    plt.title('Revenue by Year')
    plt.xlabel('Year')
    plt.ylabel('Revenue')
    plt.grid(color='#95a5a6', linestyle='--', linewidth=2, axis='y', alpha=0.7)
    plt.xticks(rotation=45)
    # Show the figure
    plt.show()
    
  6. Una figura puede contener varios subtrazados, cada uno en su propio eje. Use este código para crear varios gráficos:

    # Clear the plot area
    plt.clf()
    # Create a figure for 2 subplots (1 row, 2 columns)
    fig, ax = plt.subplots(1, 2, figsize = (10,4))
    # Create a bar plot of revenue by year on the first axis
    ax[0].bar(x=df_sales['OrderYear'], height=df_sales['GrossRevenue'], color='orange')
    ax[0].set_title('Revenue by Year')
    # Create a pie chart of yearly order counts on the second axis
    yearly_counts = df_sales['OrderYear'].value_counts()
    ax[1].pie(yearly_counts)
    ax[1].set_title('Orders per Year')
    ax[1].legend(yearly_counts.keys().tolist())
    # Add a title to the Figure
    fig.suptitle('Sales Data')
    # Show the figure
    plt.show()
    

Nota: Para más información sobre el trazado con matplotlib, consulte la documentación de matplotlib.

Uso de la biblioteca seaborn

  1. Agregue una nueva celda de código y úsela para ejecutar el código siguiente, que usa la biblioteca seaborn (que se basa en matplotlib y abstrae parte de su complejidad) para crear un gráfico:

    import seaborn as sns
       
    # Clear the plot area
    plt.clf()
    # Create a bar chart
    ax = sns.barplot(x="OrderYear", y="GrossRevenue", data=df_sales)
    plt.show()
    
  2. La biblioteca seaborn facilita la creación de trazados complejos de datos estadísticos y le permite controlar el tema visual para ver visualizaciones de datos coherentes. Ejecute el código siguiente en una nueva celda:

    # Clear the plot area
    plt.clf()
       
    # Set the visual theme for seaborn
    sns.set_theme(style="whitegrid")
       
    # Create a bar chart
    ax = sns.barplot(x="OrderYear", y="GrossRevenue", data=df_sales)
    plt.show()
    
  3. A igual que matplotlib, seaborn admite varios tipos de gráficos. Ejecute el código siguiente para crear un gráfico de líneas:

    # Clear the plot area
    plt.clf()
       
    # Create a bar chart
    ax = sns.lineplot(x="OrderYear", y="GrossRevenue", data=df_sales)
    plt.show()
    

Nota: Para más información sobre el trazado con seaborn, consulte la documentación de seaborn.

Limpiar

En el portal de Azure Databricks, en la página Proceso, selecciona el clúster y ■ Finalizar para apagarlo.

Si has terminado de explorar Azure Databricks, puedes eliminar los recursos que has creado para evitar costes innecesarios de Azure y liberar capacidad en tu suscripción.