Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm erfahren Sie, wie Sie explorative Datenanalysen mithilfe von Azure Open Datasets und Apache Spark durchführen. Anschließend können Sie die Ergebnisse in einem Synapse Studio-Notizbuch in Azure Synapse Analytics visualisieren.
Insbesondere analysieren wir das New York City (NYC)-Taxi-Dataset . Die Daten sind über Azure Open Datasets verfügbar. Diese Teilmenge des Datasets enthält Informationen zu Taxifahrten von Yellow Cabs: Informationen zu den einzelnen Fahrten, Start- und Endzeiten, Abfahrtsorte und Ziele, die Kosten sowie weitere interessante Attribute.
Bevor Sie anfangen
Erstellen Sie einen Apache Spark Pool, indem Sie das Lernprogramm zum Erstellen eines Apache Spark-Pools ausführen.
Herunterladen und Vorbereiten der Daten
Erstellen Sie ein Notizbuch mithilfe des PySpark-Kernels. Anweisungen finden Sie unter Erstellen eines Notizbuchs.
Hinweis
Aufgrund des PySpark-Kernels müssen Sie keine Kontexte explizit erstellen. Der Spark-Kontext wird automatisch für Sie erstellt, wenn Sie die erste Codezelle ausführen.
In diesem Lernprogramm verwenden wir verschiedene Bibliotheken, um uns beim Visualisieren des Datasets zu helfen. Für die Analyse müssen die folgenden Bibliotheken importiert werden:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pdDa sich die Rohdaten in einem Parkettformat befinden, können Sie den Spark-Kontext verwenden, um die Datei direkt als DataFrame in den Arbeitsspeicher zu übertragen. Erstellen Sie einen Spark DataFrame, indem Sie die Daten über die Open Datasets-API abrufen. Hier verwenden wir das Spark DataFrame-Schema zum Lesen von Eigenschaften, um die Datentypen und das Schema abzuleiten.
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())Nachdem die Daten gelesen wurden, möchten wir einige anfängliche Filterung durchführen, um das Dataset zu bereinigen. Möglicherweise entfernen wir nicht benötigte Spalten und fügen Spalten hinzu, die wichtige Informationen extrahieren. Darüber hinaus werden Anomalien innerhalb des Datasets herausfiltert.
# 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")
Daten analysieren
Als Datenanalyst steht Ihnen eine Vielzahl von Tools zur Verfügung, die Ihnen beim Extrahieren von Erkenntnissen aus Daten helfen. In diesem Teil des Lernprogramms werden wir einige nützliche Tools durchlaufen, die in Azure Synapse Analytics-Notizbüchern verfügbar sind. In dieser Analyse wollen wir die Faktoren verstehen, die für unsere ausgewählte Periode höhere Taxitipps liefern.
Apache Spark SQL Magic
Zunächst führen wir explorative Datenanalysen durch Apache Spark SQL und magische Befehle mit dem Azure Synapse-Notizbuch durch. Nachdem wir über unsere Abfrage verfügen, visualisieren wir die Ergebnisse mithilfe der integrierten chart options Funktion.
Erstellen Sie in Ihrem Notizbuch eine neue Zelle, und kopieren Sie den folgenden Code. Mithilfe dieser Abfrage möchten wir verstehen, wie sich die durchschnittliche Tippbeträge im ausgewählten Zeitraum geändert haben. Diese Abfrage hilft uns auch, andere nützliche Erkenntnisse zu identifizieren, einschließlich des Mindest-/Maximalen Tippbetrags pro Tag und des durchschnittlichen Tarifbetrags.
%%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 ASCNachdem die Ausführung unserer Abfrage abgeschlossen ist, können wir die Ergebnisse visualisieren, indem wir zur Diagrammansicht wechseln. In diesem Beispiel wird ein Liniendiagramm erstellt, indem wir das Feld
day_of_monthals Schlüssel undavgTipAmountals Wert angeben. Nachdem Sie die Auswahl getroffen haben, wählen Sie Übernehmen aus, um das Diagramm zu aktualisieren.
Visualisieren von Daten
Zusätzlich zu den integrierten Diagrammoptionen im Notebook können Sie auch beliebte Open-Source-Bibliotheken verwenden, um eigene Visualisierungen zu erstellen. In den folgenden Beispielen verwenden wir Seaborn und Matplotlib. Dies sind häufig verwendete Python-Bibliotheken für die Datenvisualisierung.
Hinweis
Standardmäßig enthält jeder Apache Spark-Pool in Azure Synapse Analytics eine Reihe häufig verwendeter und Standardbibliotheken. Sie können die vollständige Liste der Bibliotheken in der Dokumentation zur Azure Synapse-Laufzeit anzeigen. Darüber hinaus können Sie eine Bibliothek in einem Ihrer Spark-Pools installieren, um Drittanbieter- oder lokal erstellten Code für Ihre Anwendungen verfügbar zu machen.
Um die Entwicklung einfacher und kostengünstiger zu gestalten, werden wir den Datensatz verkleinern. Wir verwenden die integrierte Apache Spark-Samplingfunktion. Darüber hinaus benötigen sowohl Seaborn als auch Matplotlib einen Pandas-Datenrahmen oder ein NumPy-Array. Um einen Pandas-Datenrahmen zu erhalten, verwenden wir den Befehl
toPandas()zum Konvertieren des Datenrahmens.# 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()Wir möchten die Verteilung von Tipps in unserem Dataset verstehen. Wir verwenden Matplotlib, um ein Histogramm zu erstellen, das die Verteilung der Spitzenmenge und -anzahl anzeigt. Basierend auf der Verteilung können wir sehen, dass Tipps in Richtung von Beträgen, die kleiner oder gleich 10 $ sind, schief sind.
# 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()
Als Nächstes möchten wir die Beziehung zwischen den Tipps für eine bestimmte Reise und dem Wochentag verstehen. Wir verwenden Seaborn, um ein Boxplotdiagramm zu erstellen, das die Trends für jeden Wochentag zusammenfasst.
# 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()
Eine weitere Hypothese unserer Könnte sein, dass es eine positive Beziehung zwischen der Anzahl der Passagiere und dem gesamten Taxi-Tipp-Betrag gibt. Um diesen Zusammenhang zu überprüfen, können Sie den folgenden Code ausführen, um ein Boxplot zu erzeugen, das die Verteilung der Trinkgelder für jede Fahrgastanzahl zeigt.
# 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()
Schließlich möchten wir die Beziehung zwischen dem Tarifbetrag und dem Tippbetrag verstehen. Basierend auf den Ergebnissen können wir sehen, dass es mehrere Beobachtungen gibt, bei denen die Leute kein Trinkgeld geben. Wir sehen jedoch auch eine positive Beziehung zwischen den Gesamtpreis- und Tippbeträgen.
# 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()
Fahren Sie die Spark-Instanz herunter
Nachdem Sie die Ausführung der Anwendung abgeschlossen haben, beenden Sie das Notizbuch, um die Ressourcen freizugeben. Schließen Sie entweder die Registerkarte, oder wählen Sie im Statusbereich unten im Notizbuch " Sitzung beenden" aus.
Siehe auch
- Übersicht: Apache Spark auf Azure Synapse Analytics
- Erstellen eines Machine Learning-Modells mit Apache SparkML