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