Impressions de toucher Dash, un outil de visualisation de données réalisé par python

introduction

Je travaille sur un projet de collecte de données en utilisant python et pandas. Quand je cherchais un outil de création de tableau de bord réalisé par python, je suis arrivé à dash. Ce qui suit est un résumé et un mémorandum des résultats obtenus lors de la vérification du tableau de bord et de la création de l'échantillon.

Qu'est-ce que Dash

outil de création d'applications Web sur mesure Basé sur Flask, écrit en python sera converti en React.js https://plot.ly/dash/

Il existe de nombreux composants qui affichent les données graphiquement. La caractéristique est que les données peuvent être facilement visualisées Exemple) https://dash-gallery.plotly.host/Portal/

Html Elements

app.layout = html.Div(children=[
  html.H1(id='elm1', className='hoge' children=[]),
  #Abréviation
  html.Div(id='elm2', className='hoge' children=[]),
]

Un composant html est fourni https://dash.plot.ly/dash-html-components Il est dessiné en le passant à app.layout.

Lorsque la structure est imbriquée, d'autres éléments enfants sont ajoutés aux enfants de l'élément enfant mis dans children = ... Cela semble compliqué sous la forme de, il peut donc être préférable de le composant en plusieurs parties

S'il s'agit d'un HTML partiellement statique


import dash_core_components as dcc

dcc.Markdown('''

#Titre
##Titre 2
Texte
''')  

Markdown peut également être décrit, il semble donc préférable d'utiliser ceci https://dash.plot.ly/dash-core-components/markdown

Graphs

https://dash-gallery.plotly.host/Portal/

dcc.Graph(
    figure={
        'data': [
             {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF'},
             {'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
        ],

Vous pouvez facilement créer un graphique à barres en passant une valeur au composant Graph

table

import pandas as pd

dataframe = pd.read_csv('url')

dash_table.DataTable(
    id='table',
    columns=[ {"name": i, "id": i} for i in dataframe.columns],
    hidden_columns=[],
    row_selectable="single",
    data=dataframe.to_dict('records'),
),

Vous pouvez créer une table à partir d'un dictionnaire ou d'un cadre de données pandas

Callback


@app.callback(
    Output('table', 'data'),
    [Input('region-dropdown', 'value')])
def update_table(value):
    return df.query('Nom de Ville== @value').to_dict('records')

Le rappel de l'interface utilisateur peut être déclenché en associant l'entrée et la sortie des parties de l'interface utilisateur.

Les pièces de l'interface utilisateur sont essentielles

Le but est de lier les parties de l'interface utilisateur,


#app.layout
dcc.Location(id='location', refresh=False),
   

@app.callback(
    [Output('hoge', 'value1'),
    Input('location', 'pathname')])
def pass_change(value1, pathname):

Placez une partie d'interface utilisateur appelée dcc.Location pour recevoir les modifications dans le chemin de l'url Doit recevoir la valeur de modification comme rappel

La sortie n'a qu'une seule loi

Dans Dash, la sortie de rappel est limitée à un seul


@app.callback(
    Output('hoge', 'children'),
    Input('fuga', 'value2'))
def func(value2):

@app.callback(
    Output('hoge', 'children'),
    [Input('fuga', 'value'),
     Input('hoyo', 'value')
   ])
def func(value1, value2):

Comme mentionné ci-dessus, si le rappel avec hoge en sortie est dupliqué,

DuplicateCallbackOutput You have already assigned a callback to the output An output can only havea single callback function.

Je me fâche comme ci-dessus.

Il est nécessaire de combiner l'entrée pour la sortie, mais je veux traiter une autre sortie pour l'entrée Dans certains cas, vous devez bien concevoir.

@app.callback(
    [Output('hoge', 'children'),
     Output('hoge', 'children'),
     Output('hoge', 'children'),
     Output('hoge', 'children'),
     Output('hoge', 'children'),
     ],
    [Input('fuga1', 'value'),
     Input('fuga2', 'value'),
     Input('fuga3', 'value'),
     Input('fuga4', 'value'),
     Input('fuga5', 'value'),
   ])

Veuillez noter que ce sera un énorme rappel où de nombreuses sorties sont rassemblées pour de nombreuses entrées.

Rappel de bouton

Lorsque j'ai vérifié si je pouvais prendre l'événement de clic du bouton, Il y avait une classe Event dans le passé, mais elle est maintenant supprimée.

Il y a quelque chose appelé n_clicks dans la propriété de la classe button, En regardant l'exemple officiel, n_clicks augmente chaque fois que vous appuyez sur un bouton https://dash.plot.ly/dash-core-components/button

C'est douloureux de ne pas savoir qu'il a été pressé sans mettre en cache les n_clicks de tous les boutons Donc, quand j'ai cherché une propriété, il y avait quelque chose qui s'appelait n_clicks_timestamp, donc Le jugement de clic est effectué en comparant l'horodatage avec l'heure actuelle, comme indiqué ci-dessous.


@app.callback(
    Output('hoge', 'children'),
    Input('close-button', 'n_clicks_timestamp')])
def click(n_clicks_timestamp):
    if n_clicks_timestamp != None:
        if (time.time() * 1000 - n_clicks_timestamp) < 1000:
            return something

Je ne sais pas si c'est vraiment la bonne façon de le faire Veuillez me dire qui est familier avec Dash

Impressions

Il y a quelques bizarreries dans la convivialité, mais il est intéressant de pouvoir écrire des tableaux et des graphiques avec une très petite quantité de code. S'il y a une solution pour les inconvénients énumérés cette fois, je voudrais les ajouter un par un.

Recommended Posts

Impressions de toucher Dash, un outil de visualisation de données réalisé par python
Visualisation des données par préfecture
Procédure de la construction de l'environnement au test de fonctionnement de testinfra, un outil de test d'environnement de serveur réalisé par Python
Une analyse simple des données de Bitcoin fournie par CoinMetrics en Python
Outil de visualisation Python pour le travail d'analyse de données
Recommandation d'Altair! Visualisation des données avec Python
Un manuel pour les débutants réalisé par des débutants Python
Comment envoyer une image visualisée des données créées en Python à Typetalk
Visualisation en temps réel des données thermographiques AMG8833 en Python
Mémorandum d'extraction par requête python bs4
Outil de vérification orthographique du mot anglais (fabriqué par python)
Environnement enregistré pour l'analyse des données avec Python
Je viens de créer un outil pour afficher facilement les données sous forme de graphique par opération GUI
Opérations de base sur les blocs de données écrites par des débutants au cours d'une semaine d'apprentissage de Python
[Python] Tracer les données par préfecture sur une carte (nombre de voitures possédées dans tout le pays)
Analyse des données financières par pandas et leur visualisation (2)
Mémo de visualisation par Python
Bibliothèques de visualisation de données Python
Analyse des données financières par pandas et leur visualisation (1)
[Calcul scientifique / technique par Python] Tracé, visualisation, matplotlib de données 2D lues à partir d'un fichier
Impressions de toucher Django
Regrouper par éléments consécutifs d'une liste en Python
Comment visualiser les données par variable explicative et variable objective
J'ai créé un outil de génération de données texte répétitif "rpttxt"
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
[Python] Création d'un outil GUI qui traite automatiquement le CSV des données d'élévation de température dans Excel
[Je l'ai fait avec Python] Outil pour la sortie par lots de données XML
Application Python: visualisation de données, partie 2: matplotlib
J'ai fait un texte Python
Mémorandum de l'outil de gestion de paquets Python ez_setup
[Python] Mémo des phrases fréquemment utilisées dans les scripts Python
La bibliothèque de visualisation de données "folium" de Python est très simple d'utilisation
Acquisition automatique des données de niveau d'expression génique par python et R
Lire la sortie standard d'un sous-processus ligne par ligne en Python
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
Pratique de l'analyse de données par Python et pandas (Tokyo COVID-19 data edition)
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 4)
[Python] Visualisation des données longitudinales (tracé, moustaches, diagramme de violon, intervalle de confiance, histogramme)
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 5)
J'ai essayé de créer un outil d'échafaudage pour le framework Web Python Bottle
J'ai créé un fichier de sous-titres (SRT) à partir des données JSON d'AmiVoice
Visualisation de la matrice créée par numpy
Un enregistrement de patcher un package python
Une bonne description des décorateurs Python
J'ai fait un Line-bot avec Python!
Extension du dictionnaire python par argument
[ns3-30] Activer la visualisation des scripts Python
[Python] Un mémorandum de belle soupe4
Un bref résumé de la collection Python
Comment utiliser correctement le package de visualisation Python
J'ai fait une loterie avec Python.
[Python] Mémo de création de l'outil de grattage
10 sélections d'extraction de données par pandas.DataFrame.query
Visualisez facilement vos données avec Python seaborn.
Comportement de python3 par le serveur de Sakura
Animation des géodonnées par geopandas
Application Python: visualisation de données partie 1: basique
Analyse de données à partir de python (visualisation de données 1)
J'ai créé un démon avec Python