如果你讀了我的最後的帖子那麼你知道我在這個假日季節給自己提供數據的禮物!對我來說,收集我的飲食和健身習慣數據是一種不斷給予的禮物。雖然我可能不會每天查看我的所有數據集,但是當我需要使用它來幫助我理解我的模式時,信息就在那裡。
然而,收集食物數據不僅僅是我的假期習慣。在今年早些時候採用MyFitnessPal之前,我大部分時間都在使用BodyMedia的應用程序,一年四季都在使用BodyMedia的應用程序記錄我每餐每餐吃的食物近五年。我提出了 JMP Discovery 2014的海報 ,這描述了我將我的BodyMedia食物日誌數據導入JMP 通過將多個pdf保存到文本,連接它們,並使用正則表達式將細節解析為JMP表中的列。通過生成可以保存為單個文本文件的報告輸出,MyFitnessPal為我節省了幾個步驟,但我仍然需要使用正則表達式解析來創建可用的JMP表。

我使用並行但獨立的進程處理從我的BodyMedia和MyFitnessPal食物日誌派生的文本,這些進程最終聚合在一個統一的表中。
最大的挑戰:結合兩個來源的數據
我最近解決的主要挑戰是統一這兩個食物日誌數據表,我解決這個問題的經驗與任何必須結合不同來源數據的人有關。
像列名和格式類型這樣的細微差別很容易調整,而且無論每個表都包含一些獨特的列 - 這些列只是缺少沒有值的行的值。主要的問題是,在兩個數據庫中項目名稱相同的情況很少,我不得不使用並行但獨立的進程清理兩個表。
我已經知道我的BodyMedia食物日誌包含許多冗餘名稱的實例,這些實例基本上是相同的食物項目,這使我更難以在這些項目之間聚合數據以尋找模式。我使用JMP 12 Recode平台將類似的項目名稱分組為一組已清理的項目名稱,以及在之前的博文中描述了這個過程 。
MyFitnessPal包含比BodyMedia更多的品牌名稱和用戶提供的項目,進一步擴大了這一命名冗餘問題。當我切換到使用MyFitnessPal記錄我的食物時,我曾嘗試重用我的BodyMedia腳本來重新編碼我的MyFitnessPal項目名稱。但是由於數據庫之間的共享項名稱很少,因此為MyFitnessPal項目創建一個完全獨立的Recode腳本更有意義。
鞏固食物名稱
現在,我希望將我的兩個數據表結合起來檢查我的假日飲食模式,這是發現從兩個表中獲取已清理項目名稱的最有效方法並將它們組合成一個統一的項目名稱集合的良好動機。當然,在練習結束時,我希望能夠保存一個重新引用的Recode腳本原版的項目名稱,所以當我向MyFitnessPal日誌添加新項目時,我可以繼續更新該腳本。
在調整列名和格式以保持一致性之後,我連接了表,選擇了Cleaned Item Name列,並打開了Recode平台。由於我使用了類似的模式來重命名兩個表中的項目,因此許多項目彼此靠近顯示。我研究了其餘的項目,對類似的值進行分組,並大量使用Recode過濾器字段來查找相關項的子組。我將完整的已清理項目名稱重新編碼到一個名為Consolidated Item Name的新列中。

我從我的兩個食物日誌數據表中合併了類似的項目名稱。
為了保存我可以重新加載到對話框中的Recode腳本以用於新的MyFitnessPal數據,我使用了我在上一篇博文中分享的公式專欄技巧。 這是我發現的一個技巧,當我需要創建一個“事後”的Recode腳本來捕獲我在JMP 12平台的早期版本中所做的工作之後,它支持保存並將腳本重新加載到對話框中。現在,我使用相同的公式列方法(使用字符Concat函數)為Recode腳本創建“guts”,以將原始數據庫項名稱與其最終的合併名稱相關聯。在腳本中添加適當的頁眉和頁腳後,我可以將原始項目名稱和合併名稱重新加載到Recode對話框中,並在從MyFitnessPal導入新的食物項目名稱時更新列表。
分配更高級別的類別
有了我清理完整的數據表,我現在能夠更新我維護的第二個數據清理腳本,將我的食品分配到主要食品類別。我發現將單個項目放入更高級別的類別對於隨時間比較相關項目集非常有用。我使用對我有意義的分組創建了自己的分類系統。
例如,我有一個名為ChocolateCandy的食品類別,其中包括含有黑巧克力,牛奶巧克力和白巧克力的食品。我很少吃非巧克力醣類,所以給這個類別一個更通用的名字,比如Candy,對我來說不起作用。在觀察一段時間內的主要趨勢時,我不打算分辨一下我吃的是牛奶巧克力還是黑巧克力松露,但我希望能夠確定我的治療卡路里的比例是多少。整個類別。
在這篇博客文章中,我創建了一個子集表,其中包含過去五年中少數選定假期的餐飲。我使用Recode將這些選定日期聚合到一個名為Holiday的新類別列中,並為其添加了一個Value Ordering列屬性,以按順序鎖定這些假期:新年,我的生日,感恩節,平安夜,聖誕節和新年前夕。
此Graph Builder熱圖顯示了我在每個假期記錄的卡路里數量,其變化範圍非常廣泛。當我在嬰兒後積極減肥時,我吃得少,而且在保養時,我往往會吃得更多。

這個Graph Builder熱圖顯示我在假期吃的卡路里數量各不相同,從低至1396(淺黃色)到高至3580(深紅色)不等。沒有食物日誌數據的天數顯示為白色方塊。
以前,我分享了我的食物日誌數據的樹形圖可視化匯總了幾天,幾週,幾個月或幾年,但我發現樹圖也可用於以緊湊的方式可視化日常數據中的模式。我在Graph Builder中創建了一個樹形圖,顯示了四年中每個假日餐的卡路里分解情況,其中我獲得了所有六個假期的完整數據。
所有這些數據都是在BodyMedia應用程序中收集的,該應用程序提供了6個用於記錄食物的潛在插槽 - 早餐,AM小吃,午餐,PM小吃,晚餐和晚餐。我使用Year作為X分組變量,使用Holiday作為Y分組變量,使用彩色方塊作為Y分組變量。由於我將卡路里分配為Y變量,因此樹圖的每個假日部分的大小與我吃的總卡路里的最高數量成比例,您可以在2012年聖誕節看到它。
膳食與每日總卡路里的比較
我通常在吃的時候將食物記入餐槽。例如,較晚的早餐或午餐可能會被記入小吃槽。你可以在我的一些假期餐時看到這種效果。在非假日,我通常會在早上和下午記錄早餐,午餐和晚餐作為大餐和小點心。在重大節日期間,當天的大餐有時會在下午的零食時間範圍內(例如,2012年聖誕節,2011年和2014年新年前夜)。在那些情況下,我通常會在晚餐時段記錄一個相當實質的甜點!

用餐記錄的卡路里取決於大餐的時間。
鑑於用餐時間的這種變化,我實際上發現刪除膳食分組變量並查看更有幫助每日總卡路里按食品類別分組。對類似物品進行分組讓我對那些傾向於主導我的假日飲食的食物有了更好的感受。這些包括許多甜點,巧克力和熱量飲料並不奇怪。假期絕對是關於我和我的家人的社交飲食!

甜點卡路里絕對主導我的假期飲食模式!
那些特別的假期款待
像許多人一樣,我期待著某些特殊的節日食品。我認為查看整個數據集並將假日專用項目的模式與我經常吃的食物進行對比會很有趣。例如,芝士蛋糕是我最喜歡的甜點之一,我全年都吃普通的芝士蛋糕。下面的條形圖顯示了我的每月卡路里總數,過濾後包括一些精選食品。相比之下,南瓜芝士蛋糕是一種季節性的款待,通常僅限於假日季節 - 也就是說,除非我碰巧像去年一樣在冰箱裡藏了一個額外的!此外,我在節日期間製作的名為Cranberry Delight的菜通常只出現在感恩節和聖誕節之間的食物日誌中,儘管它確實在2013年的複活節晚宴上露面。

與普通芝士蛋糕相比,南瓜芝士蛋糕和蔓越莓喜悅是罕見的節日季節!
那麼博客文章的最大挑戰是什麼?您可能會認為這是數據收集,重新編碼挑戰或調整我的可視化以盡可能最好地顯示我的假期飲食模式,但所有這些猜測都是錯誤的。實際上,最艱鉅的挑戰是留下許多JMP 13更新並返回JMP 12.2來創建我的圖形!事實上,我將JMP 13的持續發展歸咎於讓我在今年下半年成為一名效率低下的博主。對於我的所有工作和個人項目,我已經使用JMP 13的開發版本近一年了。我現在正在咬我的舌頭想要告訴你所有令人驚奇的新功能!但是你必須要耐心等待,直到JMP 13發布,才能聽到我不能沒有的新的和改進的新增功能。在此期間,節日快樂!