在我的以前的博文 ,我描述瞭如何將我的BodyMedia®活動摘要數據文件從Excel導入 JMP 。今天,我將分享如何自動將近四年的BodyMedia®食品原木導入JMP。我還上傳了一個加入到JMP文件交換,您可以使用它來導入您自己的活動摘要和食物日誌文件,以及來自流行和免費的MyFitnessPal食品日誌網站的CSV格式的食物日誌文件。
對於我的海報項目 (詳見下文),我創建了JSL腳本,用於組合,解析和格式化從BodyMedia®軟件導出的近50個活動摘要Excel文件和50個食物日誌文件,涵蓋從10月12日到2014年7月28日的時間段。我從BodyMedia®基於網絡的活動監視器軟件中導出了PDF格式的食物日誌文件。
當我第一次開始使用我的食物日誌文件時,我意識到我無法直接處理它們,因為JMP不支持從PDF格式導入。隨後的經歷讓我更好地理解了為什麼會這樣。我聽說客戶建議JMP應該添加對PDF導入的支持,JMP開發人員回應PDF格式的表格僅用於演示目的,並且通常不像JMP支持的其他文件類型那樣以常規格式組織。我用自己的文件親身體驗了這一點!
最初,我以為我可以將我的PDF食物日誌文件轉換為Excel格式,並使用與我以前類似的方法導入它們導入我的活動摘要文件 。雖然我嘗試了各種軟件產品,承諾簡單的PDF到Excel轉換,但我只能將整個體驗描述為史詩般的失敗。我發現轉換錶的結構在頁面之間是非常不規則的。花了一個小時手動將單個Excel文件編輯成更常規的格式後,我放棄了。我無法想像在這個令人難以置信的無聊任務上多花一分鐘時間,那時我有40個文件需要處理!我不願意等到Discovery Summit 2017來導入我的數據,所以我決定尋找更簡單,更快捷的路線。
我發現我可以使用Adobe Acrobat將PDF文件保存為文本文件。不幸的是,這些文件包含不同長度的以空格分隔的項目名稱,其後是以空格分隔的數字,表示卡路里,服務大小和常量營養素數量。JMP中的點擊式文本導入選項需要字段之間的固定長度或分隔符,因此這兩個選項都不會從我的文件中生成分析就緒數據表。我決定使用類似於我編寫的導入活動摘要Excel文件的循環來導入和組合我的文件。(如果您閱讀我之前的帖子,您知道我從文本導入的JSL示例中大量借用了 SESUG紙寫的邁克爾赫克特 。
一旦我的文件被導入和連接,我就可以使用JSL中的正則表達式從每行文本中解析出各條信息。起初我對這條路有些惶恐不安。雖然在研究生院使用Perl作為正則表達式,但我的正則表達式技巧生鏽了,之前我沒有在JSL中使用正則表達式。我訪問了JMP開發人員Craige Hales,他在JMP中實現了正則表達式引擎,他提供了大量鼓勵和指導有用的示例。
為了進一步分析我的表格,我需要遍歷表格中的所有行,並匹配與日期,膳食名稱,卡路里含量和各種常量營養素類型的克數相對應的模式。我使用如下所示的循環來解析我需要的數據並將每條信息放入其自己的列中。下面,我檢查了用餐名稱並從它出現的地方捕獲 - 在每天的第一行。然後我用膳食名稱值填充了膳食欄的單元格,直到我遇到一個新的匹配,表明下一餐的項目開始。
//捕獲膳食
for(c = 1,c <= y,c ++,
string = Combinedlog:生活方式和卡路里管理系統;
//檢查與膳食名稱的匹配
w =(正則表達式匹配(
串,
Pat Regex(“^(早餐|上午小吃|午餐|下午小吃|晚餐|晚餐小吃)(。* $)”)));
如果(N項(w)== 0,
Combinedlog:膳食 =飯;
繼續());
Combinedlog:生活方式和卡路里管理系統 = w [3];
Combinedlog:膳食 = w [2];
飯= w [2];
);
我使用上面顯示的一般正則表達式匹配策略提取了我需要的所有信息。在運行我的腳本的最終版本之後,我有一個格式很好的表,其中包含34,432行食品名稱,以及按日期和餐點組織的相關卡路里和常量營養素信息。
如果您有以PDF格式保存的BodyMedia食物日誌文件,您可以將它們保存到Adobe Acrobat中的文本文件並下載我的加入從JMP文件交換中執行點擊導入您自己的食物日誌文件到JMP。此加載項中的工具支持活動摘要文件,保存為文本的食物日誌文件和從MyFitnessPal導出的食物日誌文本文件。 特別感謝JMP測試經理Audrey Shull和測試員Melanie Drake提供的腳本建議和插件測試幫助!
不幸的是,我從成功導入中感受到的勝利感是短暫的。我的表的快速摘要顯示它包含> 1,800個獨特的食品名稱!我開始意識到我對這個數據表的工作才剛剛開始。我的食物日誌充滿了命名不一致,因為我多年來從食品項目數據庫中選擇了各種不同名稱但非常相似的項目。如果我想開始理解食物日誌數據中的模式,我將不得不清理我的食物名稱並以更有意義的方式將它們分組。請繼續關注本博客系列的第四部分,以了解有關我在食品名稱重新編碼中冒險的更多信息。
看看最近這個博客文章了解更多關於我對量化自我(QS)分析項目的興趣如何促使我創建2014年Discovery Discovery電子海報,標題為“ 用JMP分析個人飲食和健身數據。“ 如果您無法在卡里的會議上看到我的電子海報,您可以登錄並查看 PDF版本在JMP用戶社區的2014年探索峰會部分。