Se leggi il mio ultimo messaggio , quindi sai che mi sto dando il dono dei dati in questo periodo di vacanza! Per me, la raccolta di dati sulla mia dieta e le abitudini di fitness è un dono che continua a dare. Anche se non posso guardare tutti i miei set di dati su base giornaliera, le informazioni sono lì quando ho bisogno di usarlo per aiutarmi a capire i miei modelli.
La raccolta di dati sugli alimenti non è solo un'abitudine per le vacanze per me, comunque. Ho archiviato i cibi che mangio ad ogni pasto durante tutto l'anno per quasi cinque anni, usando l'app di BodyMedia per la maggior parte di quel tempo prima di adottare MyFitnessPal all'inizio di quest'anno. Ho presentato un poster a JMP Discovery 2014 , che ha descritto come io importato i dati del registro cibo di BodyMedia in JMP salvando più pdf in testo, concatenandoli e utilizzando espressioni regolari per analizzare i dettagli in colonne in una tabella JMP. MyFitnessPal mi ha salvato alcuni passi producendo un output di report che può essere salvato come un singolo file di testo, ma ho comunque dovuto usare l'analisi delle espressioni regolari per creare una tabella JMP utilizzabile.

Ho elaborato il testo derivato dai registri alimentari di BodyMedia e MyFitnessPal utilizzando processi paralleli ma separati che convergevano alla fine in un'unica tabella unificata.
La grande sfida: combinare i dati da due fonti
La principale sfida che ho risolto di recente è stata l'unificazione di queste due tabelle di dati dei registri alimentari e la mia esperienza nella risoluzione di ciò è pertinente per chiunque debba combinare dati provenienti da fonti diverse.
Differenze minori come i nomi delle colonne e i tipi di formato erano facili da regolare, e non importava che ogni tabella contenesse alcune colonne univoche - quelle semplicemente presentavano valori mancanti per le righe che non avevano valori. Il problema principale era che c'erano così pochi casi in cui i nomi degli articoli erano gli stessi in entrambi i database che dovevo ripulire le due tabelle usando processi paralleli ma separati.
Sapevo già che il mio registro degli alimenti di BodyMedia conteneva molti esempi di nomi ridondanti che si riferivano essenzialmente allo stesso alimento, e questo mi rendeva molto più difficile aggregare i dati tra quegli articoli per cercare i modelli. Ho usato la piattaforma JMP 12 Recode per raggruppare nomi di oggetti simili in una serie di nomi di articoli puliti, e ha descritto questo processo in un precedente post del blog .
MyFitnessPal include ancora più nomi di marchi e articoli forniti dall'utente rispetto a BodyMedia, aumentando ulteriormente questo problema di ridondanza nella denominazione. Quando sono passato a utilizzare MyFitnessPal per registrare i miei alimenti, avevo cercato di riutilizzare il mio script BodyMedia per ricodificare i nomi degli oggetti MyFitnessPal. Ma con così pochi nomi di oggetti condivisi tra i database, aveva più senso creare uno script Recode completamente separato per il progetto MyFitnessPal.
Consolidare i nomi degli alimenti
Ora, il mio desiderio di combinare le mie due tabelle di dati per esaminare i miei modelli di consumo per le vacanze è diventato una buona motivazione per scoprire il modo più efficiente per prendere i nomi degli oggetti puliti da entrambe le tabelle e combinarli in un unico insieme consolidato di nomi di articoli. Naturalmente, alla fine dell'esercizio, volevo essere in grado di salvare uno script Recode che si riferiva al originale i nomi degli oggetti in modo da poter continuare ad aggiornare quello script mentre aggiungevo nuovi elementi al mio log MyFitnessPal.
Dopo aver modificato i nomi e i formati delle colonne per coerenza, ho concatenato le tabelle, scelto la colonna Nome articolo pulito e aperto la piattaforma Ricodifica. Dal momento che avevo utilizzato modelli simili per rinominare gli elementi in entrambe le tabelle, molti elementi si presentavano vicini l'uno all'altro. Ho lavorato sul resto degli articoli, raggruppando valori simili e facendo un uso massiccio del campo filtro Recode per trovare sottogruppi di elementi correlati. Ho ricodificato il set completo di nomi di articoli puliti in una nuova colonna che ho chiamato Nome elemento consolidato.

Ho consolidato i nomi di oggetti simili dalle mie due tabelle di dati del registro degli alimenti.
Ho usato per salvare uno script Recode che potevo ricaricare nella finestra di dialogo da utilizzare con i nuovi dati MyFitnessPal un trucco di colonna formula che ho condiviso in un precedente post del blog. È un trucco che ho scoperto quando ho avuto bisogno di creare uno script Recode "after the fact" per acquisire il lavoro che ho fatto in una versione precedente della piattaforma JMP 12 prima di supportare il salvataggio e il ricaricamento di uno script nella finestra di dialogo. Ora, ho utilizzato lo stesso approccio basato su colonne formula (che utilizza la funzione Concat del personaggio) per creare le "budella" per uno script Recode per collegare il nome dell'oggetto del database originale al suo nome finale consolidato. Dopo aver aggiunto l'intestazione e il piè di pagina appropriati allo script, posso ricaricare i nomi dei miei oggetti originali e quelli consolidati nella finestra di dialogo Recode e aggiornare l'elenco quando importare nuovi nomi di prodotti alimentari da MyFitnessPal.
Assegnazione di categorie di livello superiore
Con la mia tabella di dati pulita e completa in mano, ero ora in grado di aggiornare un secondo script di pulizia dei dati che ritengo di assegnare i miei prodotti alimentari alle categorie di alimenti primari. Ho scoperto che collocare singoli elementi in categorie di livello superiore può essere abbastanza utile per confrontare gli insiemi di articoli correlati nel tempo. Ho creato il mio sistema di classificazione utilizzando raggruppamenti che avevano senso per me.
Ad esempio, ho una categoria alimentare chiamata ChocolateCandy, che include oggetti scuri, al latte e contenenti cioccolato bianco. Mangio raramente tipi di caramelle non al cioccolato, quindi dare alla categoria un nome più generico come Candy non ha funzionato per me. Quando guardo alle principali tendenze nel corso del tempo, non ho intenzione di dividere i capelli sul fatto che sia stato un cioccolato al latte o un tartufo al cioccolato fondente che ho mangiato, ma mi piacerebbe essere in grado di determinare quale percentuale delle mie calorie trattate appartengono al intera categoria.
Per questo post del blog, ho creato una tabella di sottoinsieme contenente solo pasti da una manciata di vacanze selezionate degli ultimi cinque anni. Ho usato Recode per aggregare le date selezionate in una nuova colonna di categoria chiamata Holiday e aggiunto una proprietà della colonna Order Ordering per bloccare queste festività in ordine sequenziale: Capodanno, il mio compleanno, il Ringraziamento, la vigilia di Natale, il giorno di Natale e di Capodanno Vigilia.
Questa mappa di calore di Graph Builder mostra il numero di calorie che ho registrato in ciascuna festività, che variava molto ampiamente. Quando stavo attivamente perdendo peso dopo il parto, mangiavo meno, e nel mantenimento, tendo a mangiare di più.

Questa mappa termica di Graph Builder mostra che la quantità di calorie consumate in vacanza variava da un minimo di 1396 (giallo chiaro) a un massimo di 3580 (rosso scuro). I giorni senza dati del registro alimentare vengono visualizzati come quadratini bianchi.
In precedenza, ho condiviso visualizzazioni di mappe di tre dei miei dati di registro di cibo aggregato per giorni, settimane, mesi o anni, ma trovo le mappe dei tre per essere anche utili per visualizzare i modelli nei dati giornalieri in modo compatto. Ho creato una mappa degli alberi in Graph Builder per mostrare la ripartizione delle calorie per ogni pasto durante i quattro anni in cui avevo dati completi per tutte e sei le vacanze.
Tutti questi dati sono stati raccolti nell'app BodyMedia, che fornisce sei potenziali slot per la registrazione degli alimenti: Colazione, Snack AM, Pranzo, Snack pomeridiano, Cena e Late Snack. Ho usato Year come la variabile di raggruppamento X e Holiday come la variabile di raggruppamento Y e i quadrati colorati per pasto. Dal momento che ho assegnato Calorie come variabile Y, ogni sezione della treemap per le vacanze è dimensionata in proporzione al numero più alto di calorie totali che ho mangiato, che è possibile vedere a Natale 2012.
Pasti vs. calorie giornaliere totali
Di solito registro gli alimenti nelle fessure dei pasti entro l'ora del giorno in cui li ho mangiati. Ad esempio, una colazione o un pranzo tardivo verrebbero probabilmente registrati in uno slot per snack. Puoi vedere questo effetto nei tempi di alcuni dei miei pasti per le vacanze. In un periodo non festivo, di solito registro colazione, pranzo e cena come pasti più grandi con spuntini più piccoli al mattino e al pomeriggio. Durante le principali festività, il grande pasto del giorno a volte cade nel periodo di merenda pomeridiano (ad esempio, Natale 2012, Capodanno 2011 e 2014). In quei casi, di solito registravo un dessert piuttosto consistente nella fascia oraria della cena!

Le calorie registrate dal pasto dipendevano dai tempi del grande pasto festivo.
Data questa variabilità nei tempi dei pasti, ho trovato più utile rimuovere la variabile di raggruppamento dei pasti e guardare calorie giornaliere totali raggruppati per categoria di alimenti. Raggruppare oggetti simili mi ha dato una sensazione migliore per i tipi di alimenti che tendono a dominare la mia vacanza mangiando. Non è affatto sorprendente che questi includono molti dessert, cioccolato e bevande caloriche. Le vacanze sono decisamente legate al social eating per me e la mia famiglia!

Le calorie da dessert dominano decisamente i miei schemi di mangiar vacanza!
Quelle delizie speciali per le vacanze
Come molte persone, non vedo l'ora di alcuni cibi speciali per le vacanze. Ho pensato che sarebbe stato interessante esaminare tutto il mio set di dati e contrastare i modelli di articoli per le vacanze con le leccornie che mangio più regolarmente. Ad esempio, la cheesecake è uno dei miei dolci preferiti, e mangio una cheesecake semplice per tutto l'anno. Il grafico a barre qui sotto mostra i miei totali calorici mensili, filtrati per includere alcuni alimenti selezionati. Al contrario, la cheesecake di zucca è un regalo stagionale, di solito limitato alle festività natalizie - cioè, a meno che non mi capita di conservarne uno extra nel congelatore come ho fatto l'anno scorso! Inoltre, un piatto chiamato Cranberry Delight che compio solo nei giorni festivi solitamente compare solo nel mio diario alimentare tra il Ringraziamento e il Natale, anche se è apparso per la cena di Pasqua del 2013.

Cheesecake alla zucca e delizia al mirtillo sono rare prelibatezze natalizie rispetto alla semplice cheesecake!
Quindi qual è stata la più grande sfida di questo post sul blog? Potresti pensare che sia stata la raccolta dei dati, le sfide della ricodifica o il perfezionamento delle mie visualizzazioni per mostrare i miei schemi di consumo delle vacanze nella miglior luce possibile, ma tutte quelle supposizioni sono sbagliate. In realtà, la sfida più difficile è stata abbandonare i numerosi aggiornamenti di JMP 13 e tornare a JMP 12.2 per creare i miei grafici! In effetti, do la colpa allo sviluppo continuo di JMP 13 per avermi reso un blogger molto meno produttivo nella seconda metà di quest'anno. Utilizzo da quasi un anno le versioni di sviluppo di JMP 13 per tutti i miei progetti personali e di lavoro. Mi sto letteralmente mordendo la lingua in questo momento, volendo parlarti di tutte le nuove straordinarie funzionalità che stanno arrivando! Ma dovrai solo essere paziente fino al lancio di JMP 13 per conoscere le nuove e migliorate aggiunte di cui non posso fare a meno. Nel frattempo, buone vacanze!