本文中我将展示如何利用 pandas 和 ggplot 来分析 iPhone 的步行数据,我主要利用 Rodeo(Yhat’s 的 IDE)来进行数据分析。
数据收集
首先我想从我的 iPhone 中导出用于分析的步行数据,Quantified Self 实验室的工作人员开发了一个数据提取的便捷工具——QS Access。
以下是一组关于步行数据的截图:
QS Access 应用可以提取出一个包含某个时期内步行数据的 CSV 文件,该文件中包含三列变量——开始时点、结束时点和步数。
数据分析
我主要利用 pandas 中的时间序列分析工具来分析数据,当 Wes McKinney开始处理 pandas 项目时,他就已经在一家投资管理公司工作,该行业广泛依赖于时间序列分析方法。因此,pandas 中包含非常多的时间序列分析函数。
首先,当我们拥有了时间序列数据后,我们可以定义参数 parse_dates 使得 pandas 可以正确地处理时间序列数据。对于我们来说,结束时点变量并没有包含额外的有价值的信息,所以我们在分析过程中将不考虑该变量的情况。
***我们将开始时点变量设定为索引变量,这个设定有助于我们进一步的数据分析。
每小时步行数据
如何快速地绘图分析现有的步行数据呢?
很不幸的是,我们无法从上图中得到比较有价值的信息,我们应该如何提高可视化效果呢?我想到一个好主意——我们可以利用 pandas 中的 resample 函数来改变数据集的时间粒度。
更精确地说,我们可以利用 downsampling 的方法来降低时间的频度。比如,我们可以采集每小时的数据,然后利用重抽样和汇总计算的方法获得日度数据、周度数据和月度数据。
获取每天步行数据
从上图中我们可以看出,每天的步数存在一个上升趋势,随着时间的推移,步行的路程越长。
获取每周和每月步行数据
和上述代码一样,只要将 W 和 M 传递到 resample 函数中就能得到每周和每月的步行数据。
由于我更关心每天的运动情况,所以我将利用平均函数来计算每周或每月中平均每天的步行情况。具体的代码如下所示:
更深入的分析
我很好奇的一件事是:工作日的运动量是否大于周末的运动量?我们可以利用 weekday 和 weekday_name 两个方法来帮助分析。对于每个时间戳数据,前者可以得知它属于一周中的第几天,而后者可以得知该时间点对应的时间名字信息。添加完这两个新变量后,我们还可以添加一个布尔变量来表示某个时间点是否是周末。
此外,我们还可以根据变量 weekend_bool 来做分类汇总处理,并对比两组数据的差异情况。
从上述结果中可以看出,周末期间的每天平均步数是 11,621 步,中位数是 10,228,而工作日期间的每天平均步数是 10,146 步,中位数是 9,742,因此我们可以认为周末期间的运动量更大。
趋势分析
***让我们来讨论下上文提到的上升趋势,四月初由于工作的原因,我从夏洛特搬到了纽约城,担任 Yhat的软件工程师。
我想知道经过这次搬家之后,我每天的步行情况有没有发生改变?我们可以利用上文分析周末与工作日步行情况的方法来分析这个问题。
从上图中我们可以轻易地看出自从搬到纽约城之后,每天的运动量确实增加了。但这是由多方面因素共同决定的,比如搬到纽约城后我的跑步次数增加了,这会增加每天的平均步数。如果想要进行更深入的分析,我们需要获取更多的数据支持,由于篇幅问题,我们将在之后的文章中继续分析。
总结
我希望这个分析可以让您开始关注自己每天的步行情况,并利用 Rodeo 和 pandas 来分析数据。如果你对这个项目感兴趣的话,可以参阅该链接。