[PYTHON] Ich habe das OSS-Visualisierungstool superset ausprobiert

Einführung

Dies ist der Artikel am 11. Tag des "WACUL Adventskalenders 2016". Dieses Mal werde ich einen Eindruck und eine Einführung von Touching Superset schreiben, einem Visualisierungswerkzeug von Airbnb.

Was ist eine Obermenge?

Es ist offiziell unter http://airbnb.io/superset/index.html geschrieben. Ich persönlich erkenne es als das folgende Werkzeug.

  1. Flexibler Dateneingabe- / Ausgabemechanismus
  2. Flaschenbasierte Webanwendung
  3. Umfangreiche integrierte Verwaltungsfunktionen

Als ich es mit Ubuntu 16.04 ausprobierte, war es einfach einzuführen (das Verfahren ist so einfach wie auf der offiziellen Website).

Flexibler Dateneingabe- / Ausgabemechanismus

superset unterstützt verschiedene Ausgabeformate wie Grafikausgabe, json und csv, um die akkumulierten Daten auszugeben. Darüber hinaus unterstützt die Eingabequelle auch verschiedene Typen wie MySQL und PostgresSQL.

Dashboard, Slice

Die Obermenge enthält Komponenten namens "Dashboard" und "Slice". Es ist, als wäre ein Dashboard eine Sammlung von Slices. Ich verstehe, dass Slice einfach eine sinnvolle Anzeigeeinheit im Dashboard ist.

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

In diesem Bild ist der gesamte Bildschirm Dashboard, "Regionsfilter", "% ländlich", "Wachstumsrate" usw. sind Slice.

Einstellungen wie das Slice, das auf dem Dashboard-Bildschirm platziert werden soll, können über den Verwaltungsbildschirm vorgenommen werden.

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

Es ist etwas schwer zu erkennen, aber notieren Sie sich, welches Slice im Dashboard im Formular "Slices" und wo im Formular "JSON positionieren" abgelegt werden soll.

Slice, Visualization Type, Datasource

Slice besteht aus zwei Komponenten: den "Daten selbst" und der "Anzeigemethode". Die Komponenten, die ihre jeweiligen Rollen spielen, werden in der Obermenge als "Datenquelle" und "Visualisierungstyp" bezeichnet. In der Obermenge sind viele Visualisierungstypen verfügbar.

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

(↑ ist ein Teil)

Flaschenbasierte Webanwendung

superset ist eine Webanwendung, die auf Flask basiert. Jeder, der mit der Entwicklung von Kolben vertraut ist, kann diese leicht anpassen.

Umfangreiche integrierte Verwaltungsfunktionen

Es gibt viele Methoden zur Authentifizierung und Zugriffskontrolle.

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

Sie können Rollen als Benutzerattribute festlegen und die für jede Rolle zulässigen Aktionen festlegen. Wenn es sich um eine Aktion vom Typ "Aktualisierung" handelt, bleibt ein Protokoll erhalten.

Wenn Sie versuchen, Ihre eigenen zu erstellen, wird dies viel Arbeit kosten, aber ich bin froh, dass eine Obermenge realisiert werden kann, ohne eine einzige Codezeile zu schreiben.

Übrigens ist die Standardeinstellung eine Art der Kennwortauthentifizierung, die in eine selbstverwaltete Datenbank schreibt. Wie bereits erwähnt, handelt es sich jedoch um eine Flask-basierte Anwendung, sodass der Authentifizierungstyp wie OAuth geändert werden kann. (Ich denke, dass die Entwicklung um die Sicht für OAuth notwendig ist)

Versuchen Sie, Superset mit Ihren eigenen Daten zu verwenden

Da es eine große Sache ist, werde ich versuchen, Superset mit meinen eigenen Daten zu verwenden. Diesmal habe ich folgendes gemacht:

  1. Wechseln Sie die Datenquelle zu MySQL
  2. Visualisieren Sie Daten mit mehreren Visualisierungstypen

Wechseln Sie die Datenquelle zu MySQL

Schreiben Sie zunächst Folgendes in superset_config.py.

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

Sie sollten nun in der Lage sein, eine Verbindung zur Datenbank mit dem Namen root user, password testtest, tdb1 herzustellen. Initialisieren Sie als Nächstes die Obermenge einschließlich der Benutzererstellung wie folgt.

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

Das ist es. Stellen Sie sicher, dass die folgende Tabelle erstellt wurde.

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)

Visualisieren Sie Daten mit mehreren Visualisierungstypen

Bereiten Sie zuerst die Daten vor. Dieses Mal habe ich Google Trend-Daten verwendet. 2015/12 / 01-2015 / 12/31, um tägliche Ergebnisse mit den Schlüsselwörtern "Liebhaber" und "Rückladung" zu erhalten und zu visualisieren.

Bereiten Sie zuerst einen Tisch wie diesen vor

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)

Importieren Sie anschließend die Daten und registrieren Sie sie als Datenquelle auf der Superset-Seite.

Nachdem Sie verschiedene Einstellungen vorgenommen haben, erstellen Sie ein Slice mit dem Visualisierungstyp "Tabellenansicht" und "Liniendiagramm". Daraufhin wird ein Dashboard wie das folgende angezeigt.

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

Aus irgendeinem Grund wurde gelesen, dass die Punktzahlen am 24. und 25. hoch waren, obwohl es ein Wochentag war.

Übrigens habe ich bei der Erstellung dieses Diagramms auch die (persönlich) schmerzhaften Punkte der Obermenge gesehen.

Das Verkaufsargument von Superset ist zunächst, dass "Daten extrahiert (als Grafik angezeigt oder exportiert) werden können, ohne SQL zu schreiben".

Dies war jedoch auch der Grund, warum ich mich schmerzhaft fühlte.

Wenn Sie beispielsweise versuchen, ein eigenes System zu erstellen, um dieses Diagramm zu erhalten, müssen Sie die zurückgegebenen Daten nur schnell um Highcharts zeichnen, während Sie eine Abfrage wie select date, score_koibito, score_riajuu von trend201512 ausgeben. Ich werde. Es gibt nichts Schwieriges.

Wenn Sie dies in Superset in SQL tun, müssen Sie nur die Felder angeben und eine separate Arbeit namens "Metrikdefinition" ausführen. Was ist das? Es ist ein Mechanismus, um eine Aggregatfunktion für jede Tabelle in ein Feld zu beißen und ihr einen Alias zu geben. Standardmäßig werden count, avg, sum usw. vorbereitet. Legen Sie außerdem Metriken entsprechend dem Visualisierungstyp fest.

In diesem Beispiel benötigen wir im Fall der Tabellenansicht überhaupt keine Aggregatfunktion, daher haben wir absichtlich einen Metriktyp namens "Identität" definiert. Infolgedessen sieht die von superset zum Erstellen der Tabellenansicht ausgegebene SQL folgendermaßen aus:

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

Diese SQL wird automatisch durch Manipulieren der Benutzeroberfläche generiert, und es ist nicht möglich, die SQL manuell zu schreiben und auszuführen. Außerdem muss das Datum angegeben werden, und es ist schwierig, das Datum zu schreiben, da die ursprüngliche DSL-ähnliche Notation des Supersets verwendet wird.

... Ich habe versucht, es hart zu schreiben, aber kurz gesagt, ich wollte, dass es die Operation der Datenextraktion durch SQL unterstützt (obwohl ich den Vorteil verstehe, dass die Operation durch die Benutzeroberfläche die Routinearbeit effizienter macht). Da sich die Elemente, die in der Benutzeroberfläche angegeben werden können, je nach Visualisierungstyp unterscheiden (dies ist aufgrund der Datenstruktur natürlich), sind die Lernkosten meiner Meinung nach nicht so günstig, wie es aussieht.

Ich habe versucht, es zu tun, aber ich konnte es nicht tun

superset scheint in der Lage zu sein, bei schweren Abfragen asynchron mit Sellerie zu arbeiten. Auf dieser Seite gibt es Hinweise 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

schließlich

Ich schrieb über Superset, ein Visualisierungstool von Airbnb. Ich habe einige Beschwerden geschrieben, aber ich denke, es ist ein großartiges Tool, weil es viele Funktionen bietet. Dies wird insbesondere Personen empfohlen, die hauptsächlich Daten analysieren und keine Zeit für die Visualisierung aufwenden können. Ich dachte auch, dass es zur Überwachung verwendet werden könnte, wenn es gut gemacht wird.

Recommended Posts

Ich habe das OSS-Visualisierungstool superset ausprobiert
Ich habe die Changefinder-Bibliothek ausprobiert!
Ich habe versucht, das Blockdiagramm-Generierungswerkzeug blockdiag einzuführen
Ich habe versucht, Tensorboard zu verwenden, ein Visualisierungstool für maschinelles Lernen
Ich habe die Naro-Roman-API 2 ausprobiert
Ich habe das 2. TensorFlow-Tutorial ausprobiert
Ich habe die neuartige API von Naruro ausprobiert
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, den Abschnitt zu schätzen.
Fortsetzung: Ich habe versucht, das Blockdiagramm-Generierungswerkzeug blockdiag einzuführen
TensorFlow Tutorial Ich habe MNIST 3rd ausprobiert
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Ich habe versucht, den Befehl umask zusammenzufassen
Ich habe zum ersten Mal Tensorflow ausprobiert
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, die COTOHA-API zu berühren
Python: Ich habe das Problem des Handlungsreisenden ausprobiert
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Ich habe das Datenaufbereitungstool Paxata berührt
[Visualisierung] Ich habe versucht, Bokeh / plotly zu verwenden! 【Memorandum】
Ich habe das Python Tornado Testing Framework ausprobiert
Ich habe versucht, die BigQuery-Speicher-API zu verwenden
Ich habe Web Scraping versucht, um die Texte zu analysieren.
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
[Python] Ich habe versucht, den Funktionsnamen durch den Funktionsnamen zu ersetzen
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe versucht, die Qiita-API von Anfang an zu aktivieren
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Ich habe versucht zu kratzen
Ich habe PyQ ausprobiert
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Ich habe versucht, PyCaret mit der schnellsten Geschwindigkeit zu verwenden
Ich habe zuerst die SARS-Analyse vor dem Corona-Virus versucht
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe zum ersten Mal versucht, Python zu programmieren.
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe AutoKeras ausprobiert
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe Mind Meld zum ersten Mal ausprobiert
Ich habe es mit Papiermühle versucht
Ich habe die Pepper NAOqi OS 2.5.5 SLAM-Funktion ausprobiert
Qiita Job Ich habe versucht, den Job zu analysieren
Ich habe versucht, alembic auszuführen, ein Migrationstool für Python
Ich habe versucht, Django-Slack
Ich habe es mit Django versucht
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe es mit Spleeter versucht
Ich habe versucht, die funktionale Programmierbibliothek toolz zu verwenden
Ich habe versucht, mit tkinter mit dem Taschenrechner zu spielen
Ich habe es mit cgo versucht
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen