Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste artigo, você aprenderá a executar a análise de dados exploratória usando o Azure Open Datasets e o Apache Spark. Este artigo analisa o conjunto de dados de táxis da cidade de Nova Iorque. Os dados estão disponíveis por meio dos Conjuntos de Dados em Aberto no Azure. Esse subconjunto do conjunto de dados contém informações sobre as corridas de táxi amarelo: informações sobre cada corrida, a hora de início e de término e os locais, o custo e outros atributos interessantes.
Neste artigo você:
- Baixar e preparar dados
- Analisar dados
- Visualizar dados
Pré-requisitos
Obtenha uma assinatura do Microsoft Fabric. Ou, inscreva-se para uma avaliação gratuita do Microsoft Fabric.
Entre no Microsoft Fabric.
Use o alternador de experiência no canto inferior esquerdo da sua página inicial para alternar para Fabric.
Baixar e preparar os dados
Para começar, baixe o conjunto de dados de táxi de Nova Iorque (NYC) e prepare os dados.
Crie um notebook usando o PySpark. Para obter instruções, confira Criar um notebook.
Observação
Por causa do kernel do PySpark, não será necessário criar nenhum contexto explicitamente. O contexto do Spark é criado automaticamente para você ao executar a primeira célula do código.
Neste artigo, você usará várias bibliotecas diferentes para ajudar a visualizar o conjunto de dados. Para fazer essa análise, importe as seguintes bibliotecas:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pd
Como os dados brutos estão no formato Parquet, você pode usar o contexto spark para efetuar pull do arquivo na memória como um DataFrame diretamente. Use a API do Open Datasets para recuperar os dados e criar um DataFrame do Spark. Para inferir os tipos de dados e o esquema, use as propriedades esquema de leitura do Spark DataFrame.
from azureml.opendatasets import NycTlcYellow end_date = parser.parse('2018-06-06') start_date = parser.parse('2018-05-01') nyc_tlc = NycTlcYellow(start_date=start_date, end_date=end_date) nyc_tlc_pd = nyc_tlc.to_pandas_dataframe() df = spark.createDataFrame(nyc_tlc_pd)
Depois que os dados forem lidos, faça uma filtragem inicial para limpar o conjunto de dados. Você pode remover colunas desnecessárias e adicionar colunas que extraem informações importantes. Além disso, você pode filtrar anomalias dentro do conjunto de dados.
# 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")
Analisar dados
Como analista de dados, você tem uma ampla variedade de ferramentas disponíveis para ajudá-lo a extrair informações dos dados. Nesta parte do artigo, saiba mais sobre algumas ferramentas úteis disponíveis nos notebooks do Microsoft Fabric. Nesta análise, você quer entender os fatores que geram gorjetas de táxi mais altas no período selecionado.
Comando magic do SQL do Apache Spark
Primeiro, faça uma análise exploratória dos dados usando o Apache Spark SQL e os comandos magic com o notebook do Microsoft Fabric. Depois de ter a consulta, visualize os resultados usando a funcionalidade chart options
interna.
No notebook, crie uma nova célula e copie o código a seguir. Ao usar esta consulta, você poderá entender como os valores médios de gorjeta mudam ao longo do período selecionado. Essa consulta também ajuda você a identificar outros insights úteis, incluindo o valor mínimo/máximo da gorjeta por dia e o valor médio da 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 ASC
Depois que a consulta terminar de ser executada, você poderá visualizar os resultados alternando para a exibição de gráfico. Este exemplo cria um gráfico de linhas especificando o campo
day_of_month
como a chave eavgTipAmount
como o valor. Depois de fazer as seleções, escolha Aplicar para atualizar o gráfico.
Visualizar dados
Além das opções internas de gráfico de notebook, você pode usar bibliotecas open-source para criar suas próprias visualizações. Nos exemplos a seguir, use Seaborn e Matplotlib, que são bibliotecas Python comumente usadas para visualização de dados.
Para tornar o desenvolvimento mais fácil e menos caro, reduza a resolução do conjunto de dados. Use a funcionalidade de amostragem interna do Apache Spark. Além disso, o Seaborn e o Matplotlib exigem uma matriz NumPy ou DataFrame do Pandas. Para obter um DataFrame do Pandas, use o comando
toPandas()
para converter o 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()
Você pode entender a distribuição de gorjetas no conjunto de dados. Use o Matplotlib para criar um histograma que mostre a distribuição do valor da gorjeta e a contagem. Com base na distribuição, você pode ver que as gorjetas tendem a valores menores ou iguais a US$ 10.
# 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()
Em seguida, tente entender a relação entre as gorjetas para uma determinada viagem e o dia da semana. Use o Seaborn para criar um gráfico de caixa que resuma as tendências de cada dia da 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()
Outra hipótese pode ser que haja uma relação positiva entre o número de passageiros e o valor total da gorjeta do táxi. Para verificar essa relação, execute o código a seguir para gerar um gráfico de caixa que ilustra a distribuição de gorjetas para cada contagem de passageiros.
# 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 fim, explore a relação entre o valor da tarifa e o valor da gorjeta. Com base nos resultados, você poderá ver que há várias observações onde as pessoas não dão gorjeta. No entanto, há uma relação positiva entre o valor total da tarifa e o valor das gorjetas.
# 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()