个人本科学习时间分析(更新3:一定是我太菜了分析时间数据才这么坑)

前面的故事

17年9月,也就是我刚上大三,因为挂科要强迫自己学习,于是开始记录学习时间,同时统计自己看了哪些书。本站站主江同学说 iOS 有一个 APP 能记录学习、玩游戏、阅读时间,还能展示统计结果,很方便的样子,而我是安卓啊。。。找了一番没有找到类似的 APP,我只好用人工记录。

一开始用 IFTTT,连接 Skype 服务,设置2个 IFTTT 的 button,一个 start button 触发会发给 Skype 的 IFTTT 机器人一条消息,包含触发的时间,以及文字显示学习开始;另一个 end button 触发则显示结束和时间。想要把时间做成表格,忘了是我不会设置 excel 还是国内服务不行,总之我需要隔一段时间把机器人发的消息手工记录到表格上。

然后我软出了 Flow,琢磨了一下,忘了是我不会用还是服务不行,总之就是不能直接做成 excel。iOS 的捷径我没有苹果设备就。。。

用了一段的 IFTTT 机器人发消息然后我手工记录,录入表格我花的时间也不多,也还行。然而有一天,IFTTT 断连 Skype ,太惨了,等了一段时间,后来直接说不支持了???

没办法,又回到最初的起点,纯手工记录。要么发开始和结束的消息给自己的微信小号,要么记录在纸质笔记本上,最后还是手工录入 excel。录入花的时间不多,数据量也不大,还行,而且录入的时候会有种,这周又学了这么久你怎么这么棒继续加油哦的喜悦和自豪🌚

于是不知不觉,记录了竟然快三年了。临毕业的时候用 excel 做了个图简单看了一下平均每天的学习时间按月份的变化,深刻感受了,期末五天学三门的努力🌚

在经过毕设和中心夏令营用 Python 做数据分析后,我这些记录突然有了一些意义,刚入门可以拿来练手,随着今后学习,能不断完善程序。一直想实现的记录和分析,似乎在能力范围内了。于是今天学习的时候分心,就大概写了个框架。

程序设计

两个程序:

1. 对已有的数据进行分析:

输入:.xlsx 文件

输出:可视化:

按月份:日期-时长:这个月的 x 号这一天学习了 y 小时;

按月份:日期-24小时学习时段:这个月的 x 号这一天学习时间段为 y_a 到 y_b;

按年:日期-时长:这一年的第 x 天学习时间为 y 小时;

按年:日期-24小时学习时段:这一年的 x 号这一天学习时间段为 y_a 到 y_b;

年学习频率:所有数据中, x 号这一天在学习的时长越大颜色越深;

24小时学习频率:所有数据中,每一天的 x 时间在学习的记录越多颜色越深;

学习类别饼状图:x 类别的学习时间占所有学习时间的比例为 y。

其他:

按每天和每年统计:两个学习记录间隔五分钟、十分钟、半小时的时间段、日期,大概表示分心不专注。

2. 今后程序化记录学习时间,不用再手工记录:

输入:日期,开始时间,结束时间,分类,备注。

输出:.csv 或 .xlsx 文件

再学习一段时间程序实现起来应该没什么大问题。但是数据有部分字段缺失,因为我记录的时候懒,每一行并不都是写了日期,有些分类也没写🌚处理起来应该不会太麻烦。可视化应该是最费时间的,毕竟我这会儿自己也说不大清,系统方法还不熟。就先写到这儿,下次更新应该是在16号夏令营结束之后。

——-以上,2019/8/10更新

 

15号夏令营结束了,答辩的时候,导师问我,别的同学都多多少少用了机器学习这样那样算法,我做的阈值分析算法,感觉只涉及统计分析。师兄替我辩解说,给我的数据只有Y,没有X。所以我想了想,我的这些学习记录数据也一样,没有X,只有Y,而且数据量实在很少,用不到机器学习的。对这些Y,我想得到的X只能是和日历结合起来,比如最近一个月有考试,或者最近游戏时间变多,学习时间必受影响。语义分析暂时不在我的能力范围内。

还有写算法的时候,一旦程序中有 for 循环,运行时间必定变慢,数据越多越明显。因此,需要进行矩阵向量化很有必要,我还没学。今天进行数据预处理,会用到 for 循环,甚至 for 套 for,效率优化放到以后来,先实现功能。

。。。

绝望,菜农的绝望,明明自己记得好好的数据,读取出来一看一堆问题。比如:时间超过24点变成1990年,有些月份多一列空行。处理起来一堆 bug,心酸😭不搞了,睡觉,明天再 debug。

——-以上,2019/8/21更新

 

预处理完成

经过了很长一段时间过后,预处理的问题解决了:

上次的问题:时间超过24点变成1990年,手动解决,每个源文件逐行排查。

字符解码:中文字符“珰”在 gbk 下无法解码,改成 unicode 还是有错误,绝了,于是手动删除。

文件名顺序:读取路径的所有文件,按名称排序,比如2017.11排在2017.9之前,所以发现总时间文件不是从2017.9.18开始,而是从2017.10.18开始,还是手动改源文件名解决,而不是生成之后再排序。

手动解决所有格式问题之后,生成了比较好的总时间文件 all_timedata_afterprocess:

手动检查了,显示###的也没问题。大概1120行数据。接下来是:

统计分析卡住

.csv 和 .xlsx 文件用 pandas 读取后,数据类型会变成 object,这个问题实在懵逼,搜了一圈不知道怎么解决,因为‘开始’‘结束’和‘长度’不能更改为 datetime 类型,所以没办法进行时间长度的加减,卡在这儿了。Python 处理时间数据真是坑啊,我要哭了,好好的数据就是不能计算,差点不想用 Python 写了,excel 直接图表不简单些吗???但是 excel 作图就没意思了。。。在挣扎了之后,再次停下来,下次再说。一定是我太菜了,才写一堆 bug 😭😭😭

——-以上,2019/10/7更新