Erstellen Sie eine ClusterMap in Seaborn

Salman Mehmood 15 Februar 2024
  1. Erstellen Sie eine Clustermap mit der clustermap()-Methode in Seaborn
  2. Fügen Sie die Optionen row_colors und col_colors in der Seaborn Clustermap hinzu
Erstellen Sie eine ClusterMap in Seaborn

In dieser Demonstration lernen wir, was eine Clusterkarte ist und wie wir sie für mehrere Optionen erstellen und verwenden können.

Erstellen Sie eine Clustermap mit der clustermap()-Methode in Seaborn

Die Seaborn-Clusterkarte ist ein Matrixplot, in dem Sie Ihre Matrixentitäten durch eine Heatmap visualisieren können, aber wir erhalten auch eine Clusterung Ihrer Zeilen und Spalten.

Lassen Sie uns einige erforderliche Bibliotheken importieren.

Code:

import seaborn as sb
import matplotlib.pyplot as plot
import numpy as np
import pandas as pd

Jetzt werden wir einige Daten über vier hypothetische Studenten erstellen. Wir werden ihre Namen, Lernstunden, Testergebnisse und Straßenadressen haben.

Code:

TOY_DATA_DICT = {
    "Name": ["Andrew", "Victor", "John", "Sarah"],
    "study_hours": [11, 25, 22, 14],
    "Score": [11, 30, 28, 19],
    "Street_Address": [20, 30, 21, 12],
}

Diese Spielzeugdaten befinden sich also in einem Wörterbuch, aber wir konvertieren dies in einen Pandas-Datenrahmen und setzen den Index auf den Namen des Schülers.

Code:

TOY_DATA = pd.DataFrame(TOY_DATA_DICT)
TOY_DATA.set_index("Name", inplace=True)

TOY_DATA

Wir haben also vier hypothetische Studenten und drei verschiedene Datenspalten. Wie wir hier feststellen können, haben wir diesen Datensatz absichtlich so gestaltet, dass unsere Studienstunden und Punktzahl für jeden Schüler ziemlich ähnlich sind.

Ausgang:

Seaborn Clustermap - Ausgabe 1

Lassen Sie uns mit der Methode clustermap() eine Clusterkarte für diesen Datenrahmen erstellen. Wir müssen nur den gesamten Datenrahmen namens TOY_DATA übergeben.

Wir verwenden ein weiteres Schlüsselwortargument, annot, und setzen es auf True. Dieses Argument ermöglicht es uns, die tatsächlichen Zahlen zu sehen, die auf dem Heatmap-Teil der Clusterkarte ausgedruckt sind.

Code:

import seaborn as sb
import matplotlib.pyplot as plot
import numpy as np
import pandas as pd


TOY_DATA_DICT = {
    "Name": ["Andrew", "Victor", "John", "Sarah"],
    "study_hours": [11, 25, 22, 14],
    "Score": [11, 30, 28, 19],
    "Street_Address": [20, 30, 21, 12],
}


TOY_DATA = pd.DataFrame(TOY_DATA_DICT)
TOY_DATA.set_index("Name", inplace=True)

TOY_DATA

sb.clustermap(TOY_DATA, figsize=(6, 4), annot=True)

plot.show()

Wir haben niedrigere Werte, die dunklere Farben erhalten, und höhere Werte, die hellere Farben erhalten, und wir können auch feststellen, dass wir links und oben auf dieser Heatmap Linien haben. Diese Linien werden Dendrogramme genannt, und so hat Seaborn unsere Daten gruppiert.

Wir können sehen, dass unsere Studienstunden und Ergebnis zusammen gruppiert wurden, was uns den Abstand von den Lernstunden zum Ergebnis anzeigt. Und da ihr Abstand am kleinsten ist, werden sie zuerst im Dendrogramm zusammengefasst, und dann fügen wir street_address hinzu, was diesen beiden anderen Spalten weniger ähnlich ist.

Wir können sagen, dass dieses Dendrogramm uns ein Gefühl dafür gibt, wie weit jede dieser verschiedenen Spalten voneinander entfernt ist, und dasselbe passiert in den Zeilen. Sie werden auch feststellen, dass Seaborn unsere Zeilen und Spalten neu geordnet hat.

Ausgang:

Seaborn Clustermap - Ausgabe 2

Sehen wir uns die Clusterkarte auf einem erweiterten Datensatz an. Wir laden einige Daten aus der Seaborn-Bibliothek, und diese Daten beziehen sich auf Pinguine.

Code:

PENGUINS = sb.load_dataset("penguins").dropna()
PENGUINS.head()

Ausgang:

Seaborn Clustermap - Ausgabe 3

Wir haben ungefähr 300 verschiedene Pinguine in diesem Datensatz, und wir können die Form der Daten anhand des Attributs Form erkennen.

Code:

print(PENGUINS.shape)

Ausgang:

Seaborn Clustermap - Ausgabe 4

Lassen Sie uns eine Clusterkarte für diese Daten erstellen. Die Daten, die wir an eine dieser Clusterkarten übergeben, sollten numerisch sein, daher müssen wir sie nur auf die numerischen Spalten dieses Datenrahmens herunterfiltern.

Seaborn Clustermap - Ausgabe 5

Lassen Sie uns eine erweiterte Clusterkarte erstellen.

import seaborn as sb
import matplotlib.pyplot as plot
import numpy as np
import pandas as pd


PENGUINS = sb.load_dataset("penguins").dropna()
PENGUINS.head()
print(PENGUINS.shape)

NUMERICAL_COLS = PENGUINS.columns[2:6]
print(NUMERICAL_COLS)

sb.clustermap(PENGUINS[NUMERICAL_COLS], figsize=(6, 6))
plot.show()

Wenn wir diesen Code ausführen, sehen wir sofort, dass wir drei Spalten mit sehr dunklen Werten und nur eine Spalte mit sehr hellen Werten haben. Das liegt daran, dass wir für diese verschiedenen Spalten unterschiedliche Skalen haben.

Ausgang:

Seaborn Clustermap - Ausgabe 6

Drei Spalten haben kleinere Werte und eine Spalte, body_mass_g, hat sehr große Werte. Dies kann jedoch zu einer Art wenig hilfreicher Heatmap führen, daher müssen wir unsere Daten skalieren.

Es gibt einige Möglichkeiten, unsere Daten innerhalb der Clusterkarte zu skalieren, aber eine einfache Möglichkeit ist die Verwendung dieses Arguments namens standard_scale. Der Wert für dieses Argument ist entweder 0, wenn wir jede Zeile skalieren wollen, oder 1, wenn wir jede Spalte skalieren wollen.

Code:

import seaborn as sb
import matplotlib.pyplot as plot
import numpy as np
import pandas as pd


PENGUINS = sb.load_dataset("penguins").dropna()
PENGUINS.head()
print(PENGUINS.shape)

NUMERICAL_COLS = PENGUINS.columns[2:6]
print(NUMERICAL_COLS)

sb.clustermap(PENGUINS[NUMERICAL_COLS], figsize=(6, 6), standard_scale=1)
plot.show()

Jetzt werden alle Werte zwischen 0 und 1 angezeigt. Es hilft uns, jede dieser Spalten auf der gleichen Skala zu platzieren, um sie einfacher vergleichen zu können.

Wir können auch sehen, dass all die verschiedenen Pinguine gruppiert wurden, was uns helfen könnte, herauszufinden, welche Pinguine einander am ähnlichsten sind.

Ausgang:

Seaborn Clustermap - Ausgabe 7

In der Seaborn-Clusterkarte können wir sowohl die Verknüpfung als auch die Matrix ändern, die zur Beurteilung der Entfernungen verwendet werden. Versuchen wir also, die Verknüpfung mit dem Argument Methode zu ändern. Wir können den String als Wert namens single übergeben, was eine minimale Verknüpfung ist.

Code:

import seaborn as sb
import matplotlib.pyplot as plot
import numpy as np
import pandas as pd


PENGUINS = sb.load_dataset("penguins").dropna()
PENGUINS.head()
print(PENGUINS.shape)

NUMERICAL_COLS = PENGUINS.columns[2:6]
print(NUMERICAL_COLS)

sb.clustermap(
    PENGUINS[NUMERICAL_COLS], figsize=(10, 9), standard_scale=1, method="single"
)
plot.show()

Sie werden feststellen, dass sich unser Dendrogramm leicht unterscheidet, wenn wir eine einzelne Verknüpfung verwenden.

Ausgang:

Seaborn Clustermap - Ausgabe 8

Fügen Sie die Optionen row_colors und col_colors in der Seaborn Clustermap hinzu

Es gibt einige zusätzliche Optionen, die wir beim Erstellen unserer Clusterkarte verwenden können. Die zusätzlichen Optionen bei der Seaborn-Clusterkarte heißen row_colors oder col_colors.

Jetzt weisen wir jede Farbe zu und ziehen diese Daten aus unserer Pinguin-Spalte Spezies (der kategorialen Spalte).

Code:

import seaborn as sb
import matplotlib.pyplot as plot
import numpy as np
import pandas as pd


PENGUINS = sb.load_dataset("penguins").dropna()
PENGUINS.head()

NUMERICAL_COLS = PENGUINS.columns[2:6]

SPECIES_COLORS = PENGUINS.species.map(
    {"Adelie": "blue", "Chinstrap": "red", "Gentoo": "green"}
)

sb.clustermap(
    PENGUINS[NUMERICAL_COLS],
    figsize=(10, 9),
    standard_scale=1,
    row_colors=SPECIES_COLORS,
)
plot.show()

Wir können für jede Reihe eine Flagge mit den verschiedenen Arten von Pinguinarten sehen.

Ausgang:

Seaborn Clustermap - Ausgabe 9

Seaborn nutzt scipy oder fast Cluster im Backend, wenn Sie also mehr über diese verfügbaren Verknüpfungsoptionen erfahren möchten, können Sie sich die scipy Dokumentation ansehen.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn