|
import numpy as np |
|
from functools import partial |
|
|
|
import pandas as pd |
|
|
|
|
|
def predict_memory_states(my_collection, group): |
|
states = my_collection.states(*group.name) |
|
group['stability'] = float(states[0]) |
|
group['difficulty'] = float(states[1]) |
|
group['count'] = len(group) |
|
return pd.DataFrame({ |
|
'r_history': [group.name[1]], |
|
't_history': [group.name[0]], |
|
'stability': [round(float(states[0]), 2)], |
|
'difficulty': [round(float(states[1]), 2)], |
|
'count': [len(group)] |
|
}) |
|
|
|
|
|
def get_my_memory_states(proj_dir, dataset, my_collection): |
|
prediction = dataset.groupby(by=['t_history', 'r_history']).progress_apply( |
|
partial(predict_memory_states, my_collection)) |
|
prediction.reset_index(drop=True, inplace=True) |
|
prediction.sort_values(by=['r_history'], inplace=True) |
|
prediction.to_csv(proj_dir / "prediction.tsv", sep='\t', index=None) |
|
|
|
prediction['difficulty'] = prediction['difficulty'].map(lambda x: int(round(x))) |
|
difficulty_distribution = prediction.groupby(by=['difficulty'])['count'].sum() / prediction['count'].sum() |
|
|
|
difficulty_distribution_padding = np.zeros(10) |
|
for i in range(10): |
|
if i + 1 in difficulty_distribution.index: |
|
difficulty_distribution_padding[i] = difficulty_distribution.loc[i + 1] |
|
return difficulty_distribution_padding, difficulty_distribution |
|
|