Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste artigo, você aprenderá a executar a análise exploratória de dados usando o Azure Open Datasets e o Apache Spark. Este artigo analisa o conjunto de dados de táxis da cidade de Nova York. Os dados estão disponíveis através dos Conjuntos de Dados Abertos do Azure. Este subconjunto do conjunto de dados contém informações sobre viagens de táxi amarelo: informações sobre cada viagem, a hora e locais de início e fim, o custo e outros atributos interessantes.
Neste artigo, irá:
- Transferir e preparar dados
- Analisar dados
- Visualizar os 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 seletor de experiência no canto inferior esquerdo da página inicial para alternar para o Fabric.
Faça o download e prepare os dados
Para começar, faça o download do conjunto de dados do New York City (NYC) Taxi e prepare os dados.
Crie um bloco de anotações usando o PySpark. Para obter instruções, consulte Criar um bloco de anotações.
Nota
Devido ao kernel do PySpark, você não precisa criar nenhum contexto explicitamente. O contexto do Spark é criado automaticamente para você quando você executa a primeira célula de código.
Neste artigo, você usa 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 do Spark para puxar o arquivo para a memória como um DataFrame diretamente. Use a API Open Datasets para recuperar os dados e criar um Spark DataFrame. Para inferir os tipos de dados e o esquema, use o esquema Spark DataFrame nas propriedades de leitura .
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 gama de ferramentas disponíveis para ajudá-lo a extrair insights dos dados. Nesta parte do artigo, conheça algumas ferramentas úteis disponíveis nos blocos de anotações do Microsoft Fabric. Nesta análise, você quer entender os fatores que rendem maiores gorjetas de táxi para o período selecionado.
Apache Spark SQL Magic
Primeiro, faça a análise exploratória de dados usando o Apache Spark SQL e comandos mágicos com o notebook Microsoft Fabric. Depois de ter a consulta, visualize os resultados usando o recurso interno chart options
.
No bloco de anotações, crie uma nova célula e copie o código a seguir. Usando essa consulta, você pode entender como os valores médios de gorjetas mudam ao longo do período selecionado. Esta consulta também ajuda 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 visualização de gráfico. Este exemplo cria um gráfico de linhas especificando o
day_of_month
campo como a chave eavgTipAmount
como o valor. Depois de fazer as seleções, selecione Aplicar para atualizar o gráfico.
Visualizar os dados
Além das opções de gráficos de bloco de anotações integradas, você pode usar bibliotecas de código aberto populares 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 dispendioso, reduza a resolução do conjunto de dados. Use o recurso de amostragem integrado do Apache Spark. Além disso, tanto Seaborn quanto Matplotlib exigem uma matriz Pandas DataFrame ou NumPy. Para obter um Pandas DataFrame, use o
toPandas()
comando 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 dicas no conjunto de dados. Use Matplotlib para criar um histograma que mostre a distribuição da quantidade e contagem de pontas. Com base na distribuição, você pode ver que as gorjetas são inclinadas para valores menores ou iguais a $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 dicas para uma determinada viagem e o dia da semana. Use Seaborn para criar um box plot que resume as tendências para 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 a de que exista uma relação positiva entre o número de passageiros e o valor total da gorjeta de 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 dicas 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 último, explore a relação entre o valor da tarifa e o valor da gorjeta. Com base nos resultados, você pode ver que há várias observações em que as pessoas não dão gorjetas. No entanto, há uma relação positiva entre a tarifa geral e os valores 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()