Forum: PC-Programmierung Python viele Variablen in plot zur Darstellung auswählen


von Markus H. (haniham) Benutzerseite


Lesenswert?

Hallo meine lieben,

Ich lese momentan aus meiner Heizung verschiedene Parameter aus und lass 
mir diese in einen langen CSV Log schreiben.

Den log lese ich in einem Python Script wieder ein und stelle sie der 
Parameter Nummer nach zusammen.

Ich würde mir gerne die etwa 200 Parameter darstellen lassen. Ich suche 
daher mal nach einer Möglichkeit wie ich die Daten in Python 
visualisieren kann. Ich fände es ganz nett, wenn ich aus einer Liste ein 
paar Signale zum gemeinsamen darstellen aus einer Liste oä auswählen 
kann.

Ich kann mir nicht vorstellen, dass es da noch nichts Fertiges gibt. Ich 
glaube mir fehlt da einfach nur ein passendes Keyword.

Mit Python habe ich schon einiges gedreht, nur mit GUI habe ich bisher 
noch nichts gemacht. Daher wäre eine fertige plot Anzeigelösung ganz 
nett. Als IDE setze ich PyCharm ein.

Für eure Tipps schon mal viel Dank.

Gruß,
Markus

von Kolja L. (kolja82)


Lesenswert?

Ich mache das mit Jupyter und dann pandas und matplotlib.

von Markus H. (haniham) Benutzerseite


Angehängte Dateien:

Lesenswert?

Kolja L. schrieb:
> Ich mache das mit Jupyter und dann pandas und matplotlib.

ja, mit jupyter und pandas und matplotlib hab isch auch schon 
gearbeitet. Aber in der Tat könnte ich da mit Select multiple die 
Variablen entsprechend selektieren. Ist halt leider "so eine 
Browseranwendung" (-;

https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20List.html

Ich warte mal ab was da sonst noch so kommt aber sonst mach ich es eben 
so

von Kolja L. (kolja82)


Lesenswert?

OK, dann viellicht noch ein usability Hinweis.

Bei dem Programm WinSol der technischen Alternative können die einzelnen 
Graphen duch klicken auf die Legende ein / aus und fett geschaltet 
werden.
Das finde ich sehr komfortabel :-)

Viel Spaß mit deinen Daten, ich werde hier auf jeden Fall weiterlesen.

von Sheeva P. (sheevaplug)


Lesenswert?

Markus H. schrieb:
> Ich lese momentan aus meiner Heizung verschiedene Parameter aus und lass
> mir diese in einen langen CSV Log schreiben.
>
> Den log lese ich in einem Python Script wieder ein und stelle sie der
> Parameter Nummer nach zusammen.
>
> Ich würde mir gerne die etwa 200 Parameter darstellen lassen. Ich suche
> daher mal nach einer Möglichkeit wie ich die Daten in Python
> visualisieren kann. Ich fände es ganz nett, wenn ich aus einer Liste ein
> paar Signale zum gemeinsamen darstellen aus einer Liste oä auswählen
> kann.

Wie schon erwähnt, gibt es für die Visualisierung die gute alte 
Matplotlib, auf die auch Pandas zurückgreift -- ebenso wie Seaborn, 
ggplot und Plot.ly. In neuerer Zeit erfreuen sich auch Bokeh, Holoviews 
und DataShader immer größerer Beliebtheit, die IIRC nicht auf Matplotlib 
basieren.

Eine andere Methode könnte sein, das mit einem Webfrontend zu machen, 
etwa auf Basis von Flask. Zur Visualisierung dient eine der vielen 
verfügbaren Javascript-Bibliotheken wie D3.js, jqPlot, jqWidgets oder 
Flot zu nutzen. Dadurch werden die Plots dann auf Wunsch auch 
netzwerkweit verfügbar, und können auch mal auf einem Tablet oder 
Smartphone angeschaut werden.

Ansonsten nutze ich selbst für solche Aufgaben immer häufiger 
Elasticsearch und Kibana. Elasticsearch ist zwar zunächst eine 
Volltext-Suchmaschine, hat aber auch einen starken Fokus auf der 
Datenanalyse, und mit dem zugehörigen Webfrontend Kibana auch auf die 
Exploration und Visualisierung der Daten -- und das alles interaktiv und 
mit vielen ausgefuchsten Möglichkeiten. Zwar erfordert diese Lösung 
einen gewissen Einarbeitungsaufwand, der sich aber sehr schnell lohnt, 
wenn man solche Werkzeuge häufiger benötigt.

von Sheeva P. (sheevaplug)


Lesenswert?

Markus H. schrieb:
> Kolja L. schrieb:
>> Ich mache das mit Jupyter und dann pandas und matplotlib.
>
> ja, mit jupyter und pandas und matplotlib hab isch auch schon
> gearbeitet. Aber in der Tat könnte ich da mit Select multiple die
> Variablen entsprechend selektieren. Ist halt leider "so eine
> Browseranwendung" (-;

Nein, nicht wirklich. Jupyter (und auch iPython) sind zunächst einmal 
nur interaktive Python-Shells und können nicht nur im Browser oder der 
eigenen Qt-GUI, sondern unter anderem auch auf der Kommandozeile 
verwendet werden. Und natürlich kann man Code, den man darin geschrieben 
hat, speichern und dann in einem normalen Skript benutzen... ;-)

von hufnala (Gast)


Lesenswert?

Hi, schau dir mal orange an

//hufnala

von Markus H. (haniham) Benutzerseite



Lesenswert?

Kolja L. schrieb:
> Bei dem Programm WinSol der technischen Alternative

Das schaut genau nach soetwas aus, wie ich es möchte: 
http://img.archiexpo.de/images_ae/photo-mg/74467-9212475.jpg

Ich weiß gerade nur nicht wie ich die Daten in das Programm rein klopfen 
kann (-;



Sheeva P. schrieb:
> Markus H. schrieb:
>> -
>
> Wie schon erwähnt, gibt es für die Visualisierung die gute alte
> Matplotlib, auf die auch Pandas zurückgreift -- ebenso wie Seaborn,
> ggplot und Plot.ly. In neuerer Zeit erfreuen sich auch Bokeh, Holoviews
> und DataShader immer größerer Beliebtheit, die IIRC nicht auf Matplotlib
> basieren.

Die "Nur plotting" libs benötigen leider noch einen erheblichen 
Programmieraufwand für das GUI. (Matplotlib, Seaborn, GGplot)

Plot.ly ist mit 60$ zu teuer

Bokeh hat auf ihere Galerie einige Beispiele in Kombination mit einigen 
GUI steuerelementen - das ginge wieder in die Richtung, dass ich mir 
eine einfache Oberfläche zusammen basteln kann: 
https://bokeh.pydata.org/en/latest/docs/gallery.html

Ganz ähnlich mit dne GUI Controls bei Holoview: 
http://holoviews.org/gallery/demos/bokeh/scatter_economic.html

> Eine andere Methode könnte sein, das mit einem Webfrontend zu machen,
> etwa auf Basis von Flask. Zur Visualisierung dient eine der vielen
> verfügbaren Javascript-Bibliotheken wie D3.js, jqPlot, jqWidgets oder
> Flot zu nutzen. Dadurch werden die Plots dann auf Wunsch auch
> netzwerkweit verfügbar, und können auch mal auf einem Tablet oder
> Smartphone angeschaut werden.
>
> Ansonsten nutze ich selbst für solche Aufgaben immer häufiger
> Elasticsearch und Kibana. Elasticsearch ist zwar zunächst eine
> Volltext-Suchmaschine, hat aber auch einen starken Fokus auf der
> Datenanalyse, und mit dem zugehörigen Webfrontend Kibana auch auf die
> Exploration und Visualisierung der Daten -- und das alles interaktiv und
> mit vielen ausgefuchsten Möglichkeiten. Zwar erfordert diese Lösung
> einen gewissen Einarbeitungsaufwand, der sich aber sehr schnell lohnt,
> wenn man solche Werkzeuge häufiger benötigt.

Schaut beides auch sehr interessant aus, aber ich möchte eigentlich das 
Rad nicht neu erfinden



Sheeva P. schrieb:
> Markus H. schrieb:

>
> Nein, nicht wirklich. Jupyter (und auch iPython) sind zunächst einmal
> nur interaktive Python-Shells und können nicht nur im Browser oder der
> eigenen Qt-GUI, sondern unter anderem auch auf der Kommandozeile
> verwendet werden. Und natürlich kann man Code, den man darin geschrieben
> hat, speichern und dann in einem normalen Skript benutzen... ;-)

Wenn dann müsste ich es wohl so mit einer Auswahlbox machen und mit 
irgendeiner plot lib darstellen



hufnala schrieb:
> Hi, schau dir mal orange an
>
> //hufnala

Das sieht auch sehr interessant aus, aber habe darin habe ich intuitiv 
nicht gleich eine Lösung erzeugen können.


Also wenn ich wüsste in welches Format ich meine Daten Prügeln muss wäre 
das Winsol mein Favorit, da die ganze Oberfläche schon erprobt ist.

Ansonsten wird es wohl eine Auswahlbox mit irgendeinem plot dazu geben.



Anbei wen es interessiert der aktuelle Stand meiner CSV  (-:
Ich hätte bei der Uhrzeit : statt _ verwenden sollen ich glaube deshalb 
erkennt orange es nicht als datetime

Gruß,
Markus

von Kolja L. (kolja82)


Lesenswert?

Markus H. schrieb:
> Kolja L. schrieb:
>> Bei dem Programm WinSol der technischen Alternative
>
> Das schaut genau nach soetwas aus, wie ich es möchte:
> http://img.archiexpo.de/images_ae/photo-mg/74467-9212475.jpg
>
> Ich weiß gerade nur nicht wie ich die Daten in das Programm rein klopfen
> kann (-;

Das wäre natürlich auch noch eine Möglichkeit.
Aber ich glaube nicht, das es sorum vorgesehen ist...

von Sheeva P. (sheevaplug)


Angehängte Dateien:

Lesenswert?

Markus H. schrieb:
> Sheeva P. schrieb:
> Die "Nur plotting" libs benötigen leider noch einen erheblichen
> Programmieraufwand für das GUI. (Matplotlib, Seaborn, GGplot)

Naja, "erheblich"... Eine kleine GUI ist mit Tkinter / Tix flott 
gemacht, wenngleich nicht übermäßig hübsch. Mit Qt ist der Aufwand zwar 
geringfügig höher, dafür ist das dann allerdings richtig schick.

>> Ansonsten nutze ich selbst für solche Aufgaben immer häufiger
>> Elasticsearch und Kibana. Elasticsearch ist zwar zunächst eine
>> Volltext-Suchmaschine, hat aber auch einen starken Fokus auf der
>> Datenanalyse, und mit dem zugehörigen Webfrontend Kibana auch auf die
>> Exploration und Visualisierung der Daten -- und das alles interaktiv und
>> mit vielen ausgefuchsten Möglichkeiten. Zwar erfordert diese Lösung
>> einen gewissen Einarbeitungsaufwand, der sich aber sehr schnell lohnt,
>> wenn man solche Werkzeuge häufiger benötigt.
>
> Schaut beides auch sehr interessant aus, aber ich möchte eigentlich das
> Rad nicht neu erfinden

Wie Du an dem Bild im Anhang sehen kannst, sind die Daten schnell in ein 
Elasticsearch geklöppelt und können dann sofort mit Kibana analysiert 
und visualisiert werden. Wer mag, kann die Daten auch live einspielen 
(wie das beispielsweise gerne für Logdateen gemacht wird) und hat dann 
(mit Auswahl eines entsprechenden Zeitfilters, siehe oben rechts) immer 
einen aktuellen View auf seine Daten. Das simple Import-Skript im 
Python3 habe ich auch mal angehängt. Die Frage ist nurmehr, was Deine 
"Data"- und "Parameter"-Felder tatsächlich aussagen, bzw. wie man sie in 
lesbare Daten wandeln kann.

> Anbei wen es interessiert der aktuelle Stand meiner CSV  (-:
> Ich hätte bei der Uhrzeit : statt _ verwenden sollen ich glaube deshalb
> erkennt orange es nicht als datetime

Auch der '_' könnte stören. Nach meiner Erfahrung kommen die meisten 
Programme ganz gut mit dem Format ISO 8601 (sp?) aus, gerne auch mit 
Leerzeichen statt des 'T'. Python kann das mit dateutil.parser.parse() 
jedenfalls sofort verarbeiten, siehe die Funktion toDatetime() in dem 
anhängenden Skriptlein.

von Markus H. (haniham) Benutzerseite


Lesenswert?

Sheeva P. schrieb:
> Markus H. schrieb:
>> Sheeva P. schrieb:
>> Die "Nur plotting" libs benötigen leider noch einen erheblichen
>> Programmieraufwand für das GUI. (Matplotlib, Seaborn, GGplot)
>
> Naja, "erheblich"... Eine kleine GUI ist mit Tkinter / Tix flott
> gemacht, wenngleich nicht übermäßig hübsch. Mit Qt ist der Aufwand zwar
> geringfügig höher, dafür ist das dann allerdings richtig schick.

Ja klar, aber bis alles möglichst fehlerfei läuft vergeht einiges an 
Zeit

>>> Ansonsten nutze ich selbst für solche Aufgaben immer häufiger
>>> Elasticsearch und Kibana. Elasticsearch ist zwar zunächst eine
>>> Volltext-Suchmaschine, hat aber auch einen starken Fokus auf der
>>> Datenanalyse, und mit dem zugehörigen Webfrontend Kibana auch auf die
>>> Exploration und Visualisierung der Daten -- und das alles interaktiv und
>>> mit vielen ausgefuchsten Möglichkeiten. Zwar erfordert diese Lösung
>>> einen gewissen Einarbeitungsaufwand, der sich aber sehr schnell lohnt,
>>> wenn man solche Werkzeuge häufiger benötigt.
>>
>> Schaut beides auch sehr interessant aus, aber ich möchte eigentlich das
>> Rad nicht neu erfinden
>
> Wie Du an dem Bild im Anhang sehen kannst, sind die Daten schnell in ein
> Elasticsearch geklöppelt und können dann sofort mit Kibana analysiert
> und visualisiert werden. Wer mag, kann die Daten auch live einspielen
> (wie das beispielsweise gerne für Logdateen gemacht wird) und hat dann
> (mit Auswahl eines entsprechenden Zeitfilters, siehe oben rechts) immer
> einen aktuellen View auf seine Daten. Das simple Import-Skript im
> Python3 habe ich auch mal angehängt. Die Frage ist nurmehr, was Deine
> "Data"- und "Parameter"-Felder tatsächlich aussagen, bzw. wie man sie in
> lesbare Daten wandeln kann.

Es handelt sich um daten im Vaillant X6 Format: 
http://old.ethersex.de/index.php/Vaillant_X6_Schnittstelle


Das Problem ist, dass die Schnittstelle nicht dokumentiert ist.
Es gibt im endeffekt Digital, Analog und Analog+Status und irgendwelche 
längeren Bytes als Antwort.
Ich muss mit Betrachtung der Daten herausfinden, was für einen Datentyp 
sie repräsentieren (bspw. kann 1 byte analogwert, digitalwert oder 
sensorstatus sein)

Wenn ich im Kibana nachträglich noch einen Analyzer hinterherschalten 
kann wäre das optimal - muss ich mir mal anschauen.

Und dann halt blots über von verschiedenen Parametern über die Zeit

>> Anbei wen es interessiert der aktuelle Stand meiner CSV  (-:
>> Ich hätte bei der Uhrzeit : statt _ verwenden sollen ich glaube deshalb
>> erkennt orange es nicht als datetime
>
> Auch der '_' könnte stören. Nach meiner Erfahrung kommen die meisten
> Programme ganz gut mit dem Format ISO 8601 (sp?) aus, gerne auch mit
> Leerzeichen statt des 'T'. Python kann das mit dateutil.parser.parse()
> jedenfalls sofort verarbeiten, siehe die Funktion toDatetime() in dem
> anhängenden Skriptlein.
Der Verweis auf die ISO schaut gut aus - ich liebe Standards - dann muss 
man sich selber darüber keine Gedanken mehr machen

von Sheeva P. (sheevaplug)


Angehängte Dateien:

Lesenswert?

Markus H. schrieb:
> Es handelt sich um daten im Vaillant X6 Format:
> http://old.ethersex.de/index.php/Vaillant_X6_Schnittstelle
>
> Das Problem ist, dass die Schnittstelle nicht dokumentiert ist.

Hmpf. ;-(

> Es gibt im endeffekt Digital, Analog und Analog+Status und irgendwelche
> längeren Bytes als Antwort.
> Ich muss mit Betrachtung der Daten herausfinden, was für einen Datentyp
> sie repräsentieren (bspw. kann 1 byte analogwert, digitalwert oder
> sensorstatus sein)
>
> Wenn ich im Kibana nachträglich noch einen Analyzer hinterherschalten
> kann wäre das optimal - muss ich mir mal anschauen.

Man kann die Daten zunächst als einfachen Text betrachte und einen 
Analyzer in Elasticsearch einbauen. Das ist am Ende ja eine 
Volltext-Suchmaschine, die über solche Analyzer beispielsweise 
Phonetisches Matching über Beider-Morse, Soundex oder Double-Methaphone 
realisieren kann... Tatsächlich würde ich hier jedoch eher dazu neigen, 
die Analyse in Python zu machen und dann gleich Klartextdaten ins ES zu 
pumpen. Das ist vermutlich einfacher anpaß- und konfigurierbar...

Um die Datenanalyse ein bisschen zu vereinfachen, habe ich den Importer 
noch ein bisschen angepaßt, so daß er die einzelnen Bytes aus "data" 
jetzt zusächlich noch unter "bytes.b0" bis "bytes.b<n>" importiert. Das 
könnte die Protokollanalyse etwas vereinfachen, weil sich so über die 
Suchzeile ("use lucene query syntax") oder die kleinen "Anfasser" an den 
Feldern in Kibana die Daten filtern lassen, so daß zum Beispiel nur die 
Nachrichten angezeigt werden, in denen "bytes.b0" einen der Werte "03" 
oder "04" hat (Suchsyntax: "bytes.b0:03 OR bytes.b0:04").

von hufnala (Gast)


Lesenswert?

Orange kann auch python scripte, datumsformat definieren und dann als 
dataframe weitergeben sollte gehen Beispiel habe ich leider keines, und 
mit der Schnittstelle habe ich mich noch nicht beschäftigt :-(

Gibt auch noch was von der Uni Konstanz, hab aber den namen vergessen, 
und fand es eher umständlich g**gle und data analytics Konstanz sollte 
helfen.

Zu Elastic/Kibana bin ich noch auf der Suche nach einem einfachen 
tutorial was aufzusetzen - basis csv, hat da jemand einen Tipp?

//hufnala

von Markus H. (haniham) Benutzerseite


Angehängte Dateien:

Lesenswert?

Sorry, bin heute nach der Arbeit zu nichts mehr gekommen. anbei mal mein 
aktueller stand des importskripts. Also am Importieren wird es bei mir 
nicht scheitern (-;

Nur so - ich lebe noch und das Thema ist für mich immer noch aktuell

von Sheeva P. (sheevaplug)


Lesenswert?

hufnala schrieb:
> Zu Elastic/Kibana bin ich noch auf der Suche nach einem einfachen
> tutorial was aufzusetzen - basis csv, hat da jemand einen Tipp?

Das Aufsetzen der beiden ist ziemlich einfach: Zip-Archive oder Tarballs 
herunterladen, entpacken, und das zum verwendeten Betriebssystem 
passende Startskript im bin/-Unterverzeichnis aufrufen. Java sollte dazu 
natürlich installiert sein... ;-)

Die Dateien im config/-Unterverzeichnis sollte man zumindest einmal 
gesehen haben. Ansonsten gibt es in der Dokumentation der beiden 
Programme auf der Webseite von Elastic.co jeweils einen Abschnitt 
"Getting started", der sicher eine Lektüre wert ist.

Das Installieren und Starten der beiden Programme ist insofern ziemlich 
simpel. Etwas schwieriger ist es, die vielen Möglichkeiten und die sehr 
leistungsfähige JSON-Querysyntax von ES zu lernen. Dazu empfehle ich das 
Buch "Elasticsearch - The Definitive Guide", das es bei Elastic.co 
online oder auch als gedruckte Version bei O'Reilly gibt.

Was die "Basis CSV" angeht: Elasticsearch arbeitet auf Basis von JSON. 
Das läßt sich allerdings in den meisten Programmiersprachen einfach aus 
CSVs erzeugen, für Python siehe in meinem zweiten Skript die Zeilen 54 
bis 58.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.