|
|
1 year ago | |
|---|---|---|
| .. | ||
| solution | 1 year ago | |
| README.md | 1 year ago | |
| assignment.md | 1 year ago | |
| notebook.ipynb | 1 year ago | |
README.md
Οπτικοποίηση Σχέσεων: Όλα για το Μέλι 🍯
![]() |
|---|
| Οπτικοποίηση Σχέσεων - Σκίτσο από @nitya |
Συνεχίζοντας με τη φυσική εστίαση της έρευνάς μας, ας ανακαλύψουμε ενδιαφέρουσες οπτικοποιήσεις για να δείξουμε τις σχέσεις μεταξύ διαφόρων τύπων μελιού, σύμφωνα με ένα σύνολο δεδομένων που προέρχεται από το Υπουργείο Γεωργίας των Ηνωμένων Πολιτειών.
Αυτό το σύνολο δεδομένων, που περιλαμβάνει περίπου 600 στοιχεία, παρουσιάζει την παραγωγή μελιού σε πολλές πολιτείες των Η.Π.Α. Για παράδειγμα, μπορείτε να δείτε τον αριθμό των αποικιών, την απόδοση ανά αποικία, τη συνολική παραγωγή, τα αποθέματα, την τιμή ανά λίβρα και την αξία του παραγόμενου μελιού σε μια δεδομένη πολιτεία από το 1998 έως το 2012, με μία γραμμή ανά έτος για κάθε πολιτεία.
Θα είναι ενδιαφέρον να οπτικοποιήσουμε τη σχέση μεταξύ της παραγωγής μιας πολιτείας ανά έτος και, για παράδειγμα, της τιμής του μελιού σε αυτή την πολιτεία. Εναλλακτικά, θα μπορούσατε να οπτικοποιήσετε τη σχέση μεταξύ της απόδοσης μελιού ανά αποικία στις πολιτείες. Αυτή η χρονική περίοδος καλύπτει την καταστροφική 'CCD' ή 'Διαταραχή Κατάρρευσης Αποικιών', που παρατηρήθηκε για πρώτη φορά το 2006 (http://npic.orst.edu/envir/ccd.html), καθιστώντας το ένα συγκινητικό σύνολο δεδομένων για μελέτη. 🐝
Κουίζ πριν το μάθημα
Σε αυτό το μάθημα, μπορείτε να χρησιμοποιήσετε το Seaborn, το οποίο έχετε χρησιμοποιήσει ξανά, ως μια καλή βιβλιοθήκη για την οπτικοποίηση σχέσεων μεταξύ μεταβλητών. Ιδιαίτερα ενδιαφέρουσα είναι η χρήση της συνάρτησης relplot του Seaborn, που επιτρέπει τη δημιουργία διαγραμμάτων διασποράς και γραμμών για γρήγορη οπτικοποίηση 'στατιστικών σχέσεων', βοηθώντας τον επιστήμονα δεδομένων να κατανοήσει καλύτερα πώς οι μεταβλητές σχετίζονται μεταξύ τους.
Διαγράμματα Διασποράς
Χρησιμοποιήστε ένα διάγραμμα διασποράς για να δείξετε πώς εξελίχθηκε η τιμή του μελιού, χρόνο με χρόνο, ανά πολιτεία. Το Seaborn, χρησιμοποιώντας το relplot, ομαδοποιεί βολικά τα δεδομένα των πολιτειών και εμφανίζει σημεία δεδομένων τόσο για κατηγορικά όσο και για αριθμητικά δεδομένα.
Ας ξεκινήσουμε εισάγοντας τα δεδομένα και το Seaborn:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
honey = pd.read_csv('../../data/honey.csv')
honey.head()
Παρατηρείτε ότι τα δεδομένα για το μέλι έχουν αρκετές ενδιαφέρουσες στήλες, συμπεριλαμβανομένων του έτους και της τιμής ανά λίβρα. Ας εξερευνήσουμε αυτά τα δεδομένα, ομαδοποιημένα ανά πολιτεία των Η.Π.Α.:
| πολιτεία | numcol | yieldpercol | totalprod | stocks | priceperlb | prodvalue | year |
|---|---|---|---|---|---|---|---|
| AL | 16000 | 71 | 1136000 | 159000 | 0.72 | 818000 | 1998 |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AR | 53000 | 65 | 3445000 | 1688000 | 0.59 | 2033000 | 1998 |
| CA | 450000 | 83 | 37350000 | 12326000 | 0.62 | 23157000 | 1998 |
| CO | 27000 | 72 | 1944000 | 1594000 | 0.7 | 1361000 | 1998 |
Δημιουργήστε ένα βασικό διάγραμμα διασποράς για να δείξετε τη σχέση μεταξύ της τιμής ανά λίβρα του μελιού και της πολιτείας προέλευσής του. Κάντε τον άξονα y αρκετά ψηλό ώστε να εμφανίζονται όλες οι πολιτείες:
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
Τώρα, δείξτε τα ίδια δεδομένα με ένα χρωματικό σχήμα που θυμίζει μέλι για να δείξετε πώς εξελίσσεται η τιμή με την πάροδο των ετών. Μπορείτε να το κάνετε προσθέτοντας μια παράμετρο 'hue' για να δείξετε την αλλαγή, χρόνο με χρόνο:
✅ Μάθετε περισσότερα για τις χρωματικές παλέτες που μπορείτε να χρησιμοποιήσετε στο Seaborn - δοκιμάστε ένα όμορφο χρωματικό σχήμα ουράνιου τόξου!
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
Με αυτή την αλλαγή χρωματικού σχήματος, μπορείτε να δείτε ότι υπάρχει προφανώς μια ισχυρή εξέλιξη με την πάροδο των ετών όσον αφορά την τιμή του μελιού ανά λίβρα. Πράγματι, αν κοιτάξετε ένα δείγμα δεδομένων για να το επαληθεύσετε (επιλέξτε μια δεδομένη πολιτεία, την Αριζόνα για παράδειγμα), μπορείτε να δείτε ένα μοτίβο αύξησης της τιμής χρόνο με χρόνο, με λίγες εξαιρέσεις:
| πολιτεία | numcol | yieldpercol | totalprod | stocks | priceperlb | prodvalue | year |
|---|---|---|---|---|---|---|---|
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AZ | 52000 | 62 | 3224000 | 1548000 | 0.62 | 1999000 | 1999 |
| AZ | 40000 | 59 | 2360000 | 1322000 | 0.73 | 1723000 | 2000 |
| AZ | 43000 | 59 | 2537000 | 1142000 | 0.72 | 1827000 | 2001 |
| AZ | 38000 | 63 | 2394000 | 1197000 | 1.08 | 2586000 | 2002 |
| AZ | 35000 | 72 | 2520000 | 983000 | 1.34 | 3377000 | 2003 |
| AZ | 32000 | 55 | 1760000 | 774000 | 1.11 | 1954000 | 2004 |
| AZ | 36000 | 50 | 1800000 | 720000 | 1.04 | 1872000 | 2005 |
| AZ | 30000 | 65 | 1950000 | 839000 | 0.91 | 1775000 | 2006 |
| AZ | 30000 | 64 | 1920000 | 902000 | 1.26 | 2419000 | 2007 |
| AZ | 25000 | 64 | 1600000 | 336000 | 1.26 | 2016000 | 2008 |
| AZ | 20000 | 52 | 1040000 | 562000 | 1.45 | 1508000 | 2009 |
| AZ | 24000 | 77 | 1848000 | 665000 | 1.52 | 2809000 | 2010 |
| AZ | 23000 | 53 | 1219000 | 427000 | 1.55 | 1889000 | 2011 |
| AZ | 22000 | 46 | 1012000 | 253000 | 1.79 | 1811000 | 2012 |
Ένας άλλος τρόπος για να οπτικοποιήσετε αυτή την εξέλιξη είναι να χρησιμοποιήσετε το μέγεθος αντί για το χρώμα. Για χρήστες με αχρωματοψία, αυτό μπορεί να είναι μια καλύτερη επιλογή. Επεξεργαστείτε την οπτικοποίησή σας ώστε να δείξετε την αύξηση της τιμής μέσω της αύξησης της περιφέρειας των κουκκίδων:
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
Μπορείτε να δείτε το μέγεθος των κουκκίδων να αυξάνεται σταδιακά.
Είναι αυτό μια απλή περίπτωση προσφοράς και ζήτησης; Λόγω παραγόντων όπως η κλιματική αλλαγή και η κατάρρευση αποικιών, υπάρχει λιγότερο διαθέσιμο μέλι για αγορά χρόνο με χρόνο, και έτσι η τιμή αυξάνεται;
Για να ανακαλύψουμε μια συσχέτιση μεταξύ ορισμένων μεταβλητών σε αυτό το σύνολο δεδομένων, ας εξερευνήσουμε μερικά γραφήματα γραμμών.
Γραφήματα Γραμμών
Ερώτηση: Υπάρχει σαφής αύξηση στην τιμή του μελιού ανά λίβρα χρόνο με χρόνο; Μπορείτε να το ανακαλύψετε πιο εύκολα δημιουργώντας ένα απλό γράφημα γραμμών:
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
Απάντηση: Ναι, με κάποιες εξαιρέσεις γύρω στο έτος 2003:
✅ Επειδή το Seaborn συγκεντρώνει δεδομένα γύρω από μία γραμμή, εμφανίζει "τις πολλαπλές μετρήσεις σε κάθε τιμή x σχεδιάζοντας τον μέσο όρο και το 95% διάστημα εμπιστοσύνης γύρω από τον μέσο όρο". Πηγή. Αυτή η χρονοβόρα συμπεριφορά μπορεί να απενεργοποιηθεί προσθέτοντας ci=None.
Ερώτηση: Λοιπόν, το 2003 μπορούμε επίσης να δούμε μια αύξηση στην προσφορά μελιού; Τι γίνεται αν κοιτάξετε τη συνολική παραγωγή χρόνο με χρόνο;
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
Απάντηση: Όχι πραγματικά. Αν κοιτάξετε τη συνολική παραγωγή, φαίνεται να έχει αυξηθεί εκείνη τη συγκεκριμένη χρονιά, παρόλο που γενικά η ποσότητα του παραγόμενου μελιού είναι σε πτώση κατά τη διάρκεια αυτών των ετών.
Ερώτηση: Σε αυτή την περίπτωση, τι θα μπορούσε να έχει προκαλέσει αυτή την αύξηση στην τιμή του μελιού γύρω στο 2003;
Για να το ανακαλύψετε, μπορείτε να εξερευνήσετε ένα πλέγμα όψεων.
Πλέγματα Όψεων
Τα πλέγματα όψεων λαμβάνουν μία όψη του συνόλου δεδομένων σας (στην περίπτωσή μας, μπορείτε να επιλέξετε το 'έτος' για να αποφύγετε την παραγωγή υπερβολικά πολλών όψεων). Το Seaborn μπορεί στη συνέχεια να δημιουργήσει ένα γράφημα για κάθε μία από αυτές τις όψεις των επιλεγμένων συντεταγμένων x και y για πιο εύκολη οπτική σύγκριση. Ξεχωρίζει το 2003 σε αυτόν τον τύπο σύγκρισης;
Δημιουργήστε ένα πλέγμα όψεων συνεχίζοντας να χρησιμοποιείτε το relplot, όπως συνιστάται από την τεκμηρίωση του Seaborn.
sns.relplot(
data=honey,
x="yieldpercol", y="numcol",
col="year",
col_wrap=3,
kind="line"
Σε αυτή την οπτικοποίηση, μπορείτε να συγκρίνετε την απόδοση ανά αποικία και τον αριθμό των αποικιών χρόνο με χρόνο, δίπλα δίπλα, με το περιτύλιγμα να έχει οριστεί στο 3 για τις στήλες:
Για αυτό το σύνολο δεδομένων, τίποτα ιδιαίτερο δεν ξεχωρίζει όσον αφορά τον αριθμό των αποικιών και την απόδοσή τους, χρόνο με χρόνο και πολιτεία με πολιτεία. Υπάρχει διαφορετικός τρόπος να εξετάσουμε την εύρεση συσχέτισης μεταξύ αυτών των δύο μεταβλητών;
Διπλά Γραφήματα Γραμμών
Δοκιμάστε ένα πολυγραμμικό γράφημα υπερθέτοντας δύο γραφήματα γραμμών το ένα πάνω στο άλλο, χρησιμοποιώντας το 'despine' του Seaborn για να αφαιρέσετε τις πάνω και δεξιές σπονδυλικές στήλες τους, και χρησιμοποιώντας το ax.twinx προερχόμενο από το Matplotlib. Το Twinx επιτρέπει σε ένα γράφημα να μοιράζεται τον άξονα x και να εμφανίζει δύο άξονες y. Έτσι, εμφανίστε την απόδοση ανά αποικία και τον αριθμό των αποικιών, υπερτεθειμένα:
fig, ax = plt.subplots(figsize=(12,6))
lineplot = sns.lineplot(x=honey['year'], y=honey['numcol'], data=honey,
label = 'Number of bee colonies', legend=False)
sns.despine()
plt.ylabel('# colonies')
plt.title('Honey Production Year over Year');
ax2 = ax.twinx()
lineplot2 = sns.lineplot(x=honey['year'], y=honey['yieldpercol'], ax=ax2, color="r",
label ='Yield per colony', legend=False)
sns.despine(right=False)
plt.ylabel('colony yield')
ax.figure.legend();
Ενώ τίποτα δεν ξεχωρίζει γύρω στο έτος 2003, μας επιτρέπει να κλείσουμε αυτό το μάθημα με μια λίγο πιο ευχάριστη νότα: παρόλο που υπάρχει συνολικά ένας μειούμενος αριθμός αποικιών, ο αριθμός των αποικιών σταθεροποιείται, ακόμα κι αν η απόδοσή τους ανά αποικία μειώνεται.
Πάμε, μέλισσες, πάμε!
🐝❤️
🚀 Πρόκληση
Σε αυτό το μάθημα, μάθατε λίγο περισσότερα για άλλες χρήσεις διαγραμμάτων διασποράς και πλεγμάτων γραμμών, συμπεριλαμβανομένων των πλεγμάτων όψεων. Προκαλέστε τον εαυτό σας να δημιουργήσει ένα πλέγμα όψεων χρησιμοποιώντας ένα διαφορετικό σύνολο δεδομένων, ίσως κάποιο που χρησιμοποιήσατε πριν από αυτά τα μαθήματα. Σημειώστε πόσο χρόνο χρειάζονται για να δημιουργηθούν και πώς πρέπει να είστε προσεκτικοί σχετικά με το πόσα πλέγματα χρειάζεται να σχεδιάσετε χρησιμοποιώντας αυτές τις τεχνικές.
Κουίζ μετά το μάθημα
Ανασκόπηση & Αυτομελέτη
Τα γραφήματα γραμμών μπορεί να είναι απλά ή αρκετά περίπλοκα. Κάντε λίγη ανάγνωση στην τεκμηρίωση του Seaborn σχετικά με τους διάφορους τρόπους που μπορείτε να τα δημιουργήσετε. Προσπαθήστε να βελτιώσετε τα γραφήματα γραμμών που δημιουργήσατε σε αυτό το μάθημα με άλλες μεθόδους που αναφέρονται στην τεκμηρίωση.
Εργασία
Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.







