# Οπτικοποίηση Σχέσεων: Όλα για το Μέλι 🍯 |![ Σκίτσο από [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/12-Visualizing-Relationships.png)| |:---:| |Οπτικοποίηση Σχέσεων - _Σκίτσο από [@nitya](https://twitter.com/nitya)_ | Συνεχίζοντας με τη φυσική θεματολογία της έρευνάς μας, ας ανακαλύψουμε ενδιαφέρουσες οπτικοποιήσεις για να δείξουμε τις σχέσεις μεταξύ διαφόρων τύπων μελιού, σύμφωνα με ένα σύνολο δεδομένων που προέρχεται από το [Υπουργείο Γεωργίας των Ηνωμένων Πολιτειών](https://www.nass.usda.gov/About_NASS/index.php). Αυτό το σύνολο δεδομένων, που περιλαμβάνει περίπου 600 εγγραφές, παρουσιάζει την παραγωγή μελιού σε πολλές πολιτείες των Η.Π.Α. Για παράδειγμα, μπορείτε να εξετάσετε τον αριθμό των αποικιών, την απόδοση ανά αποικία, τη συνολική παραγωγή, τα αποθέματα, την τιμή ανά λίβρα και την αξία του παραγόμενου μελιού σε μια συγκεκριμένη πολιτεία από το 1998 έως το 2012, με μία γραμμή δεδομένων ανά έτος για κάθε πολιτεία. Θα ήταν ενδιαφέρον να οπτικοποιήσουμε τη σχέση μεταξύ της παραγωγής μιας πολιτείας ανά έτος και, για παράδειγμα, της τιμής του μελιού σε αυτή την πολιτεία. Εναλλακτικά, θα μπορούσατε να οπτικοποιήσετε τη σχέση μεταξύ της απόδοσης μελιού ανά αποικία στις πολιτείες. Αυτή η χρονική περίοδος περιλαμβάνει την καταστροφική «Διαταραχή Κατάρρευσης Αποικιών» (CCD), που παρατηρήθηκε για πρώτη φορά το 2006 (http://npic.orst.edu/envir/ccd.html), καθιστώντας το ένα σημαντικό σύνολο δεδομένων για μελέτη. 🐝 ## [Κουίζ πριν το μάθημα](https://ff-quizzes.netlify.app/en/ds/quiz/22) Σε αυτό το μάθημα, μπορείτε να χρησιμοποιήσετε τη βιβλιοθήκη Seaborn, την οποία έχετε ήδη χρησιμοποιήσει, ως ένα εξαιρετικό εργαλείο για την οπτικοποίηση σχέσεων μεταξύ μεταβλητών. Ιδιαίτερα ενδιαφέρουσα είναι η χρήση της συνάρτησης `relplot` του Seaborn, η οποία επιτρέπει τη δημιουργία διαγραμμάτων διασποράς και γραμμών για γρήγορη οπτικοποίηση των '[στατιστικών σχέσεων](https://seaborn.pydata.org/tutorial/relational.html?highlight=relationships)', βοηθώντας τον επιστήμονα δεδομένων να κατανοήσει καλύτερα πώς σχετίζονται οι μεταβλητές μεταξύ τους. ## Διαγράμματα Διασποράς Χρησιμοποιήστε ένα διάγραμμα διασποράς για να δείξετε πώς εξελίχθηκε η τιμή του μελιού, χρόνο με τον χρόνο, ανά πολιτεία. Το Seaborn, χρησιμοποιώντας το `relplot`, ομαδοποιεί βολικά τα δεδομένα ανά πολιτεία και εμφανίζει σημεία δεδομένων για κατηγορικές και αριθμητικές τιμές. Ας ξεκινήσουμε εισάγοντας τα δεδομένα και τη βιβλιοθήκη Seaborn: ```python import pandas as pd import matplotlib.pyplot as plt import seaborn as sns honey = pd.read_csv('../../data/honey.csv') honey.head() ``` Παρατηρείτε ότι τα δεδομένα για το μέλι περιλαμβάνουν αρκετές ενδιαφέρουσες στήλες, όπως το έτος και την τιμή ανά λίβρα. Ας εξερευνήσουμε αυτά τα δεδομένα, ομαδοποιημένα ανά πολιτεία των Η.Π.Α.: | πολιτεία | αποικίες | απόδοση/αποικία | συνολική παραγωγή | αποθέματα | τιμή/λίβρα | αξία παραγωγής | έτος | | -------- | -------- | --------------- | ----------------- | --------- | ---------- | ------------- | ---- | | 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` αρκετά ψηλό ώστε να εμφανίζονται όλες οι πολιτείες: ```python sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5); ``` ![scatterplot 1](../../../../translated_images/scatter1.5e1aa5fd6706c5d12b5e503ccb77f8a930f8620f539f524ddf56a16c039a5d2f.el.png) Τώρα, δείξτε τα ίδια δεδομένα με μια χρωματική παλέτα που θυμίζει μέλι, για να δείξετε πώς εξελίσσεται η τιμή με την πάροδο των ετών. Μπορείτε να το κάνετε αυτό προσθέτοντας την παράμετρο 'hue' για να δείξετε την αλλαγή, χρόνο με τον χρόνο: > ✅ Μάθετε περισσότερα για τις [χρωματικές παλέτες που μπορείτε να χρησιμοποιήσετε στο Seaborn](https://seaborn.pydata.org/tutorial/color_palettes.html) - δοκιμάστε μια όμορφη παλέτα ουράνιου τόξου! ```python sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5); ``` ![scatterplot 2](../../../../translated_images/scatter2.c0041a58621ca702990b001aa0b20cd68c1e1814417139af8a7211a2bed51c5f.el.png) Με αυτή την αλλαγή χρωματικής παλέτας, μπορείτε να δείτε ότι υπάρχει προφανώς μια ισχυρή πρόοδος με την πάροδο των ετών όσον αφορά την τιμή του μελιού ανά λίβρα. Πράγματι, αν εξετάσετε ένα δείγμα δεδομένων (π.χ. την πολιτεία της Αριζόνα), μπορείτε να δείτε ένα μοτίβο αύξησης της τιμής χρόνο με τον χρόνο, με λίγες εξαιρέσεις: | πολιτεία | αποικίες | απόδοση/αποικία | συνολική παραγωγή | αποθέματα | τιμή/λίβρα | αξία παραγωγής | έτος | | -------- | -------- | --------------- | ----------------- | --------- | ---------- | ------------- | ---- | | 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 | Ένας άλλος τρόπος να οπτικοποιήσετε αυτή την πρόοδο είναι να χρησιμοποιήσετε το μέγεθος αντί για το χρώμα. Για χρήστες με αχρωματοψία, αυτό μπορεί να είναι μια καλύτερη επιλογή. Επεξεργαστείτε την οπτικοποίησή σας ώστε να δείξετε την αύξηση της τιμής μέσω της αύξησης της περιφέρειας των κουκκίδων: ```python sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5); ``` Μπορείτε να δείτε το μέγεθος των κουκκίδων να αυξάνεται σταδιακά. ![scatterplot 3](../../../../translated_images/scatter3.3c160a3d1dcb36b37900ebb4cf97f34036f28ae2b7b8e6062766c7c1dfc00853.el.png) Είναι αυτό μια απλή περίπτωση προσφοράς και ζήτησης; Λόγω παραγόντων όπως η κλιματική αλλαγή και η κατάρρευση αποικιών, υπάρχει λιγότερο διαθέσιμο μέλι για αγορά χρόνο με τον χρόνο, και έτσι αυξάνεται η τιμή; Για να ανακαλύψουμε μια συσχέτιση μεταξύ ορισμένων μεταβλητών αυτού του συνόλου δεδομένων, ας εξερευνήσουμε μερικά διαγράμματα γραμμών. ## Διαγράμματα Γραμμών Ερώτηση: Υπάρχει σαφής αύξηση της τιμής του μελιού ανά λίβρα χρόνο με τον χρόνο; Μπορείτε να το ανακαλύψετε εύκολα δημιουργώντας ένα απλό διάγραμμα γραμμής: ```python sns.relplot(x="year", y="priceperlb", kind="line", data=honey); ``` Απάντηση: Ναι, με κάποιες εξαιρέσεις γύρω στο έτος 2003: ![line chart 1](../../../../translated_images/line1.f36eb465229a3b1fe385cdc93861aab3939de987d504b05de0b6cd567ef79f43.el.png) ✅ Επειδή το Seaborn συγκεντρώνει δεδομένα γύρω από μία γραμμή, εμφανίζει «τις πολλαπλές μετρήσεις σε κάθε τιμή x σχεδιάζοντας τον μέσο όρο και το διάστημα εμπιστοσύνης 95% γύρω από τον μέσο όρο». [Πηγή](https://seaborn.pydata.org/tutorial/relational.html). Αυτή η χρονοβόρα συμπεριφορά μπορεί να απενεργοποιηθεί προσθέτοντας `ci=None`. Ερώτηση: Λοιπόν, το 2003 μπορούμε επίσης να δούμε μια αύξηση στην προσφορά μελιού; Τι γίνεται αν κοιτάξετε τη συνολική παραγωγή χρόνο με τον χρόνο; ```python sns.relplot(x="year", y="totalprod", kind="line", data=honey); ``` ![line chart 2](../../../../translated_images/line2.a5b3493dc01058af6402e657aaa9ae1125fafb5e7d6630c777aa60f900a544e4.el.png) Απάντηση: Όχι ακριβώς. Αν κοιτάξετε τη συνολική παραγωγή, φαίνεται να έχει αυξηθεί εκείνη τη χρονιά, παρόλο που γενικά η ποσότητα του παραγόμενου μελιού μειώνεται κατά τη διάρκεια αυτών των ετών. Ερώτηση: Σε αυτή την περίπτωση, τι θα μπορούσε να έχει προκαλέσει την αύξηση της τιμής του μελιού γύρω στο 2003; Για να το ανακαλύψετε, μπορείτε να εξερευνήσετε ένα πλέγμα όψεων. ## Πλέγματα Όψεων Τα πλέγματα όψεων λαμβάνουν μία όψη του συνόλου δεδομένων σας (στην περίπτωσή μας, μπορείτε να επιλέξετε το 'έτος' για να αποφύγετε την παραγωγή υπερβολικά πολλών όψεων). Το Seaborn μπορεί στη συνέχεια να δημιουργήσει ένα διάγραμμα για κάθε μία από αυτές τις όψεις των επιλεγμένων συντεταγμένων x και y για πιο εύκολη οπτική σύγκριση. Ξεχωρίζει το 2003 σε αυτό το είδος σύγκρισης; Δημιουργήστε ένα πλέγμα όψεων συνεχίζοντας να χρησιμοποιείτε το `relplot`, όπως συνιστάται από την [τεκμηρίωση του Seaborn](https://seaborn.pydata.org/generated/seaborn.FacetGrid.html?highlight=facetgrid#seaborn.FacetGrid). ```python sns.relplot( data=honey, x="yieldpercol", y="numcol", col="year", col_wrap=3, kind="line" ) ``` Σε αυτή την οπτικοποίηση, μπορείτε να συγκρίνετε την απόδοση ανά αποικία και τον αριθμό των αποικιών χρόνο με τον χρόνο, δίπλα-δίπλα, με το περιτύλιγμα να έχει οριστεί στις 3 στήλες: ![facet grid](../../../../translated_images/facet.6a34851dcd540050dcc0ead741be35075d776741668dd0e42f482c89b114c217.el.png) Για αυτό το σύνολο δεδομένων, τίποτα ιδιαίτερο δεν ξεχωρίζει όσον αφορά τον αριθμό των αποικιών και την απόδοσή τους, χρόνο με τον χρόνο και πολιτεία με πολιτεία. Υπάρχει διαφορετικός τρόπος να βρείτε μια συσχέτιση μεταξύ αυτών των δύο μεταβλητών; ## Διπλά Διαγράμματα Γραμμών Δοκιμάστε ένα διάγραμμα πολλαπλών γραμμών, τοποθετώντας δύο διαγράμματα γραμμών το ένα πάνω στο άλλο, χρησιμοποιώντας το 'despine' του Seaborn για να αφαιρέσετε τις πάνω και δεξιές γραμμές, και χρησιμοποιώντας το `ax.twinx` [που προέρχεται από το Matplotlib](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.twinx.html). Το Twinx επιτρέπει σε ένα διάγραμμα να μοιράζεται τον άξονα x και να εμφανίζει δύο άξονες y. Έτσι, εμφανίστε την απόδοση ανά αποικία και τον αριθμό των αποικιών, τοποθετημένα το ένα πάνω στο άλλο: ```python 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(); ``` ![superimposed plots](../../../../translated_images/dual-line.a4c28ce659603fab2c003f4df816733df2bf41d1facb7de27989ec9afbf01b33.el.png) Ενώ τίποτα δεν τραβάει την προσοχή γύρω στο έτος 2003, αυτό μας επιτρέπει να κλείσουμε το μάθημα με μια πιο αισιόδοξη νότα: ενώ υπάρχει συνολικά μια μείωση στον αριθμό των αποικιών, ο αριθμός των αποικιών σταθεροποιείται, ακόμα κι αν η απόδοσή τους ανά αποικία μειώνεται. Πάμε, μέλισσες, πάμε! 🐝❤️ ## 🚀 Πρόκληση Σε αυτό το μάθημα, μάθατε περισσότερα για άλλες χρήσεις διαγραμμάτων διασποράς και πλεγμάτων γραμμών, συμπεριλαμβανομένων των πλεγμάτων όψεων. Προκαλέστε τον εαυτό σας να δημιουργήσει ένα πλέγμα όψεων χρησιμοποιώντας ένα διαφορετικό σύνολο δεδομένων, ίσως κάποιο που χρησιμοποιήσατε σε προηγούμενα μαθήματα. Σημειώστε πόσο χρόνο χρειάζονται για να δημιουργηθούν και πόσο προσεκτικοί πρέπει να είστε σχετικά με το πόσα πλέγματα χρειάζεται να σχεδιάσετε χρησιμοποιώντας αυτές τις τεχνικές. ## [Κουίζ μετά το μάθημα](https://ff-quizzes.netlify.app/en/ds/quiz/23) ## Ανασκόπηση & Αυτομελέτη Τα διαγράμματα γραμμών μπορούν να είναι απλά ή αρκετά περίπλοκα. Κάντε λίγη ανάγνωση στην [τεκμηρίωση του Seaborn](https://seaborn.pydata.org/generated/seaborn.lineplot.html) σχετικά με τους διάφορους τρόπους που μπορείτε να τα δημιουργήσετε. Προσπαθήστε να βελτιώσετε τα διαγράμματα γραμμών που δημιουργήσατε σε αυτό το μάθημα με άλλες μεθόδους που αναφέρονται στην τεκμηρίωση. ## Εργασία [Βουτήξτε στην κυψέλη](assignment.md) --- **Αποποίηση Ευθύνης**: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.