In meinem vorheriger Blogeintrag Ich habe beschrieben, wie ich meine BodyMedia® Activity Summary-Datendateien aus Excel importierte JMP . Heute werde ich Ihnen erzählen, wie ich fast vier Jahre lang meine BodyMedia®-Nahrungsmittelprotokolle in JMP importiert habe. Ich habe auch eine hochgeladen Add-In zu JMP File Exchange, mit dem Sie Ihre eigenen Aktivitätszusammenfassungs- und Lebensmittelprotokolldateien sowie CSV-formatierte Lebensmittelprotokolldateien von der beliebten und kostenlosen MyFitnessPal-Website für Lebensmittelprotokolle importieren können.
Zum mein Plakatprojekt (Details siehe unten), ich habe JSL-Skripts erstellt, um nahezu 50 Aktivitätszusammenfassungs-Excel-Dateien und 50 Lebensmittelprotokolldateien zu kombinieren, zu analysieren und zu formatieren, die von BodyMedia®-Software für den Zeitraum vom 20.12.2010 bis zum 28.07.14 exportiert wurden. Ich habe meine Lebensmittelprotokolldateien 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 kann, da JMP den Import aus dem PDF-Format nicht unterstützt. Die folgende Erfahrung vermittelte mir ein viel besseres Verständnis dafür, warum dies der Fall 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 PDF-Dateien zu Präsentationszwecken vorgesehen sind und oft nicht in einem normalen Format organisiert sind, wie dies bei anderen Dateitypen der Fall ist, die JMP unterstützt. Das habe ich mit eigenen Dateien hautnah erlebt!
Anfangs dachte ich, ich könnte meine PDF-Protokolldateien in das Excel-Format konvertieren und mit einem ähnlichen Ansatz importieren wie ich Importieren Sie meine Aktivitätsübersichtsdateien . Ich habe zwar verschiedene Softwareprodukte ausprobiert, die eine einfache Konvertierung von PDF in Excel versprechen, aber ich kann die gesamte Erfahrung nur als epischen Fehlschlag charakterisieren. Ich fand, 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 normaleres Format zu editieren, gab ich auf. Ich konnte mir nicht vorstellen, eine Minute mehr für diese unglaublich langweilige Aufgabe auszugeben, und ich hatte zu diesem Zeitpunkt 40 Dateien zu bearbeiten! Ich war nicht bereit, bis zum Discovery Summit 2017 zu warten, um meine Daten importieren zu lassen. Daher entschied ich mich für eine einfachere und schnellere Route.
Ich habe festgestellt, 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 repräsentieren. Die Optionen zum Importieren von Text per Mausklick in JMP erfordern eine feste Länge oder Trennzeichen zwischen Feldern, sodass keine Option eine auswertungsbereite Datentabelle aus meinen Dateien erstellt hat. Stattdessen beschloss ich, meine Dateien mithilfe einer Schleife zu importieren und zu kombinieren, die der von mir geschriebenen ähnelt, um meine Excel-Dateien für die Aktivitätszusammenfassung zu importieren. (Wenn Sie meine früheren Beiträge gelesen haben, wissen Sie, dass ich mich stark an einem Textimport-JSL-Beispiel aus dem SESUG-Papier geschrieben von Michael Hecht .
Nachdem meine Dateien importiert und verkettet wurden, konnte ich einzelne Informationen aus jeder Textzeile mithilfe regulärer Ausdrücke in JSL analysieren. Ich hatte zuerst einige Bedenken über diesen Weg. Obwohl ich in der Graduiertenschule Perl für reguläre Ausdrücke verwendet hatte, waren meine Regex-Fähigkeiten verrostet, und ich hatte in JSL noch keine Regexes verwendet. Ich besuchte den JMP-Entwickler Craige Hales, der die Engine für reguläre Ausdrücke in JMP implementierte, und er gab viele Anregungen und Hinweise für hilfreiche Beispiele.
Um meine Tabelle für die weitere Analyse zu formatieren, musste ich alle Zeilen in der Tabelle durchlaufen und Muster abgleichen, die Datumsangaben, Namen der Mahlzeiten, Kaloriengehalt und Gramm verschiedener Makronährstoffarten entsprachen. Ich verwendete Schleifen wie die folgenden, um die benötigten Daten zu analysieren und jede Information in eine eigene Spalte zu bringen. Unten habe ich nach dem Namen der Mahlzeit gesucht und sie von dort erfasst, wo sie aufgetaucht ist - in der ersten Zeile für jeden Tag. Dann füllte ich die Zellen der Spalte "Mahlzeit" mit diesem Namen für die Mahlzeit, bis ich auf eine neue Übereinstimmung stieß, die den Beginn der Artikel für die nächste Mahlzeit anzeigt.
// Mahlzeit einnehmen
für (c = 1, c <= y, c ++,
string = Combinedlog: Lifestyle- und Kalorienmanagementsystem;
// Suche nach Übereinstimmung mit dem Namen der Mahlzeit
w = (Regex Match (
Schnur
Pat Regex ("^ (Frühstück | AM-Snack | Mittagessen | PM-Snack | Abendessen | Late Snack) (. * $)")));
if (N Elemente (w) == 0,
Kombiniertes Protokoll: Mahlzeit = Mahlzeit;
fortsetzen ());
Combinedlog: Lifestyle- und Kalorienmanagementsystem = w [3];
Kombiniertes Protokoll: Mahlzeit = w [2];
Mahlzeit = w [2];
);
Ich habe alle Informationen herausgesucht, die ich brauchte, um die oben gezeigte allgemeine Strategie für den regulären Ausfluss zu verwenden. 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 und den zugehörigen Kalorien- und Makronährstoffinformationen, die nach Datum und Mahlzeit sortiert waren.
Wenn Sie BodyMedia-Lebensmittelprotokolldateien im PDF-Format gespeichert haben, können Sie sie in Textdateien in Adobe Acrobat speichern und my herunterladen Add-In von JMP File Exchange aus, um per Mausklick Ihre eigenen Nahrungsmittelprotokolldateien in JMP zu importieren. Die Tools in diesem Add-In unterstützen Aktivitätsübersichtsdateien, als Text gespeicherte Lebensmittelprotokolldateien und Textdateien für Lebensmittelprotokolle, die aus MyFitnessPal exportiert wurden. Besonderer Dank geht an JMP-Testmanagerin Audrey Shull und Tester Melanie Drake für Scripting-Vorschläge und Add-In-Testhilfe!
Leider war das Gefühl des Sieges, das ich von meinem erfolgreichen Import empfand, nur von kurzer Dauer. Eine kurze Zusammenfassung meiner Tabelle ergab, dass es> 1.800 eindeutige Namen von Lebensmitteln enthielt! Mir wurde klar, dass meine Arbeit mit dieser Datentabelle gerade erst begann. Mein Essensprotokoll war mit Namensinkonsistenzen gefüllt, da ich im Laufe der Jahre eine Vielzahl unterschiedlich benannter, aber sehr ähnlicher Artikel aus der Datenbank mit Lebensmitteln ausgewählt hatte. Ich musste die Namen meiner Lebensmittel aufräumen und sie sinnvoller gruppieren, wenn ich die Muster in meinen Lebensmittelprotokolldaten verstehen wollte. Bleiben Sie dran für den vierten Teil dieser Blog-Serie, um mehr über meine Abenteuer bei der Umcodierung von Namen zu erfahren.
Schauen Sie sich diese kürzlich an Blogeintrag um mehr darüber zu erfahren, wie mein Interesse an quantifizierten Selbst- (QS-) Analyseprojekten mich veranlasst hat, ein e-Poster des Discovery Summit 2014 zu erstellen Analyse persönlicher Diät- und Fitnessdaten mit JMP. ” Wenn Sie mein E-Poster bei der Konferenz in Cary nicht sehen konnten, können Sie sich anmelden und sehen eine PDF-Version im Abschnitt Discovery Summit 2014 der JMP User Community.