Withings Blutdruckdaten, oder: Darf eine CSV aussehen, wie sie will?
Verfasst: Mo Mai 01, 2023 2:17 pm
Hallo Leute,
ich muss da mal mit jemandem drüber reden. Eine konkrete Datenverarbeitungsfrage folgt da jetzt nicht.
Die Firma Withings gilt als einer der Qualitätsanbieter für kleine Messgeräte, die im Alltag Gesundheitsdaten erfassen. Also Uhren die den Puls oxymetrieren und Puls und GPS zusammenbringen, damit man sieht, wo man beim Joggen war und Körperwaagen, bei denen man das Gewicht dann auf dem Handy statt auf dem Gerät ablesen kann und von denen ist mir jetzt ein Blutdruckmessgerät in die Hände gekommen. Eine schöne breite Manschette für den Oberarm, eine Akku-getriebene Luftpumpe, über USB aufladbar und natürlich werden die Daten in einer App im Handy gespeichert.
Die Grafiken in der App sind himmelschreiend (muss man jetzt nicht erläutern, als Beispiel: Achsen darf man auch in Apps beschriften), aber dafür kann man unter dem Menüpunkt "Daten mit dem Arzt teilen" ein CSV verschicken. Ich weiß nicht, wieviele Hausärzte Lust und Zeit haben, sich CSV-Dateien anzuschauen, aber eine CSV-Exportfunktion ist ja erstmal immer richtig. Gesagt, getan, jetzt beginnt das CSV so:
Ein Blick auf die erste Zeile verrät: Das ist ein csv mit Semikolon als Trennzeichen. Stimmt halt nicht, denn außer in der header-Zeile kommt kein Semikolon mehr vor! Stattdessen verwenden wir ein "T" als Trennzeichen zwischen Datum und Uhrzeit und ein Komma zwischen den Messwerten als Trennzeichen und dann für eine Blutdruckmessung mit Luftmanschette den Zeitpunkt mit drei Nachkommastellen für die Sekunde.
Nicht, dass diese drei Nachkommastellen für die Sekunden jemals mit was anderem als 000 gefüllt wären, aber als nächstes fällt einem dann auf, dass mehrere Messungen auf die Tausendstel Sekunde genau gleichzeitig erfolgt sind. Hä? Ach so, jede Zeile ist doppelt vorhanden
Ich weiß, dass CSV kein wirklich standardisiertes Format ist. Jeder ist frei, damit zu machen, was er will. Aber warum wollen Menschen so einen Quatsch? Was hat ein Programmierer geraucht, der zwischen erster und folgenden Zeilen das Trennzeichen wechselt? Wieso soll ich glauben, dass diese Software gründlich genug für meine Gesundheitsvorsorge geschrieben wurde, wenn die Gründlichkeit nicht mal gereicht hat, die Zahl der Messungen mit der Zahl der Einträge abzugleichen? Und welcher Hausarzt soll solche Daten lesen?
Ich kann da nur Kopfschütteln. Und falls jemand über Withings und CSV diesen Post gefunden haben sollte: Vorläufig visualisiere ich die Daten wie folgt (falls jemand anderes solche Daten verarbeite muss):
Ganz ehrlich, werde ich das noch erleben, dass wir uns auf ein brauchbares Datenformat für so einfache Tabellen einigen?
LG,
Bernhard
ich muss da mal mit jemandem drüber reden. Eine konkrete Datenverarbeitungsfrage folgt da jetzt nicht.
Die Firma Withings gilt als einer der Qualitätsanbieter für kleine Messgeräte, die im Alltag Gesundheitsdaten erfassen. Also Uhren die den Puls oxymetrieren und Puls und GPS zusammenbringen, damit man sieht, wo man beim Joggen war und Körperwaagen, bei denen man das Gewicht dann auf dem Handy statt auf dem Gerät ablesen kann und von denen ist mir jetzt ein Blutdruckmessgerät in die Hände gekommen. Eine schöne breite Manschette für den Oberarm, eine Akku-getriebene Luftpumpe, über USB aufladbar und natürlich werden die Daten in einer App im Handy gespeichert.
Die Grafiken in der App sind himmelschreiend (muss man jetzt nicht erläutern, als Beispiel: Achsen darf man auch in Apps beschriften), aber dafür kann man unter dem Menüpunkt "Daten mit dem Arzt teilen" ein CSV verschicken. Ich weiß nicht, wieviele Hausärzte Lust und Zeit haben, sich CSV-Dateien anzuschauen, aber eine CSV-Exportfunktion ist ja erstmal immer richtig. Gesagt, getan, jetzt beginnt das CSV so:
Code: Alles auswählen
Date;SYS;DIA;BPM
2023-04-19T17:38:27.000+02:00,158,106,62
2023-04-19T17:38:27.000+02:00,158,106,62
2023-04-19T17:46:34.000+02:00,149,98,64
2023-04-19T17:46:34.000+02:00,149,98,64
2023-04-19T18:05:48.000+02:00,150,95,67
2023-04-19T18:05:48.000+02:00,150,95,67
2023-04-19T18:10:07.000+02:00,158,95,67
2023-04-19T18:10:07.000+02:00,158,95,67
2023-04-19T18:15:43.000+02:00,155,95,69
2023-04-19T18:15:43.000+02:00,155,95,69
2023-04-19T18:31:43.000+02:00,146,88,71
2023-04-19T18:31:43.000+02:00,146,88,71
2023-04-19T18:43:43.000+02:00,149,94,69
2023-04-19T18:43:43.000+02:00,149,94,69
2023-04-19T19:34:44.000+02:00,143,90,62
2023-04-19T19:34:44.000+02:00,143,90,62
2023-04-19T21:47:37.000+02:00,161,86,72
2023-04-19T21:47:37.000+02:00,161,86,72
2023-04-20T14:07:53.000+02:00,140,91,77
2023-04-20T14:07:53.000+02:00,140,91,77
2023-04-20T14:17:26.000+02:00,148,92,68
2023-04-20T14:17:26.000+02:00,148,92,68
2023-04-20T14:19:00.000+02:00,147,92,72
2023-04-20T14:19:00.000+02:00,147,92,72
2023-04-25T12:46:24.000+02:00,147,96,80
2023-04-25T12:46:24.000+02:00,147,96,80
2023-04-25T14:54:06.000+02:00,140,99,88
2023-04-25T14:54:06.000+02:00,140,99,88
2023-04-26T07:24:36.000+02:00,180,95,84
2023-04-26T07:24:36.000+02:00,180,95,84
Nicht, dass diese drei Nachkommastellen für die Sekunden jemals mit was anderem als 000 gefüllt wären, aber als nächstes fällt einem dann auf, dass mehrere Messungen auf die Tausendstel Sekunde genau gleichzeitig erfolgt sind. Hä? Ach so, jede Zeile ist doppelt vorhanden
Ich weiß, dass CSV kein wirklich standardisiertes Format ist. Jeder ist frei, damit zu machen, was er will. Aber warum wollen Menschen so einen Quatsch? Was hat ein Programmierer geraucht, der zwischen erster und folgenden Zeilen das Trennzeichen wechselt? Wieso soll ich glauben, dass diese Software gründlich genug für meine Gesundheitsvorsorge geschrieben wurde, wenn die Gründlichkeit nicht mal gereicht hat, die Zahl der Messungen mit der Zahl der Einträge abzugleichen? Und welcher Hausarzt soll solche Daten lesen?
Ich kann da nur Kopfschütteln. Und falls jemand über Withings und CSV diesen Post gefunden haben sollte: Vorläufig visualisiere ich die Daten wie folgt (falls jemand anderes solche Daten verarbeite muss):
Code: Alles auswählen
pfad <- "C:\\Users\\bigben\\Downloads\\bloodPressure.csv"
bp <- read.csv(pfad, sep = ",", skip = 1, header = FALSE)
names(bp) <- c("Zeit_char", "Sys", "Dia", "Puls")
str(bp)
bp$Zeit <- as.POSIXct(bp$Zeit, format = "%Y-%m-%dT%H:%M:%OS")
library(ggplot2)
library(ggpubr)
ggarrange(
ggplot(bp) +
scale_y_continuous(name = "Blutdruck [mmHg]", breaks = seq(0,300, 20),
limits = c(min(c(bp$Dia), 60), max(c(220, bp$Sys))),
position = "right") +
xlab("") +
geom_hline(yintercept = c(85, 90, 160, 180)) +
geom_point(aes(x = Zeit, y = Sys)) +
geom_point(aes(x = Zeit, y = Dia)) +
geom_errorbar(aes(x = Zeit, ymin = Dia, ymax = Sys)) +
theme_bw()
,
ggplot(bp, aes(x = Zeit, y = Puls)) +
#geom_line(alpha = .5) +
geom_point() +
scale_y_continuous(name = "Puls [1/min]", position = "right") +
theme_bw()
,nrow = 2, align = "v", heights = c(2, 1)
)
LG,
Bernhard