Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial, aprenderá a realizar análisis de datos exploratorios mediante Azure Open Datasets y Apache Spark. Después, puede visualizar los resultados en un cuaderno de Synapse Studio en Azure Synapse Analytics.
En concreto, analizaremos el conjunto de datos de taxis de la ciudad de Nueva York (NYC). Los datos están disponibles a través de Azure Open Datasets. Este subconjunto del conjunto de datos contiene información sobre los viajes de los taxis amarillos: información sobre cada viaje, la hora, la ubicación de inicio y de fin, el coste de la carrera y otros atributos interesantes.
Antes de empezar
Cree un grupo de Apache Spark siguiendo el tutorial Creación de un grupo de Apache Spark.
Descarga y preparación de los datos
Cree un cuaderno mediante el kernel de PySpark. Para obtener instrucciones, consulte Creación de un cuaderno.
Nota:
Debido a la existencia del kernel PySpark, no necesitará crear ningún contexto explícitamente. El contexto de Spark se crea automáticamente al ejecutar la primera celda de código.
En este tutorial, usaremos varias bibliotecas diferentes para ayudarnos a visualizar el conjunto de datos. Para realizar este análisis, importe las siguientes bibliotecas:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pdDado que los datos sin procesar están en formato de Parquet, puede usar el contexto de Spark para extraer el archivo a la memoria como trama de datos directamente. Cree un dataFrame de Spark recuperando los datos a través de open Datasets API. Aquí, usamos el esquema DataFrame de Spark en las propiedades de lectura para deducir los tipos de datos y el esquema.
from azureml.opendatasets import NycTlcYellow from datetime import datetime from dateutil import parser end_date = parser.parse('2018-05-08 00:00:00') start_date = parser.parse('2018-05-01 00:00:00') nyc_tlc = NycTlcYellow(start_date=start_date, end_date=end_date) df = spark.createDataFrame(nyc_tlc.to_pandas_dataframe())Una vez leídos los datos, queremos realizar algún filtrado inicial para limpiar el conjunto de datos. Es posible que se quiten las columnas innecesarias y se agreguen columnas que extraigan información importante. Además, filtraremos las anomalías dentro del conjunto de datos.
# Filter the dataset from pyspark.sql.functions import * filtered_df = df.select('vendorID', 'passengerCount', 'tripDistance','paymentType', 'fareAmount', 'tipAmount'\ , date_format('tpepPickupDateTime', 'hh').alias('hour_of_day')\ , dayofweek('tpepPickupDateTime').alias('day_of_week')\ , dayofmonth(col('tpepPickupDateTime')).alias('day_of_month'))\ .filter((df.passengerCount > 0)\ & (df.tipAmount >= 0)\ & (df.fareAmount >= 1) & (df.fareAmount <= 250)\ & (df.tripDistance > 0) & (df.tripDistance <= 200)) filtered_df.createOrReplaceTempView("taxi_dataset")
Análisis de datos
Los analistas de datos disponen de una amplia gama de herramientas que pueden ayudarles a extraer información de los datos. En esta parte del tutorial, le guiaremos por algunas herramientas útiles disponibles en cuadernos de Azure Synapse Analytics. En este análisis, queremos comprender los factores que producen mayores propinas de taxi para nuestro período seleccionado.
Apache Spark SQL Magic
En primer lugar, realizaremos análisis exploratorios de datos mediante Apache Spark SQL y comandos mágicos con el cuaderno de Azure Synapse. Una vez que tengamos nuestra consulta, visualizaremos los resultados mediante la funcionalidad integrada chart options .
En el cuaderno, cree una nueva celda y copie el código siguiente. Con esta consulta, queremos comprender cómo han cambiado las cantidades medias de propinas durante el período seleccionado. Esta consulta también nos ayudará a identificar otras conclusiones útiles, incluido el importe mínimo o máximo de propinas al día y el importe medio de la tarifa.
%%sql SELECT day_of_month , MIN(tipAmount) AS minTipAmount , MAX(tipAmount) AS maxTipAmount , AVG(tipAmount) AS avgTipAmount , AVG(fareAmount) as fareAmount FROM taxi_dataset GROUP BY day_of_month ORDER BY day_of_month ASCUna vez finalizada la ejecución de la consulta, podemos visualizar los resultados cambiando a la vista de gráfico. En este ejemplo se crea un gráfico de líneas mediante la especificación del campo
day_of_monthcomo la clave yavgTipAmountcomo el valor. Después de realizar las selecciones, seleccione Aplicar para actualizar el gráfico.
Visualización de datos
Además de las opciones de gráficos integradas del cuaderno, puede usar bibliotecas de código abierto populares para crear sus propias visualizaciones. En los ejemplos siguientes, usaremos Seaborn y Matplotlib. Normalmente se usan bibliotecas de Python para la visualización de datos.
Nota:
De forma predeterminada, cada grupo de Apache Spark de Azure Synapse Analytics contiene un conjunto de bibliotecas usadas y predeterminadas. Puede ver la lista completa de bibliotecas en la documentación del entorno de ejecución de Azure Synapse . Además, para que el código de terceros o compilado localmente esté disponible para las aplicaciones, puede instalar una biblioteca en uno de los grupos de Spark.
Para facilitar y reducir el costo del desarrollo, reduciremos el conjunto de datos. Usaremos la funcionalidad de muestreo integrada de Apache Spark. Además, tanto Seaborn como Matplotlib requieren un DataFrame de Pandas o una matriz de NumPy. Para obtener un DataFrame de Pandas, usaremos el comando
toPandas()para convertir dicho DataFrame.# To make development easier, faster, and less expensive, downsample for now sampled_taxi_df = filtered_df.sample(True, 0.001, seed=1234) # The charting package needs a Pandas DataFrame or NumPy array to do the conversion sampled_taxi_pd_df = sampled_taxi_df.toPandas()Queremos comprender la distribución de propinas en nuestro conjunto de datos. Usaremos Matplotlib para crear un histograma que muestre la distribución de la cantidad y el recuento de propinas. En función de la distribución, podemos ver que las propinas están inclinadas hacia cantidades inferiores o iguales a 10 USD.
# Look at a histogram of tips by count by using Matplotlib ax1 = sampled_taxi_pd_df['tipAmount'].plot(kind='hist', bins=25, facecolor='lightblue') ax1.set_title('Tip amount distribution') ax1.set_xlabel('Tip Amount ($)') ax1.set_ylabel('Counts') plt.suptitle('') plt.show()
A continuación, queremos comprender la relación entre las sugerencias para un viaje determinado y el día de la semana. Usamos Seaborn para crear un diagrama de cajas que resume las tendencias de cada día de la semana.
# View the distribution of tips by day of week using Seaborn ax = sns.boxplot(x="day_of_week", y="tipAmount",data=sampled_taxi_pd_df, showfliers = False) ax.set_title('Tip amount distribution per day') ax.set_xlabel('Day of Week') ax.set_ylabel('Tip Amount ($)') plt.show()
Otra hipótesis de nuestra puede ser que haya una relación positiva entre el número de pasajeros y la cantidad total de propinas de taxi. Para comprobar esta relación, ejecutamos el siguiente código para generar un diagrama de cajas que ilustra la distribución de las propinas por número de pasajeros.
# How many passengers tipped by various amounts ax2 = sampled_taxi_pd_df.boxplot(column=['tipAmount'], by=['passengerCount']) ax2.set_title('Tip amount by Passenger count') ax2.set_xlabel('Passenger count') ax2.set_ylabel('Tip Amount ($)') ax2.set_ylim(0,30) plt.suptitle('') plt.show()
Por último, queremos comprender la relación entre el importe de la tarifa y el importe de la propina. En función de los resultados, podemos ver que hay varios casos en los que las personas no dejan propina. Sin embargo, también vemos una relación positiva entre las tarifas generales y las cantidades de propinas.
# Look at the relationship between fare and tip amounts ax = sampled_taxi_pd_df.plot(kind='scatter', x= 'fareAmount', y = 'tipAmount', c='blue', alpha = 0.10, s=2.5*(sampled_taxi_pd_df['passengerCount'])) ax.set_title('Tip amount by Fare amount') ax.set_xlabel('Fare Amount ($)') ax.set_ylabel('Tip Amount ($)') plt.axis([-2, 80, -2, 20]) plt.suptitle('') plt.show()
Apagado de la instancia de Spark
Una vez finalizada la ejecución de la aplicación, cierre el cuaderno para liberar los recursos. Cierre la pestaña o seleccione Finalizar sesión en el panel de estado de la parte inferior del cuaderno.
Consulte también
- Información general: Apache Spark en Azure Synapse Analytics
- Creación de un modelo de Machine Learning con Apache SparkML