Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 2 ~ Grundlegende Schreibweise für Dash ~ erstellt

Einführung

Ich habe eine einfache App für maschinelles Lernen mit Pythons Web-App-Framework Dash erstellt und diesen Artikel als Lernprotokoll geschrieben (das Ergebnis ist hier. /)). In Oben (Teil 1) wurde das Erstellen einer Dash-Umgebung mit Docker vorgestellt. In diesem Artikel werden wir weiterhin das Schreiben von app.py vorstellen, dem Hauptteil der Dash-App, wobei wir uns auf die beiden Hauptelemente Layout (der Teil, der das Erscheinungsbild der App festlegt) und Callback (der Teil, der die interaktive Bewegung festlegt) konzentrieren. Ich werde es weiterhin tun. Grundsätzlich handelt es sich um einen Auszug aus Official Tutorial. Wenn Sie also mit Englisch vertraut sind, lesen Sie es bitte. Ich denke auch, dass es einfacher zu verstehen ist, wenn Sie über Grundkenntnisse in HTML und CSS verfügen (sofern Sie Progate kostenlos nutzen können).

Wie schreibe ich Layout

Im Layout-Teil erstellen wir das Erscheinungsbild der Anwendung. In anderen Frameworks werden HTML-Dateien häufig separat erstellt, in Dash jedoch grundsätzlich in einem Blatt (app.py). Wenn Dash installiert ist, werden das Paket "dash_html_components", das HTML-Tags bereitstellt, und das Paket "dash_core_components", das die für das Zeichnen erforderliche Benutzeroberfläche bereitstellt, automatisch installiert, und Layout wird mit diesen geschrieben. Als Beispiel wird dieselbe app.py-Datei angezeigt, die zum Erstellen der Umgebung verwendet wurde.

app.py


#Bibliothek importieren
import dash
import dash_core_components as dcc  #Ein Paket, das die zum Zeichnen erforderliche Benutzeroberfläche bereitstellt
import dash_html_components as html #Paket, das HTML-Tags bereitstellt

#Geben Sie den Pfad des externen CSS an
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

#Starten Sie die App. Sie können den App-Namen angeben (in diesem Fall__name__=App werden). Hier wird auch das externe CSS angegeben.
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)


#########################Layoutteil####################################
app.layout = html.Div(children=[

    html.H1(children='Hello Dash'),
    html.Div(children='Dash: A web application framework for Python.'),
    dcc.Graph(
        id='example-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'}],
            'layout':{'title': 'Dash Data Visualization'}
        }
    )
])
########################################################################

#Starten Sie den Server
if __name__ == '__main__':
    app.run_server(host='0.0.0.0', port=5050, debug=True)

Da "dash_html_components" denselben Namen hat, der HTML-Tags (div, H1 usw.) entspricht, schreiben wir sie auf HTML-ähnliche Weise. Der Layout-Teil von app.py oben ist wie folgt in HTML geschrieben.

<div>
    <h1>Hello Dash</h1>
    <div>Dash: A web application framework for Python.</div>
    <div id="exampl-graph" class="dash-graph">
        <!--Inhalt zeichnen-->
    </div>
</div>

Das Argument "Kinder" erhält den anzuzeigenden Textteil (den Teil, der zwischen Tags in HTML eingefügt ist). Sie können auch eine verschachtelte HTML-Struktur erstellen, indem Sie eine Liste an dieses Argument übergeben, z. B. "children = [html.H3 (), html.H5 (), ...]". Im Argument "id" können Sie die ID in HTML beliebig angeben. Die ID wird hauptsächlich für den Rückruf verwendet, der später eingeführt wird. Schreiben Sie CSS auf dasselbe Blatt und geben Sie es als Wörterbuch im Argument style an. Zum Beispiel im Teil von 'Hallo Dash'

html.H1(children='Hello Dash', style={'color':'red'})

Wenn Sie etwas wie hinzufügen, wird 'Hello Dash' rot angezeigt. Verwenden Sie "dash_core_components", um Pulldowns, Kontrollkästchen, Schaltflächen usw. zu implementieren. Ich werde es weglassen, weil es keine Schärfe gibt, um alle einzuführen, aber es ist sehr einfach zu implementieren, wenn man sich Codebeispiel der offiziellen Site ansieht. Zeichnen Sie das Diagramm auf ähnliche Weise mit "dash_core_components" und machen Sie es wie "dcc.Graph (figure = ...)". Wenn Sie das Plotly-Diagramm verwenden möchten, finden Sie in hier viele Codebeispiele. Geben Sie es daher mit dem Argument "figure" an, während Sie darauf verweisen. Bitte beachten Sie, dass Sie den Import des von Plotly bereitgestellten Pakets beschreiben müssen. Ich denke, die Installation wurde bereits durchgeführt, als Dash installiert wurde.

Wie schreibe ich Rückruf

Im Rückrufteil legen wir die interaktive Bewegung fest. Nehmen wir als Beispiel eine einfache App, die die im Textfeld im Text eingegebenen Zeichen widerspiegelt.

app.py


import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

app = dash.Dash()

#########################Layoutteil####################################
app.layout = html.Div([
    html.H6("Change the value in the text box to see callbacks in action!"),
    html.Div(['Input:',
        #Textfeldteil
        dcc.Input(
            id='my-id', 
            value='initial value',  #Anfangswert (nicht erforderlich)
            type='text'
        )
    ]),
    #Der Teil, in dem der Text angezeigt werden soll
    html.Div(id='my-div')
])
########################################################################

#########################Rückrufteil##################################
@app.callback(
    Output(component_id='my-div', component_property='children'),
    [Input(component_id='my-id', component_property='value')]
)
def update_output_div(input_value):
    return 'Output: "{}"'.format(input_value)
########################################################################

if __name__ == '__main__':
    app.run_server(host='0.0.0.0', port=5050, debug=True)

スクリーンショット 2020-11-12 14.02.22.png

Rückruf wird unter Layout mit dem Dekorator @ app.callback geschrieben. Es spielt keine Rolle, ob Sie nicht wissen, was der Dekorateur ist, aber wenn Sie studieren möchten, ist dieser Artikel leicht zu verstehen. Importieren Sie auch die in Callback verwendeten "Input" und "Output".

Die Bewegung von Callback ist sehr einfach, (1) Das durch Input angegebene Element wird als Argument der darunter definierten Funktion übergeben. (2) Die Ausgabe der Funktion wird an das durch Ausgabe angegebene Element übergeben. Es gibt zwei Schritte. Eingabe und Ausgabe werden durch Angabe von ID und Eigenschaft angegeben. In diesem Beispiel ist ① der Wert von "my-id" id der Wert von "dc.Input ()". Dies ist der Textfeldteil (= der Wert, der durch die UI-Operation eingegeben wird). Dies ist die Funktion update_output_div. Es wird als Argument (input_value) von (2) übergeben. Das Ausgabeergebnis ('Output: ~') dieser Funktion wird an die untergeordneten Elemente von html.Div () where id = 'my-div' übergeben. Auf diese Weise kann die im Textfeld eingegebene Zeichenfolge nach der folgenden Ausgabe "Ausgabe:" wiedergegeben werden.

@app.callback(
    Output(component_id='id_3', component_property='children'),
    [Input(component_id='id_1', component_property='value'),
     Input(component_id='id_2', component_property='value')]
)
def func(input1, input2):
    return ...

abschließend

Ich habe die grundlegende Schreibweise von Dash vorgestellt. Sie können im Grunde genommen eine App erstellen, die auf den ersten Blick kompliziert aussieht, indem Sie diesen Rückruf kombinieren. Wenn Sie diesen Mechanismus verstehen, können Sie ihn umgekehrt auf verschiedene Dinge anwenden, während Sie sich den offiziellen Beispielcode ansehen. Ich werde. In Nächster Artikel möchte ich einen Teil der App für maschinelles Lernen vorstellen, die ich tatsächlich als Anwendungsbeispiel erstellt habe.

Recommended Posts

Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 2 ~ Grundlegende Schreibweise für Dash ~ erstellt
Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 3 ~ Übung ~ erstellt
Ich habe versucht, eine Anwendung für maschinelles Lernen mit Dash (+ Docker) Teil 1 ~ Umgebungskonstruktion und Funktionsprüfung ~ zu erstellen
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
[iOS] Ich habe versucht, mit Swift eine insta-ähnliche Verarbeitungsanwendung zu erstellen
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
Ich habe versucht, eine Nachrichtenfunktion der Rails Tutorial-Erweiterung (Teil 1) zu erstellen: Erstellen Sie ein Modell
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich habe einen RESAS-API-Client in Java erstellt
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Antwortfunktion für die Rails Tutorial-Erweiterung (Teil 3) zu erstellen: Ein Missverständnis der Spezifikationen wurde behoben
Ich habe versucht, die Beispielanwendung gemäß der Idee des Buches "Micro Service Architecture" in einen Mikrodienst zu verwandeln.
Ich habe versucht, eine Webanwendung aus anderthalb Monaten Programmier-Lerngeschichte zu entwickeln
Ich habe versucht, eine Nachrichtenfunktion für die Erweiterung Rails Tutorial (Teil 2) zu erstellen: Erstellen Sie einen Bildschirm zum Anzeigen
Ich habe versucht, eine Kreditkartenhandelsanwendung mit Corda 1 auszuführen
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Ich habe versucht, ein Fenster mit Bootstrap 3 zu erstellen"
Ich habe versucht, ein übergeordnetes Wertklasseobjekt in Ruby zu erstellen
Ich habe versucht, ein automatisches Backup mit angenehmem + PostgreSQL + SSL + Docker zu erstellen
Ich habe versucht, eine Web-API zu erstellen, die mit Quarkus eine Verbindung zur Datenbank herstellt
Ich habe versucht, mit AI "A3RT" eine Talk-App in Java zu erstellen.
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
C # (Grund der Kapselung)
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, ein Portfolio mit AWS, Docker, CircleCI, Laravel [mit Referenzlink] zu erstellen.
Ich habe versucht, mit Javafx ein einfaches Spiel zu machen ① "Lass uns Glücksspiel finden" (unvollendet)
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
[Android] Ich habe mit ListView + Bottom Sheet einen Materiallistenbildschirm erstellt
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
[Maschinelles Lernen] Ich habe die Objekterkennung mit Create ML [Objekterkennung] ausprobiert.
Einführung in das maschinelle Lernen mit Spark "Preisschätzung" # 3 Lernen wir mit Trainingsdaten und erstellen eine [Preisschätzungs-Engine]
Rails6 Ich habe versucht, Docker in eine vorhandene Anwendung einzuführen
Ich habe versucht, eine Webanwendung zu erstellen, die Tweets mit einer Vue-Word-Cloud durchsucht und die Tendenz untersucht, was im zugehörigen Profil geschrieben steht
[Azure] Ich habe versucht, eine kostenlose Java-App zu erstellen ~ Mit FTP verbinden ~ [Anfänger]
Ich habe versucht, ein Tool zum Vergleichen von Amazon-Produktpreisen auf der ganzen Welt mit Java, der Amazon Product Advertising API und der Currency API (29.01.2017) zu erstellen.
Kintone-Klon? Ich war ziemlich süchtig danach, die OSS WebDB-Erweiterung mit Lightsail + Docker zu starten. Notieren Sie sich dies.
Ein Memo, als ich versuchte, "über das Schreiben einer Java-Anwendung in Eclipse und das Veröffentlichen in Kubernetes in einem Liberty-Container (Teil 1) zu sprechen".
Einfacher LINE BOT mit Java Servlet Teil 2: Ich habe versucht, Bildnachrichten und Vorlagen zu erstellen
Ich habe versucht, innerhalb von 3 Monaten einen Antrag von unerfahren zu stellen
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ruby mit AtCoder lernen 13 So erstellen Sie ein zweidimensionales Array
Ich habe die grundlegende Grammatik von Ruby kurz zusammengefasst
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
Ich habe versucht, JavaScript Part.1 Basic Processing Code System zu berühren
Ich habe versucht, eine Webanwendung voller Fehler mit Kotlin zu implementieren
Ich habe versucht, eine PDF-Datei mit Java part2 zu verarbeiten
Ich habe BIND mit Docker ausprobiert
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Nachdem ich Progate gelernt hatte, versuchte ich, eine SNS-Anwendung mit Rails in der lokalen Umgebung zu erstellen
Erstellen wir eine Buchverwaltungs-Webanwendung mit Spring Boot part1