iPhone步行數(shù)據(jù)分析教程
本文中我將展示如何利用 pandas 和 ggplot 來分析 iPhone 的步行數(shù)據(jù),我主要利用 Rodeo(Yhat’s 的 IDE)來進行數(shù)據(jù)分析。
數(shù)據(jù)收集
首先我想從我的 iPhone 中導(dǎo)出用于分析的步行數(shù)據(jù),Quantified Self 實驗室的工作人員開發(fā)了一個數(shù)據(jù)提取的便捷工具——QS Access。
以下是一組關(guān)于步行數(shù)據(jù)的截圖:
QS Access 應(yīng)用可以提取出一個包含某個時期內(nèi)步行數(shù)據(jù)的 CSV 文件,該文件中包含三列變量——開始時點、結(jié)束時點和步數(shù)。
數(shù)據(jù)分析
我主要利用 pandas 中的時間序列分析工具來分析數(shù)據(jù),當 Wes McKinney開始處理 pandas 項目時,他就已經(jīng)在一家投資管理公司工作,該行業(yè)廣泛依賴于時間序列分析方法。因此,pandas 中包含非常多的時間序列分析函數(shù)。
首先,當我們擁有了時間序列數(shù)據(jù)后,我們可以定義參數(shù) parse_dates 使得 pandas 可以正確地處理時間序列數(shù)據(jù)。對于我們來說,結(jié)束時點變量并沒有包含額外的有價值的信息,所以我們在分析過程中將不考慮該變量的情況。
***我們將開始時點變量設(shè)定為索引變量,這個設(shè)定有助于我們進一步的數(shù)據(jù)分析。
每小時步行數(shù)據(jù)
如何快速地繪圖分析現(xiàn)有的步行數(shù)據(jù)呢?
很不幸的是,我們無法從上圖中得到比較有價值的信息,我們應(yīng)該如何提高可視化效果呢?我想到一個好主意——我們可以利用 pandas 中的 resample 函數(shù)來改變數(shù)據(jù)集的時間粒度。
更精確地說,我們可以利用 downsampling 的方法來降低時間的頻度。比如,我們可以采集每小時的數(shù)據(jù),然后利用重抽樣和匯總計算的方法獲得日度數(shù)據(jù)、周度數(shù)據(jù)和月度數(shù)據(jù)。
獲取每天步行數(shù)據(jù)
從上圖中我們可以看出,每天的步數(shù)存在一個上升趨勢,隨著時間的推移,步行的路程越長。
獲取每周和每月步行數(shù)據(jù)
和上述代碼一樣,只要將 W 和 M 傳遞到 resample 函數(shù)中就能得到每周和每月的步行數(shù)據(jù)。
由于我更關(guān)心每天的運動情況,所以我將利用平均函數(shù)來計算每周或每月中平均每天的步行情況。具體的代碼如下所示:
更深入的分析
我很好奇的一件事是:工作日的運動量是否大于周末的運動量?我們可以利用 weekday 和 weekday_name 兩個方法來幫助分析。對于每個時間戳數(shù)據(jù),前者可以得知它屬于一周中的第幾天,而后者可以得知該時間點對應(yīng)的時間名字信息。添加完這兩個新變量后,我們還可以添加一個布爾變量來表示某個時間點是否是周末。
此外,我們還可以根據(jù)變量 weekend_bool 來做分類匯總處理,并對比兩組數(shù)據(jù)的差異情況。
從上述結(jié)果中可以看出,周末期間的每天平均步數(shù)是 11,621 步,中位數(shù)是 10,228,而工作日期間的每天平均步數(shù)是 10,146 步,中位數(shù)是 9,742,因此我們可以認為周末期間的運動量更大。
趨勢分析
***讓我們來討論下上文提到的上升趨勢,四月初由于工作的原因,我從夏洛特搬到了紐約城,擔任 Yhat的軟件工程師。
我想知道經(jīng)過這次搬家之后,我每天的步行情況有沒有發(fā)生改變?我們可以利用上文分析周末與工作日步行情況的方法來分析這個問題。
從上圖中我們可以輕易地看出自從搬到紐約城之后,每天的運動量確實增加了。但這是由多方面因素共同決定的,比如搬到紐約城后我的跑步次數(shù)增加了,這會增加每天的平均步數(shù)。如果想要進行更深入的分析,我們需要獲取更多的數(shù)據(jù)支持,由于篇幅問題,我們將在之后的文章中繼續(xù)分析。
總結(jié)
我希望這個分析可以讓您開始關(guān)注自己每天的步行情況,并利用 Rodeo 和 pandas 來分析數(shù)據(jù)。如果你對這個項目感興趣的話,可以參閱該鏈接。