Wenn du mein lesen letzter Beitrag Dann wissen Sie, dass ich mir in der Weihnachtszeit Daten schenke! Das Sammeln von Daten zu meinen Ernährungs- und Fitnessgewohnheiten ist für mich ein Geschenk, das immer weitergeht. Obwohl ich nicht alle meine Datensätze täglich betrachten kann, sind die Informationen vorhanden, wenn ich sie verwenden muss, um mir zu helfen, meine Muster zu verstehen.
Das Sammeln von Lebensmitteldaten ist für mich jedoch nicht nur eine Gewohnheit des Urlaubs. Ich habe die Lebensmittel, die ich zu jeder Mahlzeit das ganze Jahr über esse, seit fast fünf Jahren protokolliert. Ich habe die meiste Zeit mit BodyMedia-App gearbeitet, bevor MyFitnessPal Anfang dieses Jahres eingeführt wurde. Ich präsentierte ein Poster auf der JMP Discovery 2014 , die beschrieben wie ich Ich habe meine BodyMedia-Food-Log-Daten in JMP importiert Speichern Sie mehrere PDF-Dateien in Text, verketten Sie sie und verwenden Sie reguläre Ausdrücke, um Details in Spalten in einer JMP-Tabelle zu analysieren. MyFitnessPal hat mir einige Schritte erspart, indem ich eine Berichtsausgabe erstellte, die als einzelne Textdatei gespeichert werden kann. Ich brauchte jedoch noch die Regex-Analyse, um eine verwendbare JMP-Tabelle zu erstellen.

Ich habe den aus meinen BodyMedia- und MyFitnessPal-Nahrungsmittelprotokollen abgeleiteten Text in parallelen, aber separaten Prozessen verarbeitet, die ganz am Ende in einer einzigen einheitlichen Tabelle zusammengeführt wurden.
Die große Herausforderung: Daten aus zwei Quellen zusammenführen
Die größte Herausforderung, die ich kürzlich gelöst habe, war die Vereinheitlichung dieser beiden Datentabellen für Lebensmittelprotokolle. Meine Erfahrung mit der Lösung dieses Problems ist für jeden relevant, der Daten aus verschiedenen Quellen zusammenführen muss.
Geringfügige Unterschiede wie Spaltennamen und Formattypen waren leicht anzupassen und unabhängig davon, dass jede Tabelle einige eindeutige Spalten enthielt - diese hatten einfach fehlende Werte für Zeilen ohne Werte. Das Hauptproblem bestand darin, dass es so wenige Fälle gab, in denen die Elementnamen in beiden Datenbanken gleich waren, dass ich die beiden Tabellen mit parallelen, aber separaten Prozessen bereinigen musste.
Ich wusste bereits, dass mein BodyMedia-Lebensmittelprotokoll viele Fälle redundanter Namen enthielt, die im Wesentlichen auf das gleiche Lebensmittel bezogen waren. Dies machte es für mich viel schwieriger, Daten über diese Elemente zu sammeln, um nach Mustern zu suchen. Ich habe die JMP 12 Recode-Plattform verwendet, um ähnliche Elementnamen in einem Satz gereinigter Elementnamen und zu gruppieren hat diesen Prozess in einem früheren Blogbeitrag beschrieben .
MyFitnessPal enthält sogar noch mehr Markennamen und vom Benutzer zur Verfügung gestellte Artikel als BodyMedia, wodurch das Problem der Namensredundanz noch größer wird. Als ich zu MyFitnessPal wechselte, um meine Nahrungsmittel zu protokollieren, hatte ich versucht, mein BodyMedia-Skript erneut zu verwenden, um die Namen meiner MyFitnessPal-Elemente neu zu codieren. Bei so wenigen gemeinsamen Elementnamen zwischen den Datenbanken war es jedoch sinnvoller, ein vollständig separates Recode-Skript für das MyFitnessPal-Projekt zu erstellen.
Namen von Lebensmitteln konsolidieren
Mein Wunsch, meine zwei Datentabellen zu kombinieren, um die Essgewohnheiten der Ferien zu untersuchen, wurde zu einer guten Motivation, um herauszufinden, wie die gereinigten Objektnamen aus beiden Tabellen am effizientesten zu einem einzigen konsolidierten Satz von Objektnamen zusammengeführt werden können. Natürlich wollte ich am Ende der Übung ein Recode-Skript speichern, das sich auf das bezieht Original Elementnamen, so dass ich dieses Skript weiterhin aktualisieren konnte, während ich meinem MyFitnessPal-Protokoll neue Elemente hinzufügte.
Nachdem ich die Spaltennamen und -formate für Konsistenz angepasst hatte, verkettete ich die Tabellen, wählte die Spalte Cleaned Item Name und öffnete die Recode-Plattform. Da ich in beiden Tabellen ähnliche Muster zum Umbenennen von Elementen verwendet hatte, wurden viele Elemente nebeneinander angezeigt. Ich habe den Rest der Elemente durchgearbeitet, ähnliche Werte gruppiert und das Filterfeld "Recode" intensiv verwendet, um Untergruppen von verwandten Elementen zu finden. Ich habe den vollständigen Satz bereinigter Elementnamen in eine neue Spalte umcodiert, die ich Consolidated Item Name nannte.

Ich habe ähnliche Artikelnamen aus meinen beiden Tabellen mit Lebensmittellisten zusammengefasst.
Um ein Recode-Skript zu speichern, das ich für die Verwendung mit neuen MyFitnessPal-Daten in das Dialogfeld laden konnte, habe ich verwendet ein Trick mit einer Formelspalte, den ich in einem früheren Blogbeitrag geteilt habe. Es ist ein Trick, den ich entdeckte, als ich ein Recode-Skript "after the fact" erstellen musste, um die Arbeit zu erfassen, die ich in einer früheren Version der JMP 12-Plattform gemacht hatte, bevor das Speichern und erneutes Laden eines Skripts in das Dialogfeld unterstützt wurde. Jetzt habe ich dieselbe Formelspaltenmethode verwendet (die die Concat-Funktion verwendet), um die "Eingeweide" für ein Recode-Skript zu erstellen, um den ursprünglichen Datenbankelementnamen mit dem endgültigen, konsolidierten Namen in Beziehung zu setzen. Nachdem Sie dem Skript die entsprechende Kopf- und Fußzeile hinzugefügt haben, kann ich meine ursprünglichen Elementnamen und konsolidierten Namen erneut in das Dialogfeld "Neukodieren" laden und die Liste aktualisieren, wenn ich neue Lebensmittelelementnamen aus MyFitnessPal importiere.
Zuordnung übergeordneter Kategorien
Mit meiner bereinigten und vollständigen Datentabelle in der Hand konnte ich nun ein zweites Datenbereinigungsskript aktualisieren, das ich pflege, um meine Lebensmittel in primäre Lebensmittelkategorien einzuteilen. Ich habe festgestellt, dass das Einordnen einzelner Elemente in übergeordnete Kategorien sehr nützlich sein kann, um verwandte Elementgruppen im Zeitverlauf zu vergleichen. Ich habe mein eigenes Klassifizierungssystem erstellt, wobei ich Gruppierungen verwendete, die für mich sinnvoll waren.
Ich habe zum Beispiel eine Lebensmittelkategorie namens ChocolateCandy, die dunkle, Milch und weiße Schokolade enthält. Ich esse selten Nicht-Schokoladensorten, daher hat es mir nicht gefallen, der Kategorie einen allgemeineren Namen wie Candy zu geben. Wenn ich mir die wichtigsten Trends im Laufe der Zeit anschaue, spalte ich keine Haare darüber, ob ich Milchschokolade oder dunkle Schokoladentrüffel gegessen habe, aber ich möchte feststellen können, zu welchem Anteil meiner Leckerlis Kalorien gehören ganze Kategorie.
Für diesen Blogpost habe ich eine Teilmenge Tabelle erstellt, die nur Mahlzeiten aus einer Handvoll ausgewählter Feiertage der letzten fünf Jahre enthält. Ich habe Recode verwendet, um die ausgewählten Daten in einer neuen Kategoriespalte namens Holiday zu aggregieren und diese Eigenschaft mit einer Value Ordering-Spalte zu versehen, um diese Feiertage in sequentieller Reihenfolge zu sperren: Neujahr, mein Geburtstag, Thanksgiving, Heiligabend, Weihnachtstag und Neujahr Vorabend.
Diese Heatmap für den Graph Builder zeigt die Anzahl der Kalorien, die ich an jedem Urlaub protokolliert habe, die ziemlich unterschiedlich waren. Wenn ich nach dem Baby aktiv an Gewicht verlor, aß ich weniger und in der Pflege neige ich dazu, mehr zu essen.

Diese Heat Builder-Grafikkarte zeigt, dass die Menge an Kalorien, die ich im Urlaub gegessen habe, zwischen 1396 (hellgelb) und 3580 (dunkelrot) schwankte. Tage ohne Lebensmittelprotokolldaten werden als weiße Quadrate angezeigt.
Zuvor habe ich geteilt Treemap-Visualisierungen meiner Lebensmittelprotokolldaten Über Tage, Wochen, Monate oder Jahre aggregiert, finde ich jedoch, dass Baumkarten auch nützlich sind, um Muster in täglichen Daten auf kompakte Weise darzustellen. Ich habe in Graph Builder eine Treemap erstellt, um die Kalorienverteilung für jedes Urlaubsessen während der vier Jahre anzuzeigen, in denen ich vollständige Daten für alle sechs Ferien hatte.
Alle diese Daten wurden in der BodyMedia-App gesammelt, die sechs mögliche Steckplätze für die Protokollierung von Lebensmitteln bietet - Frühstück, AM-Snack, Mittagessen, PM-Snack, Abendessen und Spätsnack. Ich verwendete Year als X-Gruppierungsvariable und Holiday als Y-Gruppierungsvariable und farbige Quadrate nach Mahlzeit. Da ich Kalorien als Y-Variable zugewiesen habe, wird die Größe jedes Urlaubsabschnitts der Treemap im Verhältnis zu der höchsten Anzahl an Kalorien, die ich zu mir gegessen habe, festgelegt. Dies ist an Weihnachten 2012 zu sehen.
Mahlzeiten vs. tägliche Kalorien
Normalerweise protokolliere ich Lebensmittel zu den Tageszeiten, wenn ich sie aß. Zum Beispiel würde ein spätes Frühstück oder Mittagessen wahrscheinlich in einem Snack-Slot angemeldet sein. Sie können diesen Effekt am Timing einiger meiner Urlaubsessen erkennen. An Nicht-Feiertagen protokolliere ich Frühstück, Mittag- und Abendessen normalerweise als größere Mahlzeiten mit kleineren Snacks am Morgen und am Nachmittag. An großen Feiertagen fällt die große Mahlzeit des Tages manchmal in den Nachmittags-Snack-Zeitraum (z. B. Weihnachten 2012, Silvester 2011 und 2014). In diesen Fällen habe ich normalerweise ein ziemlich umfangreiches Dessert im Zeitfenster des Essens angemeldet!

Die von der Mahlzeit erfassten Kalorien waren vom Zeitpunkt der großen Urlaubsmahlzeit abhängig.
Angesichts dieser Variabilität des Essenszeitpunkts war es tatsächlich hilfreich, die Variable für die Gruppierung der Mahlzeiten zu entfernen und zu betrachten tägliche Gesamtkalorien nach Lebensmittelkategorie gruppiert. Durch das Gruppieren ähnlicher Gegenstände bekam ich ein besseres Gefühl für die Arten von Lebensmitteln, die meinen Urlaub beim Essen dominieren. Es ist keineswegs überraschend, dass dies viele Desserts, Schokolade und kalorische Getränke umfasst. Urlaub ist definitiv alles über soziales Essen für mich und meine Familie!

Nachspeisekalorien dominieren definitiv meine Essgewohnheiten im Urlaub!
Diese besonderen Festlichkeiten
Wie viele Menschen freue ich mich auf bestimmte besondere Ferienspeisen. Ich dachte, es wäre interessant, meinen gesamten Datensatz durchzusehen und die Muster von Feiertagsartikeln mit Leckereien zu vergleichen, die ich regelmäßig esse. Zum Beispiel ist Käsekuchen einer meiner Lieblingsdesserts, und ich esse das ganze Jahr über einfachen Käsekuchen. Das Balkendiagramm unten zeigt meine monatlichen Kalorienwerte, gefiltert nach ausgewählten Lebensmitteln. Im Gegensatz dazu ist Kürbis-Käsekuchen ein saisonales Vergnügen, das normalerweise auf die Ferienzeit beschränkt ist - das heißt, es sei denn, ich stecke einen zusätzlichen im Gefrierschrank wie im letzten Jahr vor! Außerdem erscheint ein Gericht mit dem Namen Cranberry Delight, das ich nur an Feiertagen mache, normalerweise nur in meinem Essensprotokoll zwischen Thanksgiving und Weihnachten, obwohl es 2013 beim Osteressen zu Gast war.

Kürbis-Käsekuchen und Cranberry-Genuss sind im Vergleich zu einfachem Käsekuchen seltene Leckereien in der Ferienzeit!
Was war also die größte Herausforderung dieses Blogposts? Sie denken vielleicht, dass es sich um die Datenerfassung, um die Umcodierungsherausforderungen oder um die Anpassung meiner Visualisierungen handelte, um meine Essmuster im Urlaub im besten Licht zu zeigen, aber all diese Vermutungen sind falsch. Die größte Herausforderung bestand eigentlich darin, die vielen JMP 13-Updates hinter sich zu lassen und zu JMP 12.2 zurückzukehren, um meine Grafiken zu erstellen! Tatsächlich beschuldige ich die ständige Weiterentwicklung von JMP 13 dafür, dass ich in der zweiten Hälfte dieses Jahres zu einem weniger produktiven Blogger wurde. Ich verwende seit fast einem Jahr Entwicklungsversionen von JMP 13 für alle meine Arbeiten und persönlichen Projekte. Ich beiße buchstäblich auf meine Zunge und möchte Ihnen von all den erstaunlichen neuen Funktionen erzählen, die kommen werden! Sie müssen jedoch nur geduldig sein, bis JMP 13 startet, um von den neuen und verbesserten Ergänzungen zu erfahren, ohne die ich nicht leben kann. In der Zwischenzeit schöne Ferien!