Nel mio post precedente del blog , Ho descritto come ho importato i miei file di dati di riepilogo attività BodyMedia® da Excel in JMP . Oggi, condividerò come ho automatizzato l'importazione di quasi quattro anni dei miei registri alimentari BodyMedia® in JMP. Ho anche caricato un aggiungere a JMP File Exchange che è possibile utilizzare per importare i propri file Riepilogo attività e Registro alimenti, nonché i file di registro degli alimenti in formato CSV dal popolare e gratuito sito Web di registrazione degli alimenti MyFitnessPal.
Per il mio progetto di poster (vedi i dettagli di seguito), ho creato degli script JSL per combinare, analizzare e formattare quasi 50 file Excel di riepilogo attività e 50 file di registro alimentare esportati dal software BodyMedia® che coprono il periodo di tempo dal 20/12/10 al 28/07/14. Ho esportato i miei file di registro alimentare dal software Monitoraggio attività Web basato su BodyMedia® in formato PDF.
Quando ho iniziato a lavorare con i miei file di registro degli alimenti, mi sono reso conto che non sarei in grado di elaborarli direttamente poiché JMP non supporta l'importazione dal formato PDF. L'esperienza che ho seguito mi ha dato una migliore comprensione del perché questo è il caso. Ho sentito che i clienti suggeriscono che JMP dovrebbe aggiungere il supporto per l'importazione di PDF e gli sviluppatori di JMP rispondono che le tabelle in PDF sono intese per scopi di presentazione e spesso non sono organizzate in un formato normale come altri tipi di file supportati da JMP. Ho vissuto questo in prima persona con i miei file!
Inizialmente, pensavo di poter convertire i miei file di registro alimentare PDF in formato Excel e importarli utilizzando un approccio simile a quello a cui ero abituato importa i miei file di riepilogo delle attività . Mentre ho provato una varietà di prodotti software promettendo una facile conversione da PDF a Excel, posso solo caratterizzare l'intera esperienza come un fallimento epico. Ho trovato che la struttura delle tabelle convertite era altamente irregolare da una pagina all'altra. Dopo aver passato un'ora a modificare manualmente un singolo file di Excel in un formato più regolare, ho rinunciato. Non potevo immaginare di spendere un minuto in più in questo compito incredibilmente noioso, e ho avuto 40 file da elaborare a quel punto! Non ero disposto ad aspettare fino al Discovery Summit 2017 per importare i miei dati, quindi ho deciso di cercare un percorso più facile e veloce.
Ho scoperto che potevo salvare i miei file PDF come file di testo usando Adobe Acrobat. Sfortunatamente, i file contenevano nomi di elementi delimitati da spazi di lunghezza variabile, seguiti da numeri delimitati da spazi che rappresentano calorie, dimensioni di servizio e quantità di macronutrienti. Le opzioni di importazione del testo point-and-click in JMP richiedono lunghezza o delimitatori fissi tra i campi, quindi nessuna delle due opzioni ha prodotto una tabella di dati pronta per l'analisi dai miei file. Ho deciso invece di importare e combinare i miei file utilizzando un loop simile nella struttura a quello che ho scritto per importare i miei file Excel di riepilogo attività. (Se leggi i miei post precedenti, sai che ho preso in prestito pesantemente da un esempio JSL di importazione di testo dal SESUG carta scritto da Michael Hecht .
Una volta che i miei file sono stati importati e concatenati, ho potuto analizzare singole informazioni da ogni riga di testo utilizzando le espressioni regolari in JSL. All'inizio ho avuto una certa trepidazione su questo percorso. Sebbene avessi usato Perl per le espressioni regolari in una scuola di specializzazione, le mie abilità regex erano arrugginite e non avevo mai usato espressioni regex in JSL. Ho visitato lo sviluppatore JMP Craige Hales, che ha implementato il motore di espressioni regolari in JMP e ha fornito molti suggerimenti e incoraggiamenti a esempi utili.
Per formattare la tabella per ulteriori analisi, avevo bisogno di eseguire il loop su tutte le righe della tabella e corrispondere a modelli corrispondenti a date, nomi di pasti, contenuto calorico e grammi di vari tipi di macronutrienti. Ho usato loop come il seguente per analizzare i dati di cui avevo bisogno e inserire ogni informazione nella sua colonna. Sotto, ho controllato il nome del pasto e l'ho catturato da dove è apparso - sulla prima riga per ogni giorno. Ho quindi riempito le celle della colonna Pasto con quel valore del nome del pasto fino a quando ho incontrato una nuova partita, indicando l'inizio degli articoli per il pasto successivo.
// Cattura Pasto
per (c = 1, c <= y, c ++,
string = Combinedlog: Lifestyle e sistema di gestione delle calorie;
// Controlla la corrispondenza con il nome del pasto
w = (Regex Match (
stringa,
Pat Regex ("^ (Colazione | AM Snack | Lunch | PM Snack | Dinner | Late Snack) (. * $)")));
if (N Items (w) == 0,
Combinedlog: Pasto = pasto;
Continua ());
Combinedlog: Lifestyle e sistema di gestione delle calorie = w [3];
Combinedlog: Pasto = w [2];
pasto = w [2];
);
Ho estratto tutte le informazioni di cui avevo bisogno utilizzando la strategia generale di corrispondenza delle espressioni regolari mostrata sopra. Dopo aver eseguito la versione finale del mio script, avevo una tabella ben formattata con 34.432 righe di nomi di prodotti alimentari con le relative informazioni sulle calorie e sui macronutrienti organizzate per data e pasto.
Se si dispone di file di registro cibo BodyMedia salvati in formato PDF, è possibile salvarli in file di testo in Adobe Acrobat e scaricare il file aggiungere da JMP File Exchange per eseguire un'importazione point-and-click dei propri file di registro alimentare in JMP. Gli strumenti di questo componente aggiuntivo supportano i file di sommario delle attività, i file di registro degli alimenti salvati come file di testo del registro degli alimenti e del testo esportati da MyFitnessPal. Un ringraziamento speciale al responsabile dei test JMP Audrey Shull e al tester Melanie Drake per suggerimenti sugli script e aiuto per i test aggiuntivi!
Sfortunatamente, il senso di vittoria che ho sentito dal mio successo è stato di breve durata. Un breve riepilogo del mio tavolo ha rivelato che conteneva> 1.800 nomi di prodotti alimentari unici! Ho iniziato a rendermi conto che il mio lavoro con questa tabella dati era appena iniziato. Il mio registro degli alimenti era pieno di incoerenze di denominazione poiché avevo selezionato una varietà di articoli con nomi diversi ma molto simili dal database degli alimenti durante gli anni. Dovevo ripulire i nomi dei miei prodotti alimentari e raggrupparli in modo più significativo se volevo iniziare a capire gli schemi nei dati del mio registro degli alimenti. Restate sintonizzati per la quarta parte di questa serie di blog per saperne di più sulle mie avventure nella ricodifica del nome di prodotti alimentari.
Dai un'occhiata a questo recente post sul blog per saperne di più su come il mio interesse per i progetti di analisi dell'auto quantificato (QS) mi ha portato a creare un e-poster Discovery Summit 2014 intitolato " Analisi dei dati personali di dieta e fitness con JMP. " Se non eri in grado di vedere il mio e-poster alla conferenza di Cary, puoi accedere e vedere una versione PDF nella sezione Discovery Summit 2014 della Community utenti JMP.