Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln får du lära dig hur du utför undersökande dataanalys med hjälp av Azure Open Datasets och Apache Spark. Den här artikeln analyserar datamängden för Taxi i New York City. Data är tillgängliga via Azure Open Datasets. Den här delmängden av datamängden innehåller information om gula taxiresor: information om varje resa, start- och sluttid och platser, kostnaden och andra intressanta attribut.
Den här artikeln innehåller följande avsnitt:
- Ladda ned och förbereda data
- Analysera data
- Visualisera data
Förutsättningar
Skaffa en Microsoft Fabric-prenumeration. Eller registrera dig för en kostnadsfri utvärderingsversion av Microsoft Fabric.
Logga in på Microsoft Fabric.
Växla till Fabric genom att använda upplevelseväxlaren längst ned till vänster på startsidan.
Ladda ned och förbereda data
Börja genom att ladda ned datamängden New York City (NYC) Taxi och förbereda data.
Skapa en notebook-fil med hjälp av PySpark. Anvisningar finns i Skapa en notebook-fil.
Kommentar
På grund av PySpark-kerneln behöver du inte skapa några kontexter explicit. Spark-kontexten skapas automatiskt åt dig när du kör den första kodcellen.
I den här artikeln använder du flera olika bibliotek för att visualisera datamängden. Om du vill göra den här analysen importerar du följande bibliotek:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pdEftersom rådata är i Parquet-format kan du använda Spark-kontexten för att hämta filen till minnet som en DataFrame direkt. Använd API:et Öppna datauppsättningar för att hämta data och skapa en Spark DataFrame. Om du vill härleda datatyperna och schemat använder du Spark DataFrame-schemat för läsegenskaper .
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)När data har lästs utför du en inledande filtrering för att rensa datamängden. Du kan ta bort onödiga kolumner och lägga till kolumner som extraherar viktig information. Dessutom kan du filtrera bort avvikelser i datauppsättningen.
# 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")
Analysera data
Som dataanalytiker har du ett brett utbud av verktyg som hjälper dig att extrahera insikter från data. I den här delen av artikeln får du lära dig mer om några användbara verktyg som är tillgängliga i Microsoft Fabric-notebook-filer. I den här analysen vill du förstå de faktorer som ger högre taxitips för den valda perioden.
Apache Spark SQL Magic
Börja med att utföra undersökande dataanalys med hjälp av Apache Spark SQL och magiska kommandon med Microsoft Fabric Notebook. När du har frågan visualiserar du resultatet med hjälp av den inbyggda chart options funktionen.
I notebook-filen skapar du en ny cell och kopierar följande kod. Med den här frågan kan du förstå hur de genomsnittliga tipsbeloppen ändras under den period du väljer. Den här frågan hjälper dig också att identifiera andra användbara insikter, inklusive minsta/högsta tipsbelopp per dag och genomsnittligt prisbelopp.
%%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 ASCNär frågan har körts kan du visualisera resultatet genom att växla till diagramvyn. Det här exemplet skapar ett linjediagram genom att ange fältet
day_of_monthsom nyckel ochavgTipAmountsom värde. När du har valt väljer du Använd för att uppdatera diagrammet.
Visualisera data
Förutom de inbyggda diagramalternativen för notebook-filer kan du använda populära bibliotek med öppen källkod för att skapa egna visualiseringar. I följande exempel använder du Seaborn och Matplotlib, som ofta används av Python-bibliotek för datavisualisering.
Om du vill göra utvecklingen enklare och billigare minskar du datamängden. Använd den inbyggda Apache Spark-samplingsfunktionen. Dessutom kräver både Seaborn och Matplotlib en Pandas DataFrame- eller NumPy-matris. Om du vill hämta en Pandas DataFrame använder du
toPandas()kommandot för att konvertera 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()Du kan förstå fördelningen av tips i datamängden. Använd Matplotlib för att skapa ett histogram som visar fördelningen av tipsmängd och antal. Baserat på fördelningen kan du se att tipsen är skeva mot belopp som är mindre än eller lika med 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()
Försök sedan att förstå relationen mellan tipsen för en viss resa och veckodagen. Använd Seaborn för att skapa ett låddiagram som sammanfattar trenderna för varje dag i veckan.
# 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()
En annan hypotes kan vara att det finns ett positivt samband mellan antalet passagerare och den totala mängden taxitips. Kontrollera den här relationen genom att köra följande kod för att generera ett låddiagram som illustrerar fördelningen av tips för varje antal passagerare.
# 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()
Utforska slutligen relationen mellan prisbeloppet och dricksbeloppet. Baserat på resultaten kan du se att det finns flera observationer där personer inte tipsar. Det finns dock ett positivt samband mellan det totala priset och dricksbeloppen.
# 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()