Was ist, wenn Sie die Beziehungen zwischen vielen Variablen gleichzeitig in einer Datenanalyse sehen möchten?
Ich denke, Paarplot ist typisch,Mehr Pack! Ich habe mich gefragt, ob ich es kürzlich zusammenstellen könnte, **Sankey Diagram**Ich wusste das, also habe ich es gezeichnet.
** Nachtrag: **
<font color = "red"> Bitte lesen Sie zuerst den zusätzlichen Teil am Ende des Artikels. </ Font>
# Verwendung von Plotly Sankey Diagram
#### **`Wenn Sie Plotly verwenden, können Sie es aufrufen.,Als allererstes[Offizielle Seite](https://plot.ly/python/sankey-diagram/)Kopieren Sie den Beispielcode von,Ich werde prüfen, ob es funktioniert. `**
import plotly.graph_objects as go
fig = go.Figure(data=[go.Sankey(
node = dict(
pad = 15,
thickness = 20,
line = dict(color = "black", width = 0.5),
label = ["A1", "A2", "B1", "B2", "C1", "C2"],
color = "blue"
),
link = dict(
source = [0, 1, 0, 2, 3, 3], # indices correspond to labels, eg A1, A2, A2, B1, ...
target = [2, 3, 3, 4, 4, 5],
value = [8, 4, 2, 8, 4, 2]
))])
fig.update_layout(title_text="Basic Sankey Diagram", font_size=10)
fig.show()
Es funktionierte! Es ist gut, die Details dieses Teils zu sehen, wenn Sie mit der Maus darüber fahren!
Der Code ist lang und schwierig im Vergleich zu Matplotlib und Seaborn,Die wichtigen Teile sind:.
```python
label = ["A1", "A2", "B1", "B2", "C1", "C2"],
source = [0, 1, 0, 2, 3, 3],
target = [2, 3, 3, 4, 4, 5],
value = [8, 4, 2, 8, 4, 2]
Zum Beispiel entspricht im obigen Sankey-Diagramm "Quelle: A1, Ziel: B2, 2.00" dem orangefarbenen Teil der drei Listen im folgenden Link. Dies bedeutet, dass "nur" 2 "von" Label [0] "zu" Label [3] "fließt.
Wenn Sie eine Liste erstellen können, die den Start- und Endpunkt eines Knotens und die Menge des durch ihn fließenden Flusses angibt, können Sie ein Sankey-Diagramm zeichnen!
Beginnen wir also mit der Erstellung des Sankey-Diagramms aus dem Datenrahmen des Hauptthemas.
Um die Ergebnisse zuerst zu zeigen, habe ich diesmal die folgende Abbildung mit den Daten der Titanic erstellt.
Laden Sie die Bibliothek.
import numpy as np
import pandas as pd
import plotly.graph_objects as go
Ich werde die Daten herunterladen.
!wget https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv
Lesen Sie die Daten, diesmal werden nur die Kategorievariablen und Ganzzahlwertvariablen angezeigt. Grenzen Sie daher die Variablennamen ein.
filename = "/content/titanic.csv"
df = pd.read_csv(filename, encoding='utf-8')
cate_list = ["Survived", "Pclass", "Sex", "Siblings/Spouses Aboard", "Parents/Children Aboard"]
n = len(cate_list)
Dann erstellen Sie eine `` `label_list```.
label_list = []
source_list = []
target_list = []
value_list = []
for cate in cate_list:
tmp_label_list=[]
for v in df[cate].unique():
lab = "{0}={1}".format(cate, v)
tmp_label_list.append(lab)
tmp_label_list.sort()
label_list.extend(tmp_label_list)
Erstellen Sie drei Listen mit Linkinformationen.
for i in range(n-1):
source_cate = cate_list[i]
target_cate = cate_list[i+1]
for sc in df[source_cate].unique():
for tc in df[target_cate].unique():
v = sum((df[source_cate]==sc) & (df[target_cate]==tc))
source_lab = "{0}={1}".format(source_cate, sc)
target_lab = "{0}={1}".format(target_cate, tc)
source_list.append(source_lab)
target_list.append(target_lab)
value_list.append(v)
Schließlich müssen `source_list``` und`
target_list``` durch den Index angegeben werden, also
label_Siehe Liste zum Konvertieren.
```python
source_list = [label_list.index(si) for si in source_list]
target_list = [label_list.index(ti) for ti in target_list]
Jetzt müssen Sie nur noch denselben Code wie das Beispiel ausführen.
fig = go.Figure(data=[go.Sankey(
node = dict(
pad = 15,
thickness = 20,
line = dict(color = "black", width = 0.5),
label = label_list,
color = "blue"
),
link = dict(
source = source_list,
target = target_list,
value = value_list
))])
fig.update_layout(title_text="Basic Sankey Diagram", font_size=10)
fig.show()
das ist alles!
import numpy as np
import pandas as pd
!wget https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv
filename = "/content/titanic.csv"
df = pd.read_csv(filename, encoding='utf-8')
cate_list = ["Survived", "Pclass", "Sex", "Siblings/Spouses Aboard", "Parents/Children Aboard"]
n = len(cate_list)
label_list = []
source_list = []
target_list = []
value_list = []
for cate in cate_list:
tmp_label_list=[]
for v in df[cate].unique():
lab = "{0}={1}".format(cate, v)
tmp_label_list.append(lab)
tmp_label_list.sort()
label_list.extend(tmp_label_list)
for i in range(n-1):
source_cate = cate_list[i]
target_cate = cate_list[i+1]
for sc in df[source_cate].unique():
for tc in df[target_cate].unique():
v = sum((df[source_cate]==sc) & (df[target_cate]==tc))
source_lab = "{0}={1}".format(source_cate, sc)
target_lab = "{0}={1}".format(target_cate, tc)
source_list.append(source_lab)
target_list.append(target_lab)
value_list.append(v)
source_list = [label_list.index(si) for si in source_list]
target_list = [label_list.index(ti) for ti in target_list]
fig = go.Figure(data=[go.Sankey(
node = dict(
pad = 15,
thickness = 20,
line = dict(color = "black", width = 0.5),
label = label_list,
color = "blue"
),
link = dict(
source = source_list,
target = target_list,
value = value_list
))])
fig.update_layout(title_text="Basic Sankey Diagram", font_size=10)
fig.show()
Eigentlich habe ich bemerkt, als ich den Code selbst geschrieben habe, aber diese Abbildung zeigt nur die Beziehung zwischen den Variablen vor und nach einer bestimmten Variablen.
Im obigen Beispiel, auch wenn Sie die Beziehung zwischen Survived``` und
Pclass und `` `Pclass
und
Sex kennen Ich kenne Survived
und `` `Sex``` nicht. Es scheint, dass bis zu 3 Variablen durch Farbe usw. ausgedrückt werden können, aber es scheint unmöglich, wenn es mehr wird.
(Oh, das ist keine Visualisierung von 4 Dimensionen oder mehr ...?)
Wenn Sie einen besseren Weg kennen, teilen Sie uns dies bitte in den Kommentaren mit.
Ich habe oben viel getan, aber wenn ich die Dokumentation gelesen habe, gab es einen einfacheren Weg.
fig = px.parallel_categories(df, dimensions=cate_list, color='Survived')
fig.show()
Es ist erstaunlich, die Reihenfolge der Variablen und die Reihenfolge der Elemente verschieben zu können! !!
das ist alles!
Plotly:Sankey Diagram in Python Plotly:basic-parallel-category-diagram-with-plotlyexpress CS109:A Titanic Probability