[PYTHON] J'ai essayé l'outil de visualisation OSS, sur-ensemble

introduction

Ceci est l'article sur le 11ème jour du "Calendrier de l'Avent WACUL 2016". Cette fois, j'écrirai une impression et une introduction de toucher le sur-ensemble, un outil de visualisation réalisé par airbnb.

Qu'est-ce que le surensemble

Il est officiellement écrit à l'adresse http://airbnb.io/superset/index.html. Je le reconnais personnellement comme l'outil suivant.

  1. Mécanisme flexible d'entrée / sortie de données
  2. Application Web basée sur Flask
  3. Fonctions de gestion intégrées riches

De plus, quand je l'ai essayé avec ubuntu 16.04, c'était facile à introduire (la procédure est aussi simple que sur le site officiel).

Mécanisme d'entrée / sortie de données flexible

superset prend en charge divers formats de sortie tels que la sortie graphique, json et csv pour générer les données accumulées. En outre, la source d'entrée prend également en charge divers types tels que MySQL et PostgresSQL.

Dashboard, Slice

Le sur-ensemble a des composants appelés "Dashboard" et "Slice". C'est comme si un tableau de bord était une collection de tranches. Je comprends que Slice est simplement une unité d'affichage significative dans Dashboard.

スクリーンショット 2016-12-04 23.52.29.png

Dans cette image, tout l'écran est Tableau de bord, «Filtre de région», «% rural», «Taux de croissance», etc. sont Slice.

Les paramètres tels que la tranche à placer sur l'écran du tableau de bord peuvent être définis à partir de l'écran de gestion.

スクリーンショット 2016-12-05 0.08.16.png

C'est un peu difficile à voir, mais écrivez quelle tranche mettre sur le tableau de bord sur le formulaire "Slices" et où le mettre sur le formulaire "Position JSON".

Slice, Visualization Type, Datasource

Il y a deux composants qui composent Slice: les «données elles-mêmes» et la «méthode d'affichage». Les composants qui jouent leurs rôles respectifs sont appelés «source de données» et «type de visualisation» dans le sur-ensemble. Il existe de nombreux types de visualisation disponibles dans le sur-ensemble.

スクリーンショット 2016-12-10 23.16.58.png スクリーンショット 2016-12-10 23.17.13.png スクリーンショット 2016-12-10 23.17.36.png

(↑ fait partie)

Application Web basée sur Flask

superset est une application Web basée sur Flask. Toute personne familiarisée avec le développement Flask le trouvera facile à personnaliser.

Fonctions de gestion intégrées riches

Il existe de nombreuses méthodes d'authentification et de contrôle d'accès.

スクリーンショット 2016-12-10 23.35.36.png

Vous pouvez définir des rôles en tant qu'attributs utilisateur et vous pouvez également définir les actions autorisées pour chaque rôle. De plus, s'il s'agit d'une action de type mise à jour, un journal restera.

Si vous essayez de créer le vôtre, cela prendra beaucoup de travail, mais je suis heureux que le sur-ensemble puisse être réalisé sans écrire une seule ligne de code.

À propos, la valeur par défaut est un type d'authentification par mot de passe qui écrit dans une base de données autogérée, mais comme indiqué précédemment, il s'agit d'une application basée sur Flask, il est donc possible de modifier le type d'authentification tel que OAuth. (Je pense que le développement autour de la vue est nécessaire pour OAuth)

Essayez d'utiliser le superset avec vos propres données

Comme c'est un gros problème, j'essaierai d'utiliser un sur-ensemble avec mes propres données. Cette fois, j'ai fait ce qui suit:

  1. Basculez la source de données sur MySQL
  2. Visualisez les données avec plusieurs types de visualisation

Basculer la source de données vers MySQL

Tout d'abord, écrivez ce qui suit dans superset_config.py.

SQLALCHEMY_DATABASE_URI = 'mysql://root:testtest@localhost/tdb1'

Vous devriez maintenant pouvoir vous connecter à la base de données nommée root user, password testtest, tdb1. Ensuite, initialisez le sur-ensemble, y compris la création d'utilisateur, comme suit.

fabmanager create-admin --app superset
superset db upgrade
superset init

C'est tout. Confirmez que le tableau suivant a été créé.

mysql> show tables;
+-------------------------+
| Tables_in_tdb1          |
+-------------------------+
| ab_permission           |
| ab_permission_view      |
| ab_permission_view_role |
| ab_register_user        |
| ab_role                 |
| ab_user                 |
| ab_user_role            |
| ab_view_menu            |
| access_request          |
| alembic_version         |
| clusters                |
| columns                 |
| css_templates           |
| dashboard_slices        |
| dashboard_user          |
| dashboards              |
| datasources             |
| dbs                     |
| favstar                 |
| logs                    |
| metrics                 |
| query                   |
| slice_user              |
| slices                  |
| sql_metrics             |
| table_columns           |
| tables                  |
| url                     |
+-------------------------+
28 rows in set (0.00 sec)

Visualisez les données avec plusieurs types de visualisation

Préparez d'abord les données. Cette fois, j'ai utilisé les données Google Trend. 2015/12 / 01-2015 / 12/31 pour obtenir et visualiser les scores quotidiens avec les mots-clés "amant" et "charge arrière".

Tout d'abord, préparez une table comme celle-ci

mysql> desc trend201512;
+---------------+---------+------+-----+---------+----------------+
| Field         | Type    | Null | Key | Default | Extra          |
+---------------+---------+------+-----+---------+----------------+
| id            | int(11) | NO   | PRI | NULL    | auto_increment |
| date          | date    | NO   |     | NULL    |                |
| score_koibito | int(11) | NO   |     | NULL    |                |
| score_riajuu  | int(11) | NO   |     | NULL    |                |
+---------------+---------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

Après cela, importez les données et enregistrez-les comme source de données du côté du sur-ensemble.

Après avoir défini divers paramètres, créez une tranche avec le type de visualisation défini sur la vue tableau et le graphique en courbes, et vous aurez un tableau de bord comme celui ci-dessous.

スクリーンショット 2016-12-11 17.43.23.png

Pour une raison quelconque, il a été lu que les scores des 24 et 25 étaient élevés même si c'était un jour de semaine.

En passant, en faisant ce graphique, j'ai également vu les points (personnellement) douloureux du sur-ensemble.

Tout d'abord, le point de vente du superset est que "les données peuvent être extraites (affichées sous forme de graphique ou exportées) sans écrire de SQL".

Cependant, c'était aussi la raison pour laquelle je me sentais douloureux.

Si vous essayez de créer votre propre système pour obtenir ce graphique, par exemple, il vous suffit de dessiner rapidement les données renvoyées autour de highcharts tout en émettant une requête comme select date, score_koibito, score_riajuu de trend201512; Je vais. Il n'y a rien de difficile.

Par contre, dans un sur-ensemble, si vous le faites en SQL, vous n'avez qu'à spécifier les champs, et vous devez faire un travail séparé appelé "définition des métriques". Il s'agit d'un mécanisme pour insérer une fonction d'agrégation dans un champ pour chaque table et lui donner un alias, et par défaut, count, avg, sum, etc. sont préparés. Définissez également les métriques en fonction du type de visualisation.

Dans cet exemple, dans le cas de la vue table, nous n'avons pas besoin d'une fonction d'agrégation en premier lieu, nous avons donc délibérément défini un type de métrique appelé "identité". En conséquence, le SQL émis par le sur-ensemble pour créer la vue de table ressemble à ceci:

SELECT score_koibito AS score_koibito,
       score_riajuu AS score_riajuu
FROM trend201512
WHERE date >= STR_TO_DATE('1916-12-11 08:52:13', '%%Y-%%m-%%d %%H:%%i:%%s')
  AND date <= STR_TO_DATE('2016-12-11 08:52:13', '%%Y-%%m-%%d %%H:%%i:%%s') LIMIT 50

Ce SQL est généré automatiquement en manipulant l'interface utilisateur, et il n'est pas possible d'écrire et d'exécuter manuellement le SQL. En outre, la date doit être spécifiée et il est difficile d'écrire la date car la notation DSL originale du surensemble est utilisée.

... j'ai essayé de l'écrire dur, mais en bref, je voulais qu'il prenne en charge l'opération d'extraction de données par SQL (bien que je comprenne le mérite que le travail de routine soit rationalisé par l'opération par UI). De plus, étant donné que les éléments pouvant être spécifiés dans l'interface utilisateur diffèrent en fonction du type de visualisation (cela est naturel en raison de la structure des données), je pense que le coût d'apprentissage n'est pas aussi bon marché qu'il en a l'air.

J'essayais de le faire mais je ne pouvais pas le faire

superset semble être capable de fonctionner de manière asynchrone avec le céleri lors du lancement de requêtes lourdes. Il y a des indices sur cette page http://airbnb.io/superset/sqllab.html

Support for long-running queries - uses the Celery distributed queue

to dispatch query handling to workers
supports defining a “results backend” to persist query results

à la fin

J'ai écrit sur superset, un outil de visualisation créé par airbnb. J'ai écrit quelques plaintes, mais je pense que c'est un excellent outil car il regorge de fonctionnalités. En particulier, il est recommandé aux personnes qui analysent principalement des données et ne peuvent pas passer de temps à la visualisation. J'ai également pensé qu'il pourrait être utilisé pour le suivi s'il était bien fait.

Recommended Posts

J'ai essayé l'outil de visualisation OSS, sur-ensemble
J'ai essayé la bibliothèque changefinder!
J'ai essayé d'introduire l'outil de génération de diagramme blockdiag
J'ai essayé d'utiliser Tensorboard, un outil de visualisation pour l'apprentissage automatique
J'ai essayé le roman Naro API 2
J'ai essayé le tutoriel TensorFlow 2ème
J'ai essayé l'API du roman Naruro
J'ai essayé de déplacer le ballon
J'ai essayé d'utiliser l'API checkio
J'ai essayé d'estimer la section.
Continuation: j'ai essayé d'introduire l'outil de génération de diagramme blockdiag
Tutoriel TensorFlow J'ai essayé MNIST 3rd
J'ai essayé le serveur asynchrone de Django 3.0
J'ai essayé de résumer la commande umask
J'ai essayé tensorflow pour la première fois
J'ai essayé de reconnaître le mot de réveil
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
Python: j'ai essayé le problème du voyageur de commerce
J'ai essayé de jouer avec l'image avec Pillow
J'ai touché à l'outil de préparation de données Paxata
[Visualisation] J'ai essayé d'utiliser Bokeh / plotly! 【mémorandum】
J'ai essayé le framework de test Python Tornado
J'ai essayé d'utiliser l'API BigQuery Storage
J'ai essayé Web Scraping pour analyser les paroles.
J'ai essayé la fonction de tableau croisé dynamique des pandas
[Python] J'ai essayé de remplacer le nom de la fonction par le nom de la fonction
J'ai essayé l'analyse par grappes de la carte météo
J'ai essayé d'accéder à l'API Qiita depuis le début
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé la méthode des moindres carrés en Python
J'ai essayé d'utiliser PyCaret à la vitesse la plus rapide
J'ai essayé l'analyse du SRAS avant le virus corona
J'ai essayé d'utiliser l'API Google Cloud Vision
J'ai essayé la programmation python pour la première fois.
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé AutoKeras
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé Mind Meld pour la première fois
J'ai essayé le moulin à papier
J'ai essayé la fonction SLAM de Pepper NAOqi OS 2.5.5
Qiita Job J'ai essayé d'analyser le travail
J'ai essayé d'exécuter alembic, un outil de migration pour Python
J'ai essayé django-slack
J'ai essayé Django
J'ai essayé d'utiliser le filtre d'image d'OpenCV
LeetCode j'ai essayé de résumer les plus simples
J'ai essayé spleeter
J'ai essayé d'utiliser la bibliothèque de programmation fonctionnelle toolz
J'ai essayé de jouer avec la calculatrice avec tkinter
J'ai essayé cgo
J'ai essayé de mettre en œuvre le problème du voyageur de commerce