Κοινή χρήση μέσω


Ανάλυση δεδομένων με Apache Spark και Python

Σε αυτό το άρθρο, θα μάθετε πώς μπορείτε να εκτελέσετε διερευνητική ανάλυση δεδομένων χρησιμοποιώντας Τα Ανοιχτά σύνολα δεδομένων Azure και το Apache Spark. Αυτό το άρθρο αναλύει το σύνολο δεδομένων ταξί στη Νέα Υόρκη. Τα δεδομένα είναι διαθέσιμα μέσω του Azure Open Datasets. Αυτό το υποσύνολο του συνόλου δεδομένων περιέχει πληροφορίες σχετικά με κίτρινες διαδρομές ταξί: πληροφορίες σχετικά με κάθε διαδρομή, την ώρα έναρξης και λήξης και τοποθεσίες, το κόστος και άλλα ενδιαφέροντα χαρακτηριστικά.

Σε αυτό το άρθρο, θα κάνετε τα εξής:

  • Λήψη και προετοιμασία δεδομένων
  • Ανάλυση δεδομένων
  • Απεικόνιση δεδομένων

Προαπαιτούμενα στοιχεία

  • Λάβετε μια συνδρομή Microsoft Fabric. Εναλλακτικά, εγγραφείτε για μια δωρεάν δοκιμαστική έκδοση του Microsoft Fabric.

  • Εισέλθετε στο Microsoft Fabric.

  • Μεταβείτε στο Fabric χρησιμοποιώντας την εναλλαγή εμπειριών στην κάτω αριστερή πλευρά της αρχικής σελίδας σας.

    Στιγμιότυπο οθόνης που εμφανίζει την επιλογή του Fabric στο μενού εναλλαγής εμπειριών.

Λήψη και προετοιμασία των δεδομένων

Για να ξεκινήσετε, κάντε λήψη του συνόλου δεδομένων ταξί New York City (NYC) και προετοιμάστε τα δεδομένα.

  1. Δημιουργήστε ένα σημειωματάριο χρησιμοποιώντας το PySpark. Για οδηγίες, ανατρέξτε στο θέμα Δημιουργία σημειωματάριου.

    Σημείωμα

    Εξαιτίας του πυρήνα PySpark, δεν χρειάζεται να δημιουργήσετε οποιαδήποτε περιβάλλοντα ρητά. Το περιβάλλον Spark δημιουργείται αυτόματα για εσάς όταν εκτελείτε το πρώτο κελί κώδικα.

  2. Σε αυτό το άρθρο, χρησιμοποιείτε πολλές διαφορετικές βιβλιοθήκες για να απεικονίσετε το σύνολο δεδομένων. Για να κάνετε αυτή την ανάλυση, εισαγάγετε τις παρακάτω βιβλιοθήκες:

    import matplotlib.pyplot as plt
    import seaborn as sns
    import pandas as pd
    
  3. Επειδή τα ανεπεξέργαστα δεδομένα είναι σε μορφή Parquet, μπορείτε να χρησιμοποιήσετε το περιβάλλον Spark για να μεταφέρετε το αρχείο στη μνήμη ως DataFrame απευθείας. Χρησιμοποιήστε το API Ανοικτών συνόλων δεδομένων για να ανακτήσετε τα δεδομένα και να δημιουργήσετε ένα Spark DataFrame. Για να συναγάγετε τους τύπους δεδομένων και το σχήμα, χρησιμοποιήστε το σχήμα 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)
    
  4. Μετά την ανάγνωση των δεδομένων, κάντε κάποιο αρχικό φιλτράρισμα για να καθαρίσετε το σύνολο δεδομένων. Ενδέχεται να καταργήσετε περιττές στήλες και να προσθέσετε στήλες που εξάγουν σημαντικές πληροφορίες. Επιπλέον, μπορείτε να φιλτράρετε τις ανωμαλίες εντός του συνόλου δεδομένων.

    # 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")
    

Ανάλυση δεδομένων

Ως αναλυτής δεδομένων, έχετε ένα ευρύ φάσμα διαθέσιμων εργαλείων για να σας βοηθήσει να εξαγάγετε πληροφορίες από τα δεδομένα. Σε αυτό το μέρος του άρθρου, μάθετε σχετικά με μερικά χρήσιμα εργαλεία που είναι διαθέσιμα στα σημειωματάρια Microsoft Fabric. Σε αυτήν την ανάλυση, θέλετε να κατανοήσετε τους παράγοντες που αποδίδουν υψηλότερες συμβουλές ταξί για την επιλεγμένη περίοδο.

Apache Spark SQL Magic

Πρώτα, κάντε διερευνητική ανάλυση δεδομένων χρησιμοποιώντας το Apache Spark SQL και μαγικές εντολές με το σημειωματάριο Microsoft Fabric. Αφού έχετε το ερώτημα, απεικονίστε τα αποτελέσματα χρησιμοποιώντας την ενσωματωμένη chart options δυνατότητα.

  1. Στο σημειωματάριο, δημιουργήστε ένα νέο κελί και αντιγράψτε τον ακόλουθο κώδικα. Χρησιμοποιώντας αυτό το ερώτημα, μπορείτε να κατανοήσετε πώς αλλάζουν τα μέσα ποσά συμβουλών κατά την περίοδο που επιλέγετε. Αυτό το ερώτημα σάς βοηθά επίσης να αναγνωρίσετε άλλες χρήσιμες πληροφορίες, όπως το ελάχιστο/μέγιστο ποσό συμβουλής ανά ημέρα και το μέσο ποσό ναύλου.

    %%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
    
  2. Αφού ολοκληρωθεί η εκτέλεση του ερωτήματός σας, μπορείτε να απεικονίσετε τα αποτελέσματα μεταβαίνοντας στην προβολή γραφήματος. Αυτό το παράδειγμα δημιουργεί ένα γράφημα γραμμών καθορίζοντας το day_of_month πεδίο ως κλειδί και avgTipAmount ως τιμή. Αφού κάνετε τις επιλογές, επιλέξτε Εφαρμογή για να ανανεώσετε το γράφημά σας.

Απεικόνιση δεδομένων

Εκτός από τις ενσωματωμένες επιλογές γραφήματος σημειωματάριου, μπορείτε να χρησιμοποιήσετε δημοφιλείς βιβλιοθήκες ανοιχτού κώδικα για να δημιουργήσετε τις δικές σας απεικονίσεις. Στα παρακάτω παραδείγματα, χρησιμοποιήστε τις βιβλιοθήκες Seaborn και Matplotlib, οι οποίες χρησιμοποιούνται συχνά ως βιβλιοθήκες Python για την απεικόνιση δεδομένων.

  1. Για να γίνει η ανάπτυξη ευκολότερη και λιγότερο δαπανηρή, κάντε μείωση του συνόλου δεδομένων. Χρησιμοποιήστε την ενσωματωμένη δυνατότητα δειγματοληψίας Apache Spark. Επιπλέον, οι στήλες Seaborn και Matplotlib απαιτούν έναν πίνακα Pandas DataFrame ή NumPy. Για να λάβετε ένα Pandas DataFrame, χρησιμοποιήστε την toPandas() εντολή για να μετατρέψετε το 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()
    
  2. Μπορείτε να κατανοήσετε την κατανομή των συμβουλών στο σύνολο δεδομένων. Χρησιμοποιήστε το Matplotlib για να δημιουργήσετε ένα ιστόγραμμα που εμφανίζει την κατανομή της ποσότητας και του πλήθους των συμβουλών. Με βάση την κατανομή, μπορείτε να δείτε ότι οι συμβουλές αλλοιώνονται προς ποσά μικρότερα ή ίσα με 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()
    

    Στιγμιότυπο οθόνης του ιστογράμματος που εμφανίζει την κατανομή της ποσότητας συμβουλών.

  3. Στη συνέχεια, δοκιμάστε να κατανοήσετε τη σχέση μεταξύ των συμβουλών για ένα συγκεκριμένο ταξίδι και της ημέρας της εβδομάδας. Χρησιμοποιήστε τη seaborn για να δημιουργήσετε μια σχεδίαση πλαισίου που συνοψίζει τις τάσεις για κάθε ημέρα της εβδομάδας.

    # 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()
    
    

    Γράφημα που εμφανίζει την κατανομή των συμβουλών ανά ημέρα.

  4. Μια άλλη υπόθεση μπορεί να είναι ότι υπάρχει θετική σχέση μεταξύ του αριθμού των επιβατών και του συνολικού ποσού συμβουλής ταξί. Για να επαληθεύσετε αυτήν τη σχέση, εκτελέστε τον παρακάτω κώδικα για να δημιουργήσετε ένα γράφημα πλαισίου που απεικονίζει τη διανομή συμβουλών για κάθε πλήθος επιβατών.

    # 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()
    

    Γράφημα που εμφανίζει ένα γράφημα απολήξης πλαισίου με τιμή φιλοδωρήματος κατά πλήθος επιβατών.

  5. Τέλος, εξερευνήστε τη σχέση μεταξύ του ποσού ναύλου και του ποσού φιλοδωρήματος. Με βάση τα αποτελέσματα, μπορείτε να δείτε ότι υπάρχουν πολλές παρατηρήσεις στις οποίες οι χρήστες δεν δίνουν φιλοδώρημα. Ωστόσο, υπάρχει μια θετική σχέση μεταξύ του συνολικού ναύλου και των ποσών συμβουλών.

    # 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()
    

    Στιγμιότυπο οθόνης γραφήματος διασποράς με πλήθος συμβουλών.