首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用数据说话:2月份微信运动清单

通过抓取微信运动的数据(其实是翻看微信运动消息,然后一个一个手敲的),我获得了2月份每天的运动步数,以及朋友圈排名。

运动步数列表如下:

[8743, 9306, 5613, 2258, 9866, 7507, 7201, 10027, 6373, 23, 7247, 5595, 4285, 9677, 6578, 18279, 6033, 7214, 2621, 0, 10426, 4773, 14093, 7686, 1766, 8615, 12564, 18436]

朋友圈排名列表如下:

[22, 16, 34, 56, 19, 26, 26, 15, 43, 75, 33, 40, 56, 20, 28, 4, 26, 16, 53, 0, 11, 51, 5, 25, 63, 23, 5, 1]

折线图

为了一目了然地看出每天步数和排名的变化,我用matplotlib库绘制了步数和排名随时间变化的折线图。

运动步数和排名随时间变化图

绘制折线图之前,我先对数据进行了简单的处理。

首先,对于缺失数据的处理,2月20日,微信运动步数缺失,运动步数当然就是了,至于排名,应该是一个很大的数,可以以100名计算,或者是一个更靠后的数。但是我没有按照100处理,而是将排名取作了,算是一个奇点数据。从图中可以清晰地看出来,其它时间的步数和排名都是负相关,只有2月20日,两个点相交到了一起。

其次,运动步数的数据范围[0,20000],朋友圈排名的数据范围[1,100],如果不对数据进行处理,以运动步数的数量级,朋友圈排名就是一条直线,为了将两个数列合理地展示在同一张图中,我对步数和排名都进行了数据的标准化,即(current - min)/(max - min),标准化后的数据范围[0,1]。

另外,在绘制图形的过程中,我也做了一些修改和调整。

首先,标准化后的数据,已经丢失了数据的原貌,无法准确地看到每天的步数和排名的具体数字,于是我用plot.text()方法对每个点都加了注释,注释的内容就是每天的步数和排名的具体数字。

其次,是选色的问题,刚开始步数我用的是默认的blue,排名我用的是red,标准的蓝色和红色,颜色是很鲜艳的,也是非常重的,当线和注释有重叠,特别是两条线同时和注释相互重叠时,根本都看不到注释的是什么东西,哪怕我的注释是黑色的,也无济于事。于是我参照颜色卡,把步数改成了cornflowerblue,一种矢车菊的亮蓝色,把排名改成了greenyellow,一种绿黄色,不过之前听说过黄绿色,没有听过绿黄色,或许就是这样翻译的,听起来顺耳而已,也可能有yellowgreen这么一种颜色,只是谁在前就更偏向于谁而已。

plot配色卡

最后,就是网格线的去留问题,用标准的蓝和红这种颜色比较重的,绘制的折线图,网格线显得若有若无,既能标示刻度,又不影响观感。修改成矢车菊的亮蓝色和黄绿色之后,网格线就有些突兀了,怎么看怎么惹眼,都抢了折线图的风光,于是乎,果断弃除网格线。关于网格线的去留,我的总结是这样的,当绘制的图形颜色较重的情况下,当绘制的图形比较单调,看着比较空的情况下,网格线可以作为很好的辅助,反之,网格线就是抢眼的,多余的。

相关性分析

通过折线图可以直观的看出来,运动步数和排名还是有一定的相关关系的,也就是运动步数越大,排名越靠前,排名数越小。相关关系到底有多大呢,这个就需要通过计算相关性,用数据来说话。

导入pandas库,把步数列表和排名列表转化成Series对象,用相关性分析方法corr计算这两个Series序列的相关系数,返回的值为:-0.72934000147。

从这个数据可以说明,步数和排名是呈负相关,并且相关性还是挺高的,可以进行进一步的回归分析计算。

回归分析

回归分析需要导入sklearn库,把自变量x列表和因变量y列表作为参数传入到fit()方法中,即可通过intercept_和coef_获取到一元线性回归方程的常数项和系数。

首先,用步数作为自变量x,排名作为因变量y,计算结果如下:

系数为:[-0.0031836]

如果我今天走了20000步,即x=20000,代入得y=-11.19,排名不能为负,至少要大于,所以排名只能是第一。参考2月28日的18436步朋友圈第一名,20000步第一名,妥妥的。

然后,用排名作为自变量x,步数作为因变量y,计算结果如下:

常数项:12326.3482169

如果我今天想获得朋友圈排名第一,即x=1,代入得y=12159.26,这个步数显然还不足以拿到朋友圈第一,否则,我这一个月就不可能只有一次问鼎朋友圈啦。

为什么排名第一需要的步数这么低呢?我觉得大概原因应该是这样的,朋友圈的步数,一般都集中在10000步以下,尤其5000到8000步居多,这些集中的步数中,有些可能仅差几步,就决定了排名的先后,在拟合线性回归方程的时候,这些比较集中的数据对结果的影响非常大,直接影响了两端分布较少的数据,从而造成拟合不足的现象。

正常的情况下,考虑到范围限制,考虑到实际情况,步数和排名拟合成S形曲线要比拟合成一条直线更为合理。

话外篇

每当一年或者一个月结束的时候,总有些感慨想抒发,总要回忆自己过去的一年或者一个月都做了什么,有什么值得回味和留恋。但是真正坐下来想的时候,脑袋里一片虚空,好像突然就佛系了一样。

当已逝的2月化作参差不齐的步数折线放在我的面前,突然2月的每一天都清晰了起来,好像心中的感慨和回忆突然有了一个大纲,只要照着大纲找寻,自己走过的一帧一帧的画面都浮现在了脑海里。

先说距离最近的,也是步数最多的2月28日,除了上下班固定的5000步左右,中午和几个要好的同事步行将近两公里去喝羊肉汤,然后又步行着回公司,路上有说有笑,真的比死气沉沉的上班有意思的多了。这些就可以问鼎朋友圈,摘取第一的桂冠了吗?显然不是的,下班吃过晚饭,我和老婆开始了相约锻炼身体的许诺,虽然刚开始运动强度不大,但是开始就意味着决心,剩下的就是互相监督和坚持啦。

再说第二个18000+步的,虽然与2月28日的步数差不多,但是排名嘛,却令我伤心。那是2月16日,大年初一,中国传统的春节,我早上五点多就从床上爬起来,到长辈家拜年,等天彻底放亮,约着几个发小,步行去六七公里远的县城,最近几年的春节都是这样过的,一年不见的发小边走边聊,六七公里的路程根本都不算什么,到了县城一块逛逛街,吃个饭,然后打个车回家。

至于那个缺失的2月20日,是因为2月19日去外婆家走亲戚,舅舅和表弟也都回来了,相谈甚欢,贪了杯,直接喝断片了,2月20日在家睡了一天,哪也没去,手机也没有玩。

哎,就说这么多吧!满满的感慨和回忆!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180301G14NFI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券