Seaborn für die Datenvisualisierung | Ein Anfängerleitfaden für Seaborn

Inhalt

Dieser Artikel wurde im Rahmen der Data Science Blogathon.

Einführung

Eine Schritt-für-Schritt-Anleitung für die ersten Schritte mit Seaborn!!

Si matplotlib „versuche, einfache Dinge leicht und schwierige Dinge möglich zu machen“, seaborn versucht auch, eine gut definierte Reihe schwieriger Dinge einfach zu machen.

Meeresfrische:

Die größten Stärken von Seaborn sind die vielfältigen Plotfunktionen. Es ermöglicht uns, komplizierte Grafiken sogar in einer einzigen Codezeile zu erstellen!!

In diesem Tutorial, Wir werden drei Bibliotheken verwenden, um die Arbeit zu erledigen: Matplotlib, Seaborn, Pandas. Wenn Sie ein absoluter Anfänger in Python sind, Ich schlage vor, Sie beginnen und machen sich ein wenig mit Matplotlib und Pandas vertraut.

Wenn du dieses Tutorial genau befolgst, Mit diesen drei Bibliotheken können Sie wunderschöne Grafiken erstellen. Dann, Sie können meinen Code als Vorlage für zukünftige Visualisierungsaufgaben in der Zukunft verwenden.

Beginnen wir unsere Reise auf See mit dem berühmten Pokémon-Datensatz. Bevor es losgeht, Ich empfehle Ihnen dringend, für jedes Diagramm eigene Basiscodes zu schreiben und mit Diagrammen zu experimentieren.

Sie finden den Pokémon-Datensatz bei Kaggle. Aber trotzdem, um Ihre Reise zu erleichtern, Ich habe diese Version des Datensatzes gekürzt und bereinigt.

Hier können Sie den Datensatz herunterladen: https://github.com/shelvi31/Seaborn-Experiments

Mein Supersparer: Ich möchte eine Ressource erwähnen, die immer meine super Ersparnisse ist, wenn ich feststecke. https://python-graph-gallery.com/ .

Lasst uns nun anfangen:

Wir beginnen mit dem Importieren der erforderlichen Bibliotheken:

#Bibliotheken importieren
Pandas als pd importieren
import matplotlib.pyplot als plt
Seegeboren als sns importieren

Lesen Sie die CSV-Datei

data = pd.read_csv(„pokemon.csv“,Kodierung = 'unicode_escape')

Ich habe den utf8-Codec-Fehler geändert, indem ich im Befehl read_csv ein anderes Codec-Paket definiert habe ().

Unsere Daten sehen so aus....

daten.kopf()

Produktion:

1ntc2mvcn4dz7uexdgfr1og-5583287Produktion

Der Name der Spalten vereinfacht ihren Zweck nicht eindeutig. Es ist wichtig, den Datensatz zu kennen, bevor Sie daran arbeiten.

Hier ist die vereinfachte Beschreibung des Datensatzes für Sie.

Dieser Datensatz enthält 150 Pokémon, es geht um pokemonspiele (KEINE Pokémon- oder Pokémon-Go-Karten).

In diesem Datensatz, haben 150 Reihen und 13 Säulen.

Beschreibung der Spalten:

# ID für jedes Pokémon
# Name: Name jedes Pokémon
# Kerl 1: jedes pokemon hat einen typ, das bestimmt die schwäche / Widerstand gegen Angriffe
# Kerl 2: Einige Pokémon sind dual und haben 2
# Gesamt: Summe aller Statistiken, die danach kommen, eine allgemeine Anleitung, wie stark ein Pokémon ist
# PS: Trefferpunkte, oder Gesundheit, definiert, wie viel Schaden ein Pokémon nehmen kann, bevor es ohnmächtig wird
# Attacke: die Basis-Mod für normale Angriffe (zum Beispiel, Kratzen, Schlagen)
# Verteidigen: Grundschadensresistenz gegen normale Angriffe.
# SP Atk: Spezialangriff, der Basismodifikator für Spezialangriffe (zum Beispiel, Feuer Explosion, Blasenstrahl)
# SP-Def: Grundschadensresistenz gegen Spezialangriffe
# Geschwindigkeit: bestimmt, welches Pokémon in jeder Runde zuerst angreift.
# Bühne: Generationsnummer
#Legendär: wahr, wenn es ein legendäres pokemon ist, falsch ja nein

Ich habe die Spaltennamen umbenannt, um unsere Handlung besser zu verstehen und um Klarheit zu schaffen. Obwohl es optional ist, Ich empfehle Ihnen dringend, dies zu tun, um jede Verwechslungsgefahr auszuschließen.

data.rename(Spalten = {"#":"Nein.","Typ 1":"Pokemon_Typ","Typ 2":”PokemonTyp2",'Gesamt':'Summe des Angriffs',"HP":"Trefferpunkte","Attacke" : „Angriffsstärke“, "Verteidigung":„Verteidigungsstärke“,”Sp. Atk”:„Special Attack Stenth“,”Sp. Def“:„Besondere Verteidigungsstärke“,"Bühne":"Generation"}, inplace = wahr)daten.kopf()

Mein Ausgang sieht jetzt aus:

1q7lk5dweusqe-swaeoi9ba-7965674Besser!

Beginnen wir mit der Visualisierung mit den einfachen, der Verteilungsgraph.

Verteilungsdiagramme:

EIN Verteilungsdiagramm zeige ein Verteilung und des Bereichs eines Satzes numerischer Werte, die gegen eine Abmessungen. Das Histogramme ermöglichen es Ihnen, die Verteilungen numerischer Variablen darzustellen.

Hätte gebrauchen können „Daten.his (Feigengröße = (12,10), Behälter = 20)“ , da aber nicht alle Spalten dieses Datenbank haben numerische Werte. Deswegen, Ich muss einzelne Verteilungsdiagramme zeichnen.

plt.figur(Feigengröße=(4,3))
sns.distplot(x=Daten[„Summe des Angriffs“],Farbe=”Orange”,wobei = wahr,Teppich = wahr);
plt.zeigen()

Ausgabe des Verteilungsdiagramms: Pokémon-Angriffssumme

Die Seaborn-Plotfunktion zeichnet ein Histogramm mit einer Dichtekurve. Mit der Option kde = ”False” können wir die Dichte eliminieren. Überprüfen Sie das Vorhandensein von Teppichen mit rug = ”True”.

Es gibt viele alternative Möglichkeiten, ein Histogramm in Python zu zeichnen:

plt.figur(Feigengröße=(3,3))
sns.histplot(x=Daten[„Summe des Angriffs“],Farbe = ”Grün”);
plt.zeigen()
Ergebnis: Summe der Pokémon-Angriffe

Ein anderer Weg ist: mit plt.hist ()

plt.figur(Feigengröße=(3,3))
plt.hist(x=Daten["Summe des Angriffs"],Farbe="rot",Behälter=20);
plt.zeigen()
Abfahrt: Histogramm, Matplotlib

Deswegen, Es gibt viele Möglichkeiten, Verteilungen grafisch darzustellen. Alle Funktionen pyplot.hist, seaborn.coOutuntplot Ja seaborn.displot Sie dienen als Wrapper für ein Matplotlib-Balkendiagramm und können verwendet werden, wenn das manuelle Zeichnen eines solchen Balkendiagramms als zu umständlich angesehen wird.

  • Für diskrete Variablen, ein seaborn.countplot es ist praktischer.
  • Für stetige Variablen: pyplot.hist Ö seaborn.distplot Sie sind gebraucht.

Gemeinsame Verteilungsflächen:

Gemeinsame Verteilungsdiagramme kombinieren Informationen aus Streudiagrammen und Histogrammen, um uns detaillierte Informationen für bivariate Verteilungen zu geben..

sns.jointplot(x=Daten[„Summe des Angriffs“],y = Daten[„Verteidigungsstärke“],Farbe = "Rot");
1oaifcmdjkydf4jc89dfmiw-1929873

Abfahrt: Gemeinschaftsgrundstück

Dichtediagramme:

Dichtediagramme zeigen die Verteilung zwischen zwei Variablen.

sns.kdeplot(x=Daten[„Summe des Angriffs“],y = Daten[„Verteidigungsstärke“])
plt.zeigen()
13rfvxuah1m7x_etcoadunq-5218802Abfahrt: Dichtediagramm

Balkengrafik

Balkendiagramme helfen uns, die Verteilungen kategorialer Variablen zu visualisieren: Countplot ist eine Art Balkendiagramm.

plt.figur(Feigengröße=(10,6));
sns.countplot(x=data.Pokemon_Type,palette=pkmn_type_colors);
plt.zeigen()
1lc4mpdykjuhs8gx4i7j4na-9020691Abfahrt: Balkengrafik

Heatmap

Heatmap hilft uns, Matrixdaten in Form von Hot- und Cold-Spots zu visualisieren. Warme Farben kennzeichneten die Abschnitte mit der meisten Besucherinteraktion.

plt.figur(Feigengröße=(8,6));
sns.heatmap(daten.korr());# Rotiere x-Labels mit Hilfe von matplotlib
plt.xticks(Drehung=-45);
1frw2vrtgip5479a0bfegog-1640678Abfahrt: Heatmap

Streudiagramm:

EIN Streudiagramm (auch bekannt als Dispersion Grafik, Streudiagramm) verwendet Punkte, um Werte für zwei verschiedene numerische Variablen darzustellen. Die Position jedes Punktes auf der horizontalen und vertikalen Achse gibt Werte für einen einzelnen Datenpunkt an.

Streudiagramm werden verwendet, um Beziehungen zwischen Variablen zu beobachten.

Ich habe die Angriffs- und Verteidigungsstatistiken unserer Pokémon mit Hilfe von Streudiagrammen verglichen.

1t7kwpsrtx-m2pz7tpcrc2a-628970Abfahrt: Streudiagramm

Seaborn hat keine Ausbreitungsdiagramm gewidmet, wir sehen also eine diagonale Linie (Regressionsgerade) hier standardmäßig.

Glücklicherweise, seaborn hilft uns, die Handlung zu ändern:

  • fit_reg = False wird verwendet, um die Regressionslinie zu entfernen
  • Farbton = ‚Bühne‘ Es wird verwendet, um Punkte für einen dritten Wert einzufärben Variable. Daher, ermöglicht es uns, die dritte Dimension von Informationen durch Farbe auszudrücken.

Hier habe ich die Pokémon-Evolutionsstufe als dritte Variable!!

#Optimieren mit Scatterplotsns.lmplot(x=’Angriffsstärke’, y=’Defensive Stärke’, Daten = Daten,
 fit_reg = Falsch, #Regressionsgerade löschen
 hue=”Generation”); #Trennung nach Pokémon-Generation
1khildisnqqzx7wqnlb8w3a-2590333Ergebnis: angepasstes Streudiagramm

Mehr von der Dichte fällt ins Schwarze 40-120, Ich werde die Achsengrenzen mit Hilfe von matplotlib ändern:

sns.lmplot(x=’Angriffsstärke’, y=’Defensive Stärke’, Daten = Daten,
fit_reg = Falsch, #Regressionsgerade löschen
hue=”Generation”); #Trennung gemäß pokemon generationplt.ylim(20,130);
plt.xlim(25,125);

Jetzt können wir eine bessere und fokussiertere Grafik sehen!!

1jndlxwrmufgwu3o4e7lrwg-5414401Ergebnis: bestes Streudiagramm

Box-Plot

Ein Boxplot wird verwendet, um Gruppen numerischer Daten durch ihre . darzustellen Quartile.

Das Boxplots Sie können auch Linien aufweisen, die von den Kästchen ausgehen, die die Variabilität außerhalb des oberes und unteres Quartil, daher die Begriffe Box-and-Whisker-Plot und Box-and-Whisker-Plot

Wir können die Spalte löschen „Angriffssumme“ da wir individuelle Statistiken haben. Wir können auch die Spalten entfernen „Generation“ Ja „Legendär“ weil sie nicht gegen die Statistik ankämpfen.

plt.figur(Feigengröße=(15,7));# DataFrame vorformatieren
stats_data = data.drop([„Summe des Angriffs“, 'Generation', „Legendär“], Achse=1);
 
# Neuer Boxplot mit stats_df
sns.boxplot(data=stats_data,
 showfliers=Falsch); #Ausreißer.set_style entfernen(„weißes Gitter“)
1eo6ldo0simjfsrnkj8bz7a-9034159Abfahrt: Box-Plot

Denken Sie daran, die Größe der Figur Bevor Sie das Diagramm zeichnen.

Violinrahmen

Jetzt werde ich die Handlung der Geige verfolgen.

Geigenplots sind Alternativen zu Boxplots. Verteilung anzeigen (durch die Dicke der Geige) statt nur zusammenfassende Statistiken.

Hier habe ich die Verteilung des Angriffs nach primärem Pokémon-Typ gezeigt

plt.figur(Feigengröße=(15,7));
sns.violinplot(x=data.Pokemon_Type, y = Daten[„Angriffsstärke“]);
1qnzsrsrsqmf1c9hro9vvjw-9594682Abfahrt: Violinhandlung

Wie du siehst, Drachentypen haben in der Regel höhere Angriffsstatistiken als Geistertypen, aber sie haben auch eine größere Variation.

Jetzt, Pokémon-Fans finden in dieser Handlung möglicherweise etwas ziemlich Erschütterndes: Die Farben sind absurd. Warum ist der Typ Grass rosa oder der Typ Wasser orange?? Das müssen wir sofort beheben!!

Glücklicherweise, Seaborn ermöglicht es uns, benutzerdefinierte Farbpaletten zu konfigurieren. Wir können einfach eine Bestellung erstellen Python-Liste hexadezimale Farbwerte.

Ich habe Bulbapedia verwendet, um ein neues zu erstellen Farbpalette.

# mit Bulbapedia eine neue Farbpalette erstellen:#Bulbapedia : https://bulbapedia.bulbagarden.net/wiki/Category:Type_color_templatespkmn_type_colors = ['#78C850', # Gras
 ‘#F08030’, # Feuer
 ‘#6890F0’, # Wasser
 ‘#A8B820’, # Insekt
 ‘#A8A878’, # Normal
 ‘#A040A0’, # Gift
 ‘#F8D030’, # Elektrisch
 ‘#E0C068’, # Boden
 '#EE99AC', # Fee
 ‘#C03028’, # Kampf
 ‘#F85888’, # Hellseher
 ‘#B8A038’, # Felsen
 '#705898', # Geist
 ‘#98D8D8’, # Eis
 ‘#7038F8’, # Drachen
 ]

Änderungen am Plot der Geige entsprechend der Farbe des Pokémon-Typs vornehmen:

plt.figur(Feigengröße=(15,7));
sns.violinplot(x=data.Pokemon_Type, 
 y = Daten[„Angriffsstärke“],
 Palette = pkmn_type_colors);
1-tvwskx4h42-98x_zjjnpq-2443527Ergebnis: Beste Violinhandlung 🙂

Schwarmplots

Wie du gesehen hast, Geigendiagramme eignen sich hervorragend zur Visualisierung von Verteilungen.

Aber trotzdem, da wir nur haben 150 Pokémon in unserem Datensatz, Vielleicht möchten wir nur jeden Punkt zeigen. Das ist, wo die Schwarmplot Komm herein. Diese Visualisierung zeigt jeden Punkt, während „appellieren“ die mit ähnlichen Werten.

plt.figur(Feigengröße=(12,5));
sns.swarmplot(x=data.Pokemon_Type,y = Daten[„Angriffsstärke“],palette=pkmn_type_colors);
1knf0pcuh9euqlto6qy353g-2332982Schwarmplot: Pokémon Typ Vs Attack Force

Das sieht gut aus, aber für bessere Bilder, Wir können diese beiden kombinieren! Schließlich, zeige die gleichen Informationen.

Überlappende Grafiken

plt.figur(Feigengröße=(10,10))sns.violinplot(x=data.Pokemon_Type, y = Daten[„Angriffsstärke“],
 inner=Keine, 
 Palette = pkmn_type_colors);sns.swarmplot(x="Pokemon_Type",
y=”Angriffsstärke”,
Daten = Daten,
Farbe=’schwarz’, #Punkte schwarz machen
Alpha=0,5);plt.titel(„Angriffsstärke nach Pokémon-Typ“);
19wpmqdoiwqqrzvx4paraxg-3042779Überlappende Grafiken

Punkte, die man beachten sollte:

inner = Keine: Entfernen Sie die Stäbe in den Geigen

alpha = 0.5: macht die Punkte leicht transparent: Denken Sie daran, dass der Alpha-Wert float sein muss, behalte es nicht an „“

Die Referenzen für die Farbe Navy finden Sie hier: https://python-graph-gallery.com/100-calling-a-color-with-seaborn/

Faktordiagramme

Faktordiagramme erleichtern die Trennung von Diagrammen nach kategorialen Klassen.

plt.figur(Feigengröße=(5,15))
factplot= sns.factorplot(x="Pokemon_Typ",y ="Angriffsstärke",Daten = Daten,Farbton="Generation",col="Generation",Art="Schwarm");factplot.set_xticklabels(Drehung=-45)
plt.zeigen()
14qb1b2gfb2csf8dbhbsyxg-8854765Faktordiagramm: für separate kategoriale Klassen

Schnelle Notizen:

  • plt.xticks (Drehung = -45): es funktioniert nicht, weil es nur den letzten Graphen dreht
  • Muss verwendet werden: set_xticklabels
Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.

Datenlautsprecher