[Explained] Πώς να δημιουργήσετε Heatmap στην Python
![[Explained] Πώς να δημιουργήσετε Heatmap στην Python](https://grtechpc.org/wp-content/uploads/2023/07/Explained-Πώς-να-δημιουργήσετε-Heatmap-στην-Python.jpeg?v=1689316231)
Η οπτικοποίηση είναι ένας σημαντικός τρόπος για να κατανοήσετε τα δεδομένα και να αντλήσετε ενημερωτικές και εφαρμόσιμες ιδέες. Μια καλή οπτική επιτρέπει στον αναγνώστη να αποκτήσει μια βασική αίσθηση των πληροφοριών με μια μόνο ματιά.
Μια δημοφιλής απεικόνιση που χρησιμοποιείται για την προβολή δεδομένων είναι ένας χάρτης θερμότητας. Σε αυτό το άρθρο, θα εξηγήσω έναν χάρτη θερμότητας και πώς να δημιουργήσετε έναν στην Python χρησιμοποιώντας τα Matplotlib, Seaborn και Plotly.
Πίνακας περιεχομένων
Τι είναι ένας χάρτης θερμότητας;
Πηγή: seaborn.pydata.org
Ένας θερμικός χάρτης είναι μια δισδιάστατη εικόνα που αναπαριστά δεδομένα ως μήτρα ή πλέγμα σημείων. Μια απόχρωση μιας έγχρωμης γραφικής παράστασης αντιπροσωπεύει κάθε σημείο δεδομένων. Οι πιο σκούρες αποχρώσεις αντιπροσωπεύουν υψηλότερες τιμές από τις πιο ανοιχτές αποχρώσεις.
Οι χάρτες θερμότητας διευκολύνουν τον εντοπισμό μοτίβων, τάσεων και παραλλαγών στα δεδομένα. Παρέχουν συνοπτικές πληροφορίες που επιτρέπουν στους χρήστες να βλέπουν γρήγορα περιοχές υψηλών ή χαμηλών τιμών, συμπλέγματα ή ακραίες τιμές.
Πού χρησιμοποιούνται οι χάρτες θερμότητας;
Οι χάρτες θερμότητας είναι χρήσιμοι για να δείξουν πώς οι τιμές ποικίλλουν στο διάστημα. Οι περιπτώσεις καθημερινής χρήσης περιλαμβάνουν:
Καιρός
Ο πιο δημοφιλής χάρτης θερμότητας που έχουν δει οι περισσότεροι άνθρωποι είναι ένας κυριολεκτικός χάρτης θερμότητας – που δείχνει πώς η θερμοκρασία ποικίλλει σε διαφορετικά μέρη.
Αυτό είναι ένα παράδειγμα πρόγνωσης καιρού από η Daily Express εμφανίζοντας τις αναμενόμενες θερμοκρασίες ως θερμικό χάρτη. Αυτό διευκολύνει την οπτικοποίηση ποια μέρη θα είναι ζεστά, κρύα ή ενδιάμεσα.
Εμφάνιση χρήσης ιστότοπου/εφαρμογής
Πηγή: HotJar
Μέσω της παρακολούθησης των κινήσεων του ποντικιού, των κλικ και των μοτίβων κύλισης, οι χάρτες θερμότητας βοηθούν στον εντοπισμό δημοφιλών ή παραμελημένων περιοχών μιας ιστοσελίδας. Αυτό μπορεί στη συνέχεια να χρησιμοποιηθεί για τη βελτιστοποίηση των διεπαφών χρήστη και τη βελτίωση της εμπειρίας χρήστη.
Ιατρική απεικόνιση
Πηγή: Researchgate.net
Οι χάρτες θερμότητας απεικονίζουν περιοχές υψηλής ή χαμηλής δραστηριότητας στο σώμα. Αυτό μπορεί να εντοπίσει ανωμαλίες και ασθένειες και να αξιολογήσει την εξέλιξη ή την ανταπόκριση στη θεραπεία σε καταστάσεις όπως ο καρκίνος.
Βιβλιοθήκες για τη δημιουργία Heatmaps στην Python
Η Python είναι μια δημοφιλής γλώσσα για ανάλυση και οπτικοποίηση δεδομένων. Αυτό οφείλεται στην απλή σύνταξη και το εκτεταμένο οικοσύστημά του. Υπάρχουν πολλές βιβλιοθήκες που μπορείτε να χρησιμοποιήσετε για να δημιουργήσετε χάρτες θερμότητας στην Python. Αυτά περιλαμβάνουν:
- Matplotlib – Μια δημοφιλής βιβλιοθήκη οπτικοποίησης δεδομένων. Είναι μια βιβλιοθήκη χαμηλού επιπέδου που παρέχει περισσότερες επιλογές προσαρμογής αλλά είναι πολύπλοκη.
- Seaborn – Αυτή η βιβλιοθήκη οπτικοποίησης είναι χτισμένη πάνω από το Matplotlib και απλοποιεί ορισμένες από τις λειτουργίες του, ενώ παρέχει οπτικοποιήσεις με καλύτερη εμφάνιση.
- Plotly – Αυτή είναι μια βιβλιοθήκη οπτικοποίησης που παρέχει ένα εύχρηστο API για τη δημιουργία Heatmaps στην Python.
Στην επόμενη ενότητα, θα διερευνήσουμε πώς να δημιουργήσετε θερμικούς χάρτες χρησιμοποιώντας όλες αυτές τις βιβλιοθήκες.
Πώς να δημιουργήσετε έναν χάρτη θερμότητας;
Σε αυτήν την ενότητα, θα εξερευνήσω πώς να δημιουργήσω χάρτες θερμότητας χρησιμοποιώντας τα Matplotlib, Seaborn και Plotly. Για να κωδικοποιήσω, θα χρησιμοποιήσω Google Colab. Είναι μια δωρεάν χρήση ενός σημειωματάριου Python που χρησιμοποιεί την Υποδομή Google για την εκτέλεση του κώδικά σας. Δεν απαιτεί ρύθμιση, επομένως μπορείτε επίσης να το χρησιμοποιήσετε για να το ακολουθήσετε. Αρχικά, θα καλύψουμε πρώτα το Matplotlib.
Matplotlib
Αρχικά, ξεκινάμε εισάγοντας τη βιβλιοθήκη Matplotlib.
import matplotlib.pyplot as plt
Θα χρειαστούμε επίσης το NumPy για να δημιουργήσουμε ένα τυχαίο σύνολο δεδομένων.
import numpy as np
Για να δημιουργήσουμε το σύνολο δεδομένων, θα προσθέσουμε τον ακόλουθο κώδικα:
# Creating a seed for reproducibility np.random.seed(2) # Generating 10 x 10 array of integers between 1 and 50 data = np.random.randint(low = 1, high = 50, size = (10, 10))
Για να σχεδιάσουμε τα δεδομένα, χρησιμοποιούμε τη μέθοδο imshow. Περνάμε δεδομένα ως όρισμα. Μπορούμε να κάνουμε περισσότερα μεταφέροντας επιπλέον επιχειρήματα στα οποία θα αναφερθούμε αργότερα.
plt.imshow(data)
Εάν εκτελείτε το κελί, θα πρέπει να δείτε έναν θερμικό χάρτη.
Αν και αυτό είναι υπέροχο, υπάρχουν πολλές διαθέσιμες επιλογές προσαρμογής. Για αρχή, μπορείτε να αλλάξετε το χρώμα που χρησιμοποιείται στην εικόνα χρησιμοποιώντας το όρισμα cmap που μεταβιβάζετε στο imshow. Για παράδειγμα, αν θέλετε να αλλάξετε το χρώμα που χρησιμοποιείται από τον χάρτη θερμότητας σε διαφορετικές αποχρώσεις του μπλε, θα δημιουργήσατε την γραφική παράσταση με τα ακόλουθα.
plt.imshow(data, cmap = 'Blues')
Βρίσκεται η πλήρης λίστα των επιλογών cmap εδώ. Σε κάθε περίπτωση, το αποτέλεσμα των παραπάνω θα ήταν:
Ένας χάρτης θερμότητας θα ήταν πιο χρήσιμος εάν υπήρχε ένα κλειδί για να εξηγήσει τι αντιπροσώπευαν τα χρώματα. Για να το κάνετε αυτό, προσθέστε τον ακόλουθο κώδικα:
plt.colorbar()
Μετά από αυτό, θα πρέπει να πάρετε ένα σχήμα που μοιάζει με αυτό:
Μια χρωματική γραμμή είναι χρήσιμη, αλλά σε ορισμένες περιπτώσεις, μπορεί να θέλετε να σχολιάσετε τις διαφορετικές τιμές, ώστε ο θεατής να μπορεί να δει ακριβώς αυτό που αναπαρίσταται. Για να το κάνετε αυτό, θα γράφατε κείμενο σε κάθε ένα από τα κελιά χρησιμοποιώντας το plt.text().
for i in range(data.shape[0]): for j in range(data.shape[1]): plt.text(j, i, '%d' % data[i, j], horizontalalignment="center", verticalalignment="center", )
Το τελευταίο πράγμα που θα κάνουμε με το heatmap είναι να ορίσουμε τις ετικέτες τικ στους άξονες. Θα χρησιμοποιήσουμε τη συνάρτηση plt.xticks για τον άξονα x και τη συνάρτηση plt.yticks για τον άξονα y. Αυτές οι μέθοδοι ονομάζονται με τον ίδιο τρόπο. η μόνη διαφορά είναι ο άξονας που επηρεάζει κάθε μέθοδος.
Το πρώτο επιχείρημα είναι η λίστα των θέσεων για την εισαγωγή τικ. Αυτό αναπαρίσταται ως ένας πίνακας δεικτών. Το ακόλουθο όρισμα είναι η πραγματική λίστα των ετικετών που θα εισαχθούν. Ακολουθεί ένα παράδειγμα για το πώς θα εισάγαμε τσιμπούρια:
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] plt.xticks(np.arange(len(x_labels)), labels=x_labels) plt.yticks(np.arange(len(y_labels)), labels=y_labels)
Και τέλος! Έτσι δημιουργείτε έναν χάρτη θερμότητας στο Matplotlib. Η πλήρης λύση κώδικα περιγράφεται αναλυτικά παρακάτω.
import numpy as np import matplotlib.pyplot as plt # Creating a seed for reproducibility np.random.seed(2) # Generating 10 x 10 array of integers between 1 and 50 data = np.random.randint(low = 1, high = 50, size = (10, 10)) # Creating a plot with blue as a color plt.imshow(data, cmap = 'Blues') # Displaying a color bar plt.colorbar() # Annotating values for i in range(data.shape[0]): for j in range(data.shape[1]): plt.text(j, i, '%d' % data[i, j], horizontalalignment="center", verticalalignment="center", ) # Creating lists of tick labels x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] # Adding the tick labels plt.xticks(np.arange(len(x_labels)), labels=x_labels) plt.yticks(np.arange(len(y_labels)), labels=y_labels)
Ωστόσο, η χρήση του Matplotlib δεν είναι η πιο εύκολη λύση. Όπως θα δούμε στη συνέχεια, άλλες βιβλιοθήκες, όπως η Seaborn και η Matplotlib, απλοποιούν τη διαδικασία δημιουργίας ενός θερμικού χάρτη.
Seaborn
Σε αυτήν την ενότητα, θα αναδημιουργήσουμε το προηγούμενο παράδειγμα χρησιμοποιώντας το Seaborn. Το Seaborn είναι μια βιβλιοθήκη που χτίζεται στην κορυφή του Matplotlib. Παρέχει αφαιρέσεις που διευκολύνουν την εργασία. Για να δημιουργήσουμε έναν χάρτη θερμότητας, ξεκινάμε εισάγοντας τις βιβλιοθήκες που πρόκειται να χρησιμοποιήσουμε.
import matplotlib.pyplot as plt import numpy as np import seaborn as sn
Εισαγάγαμε το Matplotlib επειδή το απαιτεί η Seaborn. Στη συνέχεια, πρέπει επίσης να εισαγάγουμε το NumPy για να δημιουργήσουμε ένα τυχαίο σύνολο δεδομένων. Τέλος, πρέπει να εισάγουμε Seaborn.
Στη συνέχεια, δημιουργούμε το σύνολο δεδομένων χρησιμοποιώντας το NumPy.
# Creating a seed for reproducibility np.random.seed(2) # Generating 10 x 10 array of integers between 1 and 50 data = np.random.randint(low = 1, high = 50, size = (10, 10))
Αφού το κάνουμε αυτό, δημιουργούμε τις λίστες μας με ετικέτες τικ.
# Tick labels x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
Στη συνέχεια, τέλος, δημιουργούμε τον πραγματικό χάρτη θερμότητας καλώντας τη συνάρτηση heatmap της μονάδας sn.
hm = sn.heatmap(data = data, cmap = 'Oranges', annot = True, yticklabels = y_labels, xticklabels = x_labels)
Όπως μπορείτε να δείτε, περάσαμε αρκετά επιχειρήματα. Ακολουθεί μια εξήγηση για το καθένα:
- δεδομένα είναι το σύνολο δεδομένων που θέλουμε να σχεδιάσουμε
- Το cmap είναι ο συνδυασμός χρωμάτων που θέλουμε να δημιουργήσει ο χάρτης θερμότητας χρησιμοποιώντας
- Το annot δηλώνει εάν θέλουμε να σχολιάσουμε τα σημεία δεδομένων με την πραγματική τους αξία
- Το yticklabels είναι η λίστα με τις ετικέτες που θέλουμε για τα τικ κάθετου άξονα
- Το xticklabels είναι η λίστα ετικετών για τικ οριζόντιου άξονα.
Τέλος, δείχνουμε την γραφική παράσταση χρησιμοποιώντας τον κώδικα:
plt.show()
Αυτό θα δημιουργήσει τον ακόλουθο χάρτη θερμότητας:
πλοκή
Για το Plotly, η διαδικασία είναι παρόμοια με το Seaborn. Εδώ είναι το περίγραμμα κώδικα για τη δημιουργία ενός θερμικού χάρτη στο Plotly:
import plotly.express as px import numpy as np # Creating a seed for reproducibility np.random.seed(2) # Generating 10 x 10 array of integers between 1 and 50 data = np.random.randint(low = 1, high = 50, size = (10, 10)) # Tick labels x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] px.imshow(data, text_auto = True, x = x_labels, y = y_labels, color_continuous_scale="greys")
Όπως μπορείτε να δείτε, ο χάρτης θερμότητας δημιουργείται στην τελευταία γραμμή χρησιμοποιώντας τη συνάρτηση px.imshow(). Αυτή η συνάρτηση παίρνει τα δεδομένα για να σχεδιάσει ως όρισμα θέσης. Επιπλέον, παίρνει το όρισμα λέξης-κλειδιού ως εξής:
- Το text_auto είναι ένα boolean που ενεργοποιεί τον σχολιασμό όταν οριστεί σε true
- Το x είναι μια λίστα ετικετών με τον άξονα x
- Το y είναι μια λίστα με ετικέτες τικ στον άξονα y
- color_continuous_scale καθορίζει το συνδυασμό χρωμάτων που χρησιμοποιείται για το γράφημα.
Όπως μπορείτε να δείτε, το Plotly είναι πιο απλό από το Seaborn και το Matplotlib. Επιπλέον, το γράφημα που δημιουργείται είναι διαδραστικό σε σύγκριση με άλλες βιβλιοθήκες που παράγουν στατικές εικόνες.
Ακολουθεί το στιγμιότυπο οθόνης του τελικού αποτελέσματος:
Τελικές Λέξεις
Σε αυτό το άρθρο, καλύψαμε πώς να δημιουργήσετε χάρτες θερμότητας στην Python. Καλύψαμε τις κύριες βιβλιοθήκες – Matplotlib, Seaborn και Plotly. Είδαμε επίσης πώς οι Seaborn και Plotly παρέχουν απλοποιημένες αφαιρέσεις πάνω από το Matplotlib. Μια κρίσιμη χρήση των Heatmaps είναι η παρακολούθηση του τρόπου με τον οποίο οι χρήστες χρησιμοποιούν τους ιστότοπούς σας.
Στη συνέχεια, ελέγξτε τα εργαλεία χαρτών θερμότητας που σας λένε πού κάνουν κλικ οι χρήστες σας.