J'ai essayé de créer une application d'apprentissage automatique avec Dash (+ Docker) part1 ~ Construction de l'environnement et vérification du fonctionnement ~

introduction

Motivation

Tout en étudiant l'apprentissage automatique, je voulais créer quelque chose, et je voulais aussi toucher l'outil de visualisation Plotly, j'ai donc travaillé sur le développement d'une application avec Dash, qui utilise Plotly. Le livrable réellement créé sera ici. J'ai écrit cet article dans le but de conserver un dossier d'apprentissage. Je suis un débutant dans le développement d'applications, mais merci.

Public cible

J'espère que cela sera utile pour ceux qui sont intéressés par le développement d'applications avec Dash, ou ceux qui souhaitent créer des artefacts liés à l'apprentissage automatique et à la science des données, mais se demandent quoi créer. Il est supposé que vous connaissez Docker. À propos de Docker, [blog de Kame-san](https://datawokagaku.com/category/%e8%ac%9b%e5%ba%a7%e4%b8%80%e8%a6%a7/docker%e8% b6% 85% e5% 85% a5% e9% 96% 80 /) (cours Udemy si vous voulez apprendre en profondeur) est facile à comprendre et recommandé.

Qu'est-ce que Dash?

Dash est l'un des frameworks d'application Web de Python. Il s'agit d'un framework open source développé par Plotly, et peut être utilisé dans d'autres langages tels que R. Django et flask sont célèbres parmi les frameworks d'applications Web de Python, mais Dash se caractérise par ** une spécialisation dans la visualisation **. Flask, Plotly.js et React.js s'exécutent sur le back-end de Dash, et le noyau Plotly.js est un outil de visualisation basé sur JavaScript qui vous permet de dessiner des diagrammes interactifs. En résumé, Dash facilite la création d'applications de tableau de bord dynamiques sans aucune ** connaissance de JavaScript **. Même si vous l'expliquez avec des mots, il est difficile d'obtenir une image, alors jetez un œil à l'exemple d'application publié sur le Site officiel. Il existe de nombreuses applications d'apprentissage automatique, et le code source est également disponible sur GitHub, mais pas tous, donc je pense qu'il sera utile en tant que méthode de sortie pour l'apprentissage automatique.

Environnement

L'environnement a été construit avec Docker en faisant référence à l'article de cette personne. Préparez les fichiers suivants dans le répertoire de l'application Dash ('Dash_App' cette fois).

<Structure du répertoire>
Dash_App/
  ├ app.py
  ├ Dockerfile
  └ docker-compose.yml

Dockerfile


FROM python:3.7.3
USER root

RUN apt-get update
RUN apt-get install -y vim less
RUN apt-get install -y zsh less
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

RUN pip install \
    dash==1.16.3 \
    pandas \
    category_encoders \
    scikit-learn

ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

EXPOSE 5050
CMD ["bash"]

docker-compose.yml


version: '3'
services:
  dash-app:
    restart: always
    build: .
    container_name: 'dash-app'
    ports:
      - "5050:5050"
    working_dir: '/root/'
    tty: true
    volumes:
      - .:/root/src/
      - ~/.zshrc:/root/.zshrc

J'écrirai le contenu de l'application dans app.py. Tout d'abord, pour vérifier le fonctionnement, copiez le code dans le tutoriel officiel.

app.py


import dash
import dash_core_components as dcc 
import dash_html_components as html

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

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'}
        }
    )
])

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

Notez que host = '0.0.0.0' et port = 5050 sont ajoutés et spécifiés dans la partie de code (ligne du bas) qui démarre le serveur. Après avoir créé le fichier, démarrez le conteneur avec la commande suivante.

$ docker-compose up -d --build

Lorsque le conteneur démarre, entrez le conteneur et exécutez app.py comme indiqué dans la commande suivante. * Dash-app est le nom du conteneur spécifié dans docker-compose.yml.

$ docker-compose exec dash-app zsh -c "python src/app.py"

S'il n'y a pas de problème, l'application démarre. Si vous accédez à localhost: 5050 à partir de votre navigateur et que l'écran de l'application ci-dessous s'affiche, vous avez réussi. * Appuyez sur "contrôle + C" pour quitter l'application. スクリーンショット 2020-11-12 0.27.48.png

en conclusion

J'ai présenté comment créer un environnement Dash avec un conteneur Docker (bien que je viens de modifier un peu le Dockerfile en regardant un autre article ...). Docker est pratique car vous pouvez créer rapidement l'environnement le plus gênant. Dans Next article (part2), je voudrais vous présenter comment écrire app.py en me concentrant sur la partie de base tout en extrayant du tutoriel officiel. .. Merci beaucoup.

Recommended Posts

J'ai essayé de créer une application d'apprentissage automatique avec Dash (+ Docker) part1 ~ Construction de l'environnement et vérification du fonctionnement ~
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part3 ~ Practice ~
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part2 ~ Façon basique d'écrire Dash ~
J'ai essayé de créer un environnement de développement padrino avec Docker
[Rails 6.0, Docker] J'ai essayé de résumer la construction de l'environnement Docker et les commandes nécessaires pour créer un portfolio
[iOS] J'ai essayé de créer une application de traitement de type insta avec Swift
[Première construction d'environnement] J'ai essayé de créer un environnement Rails6 + MySQL8.0 + Docker sur Windows 10.
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
J'ai essayé de développer une application web à partir d'un mois et demi d'histoire d'apprentissage de la programmation
Facile à créer LINE BOT avec Java Servlet Partie 2: J'ai essayé des messages image et des modèles
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
J'ai essayé de créer une application Android avec MVC maintenant (Java)
J'ai essayé de vérifier le fonctionnement du serveur gRPC avec grpcurl
J'ai essayé de créer une fonction de groupe (babillard) avec Rails
Après avoir appris Progate, j'ai essayé de créer une application SNS en utilisant Rails dans l'environnement local
Créer un environnement de vérification des opérations TensorFlow avec Docker
J'ai construit un environnement de rails avec docker et mysql, mais j'étais malade
J'ai essayé de créer une simple application Android de reconnaissance faciale en utilisant OpenCV
J'ai essayé de créer une API Web qui se connecte à DB avec Quarkus
Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1
J'ai créé un bot de transaction d'arbitrage de monnaie virtuelle et essayé de gagner de l'argent
[Copier et coller] Créez un environnement de développement Laravel avec Docker Compose, partie 2
[Rails API x Docker] Construction facile de l'environnement avec contrôle de la coque et du fonctionnement avec Flutter
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
Créer un environnement de développement d'applications Web Java avec Docker pour Mac Part2
J'ai essayé de créer un portefeuille avec AWS, Docker, CircleCI, Laravel [avec lien de référence]
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
J'ai essayé de faire une authentification de base avec Java
Une histoire où j'ai essayé de faire une vidéo en liant Traitement et Resolume
J'ai créé un environnement Java EE sur AWS et essayé d'exécuter une application Web
J'ai essayé de faire un jeu simple avec Javafx ① "Trouvons le jeu du bonheur" (inachevé)
Rails6 Je veux créer un tableau de valeurs avec une case à cocher
[Android] J'ai créé un écran de liste de matériaux avec ListView + Bottom Sheet
Préparer un environnement de scraping avec Docker et Java
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
[Introduction à Docker] Créer une image Docker pour l'apprentissage automatique et utiliser le notebook Jupyter
Faisons une application TODO avec Java 2 Je veux créer un modèle avec Spring Initializr et créer Hello world
J'ai essayé de casser le bloc avec java (1)
J'ai construit un environnement CentOS 8 avec Vagrant et essayé de sync_folder, mais j'ai eu une erreur, donc je l'ai résolue.
J'ai essayé de créer une application Web qui recherche les tweets avec vue-word cloud et examine la tendance de ce qui est écrit dans le profil associé
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
J'ai essayé de faire un jeu simple avec Javafx ① "Trouvons le jeu du bonheur" (version inachevée ②)
J'ai essayé de vérifier le fonctionnement de la requête http (Put) avec Talented API Tester
[Rails] [Docker] Le copier-coller est OK! Comment créer un environnement de développement Rails avec Docker
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
J'ai essayé de créer une fonction de message de l'extension Rails Tutorial (Partie 1): Créer un modèle
Introduction à l'apprentissage automatique avec Spark "Estimation de prix" # 3 Apprenons avec les données d'entraînement et créons un [moteur d'estimation de prix]
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
Développement d'applications JavaFX avec IntelliJ IDEA et Gradle ~ De la construction d'environnement à l'exemple de code ~
[Azure] J'ai essayé de créer une application Java gratuitement ~ Se connecter avec FTP ~ [Débutant]
J'ai essayé de lire et de sortir CSV avec Outsystems
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter