Que faire si vous souhaitez voir les relations de plusieurs variables à la fois dans une analyse de données?
Je pense que l'intrigue par paires est typique,Plus de pack! Je me demandais si je pourrais le mettre ensemble récemment, **Sankey Diagram**Je le savais, alors je l'ai dessiné.
** Addenda: **
<font color = "red"> Veuillez d'abord lire la partie supplémentaire à la fin de l'article. </ Font>
# Comment utiliser le diagramme Plotly Sankey
#### **`Il semble que vous puissiez utiliser Plotly,Tout d'abord[Site officiel](https://plot.ly/python/sankey-diagram/)Copiez l'exemple de code de,Je vais vérifier si ça marche. `**
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()
Ça a marché! Il est bon de voir les détails de cette partie lorsque vous passez la souris!
Le code est long et difficile comparé à matplotlib et seaborn,Les parties importantes sont:.
```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]
Par exemple, dans le diagramme Sankey Diagram ci-dessus,
source: A1, target: B2, 2.00 '' correspond à la partie orange des trois listes dans le lien ci-dessous.
Cela signifie que "seulement" "2" "découle de" "label [0]" "vers" "label [3]" ".
Si vous pouvez créer une liste qui spécifie les points de début et de fin d'un nœud et la quantité de flux qui le traverse, vous pouvez dessiner un diagramme de Sankey!
Alors, commençons à créer un diagramme de Sankey à partir du bloc de données du sujet principal.
Pour montrer les résultats en premier, cette fois, j'ai créé la figure suivante en utilisant les données du Titanic.
Chargez la bibliothèque.
import numpy as np
import pandas as pd
import plotly.graph_objects as go
Je téléchargerai les données.
!wget https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv
Lisez les données, cette fois, seules les variables catégorielles et les variables de valeur entière sont affichées, donc affinez les noms des variables.
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)
Créez ensuite une `` liste_étiquettes ''.
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)
Créez trois listes d'informations sur les liens.
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)
Enfin,
source_list et `` target_list
doivent être spécifiés par index, donc
label_Se référer à la liste pour convertir.
```python
source_list = [label_list.index(si) for si in source_list]
target_list = [label_list.index(ti) for ti in target_list]
Tout ce que vous avez à faire maintenant est d'exécuter le même code que l'exemple.
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()
c'est tout!
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()
En fait, j'ai remarqué quand j'ai écrit le code moi-même, mais cette figure ne montre que la relation entre les variables avant et après une certaine variable.
Dans l'exemple ci-dessus, même si vous connaissez la relation entre
Survived et `` Pclass
et
Pclass et `` Sex
Je ne connais pas Survived '' et `` Sex ''. Il semble que jusqu'à 3 variables peuvent être exprimées par la couleur, etc., mais cela semble impossible si cela devient plus que cela.
(Oh, ce n'est pas une visualisation de 4 dimensions ou plus ...?)
Si vous connaissez un meilleur moyen, veuillez nous le faire savoir dans les commentaires.
J'ai fait beaucoup de choses ci-dessus, mais si je lisais la documentation, il y avait un moyen plus simple.
fig = px.parallel_categories(df, dimensions=cate_list, color='Survived')
fig.show()
C'est incroyable de pouvoir déplacer l'ordre des variables et l'ordre des éléments! !!
c'est tout!
Plotly:Sankey Diagram in Python Plotly:basic-parallel-category-diagram-with-plotlyexpress CS109:A Titanic Probability
Recommended Posts