[Python] Que faites-vous avec la visualisation de 4 variables ou plus?

Objectif de cet article

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()

image.png

Ç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]" ".

image01.png

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!

Dessiner un diagramme de Sankey à partir d'un bloc de données

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.

image.png

Commentaire

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()

image.png

c'est tout!

Liste de codes

Afficher la liste
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()

Épilogue

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.

Postscript

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()

plot03.gif

C'est incroyable de pouvoir déplacer l'ordre des variables et l'ordre des éléments! !!

c'est tout!

référence

Plotly:Sankey Diagram in Python Plotly:basic-parallel-category-diagram-with-plotlyexpress CS109:A Titanic Probability

Recommended Posts

[Python] Que faites-vous avec la visualisation de 4 variables ou plus?
Python | Ce que vous pouvez faire avec Python
Ce que vous ne pouvez pas faire avec hstack ou vstack avec dstack
Que faire si vous ne pouvez pas installer pyaudio avec pip #Python
Ce que vous pouvez faire avec l'API vol.1
Recommandation d'Altair! Visualisation des données avec Python
Ce que vous pouvez faire avec des compétences en programmation
Que faire si vous ne parvenez pas à envoyer un e-mail à Yahoo avec Python.
Que comparez-vous avec Python et ==?
Qu'utilisez-vous lorsque vous testez avec Python?
Vous devenez ingénieur en 100 jours - Jour 35 - Python - Ce que vous pouvez faire avec Python
Que faire si vous obtenez une erreur lors de l'installation de python avec pyenv
Faites Houdini avec Python3! !! !!
Visualisation de la logistique avec Python
Liens pour faire ce que vous voulez avec Sublime Text
Ce que vous pouvez et ne pouvez pas faire avec Tensorflow 2.x
Combien connaissez-vous les bases de Python?
Que faire si vous obtenez une erreur OpenSSL lors de l'installation de Python 2 avec pyenv
Que faire si vous exécutez python sur IntelliJ et quittez avec une erreur
[AWS] Que faire lorsque vous souhaitez piper avec Lambda
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Notez ce que vous voulez faire à l'avenir avec Razpai
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Que faire si vous ne pouvez pas trier les fichiers avec des indices
[Python] Extrayez des données texte à partir de données XML de 10 Go ou plus.
Notez ce que vous avez fait pour utiliser Flycheck avec Python
Que faire si vous obtenez moins zéro en Python
Que faire si vous obtenez une erreur de décodage Unicode avec l'installation de pip
[Parlez de la structure de dessin de plotly] Visualisation dynamique avec plotly [python]
Que faire si vous ne pouvez pas construire un projet avec Maven
Que dois-je faire avec la structure de répertoires Python après tout?
[Python] Qu'est-ce qu'une instruction with?
Que faire avec l'installation de Magics
[ns3-30] Activer la visualisation des scripts Python
Ravi de vous rencontrer avec python
Avez-vous besoin de Python re.compile?
Exécutez mruby avec Python ou Blender
Comment utiliser correctement le package de visualisation Python
Premiers pas avec Python Bases de Python
Pour faire une récursion avec Python2
Jeu de vie avec Python! (Le jeu de la vie de Conway)
10 fonctions du "langage avec batterie" python
Faisons du scraping d'images avec Python
Visualisez facilement vos données avec Python seaborn.
Jusqu'à ce que Python fonctionne sur Apache
Analyse de données à partir de python (visualisation de données 1)
Coexistence de Python2 et 3 avec CircleCI (1.0)
[Python] Hériter d'une classe avec des variables de classe
Analyse de données à partir de python (visualisation de données 2)
Etude de base d'OpenCV avec Python
Que faire si vous obtenez un avertissement "Mauvaise plateforme Python" lors de l'utilisation de Python avec l'EDI NetBeans
Que faire lorsque vous vous fâchez avec "Value Error: unknown local: UTF-8" dans python manage.py syncdb
Que faire si l'option -f de grep ne fonctionne pas
Combien de types de Python avez-vous dans votre Windows 10? J'avais 5 types.
Que faire si PDO n'est pas trouvé dans Laravel ou CakePHP
Que faire si ipython et python démarrent avec des versions différentes
Que faire si vous vous perdez dans la référence de fichier avec FileNotFoundError
C'est plus récent, mais je voulais essayer le calcul de l'IMC avec python.
Que faire si le serveur ne démarre pas avec python manage.py runserver