你的时间都去哪了?(一)数据分析指标(点击跳转)
你的时间都去哪了?(二)python处理(点击跳转)
你的时间都去哪了?(三)时间利用情况分析报告(点击跳转)
用python处理的目的
因为是定期对相应格式的表格进行分析,每次用excel表格处理一遍,都在做重复的工作,非常耗时间和精力,就写成了python自动化处理。
数据概览
各项时间分类
各项时间分类是为统计做准备,分类如下
时间统计记录
时间统计记录示意如下:
数据清洗
自己记录的数据,清洗过程在excel中,记录的时候就完成了。
数据导入
import pandas as pd
import numpy as np
import datetime
import matplotlib
from matplotlib import pyplot as plt
数据处理
按之前提前计划的数据分类,把实验室时间,是否专注时间,是否是开会时间等提取出来,便于后续计算。
excel数据透视后汇总的有些数据,不方便引用。如做几个表最终汇总数据的交互计算,计算效率等的时候不方便。
TimeRecord = pd.read_excel('D:/时间记录及复盘/Time record/2020-06时间记录及分析(格式修正).xlsx',sheet_name='时间统计')
sleep_time=TimeRecord[TimeRecord.明细类.str.contains('睡觉',na=False)]
lab_time=TimeRecord[TimeRecord.地点.str.contains('实验室',na=False)]
absorbed_time=TimeRecord[TimeRecord.是否专注.str.contains('是',na=False)]
absorbed_target_time=lab_time[lab_time.是否专注.str.contains('是',na=False)]
occupied_lab_time=lab_time[lab_time.是否强制时间.str.contains('是',na=False)]
计算每天睡觉时间的的合计,因为睡觉类是在明细类里,所以以日期和明细类汇总,合计的项为十进制换算时间。因为上一段代码已经把表中的所有睡觉的时间提取到了sleeptime_day_table中,所以,这里明细类中只含有睡觉项。
sleeptime_day_table=pd.pivot_table(sleep_time,values='十进制换算',index='日期',columns='明细类',aggfunc='sum',fill_value=0)
按大类进行数据透视,pivot_table其实就是excel中的数据透视的功能。
time_day_table=pd.pivot_table(TimeRecord,values='十进制换算',index='日期',columns='大类',aggfunc='sum',fill_value=0,margins=True,margins_name='日合计')
为后面要用到的数据特征,进行汇总提取
lab_time_group_table=pd.pivot_table(lab_time,values='十进制换算',index='日期',columns='大类',aggfunc='sum',fill_value=0,margins=True,margins_name='实验室合计')
absorbed_target_time_group_table=pd.pivot_table(absorbed_target_time,values='十进制换算',index='日期',columns='大类',aggfunc='sum',fill_value=0,margins=True,margins_name='与目标一致专注合计')
occupied_lab_time_group_table=pd.pivot_table(occupied_lab_time,values='十进制换算',index='日期',columns='大类',aggfunc='sum',fill_value=0,margins=True,margins_name='实验室强制时间总计')
lab_time_group_table_merge=lab_time_group_table[['实验室合计']]
absorbed_target_time_group_table_merge=absorbed_target_time_group_table[['与目标一致专注合计']]
occupied_lab_time_group_table_merge=occupied_lab_time_group_table[['实验室强制时间总计']]
因为有些时间没有相应活动,数据提取并汇总的时候,表中就没有这些时间了,如周六完全休息,出去逛街玩,就不去实验室,这一天就没有实验室数据了,对后面进行状态规律的分析有影响。
用两个表的联结解决这个问题,因为是时间统计,没有这项活动的时间的异常值处理就赋值为0;
TimeRecord_merge=TimeRecord[['日期','星期','周']]
TimeRecord_merge=TimeRecord_merge.drop_duplicates()
TimeRecord_merge.index=TimeRecord_merge['日期']
analysis_lab_time=lab_time_group_table.join([absorbed_target_time_group_table_merge,occupied_lab_time_group_table_merge])
analysis_lab_time=TimeRecord_merge.join(analysis_lab_time,how='left')
analysis_lab_time=analysis_lab_time.fillna(0)
效率是为了评估个人的状态,人是需要相应正反馈的,如果付出了努力,但是每天的效率还是不达标,或者数据很差,那这个评估是会打击积极性的,就完全与效率评估的初衷背道而驰。所以将正常必要的【休息】时间加入进来。作为正常的【应有碎片时间】,应有碎片时间的计算方式是⅓的专注时间,也就是专注干活45分钟,休息15分钟。
《番茄工作法》及各类书记课程按工作内容不同的专注度,休息长度衍生的各种休息间隔如下。以下常见的三种休息方法,比值等价。
- 专注干活45分钟,休息15分钟.比率为三分之一
- 专注1.5h休息0.5h。比率为三分之一
- 专注一个番茄25分钟,休息5分钟,三个番茄后休息15分钟。干活总时间为75分钟,休息时间为25分钟,比值也为三分之一
analysis_lab_time['应有碎片时间']=analysis_lab_time['与目标一致专注合计']/3#专注45分钟,休息15分钟
计算效率,excel中好几个汇总表格的数据引用不方便,这也是采用python计算l的原因之一。
analysis_lab_time['效率']=(analysis_lab_time['与目标一致专注合计']+analysis_lab_time['应有碎片时间'])/(analysis_lab_time['实验室合计']-analysis_lab_time['实验室强制时间总计'])
analysis_lab_time=analysis_lab_time.drop('实验室合计',axis=0)
计算特征数据
analysis_lab_time['睡眠时间']=sleeptime_day_table['睡觉']
analysis_lab_time['学习时间']=analysis_lab_time['自己学习']+analysis_lab_time['项目/科研']
确定表中列的数据,方便最后输出表格时的美观。
order=['日期','周','星期','事务性时间','第二类时间','自己学习','项目/科研','学习时间','实验室合计','与目标一致专注合计','实验室强制时间总计','应有碎片时间','效率','睡眠时间']
analysis_lab_time=analysis_lab_time[order]
analysis_lab_time,每天实验室花费时间的各种特征计算后,最后导出结果呈现如下。
实验室各类时间按周或按星期X的平均,输出为表格
mean_lab_time=analysis_lab_time.groupby(by = '周').agg('mean')
mean_day=analysis_lab_time.groupby(by = '星期').agg('mean')
sum_week_sleep_time=sleep_time.groupby(by = '周').agg('sum')
mean_lab_time计算结果导出后如下,最后统一导出。
mean_day计算结果导出后如下,最后统一导出。
计算每周的各类时间,并将平均值在最下面一行计算出来
week_time_group_table=pd.pivot_table(TimeRecord,values='十进制换算',index='周',columns='大类',aggfunc='sum',fill_value=0)
sleeptime_day_table=sleeptime_day_table.join(TimeRecord_merge,how='left')
sleeptime_group_table=sleeptime_day_table.groupby(by = '周').agg('sum')
week_time_group_table['睡眠时间']=sleeptime_group_table['睡觉']
week_time_group_table['事务性时间']=week_time_group_table['事务性时间']-week_time_group_table['睡眠时间']
week_time_group_table.loc['Col_平均'] = week_time_group_table.apply(lambda x: x.mean())
week_time_group_table计算结果导出后如下,最后统一导出。
将平均值在最下面一行计算出来的代码
week_time_group_table.loc['Col_平均'] = week_time_group_table.apply(lambda x: x.mean())
因为睡觉时间在明细类里面,睡眠时间是比较关注的指标,所以要单独计算,从明细类中,
day_time_group_table1=pd.pivot_table(TimeRecord,values='十进制换算',index='日期',columns='明细类',aggfunc='sum',fill_value=0)
day_time_group_table2=pd.pivot_table(TimeRecord,values='十进制换算',index='日期',columns='大类',aggfunc='sum',fill_value=0)
#day_time_group_table=day_time_group_table.join(TimeRecord_merge,how='left')
day_time_group_table1=TimeRecord_merge.join(day_time_group_table1,how='left')
day_time_group_table2=TimeRecord_merge.join(day_time_group_table2,how='left')
计算各周平均每天的各大类的时间
week_perDay=day_time_group_table2.groupby(by = '周').agg('mean')
mean_week_sleep_time=day_time_group_table1.groupby(by = '周').agg('mean')['睡觉']
week_perDay=week_perDay.join(mean_week_sleep_time,how='left')
因为睡觉是在事务性时间的分类中,所以这里将事务性时间中的睡眠时间减掉,来评估每天吃饭、洗漱这些必须的事务性时间。睡眠时间单独看。
week_perDay['事务性时间']=week_perDay['事务性时间']-week_perDay['睡觉']
week_perDay.loc['Col_平均'] = week_perDay.apply(lambda x: x.mean())
week_perDay计算结果导出后如下,最后统一导出。
对计算好的数据特征导出为excel
writer = pd.ExcelWriter('D:/时间记录及复盘/Time record/analysis.xlsx')
analysis_lab_time.to_excel(excel_writer=writer,sheet_name='时间统计',index=False)
week_time_group_table.to_excel(excel_writer=writer,sheet_name='24小时周总计',index=True)
week_perDay.to_excel(excel_writer=writer,sheet_name='24小时周平均',index=True)
mean_lab_time.to_excel(excel_writer=writer,sheet_name='实验室周平均',index=True)
mean_day.to_excel(excel_writer=writer,sheet_name='星期X平均',index=True)
writer.save()
writer.close()
最终导出表格如下
你的时间都去哪了?(一)数据分析指标(点击跳转)
你的时间都去哪了?(二)python处理(点击跳转)
你的时间都去哪了?(三)时间利用情况分析报告(点击跳转)
另外有木有志同道合的小宝贝呀,微信号 Anuanfw