Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leert u hoe u verkennende gegevensanalyse uitvoert met behulp van Azure Open Datasets en Apache Spark. In dit artikel wordt de gegevensset voor taxi's van New York City geanalyseerd. De gegevens zijn beschikbaar via Azure Open Datasets. Deze subset van de gegevensset bevat informatie over gele taxiritten: informatie over elke reis, de begin- en eindtijd en locaties, de kosten en andere interessante kenmerken.
In dit artikel leert u het volgende:
- Gegevens downloaden en voorbereiden
- Gegevens analyseren
- Gegevens visualiseren
Vereisten
Haal een Microsoft Fabric-abonnement op. Of meld u aan voor een gratis proefversie van Microsoft Fabric.
Meld u aan bij Microsoft Fabric.
Schakel over naar Fabric met behulp van de ervaringsschakelaar aan de linkerkant van de startpagina.
De gegevens downloaden en voorbereiden
Als u wilt beginnen, downloadt u de taxigegevensset van New York City (NYC) en bereidt u de gegevens voor.
Maak een notebook met behulp van PySpark. Zie Een notebook maken voor instructies.
Notitie
Vanwege de PySpark-kernel hoeft u niet expliciet contexten te maken. De Spark-context wordt automatisch voor u gemaakt wanneer u de eerste codecel uitvoert.
In dit artikel gebruikt u verschillende bibliotheken om de gegevensset te visualiseren. Als u deze analyse wilt uitvoeren, importeert u de volgende bibliotheken:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pdOmdat de onbewerkte gegevens de Parquet-indeling hebben, kunt u de Spark-context gebruiken om het bestand rechtstreeks als een DataFrame in het geheugen op te halen. Gebruik de OPEN Datasets-API om de gegevens op te halen en een Spark DataFrame te maken. Als u de gegevenstypen en het schema wilt afleiden, gebruikt u het Spark DataFrame-schema voor leeseigenschappen .
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)Nadat de gegevens zijn gelezen, moet u eerst filteren om de gegevensset op te schonen. U kunt overbodige kolommen verwijderen en kolommen toevoegen die belangrijke informatie extraheren. Daarnaast kunt u afwijkingen in de gegevensset uitfilteren.
# 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")
Gegevens analyseren
Als gegevensanalist beschikt u over een breed scala aan hulpprogramma's waarmee u inzichten uit de gegevens kunt extraheren. In dit deel van het artikel vindt u informatie over enkele handige hulpprogramma's die beschikbaar zijn in Microsoft Fabric-notebooks. In deze analyse wilt u de factoren begrijpen die hogere taxitips opleveren voor de geselecteerde periode.
Apache Spark SQL Magic
Voer eerst verkennende gegevensanalyse uit met behulp van Apache Spark SQL en magic-opdrachten met het Microsoft Fabric-notebook. Nadat u de query hebt uitgevoerd, visualiseert u de resultaten met behulp van de ingebouwde chart options mogelijkheid.
Maak in het notebook een nieuwe cel en kopieer de volgende code. Door deze query te gebruiken, kunt u begrijpen hoe de gemiddelde tipbedragen veranderen gedurende de periode die u selecteert. Deze query helpt u ook bij het identificeren van andere nuttige inzichten, waaronder het minimum/maximum aantal tips per dag en het gemiddelde tariefbedrag.
%%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 ASCNadat de query is uitgevoerd, kunt u de resultaten visualiseren door over te schakelen naar de grafiekweergave. In dit voorbeeld wordt een lijndiagram gemaakt door het
day_of_monthveld op te geven als de sleutel enavgTipAmountals de waarde. Nadat u de selecties hebt geselecteerd, selecteert u Toepassen om de grafiek te vernieuwen.
Gegevens visualiseren
Naast de ingebouwde opties voor notitieblokgrafieken kunt u populaire opensource-bibliotheken gebruiken om uw eigen visualisaties te maken. In de volgende voorbeelden gebruikt u Seaborn en Matplotlib. Dit zijn veelgebruikte Python-bibliotheken voor gegevensvisualisatie.
Als u de ontwikkeling eenvoudiger en goedkoper wilt maken, moet u de gegevensset omlaagsampleen. Gebruik de ingebouwde Apache Spark-samplingfunctie. Daarnaast vereisen zowel Seaborn als Matplotlib een Pandas DataFrame of NumPy-matrix. Als u een Pandas DataFrame wilt ophalen, gebruikt u de
toPandas()opdracht om het DataFrame te converteren.# 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()U kunt de distributie van tips in de gegevensset begrijpen. Gebruik Matplotlib om een histogram te maken waarin de verdeling van de tiphoeveelheid en het aantal wordt weergegeven. Op basis van de distributie kunt u zien dat tips scheef zijn ten opzichte van bedragen kleiner dan of gelijk aan $ 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()
Probeer vervolgens de relatie tussen de tips voor een bepaalde reis en de dag van de week te begrijpen. Gebruik Seaborn om een boxplot te maken waarmee de trends voor elke dag van de week worden samengevat.
# 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()
Een andere hypothese kan zijn dat er een positieve relatie is tussen het aantal passagiers en het totale aantal taxitips. Als u deze relatie wilt controleren, voert u de volgende code uit om een boxplot te genereren die de distributie van tips voor elk aantal passagiers illustreert.
# 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()
Ten slotte verkent u de relatie tussen het tariefbedrag en de tiphoeveelheid. Op basis van de resultaten kunt u zien dat er verschillende waarnemingen zijn waarbij mensen geen tip geven. Er is echter een positieve relatie tussen de totale tarief- en tipbedragen.
# 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()