根据 ”艾宾浩斯遗忘曲线“复习时间点生成的复习计划模板

编程小白,写的可能有点乱见谅哈。

这几天一直在看学习方法之类的内容,加上自己在备考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