<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Esto es muy similar a la versión de esta publicación del blog de JMP ... ¡simplemente publíquela de forma cruzada en caso de que la haya perdido!
En una anterior entrada en el blog , Presenté el tema de mi e-poster de JMP Discovery Summit 2014 titulado “ Análisis de datos personales de dieta y estado físico con JMP ” y compartí mis intereses en proyectos de análisis de yo cuantificado (QS). Para mi proyecto de póster, exporté dos tipos diferentes de archivos de datos desde el software Activity Manager basado en la web BodyMedia® y escribí los scripts JMP Scripting Language (JSL) para importar, formatear y limpiar mis datos para su posterior análisis y visualización en JMP. Espero que hayas podido acompañarme para escuchar más en la conferencia en Cary, pero si no, puedes echar un vistazo a PDF de mi e-poster En la sección Discovery Summit 2014.
Hoy, compartiré cómo utilicé JSL para importar y combinaré un conjunto de archivos Excel de múltiples hojas de trabajo que contienen información de resumen de calorías y actividad. El software Activity Manager también exporta archivos PDF de registro de alimentos, que cubriré en mi próxima publicación del blog. Por cierto, 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 BodyMedia® en JMP. También incluye un complemento adicional que importa archivos CSV que puede descargar del popular sitio web de registro de alimentos MyFitnessPal utilizando una extensión de Chrome.
Para esta publicación de blog de la comunidad de usuarios, quería agregar una nota sobre la prueba de mi complemento que no aparecía en la versión pública de este blog. Escribo muchos scripts para mí mismo, pero esta fue mi primera experiencia al poner una interfaz de usuario encima de mi script y preocuparme por los errores que otros podrían encontrar en el uso del complemento. Dependí en gran medida de dos evaluadores de JMP y expertos en scripting durante este proceso, Melanie Drake y Audrey Shull. Melanie compartió el código para un diálogo simple que adapté para mi caso. Audrey hizo una ronda inicial de pruebas de complementos para mí y me sugirió que dividiera el guión en partes para poder hacer una mejor validación de la entrada del usuario y agregar más opciones de comprobación de errores a mi guión. Esto incluía la validación de la existencia de directorios y archivos, y una verificación para verificar si el usuario deseaba sobrescribir un archivo existente.
En el auto de camino a casa después de unas vacaciones familiares en Florida, dibujé el siguiente esquema de prueba para mi diálogo y script en mi cuaderno siempre presente. Más tarde, cuando volví a estar frente a mi computadora, creé el siguiente PowerPoint que incluía capturas de pantalla de los cuadros de diálogo del complemento y algunas de las posibles acciones que un usuario podría tomar. Me resultó tremendamente útil identificar dónde estaba encontrando errores en mis pruebas y qué eran (en casillas rojas). Fue satisfactorio marcarlos, ya que los resolví con arreglos a mi script. Mi complemento muy simple tiene una cantidad extraordinaria de rutas posibles para probar, lo que lo lleva a casa una vez más, lo difícil es desarrollar y probar software complejo. ¡Este ejercicio me hizo apreciar más a nuestros desarrolladores y evaluadores de JMP por todo el trabajo que realizan todos los días!

Volver a antes de crear el complemento, sin embargo. A principios de agosto, mientras preparaba mi póster de Discovery, exporté casi 50 Resumen de actividad y 50 archivos de registro de alimentos que cubrían el período del 20/12/10 al 7/28/14. Los datos del Resumen de actividades de BodyMedia® se guardan en libros de Excel que contienen seis hojas de trabajo diferentes, pero me interesaba importar datos de solo los primeros cinco: Resumen, Actividad, Comidas, Sueño y Peso. Puede ver los detalles del contenido de las otras hojas de trabajo en mi e-cartel .

La mayoría de mis archivos de Resumen de actividad contenían cuatro semanas de datos, aunque algunos cubrían menos semanas. Todos los archivos tenían encabezados de columna en la línea 5 y la mayoría tenía 28 líneas de datos en las primeras cuatro pestañas, aunque el número de filas en la quinta pestaña (Peso) variaba. Antes de 2013, ingresé las mediciones de peso manualmente en el Administrador de actividades. En enero de 2013 comencé a utilizar un Analizador de cuerpo inteligente Withings escala, que carga las mediciones de peso de forma inalámbrica en su propio software basado en web y las comparte automáticamente a través de una integración de terceros con el Administrador de Actividades.
Decidí escribir el proceso de importación luego de importar interactivamente mis archivos de datos dos veces, con un año de diferencia. La importación interactiva consumió más tiempo la segunda vez porque tenía incluso más archivos y hojas de trabajo para trabajar. Como acumulo nuevos datos cada día, mi número de archivos siempre aumentará con el tiempo. Después de la segunda importación, formateé mis columnas y agregué fórmulas a la tabla de datos combinados, solo para compararla con la tabla de mi primera importación y darme cuenta de que había olvidado varios pasos importantes.
Mientras retrocedía para completar los pasos que había omitido, comencé a considerar cómo los scripts podían hacer que el reprocesamiento de todos mis archivos fuera mucho más simple y rápido. Si el proceso de importación fuera más sencillo, vería los datos nuevos con mayor frecuencia. Afortunadamente, encontré que incluso un guionista novato como yo podría escribir el JSL para importar y combinar mis archivos. Comencé con los scripts de Source (agregados automáticamente a las tablas de datos JMP durante la importación interactiva) y los ejemplos de JSL de la documentación en línea y los foros de discusión. Recorrí todos mis archivos usando una estrategia modelada después de un ejemplo de importación de archivos de texto en un SESUG Papel escrito por el desarrollador de JMP Michael Hecht. Como experto en Mac en JMP durante mucho tiempo, Michael es conocido por su código elegante y de alta calidad en todos los idiomas, así que ¿por qué no pedir prestado a un maestro?
Me encontré con algunos inconvenientes mientras trabajaba para combinar mis datos en una sola tabla unificada. Una de las cosas que tuve que manejar antes de importar fue que la columna Fecha en la pestaña Suspender contenía un rango durante la noche en lugar de un solo día, como todas las otras hojas de trabajo, lo que me impedía fusionarlo directamente sin un paso de preprocesamiento. Por ejemplo, un valor de 12/20/2012/12/21/2012 indicó la noche de sueño que comenzó el 20/12/14 y terminó la mañana del 12/21/14. Analicé la fecha del segundo día utilizando el editor de fórmulas JMP y la función de patrón de caracteres de palabras JMP.

Después de crear la fórmula de manera interactiva, agregué código a mi script para hacer que estos pasos sean fácilmente repetibles con la ayuda de JSL Obtener guión mando. Ejecutando el comando MyColName << Obtener Script; en la columna Fecha de la pestaña Suspender, se imprimió un fragmento de clave de JSL en el registro de JMP, que agregué a mi script para automatizar este paso. En mi mesa final, el valor hr: m que se muestra en la columna Dormir representa cuánto había dormido antes de despertarme esa mañana.
Había información adicional en mis archivos de entrada que no quería que se incluyera en mi tabla JMP final. Los totales, promedios y objetivos de calorías se resumieron en la parte inferior de todas mis hojas de trabajo (líneas 36-39 en la imagen de la tabla de arriba). Agregué pasos a mi script para filtrar estos resúmenes, las líneas de información sobre los encabezados de las columnas y también las filas en blanco. En total, la versión de mi tabla de datos de actividad que utilicé para mi póster de Discovery Summit contenía 1,316 filas de datos diarios sobre calorías consumidas y quemadas, medidas de actividad, mediciones de sueño y peso.
Mi tabla de datos aún no estaba lista para el análisis. Las columnas numéricas de mi tabla contienen duraciones y porcentajes que no se formatearon correctamente al importar. Agregué formatos, códigos de valor faltantes y tipos de modelos como propiedades de columna interactivamente. Utilicé la función de columna Transformar en mi columna Fecha para agregar rápidamente nuevas variables de fecha y hora, como Año, Mes, Semana y Día a mi tabla, y luego las agregué a mi secuencia de comandos para automatizar esos pasos. También agregué una nueva columna de fórmula a la tabla (Calorías quemadas con calorías consumidas) para representar mi déficit / exceso calórico para un día determinado.
Si tiene archivos de resumen de actividades BodyMedia® guardados en formato Excel, puede descargar mi complemento desde el Intercambio de archivos para realizar una importación de apuntar y hacer clic de sus propios archivos a JMP. Este complemento es compatible con el tipo de archivo de resumen de actividad que acabo de describir, los archivos de registro de alimentos BodyMedia® guardados como texto y también los archivos de texto de registro de alimentos que puede exportar desde el popular (y gratuito) MyFitnessPal con la ayuda de una extensión de Chrome.
Un agradecimiento especial a la gerente de pruebas de JMP Audrey Shull y a la escritora técnica Melanie Drake por las sugerencias de scripting y las pruebas de complementos Manténgase atento a mi próxima publicación de blog, donde describiré cómo automaticé la importación de mis archivos de registro de alimentos BodyMedia® utilizando JSL.