La visualisation est un moyen important de donner un sens aux données et d’en tirer des informations utiles et exploitables. Un bon visuel permet au lecteur de se faire une idée de l’information d’un simple coup d’œil.

Une visualisation populaire utilisée pour visualiser les données est la carte thermique. Dans cet article, je vais vous expliquer ce qu’est une carte thermique et comment en créer une en Python à l’aide de Matplotlib, Seaborn et Plotly.

Qu’est-ce qu’une carte thermique ?

heatmap
Source : seaborn.pydata.org

Une carte thermique est une image bidimensionnelle représentant des données sous la forme d’une matrice ou d’une grille de points. Chaque point de données est représenté par une nuance de couleur. Les teintes foncées représentent des valeurs plus élevées que les teintes claires.

Les cartes thermiques facilitent l’identification des modèles, des tendances et des variations dans les données. Elles fournissent des informations résumées qui permettent aux utilisateurs de voir rapidement les zones de valeurs élevées ou faibles, les grappes ou les valeurs aberrantes.

Où sont utilisées les cartes thermiques ?

Les cartes thermiques sont utiles pour montrer comment les valeurs varient dans l’espace. Parmi les cas d’utilisation courante, on peut citer

Météo

UK-weather-map-hot-weather-1101867

La carte thermique la plus populaire que la plupart des gens ont vue est une carte thermique littérale – montrant comment la température varie dans différents endroits.

Voici un exemple de prévisions météorologiques du Daily Express montrant les températures attendues sous forme de carte thermique. Il est ainsi plus facile de visualiser les endroits où il fera chaud, froid ou entre les deux.

Affichage de l’utilisation d’un site web ou d’une application

heatmaps-bg_HL7rgOa
Source : HotJar

En suivant les mouvements de la souris, les clics et les schémas de défilement, les cartes thermiques permettent d’identifier les zones populaires ou négligées d’une page web. Ces données peuvent ensuite être utilisées pour optimiser les interfaces utilisateur et améliorer l’expérience des utilisateurs.

Imagerie médicale

Medical-Heatmap
Source : researchgate.net

Les cartes thermiques visualisent les zones d’activité élevée ou faible dans le corps. Elles permettent d’identifier les anomalies et les maladies et d’évaluer la progression ou la réponse au traitement dans des conditions telles que le cancer.

Bibliothèques pour la création de cartes thermiques en Python

Python est un langage populaire pour l’analyse et la visualisation des données. Cela s’explique par sa syntaxe simple et son écosystème étendu. Il existe de nombreuses bibliothèques que vous pouvez utiliser pour créer des cartes thermiques en Python. En voici quelques-unes :

  • Matplotlib – Une bibliothèque de visualisation de données populaire. Il s’agit d’une bibliothèque de bas niveau qui offre davantage d’options de personnalisation, mais qui est compliquée.
  • Seaborn – Cette bibliothèque de visualisation est construite au-dessus de Matplotlib et simplifie certaines de ses fonctions tout en fournissant des visualisations de meilleure qualité.
  • Plotly – Il s’agit d’une bibliothèque de visualisation qui fournit une API facile à utiliser pour créer des cartes thermiques en Python.

Dans la section suivante, nous verrons comment créer des cartes thermiques à l’aide de toutes ces bibliothèques.

Comment générer une carte thermique ?

Dans cette section, je vais étudier comment créer des cartes thermiques en utilisant Matplotlib, Seaborn et Plotly. Pour coder, je vais utiliser Google Colab. Il s’agit d’une instance gratuite d’un Notebook Python qui utilise l’infrastructure Google pour exécuter votre code. Il ne nécessite aucune installation, vous pouvez donc l’utiliser pour suivre le cours. Pour commencer, nous allons d’abord aborder Matplotlib.

Matplotlib

Nous commençons par importer la bibliothèque Matplotlib.

import matplotlib.pyplot as plt

Nous aurons également besoin de NumPy pour générer un ensemble de données aléatoires.

import numpy as np

Pour générer le jeu de données, nous ajouterons le code suivant :

# Création d'une graine pour la reproductibilité
np.random.seed(2)

# Génération d'un tableau 10 x 10 d'entiers compris entre 1 et 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

Pour représenter les données, nous utilisons la méthode imshow. Nous transmettons les données en tant qu’argument. Nous pouvons faire plus en passant des arguments supplémentaires que nous aborderons plus tard.

plt.imshow(data)

Si vous exécutez la cellule, vous devriez voir une carte thermique.

Heatmap-1

C’est très bien, mais vous disposez de nombreuses options de personnalisation. Pour commencer, vous pouvez changer la couleur utilisée dans l’image en utilisant l’argument cmap que vous passez à imshow. Par exemple, si vous souhaitez changer la couleur utilisée par la carte thermique en différentes nuances de bleu, vous devez générer le graphique comme suit.

plt.imshow(data, cmap = 'Blues')

La liste complète des options de cmap se trouve ici. Quoi qu’il en soit, le résultat de ce qui précède serait le suivant :

Heatmap-2

Une carte thermique serait plus utile s’il y avait une clé pour expliquer ce que les couleurs représentent. Pour ce faire, ajoutez le code suivant :

plt.colorbar()

Vous devriez ensuite obtenir une figure qui ressemble à celle-ci :

Heatmap-3

Une barre de couleurs est utile, mais dans certains cas, vous voudrez peut-être annoter les différentes valeurs afin que l’observateur puisse voir précisément ce qui est représenté. Pour ce faire, vous devez écrire du texte dans chacune des cellules à l’aide de plt.text().

for i in range(data.shape<x>[0]</x>) :
   for j in range(data.shape<x>[1]</x>) :
      plt.text(j, i, '%d' % data[i, j],
         horizontalalignment='center',
         verticalalignment='center',
      )
Heatmap-4

La dernière chose que nous allons faire avec la carte thermique est de définir les étiquettes de coche sur les axes. Nous utiliserons la fonction plt.xticks pour l’axe des x et la fonction plt.yticks pour l’axe des y. Ces méthodes sont appelées de la même manière ; la seule différence est l’axe que chaque méthode affecte.

Le premier argument est la liste des endroits où insérer les points. Elle est représentée sous la forme d’un tableau d’indices. L’argument suivant est la liste des étiquettes à insérer. Voici un exemple de la façon dont nous insérerions des tiques :

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)
Heatmap-5

Et c’est tout ! Voilà comment créer une carte thermique dans Matplotlib. Le code complet est détaillé ci-dessous.

import numpy as np
import matplotlib.pyplot as plt

# Création d'une graine pour la reproductibilité
np.random.seed(2)

# Génération d'un tableau 10 x 10 d'entiers entre 1 et 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Création d'un graphique avec le bleu comme couleur
plt.imshow(data, cmap = 'Blues')

# Affichage d'une barre de couleur
plt.colorbar()

# Annotation des valeurs
for i in range(data.shape<x>[0]</x>) :
   for j in range(data.shape<x>[1]</x>) :
      plt.text(j, i, '%d' % data[i, j],
         horizontalalignment='center',
         verticalalignment='center',
      )

# Création de listes d'étiquettes de coche
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

# Ajout des étiquettes de tic-tac
plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

Cependant, l’utilisation de Matplotlib n’est pas la solution la plus simple. Comme nous le verrons par la suite, d’autres bibliothèques, telles que Seaborn et Matplotlib, simplifient le processus de construction d’une carte thermique.

Seaborn

Dans cette section, nous allons recréer l’exemple précédent en utilisant Seaborn. Seaborn est une bibliothèque qui s’appuie sur Matplotlib. Elle fournit des abstractions qui facilitent son utilisation. Pour créer une carte thermique, nous commençons par importer les bibliothèques que nous allons utiliser.

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sn

Nous avons importé Matplotlib car Seaborn en a besoin. Ensuite, nous devons également importer NumPy pour générer un ensemble de données aléatoires. Enfin, nous devons importer Seaborn.

Ensuite, nous générons le jeu de données à l’aide de NumPy.

# Création d'une graine pour la reproductibilité
np.random.seed(2)

# Génération d'un tableau 10 x 10 d'entiers entre 1 et 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

Après avoir fait cela, nous créons nos listes d’étiquettes de tic-tac.

# Étiquettes de tic-tac
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

Enfin, nous créons la carte thermique proprement dite en appelant la fonction heatmap du module sn.

hm = sn.heatmap(data = data, cmap = 'Oranges', annot = True, yticklabels = y_labels, xticklabels = x_labels)

Comme vous pouvez le constater, nous avons transmis plusieurs arguments. Voici une explication pour chacun d’entre eux :

  • data est l’ensemble de données que nous voulons tracer
  • cmap est le schéma de couleurs que nous voulons utiliser pour créer la carte thermique
  • annot indique si nous voulons annoter les points de données avec leur valeur réelle
  • yticklabels est la liste des étiquettes que nous voulons pour les ticks de l’axe vertical
  • xticklabels est la liste des étiquettes pour les points de l’axe horizontal.

Enfin, nous affichons le graphique à l’aide du code :

plt.show()

Cela générera la carte thermique suivante :

Heatmap-6

Plotly

Pour Plotly, le processus est similaire à celui de Seaborn. Voici le schéma de code pour créer une carte thermique dans Plotly :

import plotly.express as px
import numpy as np

# Création d'une graine pour la reproductibilité
np.random.seed(2)

# Génération d'un tableau 10 x 10 d'entiers entre 1 et 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Cochez les étiquettes
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')

Comme vous pouvez le voir, la carte thermique est générée à la dernière ligne à l’aide de la fonction px.imshow(). Cette fonction prend les données à représenter comme argument de position. En outre, elle prend en argument des mots-clés comme suit :

  • text_auto est un booléen qui active l’annotation lorsqu’il vaut true (vrai)
  • x est une liste d’étiquettes à cocher sur l’axe des x
  • y est une liste d’étiquettes à cocher sur l’axe des y
  • color_continuous_scale détermine la palette de couleurs utilisée pour le graphique.

Comme vous pouvez le constater, Plotly est plus simple que Seaborn et Matplotlib. De plus, le graphique généré est interactif par rapport aux autres bibliothèques qui produisent des images statiques.

Voici la capture d’écran du résultat final :

Screenshot-from-2023-07-13-11-12-02

Mot de la fin

Dans cet article, nous avons vu comment créer des cartes thermiques en Python. Nous avons abordé les principales bibliothèques – Matplotlib, Seaborn et Plotly. Nous avons également vu comment Seaborn et Plotly fournissent des abstractions simplifiées par rapport à Matplotlib. L’une des utilisations essentielles des cartes thermiques est le suivi de l’utilisation de vos sites web par les internautes.

Découvrez ensuite les outils de cartes thermiques qui vous indiquent où vos utilisateurs cliquent.