2021-08-15

R: Datenanalyse - Lokale Maxima finden

R ist eine Art Schweizer Messer für die Datenanlayse und Aufbereitung. Zusammen mit den Tidyverse Paketen schaffe ich es es in etwa 90% meiner Analysen abzudecken. Was oft noch dazu kommt sind Datenbankzugriff und Umformung von Datentabellen, das ersetze ich so langsam aber sicher durch tidyr. Für die Datenanalyse im Zuge meiner Dissertation bin ich auf das folgende interessante kleine Problem gestoßen. Ich will Daten, die geplottet das Bild unten ergeben, auswerten. Mich interessiert zu welchen Zeitpunkten im Siganl ein lokaler Hochpunkt auftritt.

Verlauf Spannung über Zeit

Das Plot ist in einer vollen Länge eher unhandlich und unübersichtlich. Zoomen wir also etwas hinein, dann werden die gesuchten lokalen Hochpunkte besser erkennbar. Das Ganze ist in etwa sinusförmig, das ist aufgrund der gemachten Messung auch erwartet. Der Anfangs des Datensatzes ist der Prozessstart und damit weniger gleichförmig. Sobald das läuft wie es soll, sollten in etwa die gezeigten Daten herauskommen. (Spoiler: Die gesuchten Punkte sind im Plot markiert, das Problem ist also mit Sicherheit lösbar)

Detailverlauf Spannung über Zeit

Das Problem ist mit dem Programmiergrundlagen aus dem Studium natürlich irgendwie lösbar. Das wird aber wahrscheinlich ein unschönes Schleifenkonstrukt mit gleitendem Mittelwert und if-Anweisungen, also nicht sehr im Stil von R. Als Nächstes gibt es die Möglichkeit ein Paket zu suchen, das die Aufgabe erledigt. Das ist schon mehr R-Stil, erhöht aber die Anzahl der Abhängigkeiten und nimmt die Freude am Selbermachen und damit auch die Chance etwas zu lernen.

Ich scheue immer etwas davor zurück eine neue Paketabhängigkeit zu schaffen. Ich muss mich in das Paket einarbeiten und es richtig anwenden. Mit etwas Pech stelle ich später fest, dass das Paket die Analyse die ich haben möchte doch nicht in der Form kann, die ich brauche.

Ran an die Daten

Meine Rohdaten sind in der Form:

> print(tdata, n=5)
# A tibble: 350,000 x 2
  messzeit      signal
     <dbl>       <dbl>
1  0        0         
2  0.00001  0         
3  0.00002  0         
4  0.00003 -0.00122070
5  0.00004  0.00122070
# … with 349,995 more rows     

Die Messzeit ist eine Gleitkommazahl, das Signal ist der skalierte Wert aus dem AD-Wandler der Messkarte. Der Zeitpunkt und y-Wert der Hochpunkte fällt aus diesem Anweisungsblock als Ergebnistabelle raus:

  thres <- 2
  tdata
  %>% mutate(valley = if_else(signal > thres, 0, 1))
  %>% mutate(grpsel = cumsum(valley))
  %>% mutate(peakgrp = if_else(valley == 0 , grpsel, 0))
  %>% filter(peakgrp > 0)
  %>% group_by(peakgrp)
  %>% summarise(t_hpt = messzeit[which.max(signal)], wert=max(signal))
  %>% ungroup()
  %>% select(-peakgrp)

und sieht so aus:

# A tibble: 1,569 x 2
    t_hpt   signal
     <dbl>   <dbl>
 1 0.00553 2.47437
 2 0.0147  2.08862
 3 0.07179 2.29980
 4 0.11683 4.82544
 5 0.13933 2.42920
 6 0.14211 3.12378
 7 0.14422 3.32764
 8 0.1938  2.90283
 9 0.19629 2.53052
10 0.20898 3.46924
# … with 1,559 more rows

Stellt sich noch die Frage: “Warum geht das?”

Das Ganze ist eine kreative Nutzung der Funktionen aus dem tidyverse, der %>% Operator nimmt das was links von ihm steht und verarbeitet das mir er Anweisung rechts, das kann man beliebig aneinander reihen. Die Einzelschritte lassen sich sogar im Plot mit darstellen.

Detailverlauf Spannung über Zeit

Zeilenweise Betrachtung:

  • thres <- 2 legt die Variable für einen Grenzwert mit dem Wert 2 an. Blaue Linie im Plot.
  • tdata steht links vom %>% stellt somit die Ausgangsdaten zur Verfügung
  • %>% mutate(valley = if_else(signal > thres, 0, 1)) fügt eine neue Spalte in den Datensatz ein, 1 wenn die Werte unterhalb von thres liegen, 0 wenn sie darüber liegen Das entspricht dann der orangen Linie. Der Wert thres ist dazu da die lokalen Maxima zu trennen. Es werden nur die positven Halbwellen betrachtet, das entspricht der schwarzen Line.
  • %>% mutate(grpsel = cumsum(valley)) legt eine neue Spalte mit den kummulierten Summe der Spalte valley an. Grüne Linie im Diagramm. Die hat die Eigenschaft, dass die Werte bei im Bereich von lokalen Hochpunkten konstant bleiben, sonst aber kontinuierlich steigen.
  • %>% mutate(peakgrp = if_else(valley == 0 , grpsel, 0)) erzeut die dritte und letzte Hilfsspalte (rote Linie). Die Bereich von peakgrp mit konstanten Werten werden erhalten, die anderen auf 0 gesetzt. Jetzt hat jeder Datenbereich um ein lokals Maximum einen einzigartigen Wert in peakgrp zugeordnet.
  • %>% filter(peakgrp > 0) entfernt alle Datenzeilen mit peakgrp == 0. Das sind alle Zeilen die nicht zu einem lokalen Maximum gehören.
  • %>% group_by(peakgrp) sorgt dafür das für Befehle wie mutate(), filter(), summarise(), gruppenweise vorgeganen wird. Alle Zeilen die in peakgrp den gleichen Wert haben werden als eine Gruppe behandelt.
  • %>% summarise(t_hpt = messzeit[which.max(signal)], wert=max(signal)) macht nach der ganzen Vorbereitung jetzt die Arbeit und fischt für jede Gruppe die Zeit des ersten Auftretens des jeweiligen Maximalwertes und den dazugehörgen Wert aus dem Signal.
  • %>% ungroup() entfernt die Gruppierung wieder von den Daten, sonst macht das evtl. in weiteren Analysen Probleme
  • %>% select(-peakgrp) löscht die Spalte peakgrp

Mit etwas “Out of the Box”-Denken lassen sie viele Probleme mit bekannten Mitteln und ohne neue Pakte/Bibliotheken lösen. Das schöne am Programmieren und Datenanalyse ist, das eine kreative Lösungssuche wirklich Spaß machen kann.

2021-08-10

Tür zu, Licht aus

Letzter Tag als WiMi an der Uni, letzter Tag als Nebentätigkeits-IT-Admin, Zeit für ein Resümee.

  • IT-Administration ist irgendwie undankbar, sobald man seine Sache gut macht erscheint man überflüssig. Das macht sachliche Argumentationen für mehr Resourchen etwas müßig.
  • Die Art wie man die Nutzer sieht wird in der IT-Sicherheit schnell zur selbterfüllenden Prophezeiung. Nutzer die als Teils des Problems gesehen und behandelt werden nehmen diese Rolle auch an. Nutzer die aktiv in die IT-Sicherheit eingebunden werden, (Schulungen, Infomails, Rückantworten bei Meldung von verdächtigen Dingen,…) sind fast immer Teil der Lösung.
  • Auch sehr kluge Menschen können sehr dumme Dinge tun. Die “dummen” Dinge sind aber meist nur aus Expertensicht klar “dumm”, runter vom hohen Ross.

Fehler sind menschlich. Zuhören hilft. Probleme lassen sich lösen.

2021-05-03

Datenbank für Versuchsdaten

Endlich, es ist geschafft. Alle Versuche für meine Promotion sind gemacht. Es bleibt “nur” noch das Auswerten, die externen Untersuchungen in Metallographie und Materialprüfung und das Schreiben der Dissertation. Etwas geschockt bin ich von den Datenmengen die sich ergeben haben.

MBL Versuchdaten

17,6 GB an Datenbanktabellen und Ansichten. R-Studio aufrufen, Datenbankverbindung herstellen und auswerten, auswerten, auswerten…

2021-02-02

EMOTET, it is dead Jim

EMOTET ist tot, das sind gute Nachrichten. Das war lange Zeit eine ständige Bedrohung. Grund zum entspannen ist das aber nicht, das grundsätzliche Strukturproblem aus Outlook/Exchange, ActiveDirectory und aktiven Inhalten in Officedokumenten besteht weiterhin. Mit den Attacken ist Geld zu machen, also wird früher oder später einen Nachfolgeschädling geben. Es bleibt weiterhin wichtig wachsam zu bleiben, Lücken zu identifizieren und zeitnah zu schließen, die Nutzer zur Qualifiziern.

2021-01-04

Private E-Mail, weniger nervig - Teil 1

Ich bin so alt, das ich noch eine Zeit ohne E-Mail kenne. Dann kam die Zeit als E-Mail etwas neues und aufregendes war. Neu ist das Medium außer im Regierungsviertel von Berlin nun nicht mehr und auch das “aufregend” hat mit der Zeit einen massiven Bedeutungswechsel erfahren - leider zum negativen.

Die Anzahl der E-Mails hat - zumindest bei mir - immer weiter zugenommen, die Werkzeuge um mit E-Mails umzugehen werden gefühlt von Version zu Version blöder. Kacheloptik, gestreamlinete GUI, Assistenten und Wizzards stehen im Zielkonflikt zum effektiven Arbeiten. Wenn ich auf Einfachheit optimiere, fällt komplexes hinten über. Kommen dann noch so exotische Dinge wie Verschlüsselung und Signaturen hinzu wird es ganz eng. Thunderbird bekam das mit Enigmail irgendwie hin, K9-Mail mit Plugins auch. Beides keine schlechten E-Mail Programme aber für mich auch nicht des gelbe vom Ei.

Fragt sich halt ob das nicht irgendwie besser geht. Was bedingt das “besser” nach den persönlichen Bedürfnissen ausformuliert wird.

Was will ich?

  • E-Mails zentral an einem Ort. IMAP kann das.
  • Suchfunktion. Die von Thunderbird finde ich furchtbar, die von KMail auch.
  • Keine HTML-E-Mails. Das ist eine furchtbare Unart, die sich mit den Freemailern und ihrem “Briefpapier” für E-Mails unauslöschliche in die Hirne eingebrannt hat. E-Mail ist Text und evtl. Anhänge. HTML und am besten noch aktive Inhalte sind ein Sicherheitsrisiko.
  • Neue E-Mails schnell überfliegen, wichtige zur Bearbeitung markieren, unwichtige zur Kenntniss nehmen und Spam sofort loswerden.
  • Nicht jede E-Mail einzeln mit dem Mauszeiger erlegen müssen, Tastaturbedienung so weit wie möglich.
  • GnuPG integration

Wie löse ich das?

  • Raspberry als zentrales E-Mail-Schreibsystem
  • postfix mit smarthost zum Versenden von E-Mails.
  • Offlineimap für die Sychronisation von lokalen E-Mails und dem IMAP-Postfach.
  • Notmuch zur Indizierung der E-Mails.
  • Mutt (neomutt) als E-Mail Programm mit vim als Editor.
  • Remote Login über ssh.

2020-04-14

KMail und EWS

Corona macht es möglich, zumindest für die Zeit des Lockdowns ist das möglich was ja eigentlich gar nicht geht, im offentlichen Dienst: Homeoffice

Das Ganze kann recht Produktiv sein, wenn man das auf dem Schirm hatte und darauf vorbereitet ist wahrscheinlich noch mehr, als wenn man das aus dem Blauen heraus mal eben schnell macht…

Wir als Institut nutzen MS Produkte, Office, Outlook, den üblichen Kram halt, ist mir auf dem Arbeitsrechner egal. Auf meinen privaten Rechner kommt kein Windows, nen Arbeitsnotebook hab ich nicht. Meine Arbeit kann ich auch ohne die MS-Programme machen. Die Bürokommunikation ist aber ein Thema.

Mit der Outlook Webmail bin ich eher weniger zufrieden. Angeblich kann KMail aber EWS Zugriff und mir somit die wunderbare Outlookwelt für die Homeofficezeit in mein Mailprogramm holen. Ja, kann man konfigurieren, es hat aber einen Bug. Das Gelumpe merkt sich das Passwort nicht.

mit:

qdbus org.freedesktop.Akonadi.Resource.akonadi_[TABCOMPLETE] /Settings org.kde.Akonadi.Ews.Wallet.setPassword "[PASSWORT]" 

wird das Passwort dann doch abgespeichert. Was evtl. noch hilfreich ist wenn das Autodiscover der EWS-URL nicht klappt muss etwas in der Form eingetragen werden:

https://[Adresse zum Webmaillogin]/EWS/Exchange.asmx 

Da hängt bei uns irgendwas in der Konfiguration. Das sehe ich mir dann mal an wenn ich alle Nutzer irgendwie homeofficefähig bekommen habe. Im Moment steht das Telefon nicht still.

2019-08-15

KUKA H5000/1000 - Neue Steuerung für die alte Dame

Nach einer außerplanmäßigen Anlagenstilllegung der KUKA H5000/1000 MagnetArc durch einen Ausfall der Steuerung (Siemens S5) Anfang 2017 gab es zwei Probleme.

  1. Die Anlage läuft nicht mehr
  2. Meine Promotion war für diese Anlage, bzw. Versuche darauf geplant.

Verzweifeln macht keinen Sinn, eine Lösung musste her. Neue Steuerung, neues Bedienfeld und - da wir schon dabei sind - funktionelle Erweiterung, um aus der industriellen Fertigungsanlage (ein Geschenk von VW) eine Forschungsanlage zu machen.

S7 1500

Nur 2 SPS-Schulungen, stundenlang Umbauten, Kabel ziehen, Dokumentationen und alten Quellcode lesen, programieren und debuggen kann ich mit den Worten von Dr. Frankenstein sagen: “Es lebt! Es lebt!”

Das ganze wäre ohne die großartige Teamarbeit mit unserem Elektronik Ingenieur nicht möglich gewesen.

2019-06-24

Pseudopresseartikel

Du brauchst einen Mac, damit du bei StarXucks nicht so untrendig aussiehst? Du hast so viel 12€ Zuckerlikör mit Minimalkaffeeanteil getrunken, dass die Kohle nicht mehr für ein Neugerät reicht? Heise hat da den Guide, wie du dein restliches Geld für Althardware mit Obstlogo rauswerfen kannst. Und weil du für Unkaffee und Obsthardware zu blechen bereit bist, kannst du auch gleich noch Heise+ abschließen, damit du den ganzen wertvollen Artikel lesen kannst. Deal? Kostet nur 9,95€/Monat und ist dafür nicht werbefrei. Wer wartet bei so einem Angebot noch ab?

2019-06-24

Neues Blog

Alles neu macht der Mai Juni. Ich habe ein neues Blog aufgesetzt. Kein PHP, kein Java, kein Tracking, keine aktiven Inhalte.

Das Ganze ist eine statische Seite die mit HUGO zusammengebaut wird. Das erspart meinem Webserver den ganzen PHP-Kram und im Browser wird auch kein JS ausgeführt.

© Oliver Grünzel 2023
Impressum & Datenschutz