<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />In meinem vorherige Im Blogbeitrag habe ich beschrieben, wie ich meine BodyMedia®-Aktivitätszusammenfassungsdatendateien aus Excel in JMP importiert habe. Heute werde ich erzählen, wie ich den Import meiner BodyMedia®-Ernährungsprotokolle aus fast vier Jahren in JMP automatisiert habe. Ich habe auch eine hochgeladen Add-in zum JMP File Exchange, mit dem Sie Ihre eigenen Aktivitätszusammenfassungs- und Lebensmittelprotokolldateien sowie CSV-formatierte Lebensmittelprotokolldateien von der beliebten und kostenlosen MyFitnessPal-Website zur Lebensmittelprotokollierung importieren können.
Für mein Plakatprojekt (Details siehe unten) habe ich JSL-Skripte erstellt, um fast 50 Excel-Dateien mit Aktivitätszusammenfassungen und 50 aus der BodyMedia®-Software exportierte Lebensmittelprotokolldateien für den Zeitraum vom 20.12.10 bis zum 28.07.14 zu kombinieren, zu analysieren und zu formatieren. Ich habe meine Ernährungsprotokolldateien aus der webbasierten BodyMedia® Activity Monitor-Software im PDF-Format exportiert.
Als ich anfing, mit meinen Lebensmittelprotokolldateien zu arbeiten, wurde mir klar, dass ich sie nicht direkt verarbeiten konnte, da JMP den Import aus dem PDF-Format nicht unterstützt. Die folgende Erfahrung gab mir ein viel besseres Verständnis dafür, warum das so ist. Ich habe gehört, dass Kunden vorschlagen, dass JMP Unterstützung für den PDF-Import hinzufügen sollte, und JMP-Entwickler antworten, dass Tabellen in PDFs für Präsentationszwecke gedacht seien und oft nicht in einem regulären Format organisiert seien, wie andere von JMP unterstützte Dateitypen. Ich habe das am eigenen Leibe mit meinen eigenen Akten erlebt!
Anfangs dachte ich, ich könnte meine PDF-Ernährungsprotokolldateien in das Excel-Format konvertieren und sie mit einem ähnlichen Ansatz wie früher importieren Meine Aktivitätszusammenfassungsdateien importieren . Obwohl ich verschiedene Softwareprodukte ausprobiert habe, die eine einfache PDF-zu-Excel-Konvertierung versprechen, kann ich die gesamte Erfahrung nur als epischen Fehlschlag bezeichnen. Ich stellte fest, dass die Struktur der konvertierten Tabellen von Seite zu Seite sehr unregelmäßig war. Nachdem ich eine Stunde damit verbracht hatte, eine einzelne Excel-Datei manuell in ein reguläreres Format zu bearbeiten, gab ich auf. Ich konnte mir nicht vorstellen, eine Minute länger mit dieser unglaublich langweiligen Aufgabe zu verbringen, und zu diesem Zeitpunkt hatte ich 40 Dateien zu verarbeiten! Ich war nicht bereit, bis zum Discovery Summit 2017 zu warten, um meine Daten zu importieren, also beschloss ich, nach einer einfacheren und schnelleren Route zu suchen.
Ich habe herausgefunden, dass ich meine PDF-Dateien mit Adobe Acrobat als Textdateien speichern kann. Leider enthielten die Dateien durch Leerzeichen getrennte Artikelnamen unterschiedlicher Länge, gefolgt von durch Leerzeichen getrennten Zahlen, die Kalorien, Portionsgröße und Makronährstoffmengen darstellten. Die Point-and-Click-Textimportoptionen in JMP erfordern feste Längen oder Trennzeichen zwischen den Feldern, sodass keine der Optionen aus meinen Dateien eine analysebereite Datentabelle erstellt hat. Stattdessen habe ich beschlossen, meine Dateien mithilfe einer Schleife zu importieren und zu kombinieren, deren Struktur der Schleife ähnelt, die ich zum Importieren meiner Excel-Dateien mit der Aktivitätszusammenfassung geschrieben habe. (Wenn Sie meine früheren Beiträge gelesen haben, wissen Sie, dass ich stark von einem JSL-Beispiel für den Textimport aus dem übernommen habe SESUG-Papier geschrieben von Michael Hecht .
Sobald meine Dateien importiert und verkettet waren, konnte ich mithilfe regulärer Ausdrücke in JSL einzelne Informationen aus jeder Textzeile analysieren. Anfangs hatte ich etwas Angst vor diesem Weg. Obwohl ich in der Graduiertenschule Perl für reguläre Ausdrücke verwendet hatte, waren meine Regex-Fähigkeiten eingerostet und ich hatte zuvor noch keine Regexes in JSL verwendet. Ich habe den JMP-Entwickler Craige Hales besucht, der die Engine für reguläre Ausdrücke in JMP implementiert hat, und er hat mir jede Menge Anregungen und Hinweise auf hilfreiche Beispiele gegeben.
Um meine Tabelle für die weitere Analyse zu formatieren, musste ich alle Zeilen in der Tabelle durchlaufen und Muster abgleichen, die Datumsangaben, Mahlzeitennamen, Kaloriengehalt und Gramm verschiedener Makronährstofftypen entsprachen. Ich habe Schleifen wie die folgenden verwendet, um die benötigten Daten zu analysieren und jede Information in einer eigenen Spalte zu platzieren. Unten habe ich nach dem Namen der Mahlzeit gesucht und ihn dort erfasst, wo er erschien – in der ersten Zeile für jeden Tag. Anschließend füllte ich die Zellen der Spalte „Mahlzeit“ mit diesem Wert für den Namen der Mahlzeit, bis ich auf eine neue Übereinstimmung stieß, die den Beginn der Elemente für die nächste Mahlzeit angab.
//Mahlzeit einfangen
für (c=1, c <= y, c++,
string = Combinedlog:Lifestyle- und Kalorienmanagementsystem;
//Auf Übereinstimmung mit dem Mahlzeitennamen prüfen
w = ( Regex-Match (
Schnur,
Pat Regex("^(Frühstück|AM-Snack|Mittagessen|PM-Snack|Abendessen|Spätsnack) (.*$)")));
if (N Items(w) == 0,
Kombiniertes Protokoll: Mahlzeit= Mahlzeit;
weitermachen ());
Combinedlog:Lifestyle- und Kalorienmanagementsystem= w[3];
Kombiniertes Protokoll: Mahlzeit= w[2];
Mahlzeit = w[2];
);
Ich habe alle benötigten Informationen mithilfe der oben gezeigten allgemeinen Regex-Matching-Strategie extrahiert. Nachdem ich die endgültige Version meines Skripts ausgeführt hatte, hatte ich eine schön formatierte Tabelle mit 34.432 Zeilen mit Namen von Nahrungsmitteln mit zugehörigen Kalorien- und Makronährstoffinformationen, geordnet nach Datum und Mahlzeit.
Wenn Sie BodyMedia-Ernährungsprotokolldateien im PDF-Format gespeichert haben, können Sie diese in Textdateien in Adobe Acrobat speichern und meine herunterladen Add-in aus dem JMP File Exchange, um einen Point-and-Click-Import Ihrer eigenen Lebensmittelprotokolldateien in JMP durchzuführen. Die Tools in diesem Add-in unterstützen Aktivitätszusammenfassungsdateien, als Text gespeicherte Lebensmittelprotokolldateien und aus MyFitnessPal exportierte Lebensmittelprotokolltextdateien. Besonderer Dank geht an JMP-Testmanagerin Audrey Shull und Testerin Melanie Drake für Skriptvorschläge und Hilfe beim Add-In-Testen!
Leider war das Siegesgefühl, das ich durch meinen erfolgreichen Import verspürte, nur von kurzer Dauer. Eine kurze Zusammenfassung meiner Tabelle ergab, dass sie mehr als 1.800 eindeutige Lebensmittelnamen enthielt! Mir wurde klar, dass meine Arbeit mit dieser Datentabelle gerade erst begann. Mein Lebensmittelprotokoll war voller Namensinkonsistenzen, da ich im Laufe der Jahre eine Vielzahl unterschiedlich benannter, aber sehr ähnlicher Artikel aus der Lebensmitteldatenbank ausgewählt hatte. Ich musste die Namen meiner Lebensmittel bereinigen und sie sinnvoller gruppieren, wenn ich beginnen wollte, die Muster in meinen Lebensmittelprotokolldaten zu verstehen. Seien Sie gespannt auf den vierten Teil dieser Blogserie, um mehr über meine Abenteuer bei der Umkodierung von Lebensmittelnamen zu erfahren.
Schauen Sie sich dieses aktuelle an Blogeintrag um mehr darüber zu erfahren, wie mein Interesse an Projekten zur quantifizierten Selbstanalyse (QS) mich dazu veranlasste, ein E-Poster zum Discovery Summit 2014 mit dem Titel „Analyse persönlicher Ernährungs- und Fitnessdaten mit JMP“ zu erstellen. Wenn Sie mein E-Poster auf der Konferenz in Cary nicht sehen konnten, können Sie sich anmelden und es ansehen eine PDF-Version im Abschnitt Discovery Summit 2014 der JMP User Community.