You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

21 KiB

Οπτικοποίηση Ποσοτήτων

 Σκίτσο από (@sketchthedocs)
Οπτικοποίηση Ποσοτήτων - Σκίτσο από @nitya

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

Κουίζ πριν το μάθημα

Παρατηρήστε το άνοιγμα φτερών με το Matplotlib

Μια εξαιρετική βιβλιοθήκη για τη δημιουργία τόσο απλών όσο και σύνθετων γραφημάτων και διαγραμμάτων διαφόρων ειδών είναι το Matplotlib. Σε γενικές γραμμές, η διαδικασία σχεδίασης δεδομένων χρησιμοποιώντας αυτές τις βιβλιοθήκες περιλαμβάνει τον εντοπισμό των τμημάτων του dataframe που θέλετε να στοχεύσετε, την εκτέλεση οποιωνδήποτε μετασχηματισμών στα δεδομένα, την ανάθεση τιμών στους άξονες x και y, την απόφαση για το είδος του γραφήματος που θα εμφανιστεί και στη συνέχεια την εμφάνιση του γραφήματος. Το Matplotlib προσφέρει μια μεγάλη ποικιλία οπτικοποιήσεων, αλλά για αυτό το μάθημα, ας επικεντρωθούμε σε εκείνες που είναι πιο κατάλληλες για την οπτικοποίηση ποσοτήτων: γραφήματα γραμμών, scatterplots και ραβδογράμματα.

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

  • Για ανάλυση τάσεων με την πάροδο του χρόνου: γραμμή
  • Για σύγκριση τιμών: ράβδος, στήλη, πίτα, scatterplot
  • Για να δείξετε πώς τα μέρη σχετίζονται με το σύνολο: πίτα
  • Για να δείξετε τη διανομή δεδομένων: scatterplot, ράβδος
  • Για να δείξετε τάσεις: γραμμή, στήλη
  • Για να δείξετε σχέσεις μεταξύ τιμών: γραμμή, scatterplot, bubble

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

Υπάρχουν πολύ καλά 'cheat sheets' διαθέσιμα για το Matplotlib εδώ.

Δημιουργήστε ένα γράφημα γραμμής για τις τιμές ανοίγματος φτερών των πουλιών

Ανοίξτε το αρχείο notebook.ipynb στη ρίζα του φακέλου αυτού του μαθήματος και προσθέστε ένα κελί.

Σημείωση: τα δεδομένα βρίσκονται στη ρίζα αυτού του αποθετηρίου στον φάκελο /data.

import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()

Αυτά τα δεδομένα είναι ένας συνδυασμός κειμένου και αριθμών:

Όνομα Επιστημονικό Όνομα Κατηγορία Τάξη Οικογένεια Γένος Κατάσταση Διατήρησης Ελάχιστο Μήκος Μέγιστο Μήκος Ελάχιστη Μάζα Σώματος Μέγιστη Μάζα Σώματος Ελάχιστο Άνοιγμα Φτερών Μέγιστο Άνοιγμα Φτερών
0 Μαυροκοιλιά πάπια Dendrocygna autumnalis Πάπιες/Χήνες/Υδρόβια Anseriformes Anatidae Dendrocygna LC 47 56 652 1020 76 94
1 Καστανόχρωμη πάπια Dendrocygna bicolor Πάπιες/Χήνες/Υδρόβια Anseriformes Anatidae Dendrocygna LC 45 53 712 1050 85 93
2 Χήνα του χιονιού Anser caerulescens Πάπιες/Χήνες/Υδρόβια Anseriformes Anatidae Anser LC 64 79 2050 4050 135 165
3 Χήνα του Ross Anser rossii Πάπιες/Χήνες/Υδρόβια Anseriformes Anatidae Anser LC 57.3 64 1066 1567 113 116
4 Μεγαλόσωμη λευκομέτωπη χήνα Anser albifrons Πάπιες/Χήνες/Υδρόβια Anseriformes Anatidae Anser LC 64 81 1930 3310 130 165

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

wingspan = birds['MaxWingspan'] 
wingspan.plot()

Μέγιστο Άνοιγμα Φτερών

Τι παρατηρείτε αμέσως; Φαίνεται να υπάρχει τουλάχιστον μία ακραία τιμή - αυτό είναι αρκετά μεγάλο άνοιγμα φτερών! Ένα άνοιγμα φτερών 2300 εκατοστών ισοδυναμεί με 23 μέτρα - υπάρχουν Πτερόδακτυλοι που περιφέρονται στη Μινεσότα; Ας ερευνήσουμε.

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

Προσθέστε ετικέτες στον άξονα x για να δείξετε τι είδους πουλιά εξετάζονται:

plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.xlabel('Birds')
plt.xticks(rotation=45)
x = birds['Name'] 
y = birds['MaxWingspan']

plt.plot(x, y)

plt.show()

άνοιγμα φτερών με ετικέτες

Ακόμα και με την περιστροφή των ετικετών στις 45 μοίρες, υπάρχουν πάρα πολλές για να διαβαστούν. Ας δοκιμάσουμε μια διαφορετική στρατηγική: ετικέτα μόνο τις ακραίες τιμές και τοποθετήστε τις ετικέτες μέσα στο γράφημα. Μπορείτε να χρησιμοποιήσετε ένα scatter chart για να δημιουργήσετε περισσότερο χώρο για την επισήμανση:

plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)

for i in range(len(birds)):
    x = birds['Name'][i]
    y = birds['MaxWingspan'][i]
    plt.plot(x, y, 'bo')
    if birds['MaxWingspan'][i] > 500:
        plt.text(x, y * (1 - 0.05), birds['Name'][i], fontsize=12)
    
plt.show()

Τι συμβαίνει εδώ; Χρησιμοποιήσατε το tick_params για να κρύψετε τις κάτω ετικέτες και στη συνέχεια δημιουργήσατε έναν βρόχο πάνω από το σύνολο δεδομένων των πουλιών σας. Σχεδιάζοντας το γράφημα με μικρές στρογγυλές μπλε κουκκίδες χρησιμοποιώντας bo, ελέγξατε για οποιοδήποτε πουλί με μέγιστο άνοιγμα φτερών πάνω από 500 και εμφανίσατε την ετικέτα του δίπλα στην κουκκίδα αν ισχύει. Μετατοπίσατε τις ετικέτες λίγο στον άξονα y (y * (1 - 0.05)) και χρησιμοποιήσατε το όνομα του πουλιού ως ετικέτα.

Τι ανακαλύψατε;

ακραίες τιμές

Φιλτράρετε τα δεδομένα σας

Τόσο ο Φαλακρός Αετός όσο και το Γεράκι της Πεδιάδας, ενώ πιθανότατα είναι πολύ μεγάλα πουλιά, φαίνεται να έχουν λανθασμένες ετικέτες, με ένα επιπλέον 0 να έχει προστεθεί στο μέγιστο άνοιγμα φτερών τους. Είναι απίθανο να συναντήσετε έναν Φαλακρό Αετό με άνοιγμα φτερών 25 μέτρα, αλλά αν συμβεί, παρακαλώ ενημερώστε μας! Ας δημιουργήσουμε ένα νέο dataframe χωρίς αυτές τις δύο ακραίες τιμές:

plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.xlabel('Birds')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
for i in range(len(birds)):
    x = birds['Name'][i]
    y = birds['MaxWingspan'][i]
    if birds['Name'][i] not in ['Bald eagle', 'Prairie falcon']:
        plt.plot(x, y, 'bo')
plt.show()

Φιλτράροντας τις ακραίες τιμές, τα δεδομένα σας είναι τώρα πιο συνεκτικά και κατανοητά.

scatterplot των ανοιγμάτων φτερών

Τώρα που έχουμε ένα καθαρότερο σύνολο δεδομένων τουλάχιστον όσον αφορά το άνοιγμα φτερών, ας ανακαλύψουμε περισσότερα για αυτά τα πουλιά.

Ενώ τα γραφήματα γραμμών και scatter μπορούν να εμφανίσουν πληροφορίες σχετικά με τις τιμές δεδομένων και τις κατανομές τους, θέλουμε να σκεφτούμε τις τιμές που υπάρχουν σε αυτό το σύνολο δεδομένων. Θα μπορούσατε να δημιουργήσετε οπτικοποιήσεις για να απαντήσετε στις ακόλουθες ερωτήσεις σχετικά με την ποσότητα:

Πόσες κατηγορίες πουλιών υπάρχουν και ποιοι είναι οι αριθμοί τους;
Πόσα πουλιά είναι εξαφανισμένα, απειλούμενα, σπάνια ή κοινά;
Πόσα υπάρχουν από τα διάφορα γένη και τάξεις στην ορολογία του Linnaeus;

Εξερευνήστε τα ραβδογράμματα

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

Στο αρχείο notebook, δημιουργήστε ένα βασικό ραβδόγραμμα.

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

Αν θέλετε να δημιουργήσετε ένα ραβδόγραμμα, μπορείτε να επιλέξετε τα δεδομένα στα οποία θέλετε να εστιάσετε. Τα ραβδογράμματα μπορούν να δημιουργηθούν από ακατέργαστα δεδομένα:

birds.plot(x='Category',
        kind='bar',
        stacked=True,
        title='Birds of Minnesota')

πλήρη δεδομένα ως ραβδόγραμμα

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

Φιλτράρετε τα δεδομένα σας ώστε να περιλαμβάνουν μόνο την κατηγορία του πουλιού.

Παρατηρήστε ότι χρησιμοποιείτε το Pandas για τη διαχείριση των δεδομένων και στη συνέχεια αφήνετε το Matplotlib να κάνει τη σχεδίαση.

Επειδή υπάρχουν πολλές κατηγορίες, μπορείτε να εμφανίσετε αυτό το γράφημα κάθετα και να προσαρμόσετε το ύψος του για να ληφθούν υπόψη όλα τα δεδομένα:

category_count = birds.value_counts(birds['Category'].values, sort=True)
plt.rcParams['figure.figsize'] = [6, 12]
category_count.plot.barh()

κατηγορία και μήκος

Αυτό το ραβδόγραμμα δείχνει μια καλή εικόνα του αριθμού των πουλιών σε κάθε κατηγορία. Με μια ματιά, βλέπετε ότι ο μεγαλύτερος αριθμός πουλιών σε αυτήν την περιοχή ανήκει στην κατηγορία Πάπιες/Χήνες/Υδρόβια. Η Μινεσότα είναι η 'γη των 10.000 λιμνών', οπότε αυτό δεν είναι έκπληξη!

Δοκιμάστε μερικές άλλες μετρήσεις σε αυτό το σύνολο δεδομένων. Σας εκπλήσσει κάτι;

Σύγκριση δεδομένων

Μπορείτε να δοκιμάσετε διαφορετικές συγκρίσεις ομαδοποιημένων δεδομένων δημιουργώντας νέους άξονες. Δοκιμάστε μια σύγκριση του MaxLength ενός πουλιού, με βάση την κατηγορία του:

maxlength = birds['MaxLength']
plt.barh(y=birds['Category'], width=maxlength)
plt.rcParams['figure.figsize'] = [6, 12]
plt.show()

σύγκριση δεδομένων

Τίποτα δεν είναι εκπληκτικό εδώ: τα κολιμπρί έχουν το μικρότερο MaxLength σε σύγκριση με τους Πελεκάνους ή τις Χήνες. Είναι καλό όταν τα δεδομένα έχουν λογική!

Μπορείτε να δημιουργήσετε πιο ενδιαφέρουσες οπτικοποιήσεις ραβδογραμμάτων υπερθέτοντας δεδομένα. Ας υπερθέσουμε το Ελάχιστο και Μέγιστο Μήκος σε μια δεδομένη κατηγορία πουλιών:

minLength = birds['MinLength']
maxLength = birds['MaxLength']
category = birds['Category']

plt.barh(category, maxLength)
plt.barh(category, minLength)

plt.show()

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

υπερτιθέμενες τιμές

🚀 Πρόκληση

Αυτό το σύνολο δεδομένων για τα πουλιά προσφέρει μια πληθώρα πληροφοριών για διαφορετικούς τύπους πουλιών μέσα σε ένα συγκεκριμένο οικοσύστημα. Ψάξτε στο διαδίκτυο και δείτε αν μπορείτε να βρείτε άλλα σύνολα δεδομένων που αφορούν πουλιά. Εξασκηθείτε στη δημιουργία γραφημάτων και διαγραμμάτων γύρω από αυτά τα πουλιά για να ανακαλύψετε γεγονότα που δεν γνωρίζατε.

Κουίζ μετά το μάθημα

Ανασκόπηση & Αυτομελέτη

Αυτό το πρώτο μάθημα σας έδωσε κάποιες πληροφορίες για το πώς να χρησιμοποιείτε το Matplotlib για την οπτικοποίηση ποσοτήτων. Κάντε κάποια έρευνα γύρω από άλλους τρόπους εργασίας με σύνολα δεδομένων για οπτικοποίηση. Το Plotly είναι ένα εργαλείο που δεν θα καλύψουμε σε αυτά τα μαθήματα, οπότε ρίξτε μια ματιά σε αυτά που μπορεί να προσφέρει.

Εργασία

Γραμμές, Scatter και Ράβδοι


Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.