Si lees mi ultima publicación , entonces sabes que me estoy dando el regalo de datos en esta temporada de vacaciones! Para mí, la recopilación de datos sobre mi dieta y hábitos de acondicionamiento físico es un regalo que solo se sigue dando. Aunque es posible que no vea todos mis conjuntos de datos a diario, la información está allí cuando necesito usarla para ayudarme a entender mis patrones.
Sin embargo, recolectar información sobre alimentos no es solo un hábito de vacaciones. He estado registrando los alimentos que como en cada comida durante todo el año durante casi cinco años, usando la aplicación BodyMedia durante la mayor parte de ese tiempo antes de adoptar MyFitnessPal a principios de este año. yo presenté un póster en JMP Discovery 2014 , que describe como yo Importé mis datos de registro de alimentos BodyMedia en JMP guardando múltiples archivos PDF en texto, concatenándolos y usando expresiones regulares para analizar detalles en columnas en una tabla JMP. MyFitnessPal me ahorró unos pocos pasos al generar un informe que se puede guardar como un solo archivo de texto, pero aún necesitaba usar el análisis de expresiones regulares para crear una tabla JMP utilizable.

Procesé el texto derivado de mis registros de alimentos de BodyMedia y MyFitnessPal utilizando procesos paralelos pero separados que convergían al final en una sola tabla unificada.
El gran reto: combinar datos de dos fuentes.
El principal desafío que resolví recientemente fue la unificación de estas dos tablas de datos de registros de alimentos, y mi experiencia en resolver esto es relevante para cualquiera que tenga que combinar datos de diferentes fuentes.
Las diferencias menores, como los nombres de columnas y los tipos de formato, fueron fáciles de ajustar, y sin importar que cada tabla contuviera unas pocas columnas únicas, simplemente obtuvieron valores faltantes para las filas que no tenían valores. El problema principal fue que había tan pocos casos en los que los nombres de los elementos eran los mismos en ambas bases de datos que tuve que limpiar las dos tablas utilizando procesos paralelos pero separados.
Ya sabía que mi registro de alimentos BodyMedia contenía muchos casos de nombres redundantes que se referían esencialmente al mismo artículo alimenticio, y esto me dificultaba mucho más agregar datos en esos artículos para buscar patrones. Usé la plataforma JMP 12 Recode para agrupar nombres de elementos similares en un conjunto de nombres de elementos limpiados, y describió este proceso en una entrada de blog anterior .
MyFitnessPal incluye incluso más nombres de marcas y artículos provistos por el usuario que BodyMedia, lo que aumenta aún más este problema de redundancia de nombres. Cuando cambié a usar MyFitnessPal para registrar mis alimentos, intenté reutilizar mi script BodyMedia para recodificar los nombres de mis artículos de MyFitnessPal. Pero con tan pocos nombres de elementos compartidos entre las bases de datos, tenía más sentido crear un script Recode completamente separado para el proyecto MyFitnessPal.
Consolidando los nombres de los alimentos.
Ahora, mi deseo de combinar mis dos tablas de datos para examinar mis patrones de comidas durante las vacaciones se convirtió en una buena motivación para descubrir la forma más eficiente de tomar los nombres de elementos limpios de ambas tablas y combinarlos en un conjunto único y consolidado de nombres de elementos. Por supuesto, al final del ejercicio, quería poder guardar un script de Recode que se refiriera a la original nombres de elementos para poder continuar actualizando esa secuencia de comandos a medida que agregué nuevos elementos a mi registro de MyFitnessPal.
Después de ajustar los nombres de las columnas y los formatos para mantener la coherencia, concatené las tablas, elegí la columna del Nombre del elemento limpio y abrí la plataforma Recode. Como había usado patrones similares para cambiar el nombre de los elementos en ambas tablas, muchos elementos aparecieron cerca uno del otro. Trabajé en el resto de los elementos, agrupando valores similares y haciendo un uso intensivo del campo del filtro Recode para encontrar subgrupos de elementos relacionados. Recodifiqué el conjunto completo de nombres de elementos limpiados en una nueva columna que llamé Nombre de elemento consolidado.

Consolidé nombres de elementos similares de mis dos tablas de datos de registro de alimentos.
Para guardar un script de Recode que podría volver a cargar en el cuadro de diálogo para usarlo con los nuevos datos de MyFitnessPal, utilicé un truco de columna de fórmula que compartí en una entrada de blog anterior. Es un truco que descubrí cuando necesitaba crear un script de Recode "después del hecho" para capturar el trabajo que realicé en una versión anterior de la plataforma JMP 12 antes de que admitiera guardar y volver a cargar un script en el cuadro de diálogo. Ahora, utilicé el mismo enfoque de columna de fórmula (que hace uso de la función Concat de caracteres) para crear las "agallas" de un script de Recode para relacionar el nombre del elemento de la base de datos original con su nombre final consolidado. Después de agregar el encabezado y el pie de página al script, puedo volver a cargar los nombres de mis artículos originales y los nombres consolidados en el cuadro de diálogo Recodificar y actualizar la lista cuando importo nuevos nombres de artículos alimenticios desde MyFitnessPal.
Asignación de categorías de nivel superior
Con mi tabla de datos limpia y completa en la mano, ahora pude actualizar un segundo script de limpieza de datos que mantengo para asignar mis alimentos a las categorías de alimentos principales. Descubrí que colocar elementos individuales en categorías de nivel superior puede ser bastante útil para comparar conjuntos de elementos relacionados a lo largo del tiempo. Creé mi propio sistema de clasificación utilizando agrupaciones que tenían sentido para mí.
Por ejemplo, tengo una categoría de alimentos llamada ChocolateCandy, que incluye artículos que contienen chocolate oscuro, leche y chocolate blanco. Raramente consumo tipos de dulces que no sean de chocolate, por lo que dar a la categoría un nombre más genérico como Candy no me funcionó. Cuando analice las principales tendencias a lo largo del tiempo, no voy a dividir el pelo sobre si comí una trufa de chocolate con leche o chocolate negro, pero me gustaría poder determinar qué proporción de mis calorías de tratamiento pertenecen a la toda la categoria
Para esta publicación del blog, creé una tabla de subconjuntos que contiene solo comidas de unos cuantos días festivos seleccionados de los últimos cinco años. Utilicé Recode para agregar las fechas elegidas en una nueva columna de categoría llamada Vacaciones, y le agregué una propiedad de columna de Orden de valor para bloquear estas fiestas en orden secuencial: Año Nuevo, cumpleaños, Acción de Gracias, Nochebuena, Día de Navidad y Año Nuevo Víspera.
Este mapa de calor de Graph Builder muestra la cantidad de calorías que registré en cada día festivo, que variaron bastante ampliamente. Cuando estaba perdiendo peso de manera activa después del bebé, comía menos y, en mantenimiento, tiendo a comer más.

Este mapa de calor de Graph Builder muestra que la cantidad de calorías que comí en vacaciones variaba, desde un mínimo de 1396 (amarillo claro) hasta un máximo de 3580 (rojo oscuro). Los días sin datos de registro de alimentos se muestran como cuadrados blancos.
Anteriormente, he compartido Visualizaciones del mapa de ruta de mis datos de registro de alimentos se agregan a lo largo de días, semanas, meses o años, pero me parece que los treemaps también son útiles para visualizar patrones en datos diarios de una manera compacta. Creé un treemap en Graph Builder para mostrar el desglose de calorías de cada comida festiva durante los cuatro años en los que obtuve datos completos de las seis festividades.
Todos estos datos se recopilaron en la aplicación BodyMedia, que proporciona seis espacios posibles para el registro de alimentos: desayuno, refrigerio AM, almuerzo, refrigerio PM, cena y refrigerio tardío. Utilicé Año como la variable de agrupación de X y Vacaciones como la variable de agrupación de Y, y coloreé cuadrados por comida. Como asigné Calorías como una variable Y, cada sección de vacaciones del treemap tiene un tamaño proporcional al número más alto de calorías totales que comí, lo que se puede ver en la Navidad de 2012.
Comidas vs. calorías totales diarias
Por lo general, registro los alimentos en las ranuras de comida a la hora del día en que los comí. Por ejemplo, un desayuno o almuerzo tardío probablemente se registrará en una ranura para refrigerios. Puedes ver este efecto en el tiempo de algunas de mis comidas festivas. En días no festivos, por lo general registro el desayuno, el almuerzo y la cena como comidas más grandes con bocadillos más pequeños por la mañana y por la tarde. En días festivos importantes, la gran comida del día a veces cae en el marco de tiempo de la merienda (por ejemplo, Navidad 2012, Año Nuevo 2011 y 2014). ¡En esos casos, por lo general registré un postre bastante importante en el horario de la cena!

Las calorías registradas por la comida dependían del momento de la gran comida festiva.
Dada esta variabilidad en el tiempo de las comidas, en realidad me pareció más útil eliminar la variable de agrupación de comidas y observar calorías diarias totales agrupados por categoría de alimentos. Agrupar elementos similares me dio una mejor idea de los tipos de alimentos que tienden a dominar mis comidas festivas. No es en absoluto sorprendente que incluyan muchos postres, chocolate y bebidas calóricas. ¡Las vacaciones son definitivamente todo sobre comida social para mí y mi familia!

¡Las calorías de los postres definitivamente dominan mis patrones alimenticios de vacaciones!
Esas delicias especiales de vacaciones.
Como muchas personas, espero ciertas comidas especiales para las fiestas. Pensé que sería interesante ver todo mi conjunto de datos y contrastar los patrones de los artículos solo para las fiestas con golosinas que como más regularmente. Por ejemplo, la tarta de queso es uno de mis postres favoritos, y como una tarta de queso normal durante todo el año. La gráfica de barras a continuación muestra mis totales de calorías mensuales, filtrados para incluir algunos alimentos selectos. En contraste, el pastel de queso con calabaza es una delicia de temporada, por lo general restringido a la temporada de vacaciones, es decir, ¡a menos que resulte uno extra en el congelador como lo hice el año pasado! Además, un plato llamado Cranberry Delight que hago solo en días festivos generalmente solo aparece en mi registro de alimentos entre el Día de Acción de Gracias y Navidad, aunque sí apareció en la cena de Pascua en 2013.

¡El pastel de queso con calabaza y el deleite de arándanos son unas delicias raras de la temporada navideña en comparación con el pastel de queso simple!
Entonces, ¿cuál fue el mayor desafío de esta publicación de blog? Podría pensar que fue la recopilación de datos, la recodificación de los desafíos o el retoque de mis visualizaciones para mostrar mis patrones de comidas durante las vacaciones de la mejor manera posible, pero todas esas conjeturas son erróneas. En realidad, el desafío más difícil fue dejar atrás las muchas actualizaciones de JMP 13 y volver a JMP 12.2 para crear mis gráficos. De hecho, culpo al desarrollo continuo de JMP 13 por hacerme una blogger mucho menos productiva en la segunda mitad de este año. He estado usando versiones de desarrollo de JMP 13 durante casi un año para todos mis trabajos y proyectos personales. ¡Estoy literalmente mordiéndome la lengua ahora mismo, queriendo contarles sobre todas las increíbles características nuevas que están llegando! Pero solo tendrás que ser paciente hasta que se lance JMP 13 para conocer las nuevas y mejoradas adiciones sin las que no puedo vivir. Mientras tanto, ¡felices fiestas!