欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 19:04:37
根据 ”艾宾浩斯遗忘曲线“复习时间点生成的复习计划模板编程小白,写的可能有点乱见谅哈。这几天一直在看学习方法之类的内容,加上自己在备考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