Diagramme mit Bokeh aus SQLite erstellen

  • Hallo,


    ich würde gerne meine Messdaten die ich in SQLite erfasse einfach als Linienmdiagramm darstellen.
    Es geht dabei um das Monitoring einer Heizung.
    Die Datenbank hat folgende Einträge
    ID (Counter)
    Datum
    Uhrzeit
    Temperatur 1 bis 6


    Nun habe ich Bokeh gefunden und finde es echt klasse. Vor allem da die Diagramme interaktiv sind.


    Das "Basic Line Plot" Beispiel wäre für mich für´s erste schon ganz ok.
    http://nbviewer.jupyter.org/gi…l/01%20-%20plotting.ipynb


    Nur leider habe ich keine Idee wie ich aus meiner SQLite DB die Daten ziehen muss um sie zu verarbeiten.
    Z.b. würde ich gerne alle Daten zu Temperatur 1 von einem Tag anzeigen lassen.
    Notfalls würde ich zuvor ein CSV export der entsprechenden Einträge der SQLite DB machen und daraus dann das Diagramm erzeugen.
    Aber auch dazu viel mir das Wissen wie ich das mit Bokeh umsetzen muss.


    Ich finde zu Bokeh leider auch wenig Infos im Netz, und wenn dann meist nur sehr spezifische Sachen.
    Auch die ganzen Module die man z.T. benötigt stellen mich vor ein Rätsel.


    Vielleicht kann mir hier jemand helfen damit klar zu kommen.


    Gruß
    Joker

  • Für ein sqlite gibt ein Modul. Klick.
    Dann baust du dir deinen SQL String um die Werte abzufragen

    SQL
    1. SELECT * from Datanbank Where Datum >= irgendwann AND <= heute

    Die Rückgabe wertest du dann aus (auch mit dem sqlite Modul und übergibst die Werte dann bokeh (was echt hässlich aussieht ;) ).


    Ich würde auch Datum und Uhrzeit nicht trennen sondern mit nem timestamp arbeiten, erleichtert die Sache ungemein

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Edited once, last by dbv ().

  • 1) Wie kommen die Daten in die sqlite DB? Auf dem fast gleichen Weg kommen sie auch wieder raus. Sämtliche Visualisierungsbibliotheken verlangen eine Liste an Daten. Also musst du dafür sorgen, dass deine Daten serialisiert vorliegen.
    2) ggf. könnte auch pygal für dich interessant sein: http://www.pygal.org/en/stable…ation/types/xy.html#dates

  • Danke für Eure Hilfe.


    Das SQLite Modul läuft bereits, da ich so die Daten in die DB übertrage.
    Das ich damit auch eine Abfrage starten kann war mir klar, das dürfte ich auch hoffentlich hin bekommen, dazu gibt es ja auch reichlich Anleitungen.
    Nur wie muss ich die Daten aufbereiten für Bokeh?
    Es ist ja das eine einen Datensatz auszulesen und ihn einfach nur anzeigen zu lassen. Aber für Bokeh müssen die Daten ja anders vorliegen. In einem Array?
    Und wie spreche ich die Daten mit Bokeh an?


    Wie ihr merkt bin ich nicht wirklich fit was das Programmieren angeht, aber ich versuche es so gut es geht zu lernen. Nur hier finde ich leider keine passenden infos im Netz.


  • Die Seite kenne ich, daher kommt ja auch mein Link im ersten Beitrag. Das sind nämlich die dazugehörigen Tutorials.
    Leider komme ich damit aber nicht weiter.
    Jedenfalls verstehe ich die Infos dort nicht.



    Wenn ich mir das von mir verlinkte Beispiel ansehe, fehlt mir eine Idee wie ich die im Beispiel fix vorgegebenen x und y Werte aus meiner SQLite füllen soll.





    Idee wäre jetzt so meine Daten aus SQL auszulesen




    Und dann so an Bukeh zu übergeben.





    Könnte das so funktionieren?

    Edited once, last by AcJoker ().

  • Ich weiß nicht, ob das so funktioniert - aber ich bin sicher, daß Du nichts kaputtmachst, wenn Du es einfach ausprobierst. Nur Mut!

  • Nachdem mir hier ja mut gemacht wurde, habe ich einfach mal auf einem zweiten Pi etwas rum gespielt.


    Mein erste Versuch direkt aus SQLite zu arbeiten klappt leider nicht.
    Es wird nur ein leeres Diagramm erzeugt.
    Und ein print der Variablen Temp1 oder Time bringt nur [] zum vorschein.
    Zusätzlich kommt es zu einer Fehlermeldung wenn ich das Datum mit Jahrezahl (25.02.2017) angebe, obwohl es so in der DB steht.


    Fehlermedung bei Abfrage von "25.02.2017"

    Quote

    OperationalError: near ".2017": syntax error



    Erzeuge ich aber zuerst eine CSV und lese diese mit Pandas ein, klappt es. :D



    Die CSV erzeuge ich noch mittels phpliteadmin
    Hier muss ich noch schauen wie ich das per Python mache und selektiv Daten in eine CSV schreibe.
    Wobei Pandas wohl auch direkt aus der SQLite lesen kann. Somit ist der Umweg über CSV eigentlich unnötig.


    Bokeh läuft übrigens nur mit Python 2.
    Automatisch zusammengefügt:[hr]
    Ging schneller als ich dachte.


    Ich kann nun auch direkt aus der SQLite DB mittels Panda die Daten auslesen und mit Bokeh ein Diagramm erzeugen.



    Leider bekomme ich mit Bokeh aber kein Diagramm erzeugt wenn die X-Achse Datum oder Uhrzeit ist.
    Woran liegt das?
    Zum Glück habe ich zusätzlich zu jedem Datenpunkt eine ID die ich vorübergehend nutzen kann.


    Das ich zukünftig in meiner DB auch Datum und Uhrzeit gemeinsam in ein Feld eintrage ist schon geplant.


    Auch ein Versuch Datum oder Zeit als ToolTip/MouseOver anzeigen zu lassen klappt leider nicht. Es kommt nur "???".


    Datum und Uhrzeit sind in SQL als entsprechender Datentyp hinterlegt.

    Edited once, last by AcJoker ().

  • Also hast du noch Probleme, die Daten aus der DB richtig zu verarbeiten?
    Auf Modulebene haben nur Konstanten, Klassen und/oder Funktionen zu stehen.
    Anbei mal ein Beispiel. Anstelle von ``bokeh`` habe ich ``pygal`` verwendet. Wird aber sicherlich analog dazu auch mit ``bokeh`` laufen.


  • Kleiner Hinweis: Man kann eine Spalte als "TIMESTAMP" deklarieren. Wenn man sich dann per


    Code
    1. con = sqlite3.connect("/var/www/html/Monitoring.db", detect_types=sqlite3.PARSE_DECLTYPES)


    mit der Datenbank verbindet, erfolgt eine automatische Umsetzung von datetime.datetime zu TIMESTAMP und umgekehrt, man kann also direkt datetime.datetime-Objekte einspeichern und auslesen.

  • Danke für den Tipp.
    Hatte mir schon gedacht das es vielleicht etwas mit dem Format von Datum und Uhrzeit bzw. mit dem Datentyp zutun hat.


    Bein Schreiben der DB ist auch das Modul "time" geladen.
    Bei meinen Tests nicht.
    Kann das auch einen Einfluss haben?


    Werde dann wohl mal deinen Ansatz beim nächsten mal probieren.
    Immer wieder schön etwas dazu zu lernen. Beim Pi und Python finde ich das zur Zeit echt klasse wie schnell man sich dabei einarbeiten kann.


    Komme nur leider grade nicht dazu weiter zu testen. :-(