Si tu lis mon Dernier commentaire , alors vous savez que je me fais le cadeau de données en cette saison de vacances! Pour moi, la collecte de données sur mon alimentation et mes habitudes de remise en forme est un cadeau qui ne cesse de continuer. Bien que je ne puisse pas examiner quotidiennement tous mes ensembles de données, les informations sont là au moment où je dois les utiliser pour m'aider à comprendre mes modèles.
La collecte de données sur les aliments n’est pas pour moi une habitude de vacances. Je consignais les aliments que je mange à chaque repas toute l'année depuis près de cinq ans, en utilisant l'application de BodyMedia pendant la plus grande partie de cette période avant d'adopter MyFitnessPal plus tôt cette année. j'ai présenté une affiche à JMP Discovery 2014 , qui décrit comment je importé mes données de journal des aliments BodyMedia dans JMP en enregistrant plusieurs pdfs en texte, en les concaténant et en utilisant des expressions régulières pour analyser les détails dans des colonnes d'une table JMP. MyFitnessPal m'a évité quelques étapes en produisant un rapport pouvant être enregistré dans un seul fichier texte, mais je devais néanmoins utiliser l'analyse des expressions rationnelles pour créer une table JMP utilisable.

J'ai traité le texte dérivé de mes journaux d'alimentation BodyMedia et MyFitnessPal en utilisant des processus parallèles mais distincts qui convergeaient à la fin dans une seule table unifiée.
Le grand défi: combiner des données provenant de deux sources
Le défi majeur que j'ai récemment résolu consistait à unifier ces deux tableaux de données du journal des aliments, et mon expérience en la matière est pertinente pour quiconque doit combiner des données provenant de sources différentes.
Les différences mineures, telles que les noms de colonne et les types de format, sont faciles à ajuster et peu importe que chaque table contienne quelques colonnes uniques, celles-ci se contentaient de valeurs manquantes pour les lignes qui n'avaient pas de valeur. Le principal problème était qu’il y avait si peu de cas où les noms d’élément étaient les mêmes dans les deux bases de données que je devais nettoyer les deux tables à l’aide de processus parallèles mais distincts.
Je savais déjà que mon journal des aliments BodyMedia contenait de nombreux exemples de noms redondants faisant essentiellement référence au même aliment, ce qui rendait beaucoup plus difficile pour moi d'agréger des données pour rechercher des modèles. J'ai utilisé la plate-forme JMP 12 Recode pour regrouper les noms d'éléments similaires dans un ensemble de noms d'éléments nettoyés. décrit ce processus dans un précédent article de blog .
MyFitnessPal inclut encore plus de noms de marques et d'éléments fournis par l'utilisateur que BodyMedia, ce qui amplifie encore le problème de redondance des noms. Lorsque je suis passé à l’utilisation de MyFitnessPal pour enregistrer mes aliments, j’avais essayé de réutiliser mon script BodyMedia pour recoder les noms de mes articles MyFitnessPal. Mais avec si peu de noms d'éléments partagés entre les bases de données, il était plus logique de créer un script Recode complètement séparé pour le projet MyFitnessPal.
Consolidation des noms d'aliments
Désormais, mon désir de combiner mes deux tableaux de données pour examiner mes habitudes alimentaires de vacances est devenu une bonne motivation pour découvrir le moyen le plus efficace de récupérer les noms d’articles nettoyés des deux tableaux et de les combiner en un seul ensemble consolidé de noms d’articles. Bien sûr, à la fin de l’exercice, j’ai voulu pouvoir sauvegarder un script Recode faisant référence à la original nom des éléments afin que je puisse continuer à mettre à jour ce script au fur et à mesure que j'ajoute de nouveaux éléments à mon journal MyFitnessPal.
Après avoir peaufiné les noms de colonne et les formats pour en assurer la cohérence, j'ai concaténé les tables, choisi la colonne Nom d'élément nettoyé et ouvert la plate-forme Recode. Comme j'avais utilisé des modèles similaires pour renommer des éléments dans les deux tableaux, de nombreux éléments sont apparus les uns à côté des autres. J'ai travaillé sur le reste des éléments, regroupant des valeurs similaires et utilisant beaucoup le champ de filtre Recode pour rechercher des sous-groupes d'éléments connexes. J'ai recodé l'ensemble complet des noms d'éléments nettoyés dans une nouvelle colonne intitulée Nom d'élément consolidé.

J'ai regroupé des noms d'articles similaires à partir de mes deux tableaux de données du journal des aliments.
Pour enregistrer un script Recode que je pouvais recharger dans la boîte de dialogue pour l'utiliser avec les nouvelles données MyFitnessPal, j'ai utilisé un truc de colonne de formule que j'ai partagé dans un précédent article de blog. C'est une astuce que j'ai découverte lorsque je devais créer un script Recode «après le fait» pour capturer le travail effectué dans une version antérieure de la plate-forme JMP 12 avant que celle-ci ne prenne en charge l'enregistrement et le rechargement d'un script dans la boîte de dialogue. Maintenant, j'ai utilisé la même approche de colonne de formule (qui utilise la fonction de caractère Concat) pour créer les "tripes" d'un script Recode afin de relier le nom de l'élément de base de données d'origine à son nom consolidé final. Après avoir ajouté l'en-tête et le pied de page appropriés au script, je peux recharger mes noms d'élément d'origine et mes noms consolidés dans la boîte de dialogue Recode et mettre à jour la liste lorsque j'importe de nouveaux noms d'élément de nourriture à partir de MyFitnessPal.
Attribuer des catégories de niveau supérieur
Avec mon tableau de données nettoyé et complet en main, je pouvais maintenant mettre à jour un deuxième script de nettoyage de données que je maintiens pour attribuer mes aliments dans des catégories d'aliments primaires. J'ai constaté que placer des éléments individuels dans des catégories de niveau supérieur peut s'avérer très utile pour comparer des ensembles d'éléments connexes dans le temps. J'ai créé mon propre système de classification en utilisant des regroupements qui me semblaient logiques.
Par exemple, j'ai une catégorie d'aliments appelée ChocolateCandy, qui comprend des éléments contenant du noir, du lait et du chocolat blanc. Je mange rarement des bonbons sans chocolat, alors donner à la catégorie un nom plus générique, comme Candy ne fonctionnait pas pour moi. Lorsque je regarde les grandes tendances au fil du temps, je ne vais pas me fendre la gueule pour savoir s’il s’agissait d’une truffe au chocolat au lait ou au chocolat noir que j’ai mangée, mais j’aimerais pouvoir déterminer quelle proportion de mes calories de friandises appartient au catégorie entière.
Pour cet article de blog, j'ai créé un tableau de sous-ensemble contenant uniquement les repas d'une poignée de vacances sélectionnées au cours des cinq dernières années. J'ai utilisé Recode pour regrouper les dates choisies dans une nouvelle colonne de catégorie appelée Holiday et y ajouter une propriété de colonne Value Ordering afin de verrouiller ces vacances dans un ordre séquentiel: le jour du Nouvel An, mon anniversaire, Thanksgiving, le réveillon de Noël, le jour de Noël et le nouvel an. Veille.
Cette carte de chaleur Graph Builder indique le nombre de calories que j'ai enregistrées lors de chaque séjour, ce qui a varié considérablement. Lorsque je maigrissais activement après le bébé, je mangeais moins et, en maintenance, j'avais tendance à manger plus.

Cette carte graphique de Graph Builder indique que la quantité de calories que j'ai mangée en vacances variait, allant d'un minimum de 1396 (jaune pâle) à un maximum de 3580 (rouge foncé). Les jours sans données du journal des aliments sont représentés par des carrés blancs.
Auparavant, j'ai partagé visualisations de treemap de mes données de journal de nourriture agrégées sur des jours, des semaines, des mois ou des années, mais j'estime que les cartes de calcul sont également utiles pour visualiser de manière compacte les tendances dans les données quotidiennes. J'ai créé un treemap dans Graph Builder pour afficher la répartition des calories pour chaque repas de vacances au cours des quatre années pour lesquelles j'avais des données complètes pour les six vacances.
Toutes ces données ont été collectées dans l'application BodyMedia, qui offre six emplacements possibles pour l'enregistrement des aliments: petit-déjeuner, collation matinale, déjeuner, collation matinale, dîner et collation tardive. J'ai utilisé Year comme variable de groupe X et Holiday comme variable de groupe Y et des carrés colorés par repas. Étant donné que j'ai affecté Calories en tant que variable Y, la section du treemap correspondant à chaque jour férié est dimensionnée proportionnellement au nombre total de calories que j'ai mangé, ce qui est visible à Noël 2012.
Repas par rapport aux calories quotidiennes totales
J'ai l'habitude de consigner les aliments dans les créneaux horaires à l'heure de la journée où je les ai mangés. Par exemple, un petit-déjeuner ou un déjeuner tardif serait probablement connecté à un emplacement de collation. Vous pouvez voir cet effet dans le calendrier de certains de mes repas de vacances. En dehors des vacances, j’enregistre habituellement le petit-déjeuner, le déjeuner et le dîner sous forme de repas plus copieux, avec de petites collations le matin et l’après-midi. Pendant les grandes vacances, le gros repas de la journée tombe parfois dans la période des collations de l'après-midi (par exemple, Noël 2012, le Nouvel An 2011 et 2014). Dans ces cas, je consignais généralement un dessert assez substantiel dans la plage horaire du dîner!

Les calories enregistrées par repas dépendaient du moment du grand repas de Noël.
Compte tenu de cette variabilité dans le choix des repas, j’ai trouvé plus utile de supprimer la variable de regroupement des repas et de regarder total de calories par jour regroupés par catégorie d'aliments. Le regroupement d'éléments similaires m'a permis de mieux comprendre les types d'aliments qui dominent mes repas des fêtes. Il n’est pas du tout surprenant que cela inclue beaucoup de desserts, de chocolat et de boissons caloriques. Les vacances sont définitivement des repas sociaux pour moi et ma famille!

Les calories des desserts dominent définitivement mes habitudes de consommation de vacances!
Ces friandises spéciales de vacances
Comme beaucoup de gens, j'ai hâte de goûter à certains plats des fêtes. J'ai pensé qu'il serait intéressant d'examiner l'ensemble de mes données et de mettre en contraste les habitudes des articles de vacances uniquement avec les friandises que je mange plus régulièrement. Par exemple, le gâteau au fromage est l'un de mes desserts préférés et je mange du gâteau au fromage ordinaire tout au long de l'année. Le graphique à barres ci-dessous montre le total de mes calories mensuelles, filtré pour inclure quelques aliments sélectionnés. En revanche, le gâteau au fromage à la citrouille est un régal saisonnier, généralement limité à la saison des vacances - c'est-à-dire, sauf si j'en stocke un dans le congélateur comme je l'avais fait l'année dernière! De plus, un plat appelé Cranberry Delight que je prépare uniquement les jours de fête n'apparaît généralement que dans mon journal des aliments entre Thanksgiving et Noël, bien qu'il ait fait son apparition lors du dîner de Pâques en 2013.

Le gâteau au fromage à la citrouille et les délices de la canneberge sont des gâteries de la saison des vacances rares par rapport au gâteau au fromage!
Alors, quel était le plus gros défi de cet article de blog? Vous pourriez penser que c’était la collecte de données, les défis de recodage ou l’ajustement de mes visualisations pour montrer les habitudes alimentaires de mes vacances sous le meilleur jour possible, mais toutes ces suppositions sont fausses. En réalité, le défi le plus difficile a été de laisser les nombreuses mises à jour de JMP 13 et de revenir à JMP 12.2 pour créer mes graphiques! En fait, je blâme le développement en cours de JMP 13 pour avoir fait de moi un blogueur beaucoup moins productif au second semestre de cette année. J'utilise les versions de développement de JMP 13 depuis près d'un an maintenant pour tous mes projets professionnels et personnels. Je me mords littéralement la langue en ce moment, je veux vous parler de toutes les nouvelles fonctionnalités étonnantes à venir! Mais vous devrez simplement faire preuve de patience jusqu'au lancement de JMP 13 pour entendre parler des ajouts nouveaux et améliorés sans lesquels je ne pourrais pas vivre. En attendant, bonnes vacances!