| 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) | |
| print("prediction.tsv saved.") | |
| prediction['difficulty'] = prediction['difficulty'].map(lambda x: int(round(x))) | |
| difficulty_distribution = prediction.groupby(by=['difficulty'])['count'].sum() / prediction['count'].sum() | |
| print(difficulty_distribution) | |
| 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 | |