Verwenden von Streudiagrammen zur Visualisierung von Daten

Hallo Habr! Ich präsentiere Ihnen die Übersetzung des Artikels „Alles, was Sie über Streudiagramme für die Datenvisualisierung wissen müssen“ von George Seif.

Wenn Sie sich mit der Analyse und Visualisierung von Daten beschäftigen, müssen Sie sich höchstwahrscheinlich mit Streudiagrammen befassen. Trotz seiner Einfachheit sind Streudiagramme ein leistungsstarkes Werkzeug zur Visualisierung von Daten. Durch die Manipulation von Farben, Größen und Formen kann die Flexibilität und Repräsentativität von Streudiagrammen sichergestellt werden.

In diesem Artikel erfahren Sie fast alles, was Sie über die Datenvisualisierung mithilfe von Streudiagrammen wissen müssen. Wir werden versuchen, alle notwendigen Parameter für ihre Verwendung im Python-Code zu analysieren. Sie können auch einige praktische Tricks finden.

Regressionsgebäude


Selbst die primitivste Verwendung eines Streudiagramms gibt bereits einen fairen Überblick über unsere Daten. In Abbildung 1 sehen wir bereits Inseln mit kombinierten Daten und können Ausreißer schnell identifizieren.

Bild
Abbildung 1



Geeignete Regressionslinien vereinfachen visuell die Identifizierung von Punkten nahe der Mitte. In Abbildung 2 haben wir ein Liniendiagramm dargestellt. Es ist ziemlich leicht zu erkennen, dass in diesem Fall die lineare Funktion nicht repräsentativ ist, da viele Punkte ziemlich weit von der Linie entfernt sind.

Bild
Abbildung 2



Abbildung 3 verwendet ein Polynom der Ordnung 4 und sieht vielversprechender aus. Es scheint, dass wir zur Modellierung dieses Datensatzes definitiv ein Polynom der Ordnung 4 benötigen.

Bild
Abbildung 3



import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset('iris') # A regular scatter plot sns.regplot(x=df["sepal_length"], y=df["sepal_width"], fit_reg=False) plt.show() # A scatter plot with a linear regression fit: sns.regplot(x=df["sepal_length"], y=df["sepal_width"], fit_reg=True) plt.show() # A scatter plot with a polynomial regression fit: sns.regplot(x=df["sepal_length"], y=df["sepal_width"], fit_reg=True, order=4) plt.show() 

Farbe und Form der Punkte


Farbe und Form können verwendet werden, um die verschiedenen Kategorien in Ihrem Datensatz zu visualisieren. Farbe und Form sind optisch sehr klar. Wenn Sie sich ein Diagramm ansehen, in dem Punktgruppen unterschiedliche Farben unserer Formen haben, wird sofort klar, dass die Punkte zu verschiedenen Gruppen gehören.

Abbildung 4 zeigt die nach Farben gruppierten Klassen. Abbildung 5 zeigt die Klassen, getrennt nach Farbe und Form. In beiden Fällen ist die Gruppierung viel einfacher zu erkennen. Jetzt wissen wir, dass es einfach sein wird, die Setosa- Klasse zu trennen und worauf wir uns konzentrieren sollten. Es ist auch klar, dass ein einzelnes Liniendiagramm die grünen und orangefarbenen Punkte nicht trennen kann. Daher müssen wir etwas hinzufügen, um mehr Dimensionen anzuzeigen.

Die Wahl zwischen Farbe und Form wird bevorzugt. Persönlich finde ich die Farbe etwas klarer und intuitiver, aber die Wahl liegt immer bei Ihnen.

Bild
Abbildung 4



Bild
Abbildung 5



 import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset('iris') # Use the 'hue' argument to provide a factor variable sns.lmplot( x="sepal_length", y="sepal_width", data=df, fit_reg=False, hue='species', legend=False) plt.legend(loc='lower right') plt.show() sns.lmplot( x="sepal_length", y="sepal_width", data=df, fit_reg=False, hue='species', legend=False, markers=["o", "P", "D"]) plt.legend(loc='lower right') plt.show() 

Randhistogramm


Ein Beispiel für ein Diagramm mit Randhistogrammen ist in Abbildung 6 dargestellt. Randhistogramme sind oben und seitlich überlagert und repräsentieren die Verteilung der Punkte für Objekte entlang der Abszisse und der Ordinate. Diese kleine Ergänzung eignet sich hervorragend zur Ermittlung der Punktverteilung und der Ausreißer.

In Abbildung 6 sehen wir beispielsweise offensichtlich eine hohe Konzentration von Punkten um das 3.0-Markup. Und dank dieses Histogramms können Sie den Konzentrationsgrad bestimmen. Auf der rechten Seite sehen Sie, dass es um das 3.0-Markup mindestens dreimal so viele Punkte gibt wie für jeden anderen diskreten Bereich. Anhand des Histogramms auf der rechten Seite kann man auch deutlich erkennen, dass die offensichtlichen Ausreißer über der Marke von 3,75 liegen. Das obere Diagramm zeigt, dass die Verteilung der Punkte entlang der X-Achse mit Ausnahme der Ausreißer in der rechten Ecke gleichmäßiger ist.

Bild
Abbildung 6



 import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset('iris') sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='scatter') plt.show() 

Blasendiagramme


Bei Verwendung von Blasendiagrammen müssen mehrere Variablen zum Codieren von Informationen verwendet werden. Der neue Parameter für diese Art der Visualisierung ist die Größe. In Abbildung 7 zeigen wir die Menge der Pommes Frites nach Größe und Gewicht der Personen, die gegessen haben. Bitte beachten Sie, dass ein Streudiagramm nur ein zweidimensionales Visualisierungswerkzeug ist. Bei Verwendung von Blasendiagrammen können wir jedoch Informationen mit drei Dimensionen geschickt anzeigen.

Hier verwenden wir Farbe, Position und Größe , wobei die Position der Blasen die Größe und das Gewicht der Person bestimmt, die Farbe das Geschlecht bestimmt und die Größe durch die Menge der verzehrten Pommes bestimmt wird. Das Blasendiagramm ermöglicht es uns, alle Attribute bequem in einem Diagramm zu kombinieren, sodass wir große Informationen in zweidimensionaler Form sehen können.

Bild
Abbildung 7



 import numpy as np import matplotlib.pyplot as plt import matplotlib.patches as mpatches x = np.array([100, 105, 110, 124, 136, 155, 166, 177, 182, 196, 208, 230, 260, 294, 312]) y = np.array([54, 56, 60, 60, 60, 72, 62, 64, 66, 80, 82, 72, 67, 84, 74]) z = (x*y) / 60 for index, val in enumerate(z): if index < 10: color = 'g' else: color = 'r' plt.scatter(x[index], y[index], s=z[index]*5, alpha=0.5, c=color) red_patch = mpatches.Patch(color='red', label='Male') green_patch = mpatches.Patch(color='green', label='Female') plt.legend(handles=[green_patch, red_patch]) plt.title("French fries eaten vs height and weight") plt.xlabel("Weight (pounds)") plt.ylabel("Height (inches)") plt.show() 

Source: https://habr.com/ru/post/de440674/


All Articles