根据 ”艾宾浩斯遗忘曲线“复习时间点生成的复习计划模板
程序员文章站
2022-06-26 17:07:07
根据 ”艾宾浩斯遗忘曲线“复习时间点生成的复习计划模板编程小白,写的可能有点乱见谅哈。这几天一直在看学习方法之类的内容,加上自己在备考cpa。就经常需要记忆很多东西。突然想起来很久之前看到过的 ”艾宾浩斯遗忘曲线“。看到网上有一些根据这个曲线,总结分享出来的复习时间点,但是没有哪种比较通用的模板可以直接复制,就想着自己写一个。使用方式:使用方式非常简单,只需要设置一下起始和终止日期,还有文件的生成路径就可以。(也可以去掉注释生成在当前路径下)结果:代码运行完会生成一个excel表格,每天学习完成之后...
根据 ”艾宾浩斯遗忘曲线“复习时间点生成的复习计划模板
编程小白,写的可能有点乱见谅哈。
这几天一直在看学习方法之类的内容,加上自己在备考cpa。就经常需要记忆很多东西。突然想起来很久之前看到过的 ”艾宾浩斯遗忘曲线“。看到网上有一些根据这个曲线,总结分享出来的复习时间点,但是没有哪种比较通用的模板可以直接复制,就想着自己写一个。
使用方式:使用方式非常简单,只需要设置一下起始和终止日期,还有文件的生成路径就可以。(也可以去掉注释生成在当前路径下)
结果:代码运行完会生成一个excel表格,每天学习完成之后,将1,2等天数在excel中 ctrl+H 替换为学习的章节即可,如 1 → ‘第一章’,选择全部替换。
注意:如果工作量比较大,可以设置15天为一个周期,把 get_Ebbinghaus_table() 函数的默认参数中的30去掉。
希望对大家的学习有所帮助!
import os
import pandas as pd
import numpy as np
import time
import datetime
# 计划时长
start_date = '2021-1-14'
end_date = '2021-2-28'
plan_days = (pd.to_datetime(end_date) - pd.to_datetime(start_date)).days
# 生成excel表格,设置路径
path = r''
# 生成到当前工作路径(optional)
# path = os.getcwd()
# name = path + 'Ebbinghaus-review-plan.xlsx'
def get_Ebbinghaus_table(start_date,end_date,plan_days,review_interval = [0,1,2,4,7,15,30]):# 遗忘曲线的复习时间点,不要改了,单位:天,设置为行索引
# 生成日期series
column_date = pd.Series(pd.date_range(start_date, end_date))
Ebbinghaus = pd.DataFrame([column_date + pd.Timedelta(days=i) for i in review_interval],index=review_interval)
Ebbinghaus_T = Ebbinghaus.T
# 设置日期为列索引1
Ebbinghaus_table = Ebbinghaus_T.set_index([pd.Index(column_date)])
# 设置天数为列索引列2,也可以改为事件列表
days = range(1,plan_days+2)
events = ''
Ebbinghaus_table = Ebbinghaus_table.set_index([pd.Index(days)],append=True).T
return Ebbinghaus_table
def generate(Ebbinghaus_table):
dic = {}
for i in range(Ebbinghaus_table.shape[1]):
# 获取第一行日期
column1_date = (Ebbinghaus_table.columns[i])[0]
# 获取第二行第几天
column2_days = (Ebbinghaus_table.columns[i])[1]
# 如果当前列或者当前列的左边有与当前日期相同的,则取他对应的第二行索引
df3 = ~pd.isna(Ebbinghaus_table[Ebbinghaus_table.iloc[:,range(column2_days)].isin([column1_date])]).all()
date = (Ebbinghaus_table.columns[i])[0]
to_datetime = date.to_pydatetime().date()
date_fmt = datetime.datetime.strftime(to_datetime,'%Y-%m-%d')
dic[date_fmt] = []
# 获取所有满足条件的天数
for n in df3[df3].index:
dic[date_fmt].append(n[1])
return dic
def get_review_plan():
Ebbinghaus_table = get_Ebbinghaus_table(start_date,end_date,plan_days)
process_table = generate(Ebbinghaus_table)
index = process_table.keys()
values = process_table.values()
review_plan = pd.DataFrame(values,dtype=object,index = index)
review_plan.to_excel(path,encoding='utf-8',header=0)
return review_plan
# 使用时将1,2等天数在excel中 ctrl+H 替换为学习的章节即可 如 1 → '第一章',选择全部替换
get_review_plan()
本文地址:https://blog.csdn.net/wildhunt7/article/details/112645324