En mi entrada de blog anterior , Describí cómo importé mis archivos de datos de resumen de actividad BodyMedia® de Excel a JMP . Hoy voy a compartir cómo automaticé la importación de casi cuatro años de mis registros de alimentos BodyMedia® a JMP. También he subido un complemento al Intercambio de archivos JMP que puede usar para importar sus propios archivos de Resumen de actividad y Registro de alimentos, así como los archivos de registro de alimentos en formato CSV del popular y gratuito sitio web de registro de alimentos MyFitnessPal.
por mi proyecto de póster (vea los detalles a continuación), creé scripts JSL para combinar, analizar y formatear casi 50 archivos de Excel de Resumen de actividad y 50 archivos de registro de alimentos exportados desde el software BodyMedia® que cubren el período de tiempo del 20/12/10 al 28/07/14. Exporté mis archivos de registro de alimentos desde el software de Monitor de actividad basado en la web BodyMedia® en formato PDF.
Cuando comencé a trabajar con mis archivos de registro de alimentos, me di cuenta de que no podría procesarlos directamente ya que JMP no admite la importación desde el formato PDF. La experiencia que siguió me dio una mejor comprensión de por qué ese es el caso. He escuchado a los clientes sugerir que JMP debería agregar soporte para la importación de PDF, y los desarrolladores de JMP responden que las tablas en PDF están diseñadas para fines de presentación y que a menudo no están organizadas en un formato regular como otros tipos de archivos que JMP admite. ¡Experimenté esto de primera mano con mis propios archivos!
Inicialmente, pensé que podía convertir mis archivos de registro de alimentos PDF a formato Excel e importarlos utilizando un enfoque similar al que solía usar importar mis archivos de resumen de actividad . Si bien probé una variedad de productos de software que prometían una conversión fácil de PDF a Excel, solo puedo caracterizar toda la experiencia como un fracaso épico. Encontré que la estructura de las tablas convertidas era altamente irregular de una página a otra. Después de pasar una hora editando manualmente un solo archivo de Excel en un formato más regular, me di por vencido. No podía imaginarme gastar un minuto más en esta tarea increíblemente aburrida, ¡y tenía 40 archivos para procesar en ese momento! No estaba dispuesto a esperar hasta que Discovery Summit 2017 importara mis datos, así que decidí buscar una ruta más fácil y rápida.
Descubrí que podía guardar mis archivos PDF como archivos de texto usando Adobe Acrobat. Desafortunadamente, los archivos contenían nombres de elementos delimitados por el espacio de longitud variable, seguidos de números delimitados por el espacio que representan calorías, tamaño de la porción y cantidades de macronutrientes. Las opciones de importación de texto de apuntar y hacer clic en JMP requieren longitud fija o delimitadores entre campos, por lo que ninguna de las opciones produjo una tabla de datos lista para análisis desde mis archivos. En su lugar, decidí importar y combinar mis archivos utilizando un bucle similar en estructura al que escribí para importar mis archivos de Resumen de actividad de Excel. (Si leyó mis publicaciones anteriores, sabe que tomé prestado un gran préstamo de un ejemplo de JSL de importación de texto del Papel SESUG escrito por Michael Hecht .
Una vez que mis archivos se importaron y concatenaron, pude analizar partes individuales de información de cada línea de texto usando expresiones regulares en JSL. Tuve un poco de temor por este camino al principio. Aunque había usado Perl para expresiones regulares en la escuela de posgrado, mis habilidades de expresión regular estaban oxidadas, y no había usado expresiones regulares en JSL antes. Visité al desarrollador de JMP Craige Hales, quien implementó el motor de expresión regular en JMP, y me brindó mucho aliento y sugerencias para ejemplos útiles.
Para formatear mi tabla para un análisis más profundo, tuve que recorrer todas las filas de la tabla y hacer coincidir los patrones que correspondían a las fechas, los nombres de las comidas, el contenido de calorías y los gramos de varios tipos de macronutrientes. Usé bucles como los siguientes para analizar los datos que necesitaba y colocar cada información en su propia columna. A continuación, verifiqué el nombre de la comida y la capturé desde donde apareció: en la primera línea de cada día. Luego llené las celdas de la columna Comida con el valor del nombre de esa comida hasta que encontré una nueva coincidencia, indicando el inicio de los artículos para la próxima comida.
// Capturar comida
para (c = 1, c <= y, c ++,
string = Combinedlog: Estilo de vida y sistema de gestión de calorías;
// Verificar si coincide con el nombre de la comida
w = (Regex Match (
cuerda,
Pat Regex ("^ (Desayuno | Snack AM | Almuerzo | Snack PM | Cena | Snack tardío) (. * $)")));
si (N Artículos (w) == 0,
Combinedlog: Comida = comida;
continuar ());
Combinedlog: Estilo de vida y sistema de gestión de calorías = w [3];
Combinedlog: Comida = w [2];
comida = w [2];
);
Extraje toda la información que necesitaba al usar la estrategia de coincidencia de expresiones regulares general que se muestra arriba. Después de ejecutar la versión final de mi guión, tuve una tabla bien formateada con 34,432 filas de nombres de alimentos con información de calorías y macronutrientes asociados organizada por fecha y comida.
Si tiene archivos de registro de alimentos de BodyMedia guardados en formato PDF, puede guardarlos en archivos de texto en Adobe Acrobat y descargar mi complemento desde el Intercambio de archivos JMP para realizar una importación de apuntar y hacer clic de sus propios archivos de registro de alimentos a JMP. Las herramientas en este complemento son compatibles con los archivos de resumen de actividad, los archivos de registro de alimentos guardados como texto y los archivos de texto de registro de alimentos exportados desde MyFitnessPal. Un agradecimiento especial a la gerente de pruebas de JMP, Audrey Shull, y a la probadora Melanie Drake por las sugerencias de scripting y la ayuda de pruebas de complemento.
Desafortunadamente, la sensación de victoria que sentí de mi importancia exitosa fue de corta duración. ¡Un breve resumen de mi tabla reveló que contenía> 1,800 nombres de alimentos únicos! Comencé a darme cuenta de que mi trabajo con esta tabla de datos apenas estaba comenzando. Mi registro de alimentos estaba lleno de inconsistencias de nombres ya que a lo largo de los años había seleccionado una variedad de artículos con nombres diferentes pero muy similares de la base de datos de alimentos. Iba a tener que limpiar los nombres de mis alimentos y agruparlos de una manera más significativa si quería comenzar a entender los patrones en mis datos de registro de alimentos. Manténgase atento a la cuarta parte de esta serie de blogs para obtener más información sobre mis aventuras en la recodificación de nombres de alimentos.
Echa un vistazo a este reciente entrada en el blog para obtener más información sobre cómo mi interés en los proyectos de análisis de yo cuantificado (QS) me llevó a crear un cartel electrónico de Discovery Summit 2014 titulado “ Análisis de datos personales de dieta y estado físico con JMP ". Si no pudo ver mi cartel electrónico en la conferencia en Cary, puede iniciar sesión y ver una versión PDF en la sección Discovery Summit 2014 de la comunidad de usuarios de JMP.