Traitements de logs générés par un QCM.
from jyquickhelper import add_notebook_menu
add_notebook_menu()
%matplotlib inline
import os
names = [os.path.join("logs", _) for _ in os.listdir("logs") if '.log' in _]
names = names[-1:]
names
['logs\\QCMApp.log']
with open(names[0], 'r', encoding="utf-8") as f:
lines = f.readlines()
lines[5:7]
['2018-12-12 17:56:29,989,INFO,[DATA],{"msg":"qcm","session":{"alias":"xavierd"},"client":["167.220.197.38",6274],"game":"simple_french_qcm","qn":"0"}\n', '2018-12-12 17:56:33,130,INFO,[DATA],{"msg":"event","session":{"alias":"xavierd"},"client":["167.220.197.38",6274],"events":["focus:true,game:simple_french_qcm,qn:0"]}\n']
Let's retrieve the expected answers from the QCM.
from mathenjeu.tests import simple_french_qcm
qcm = simple_french_qcm()
expected = qcm.expected_answers()
expected
[['simple_french_qcm-0-a0'], ['simple_french_qcm-1-a2'], ['simple_french_qcm-2-a2'], ['simple_french_qcm-3-a3'], ['simple_french_qcm-4-a2'], ['simple_french_qcm-5-a0', 'simple_french_qcm-5-a2'], ['simple_french_qcm-6-a5'], ['simple_french_qcm-7-a2'], ['simple_french_qcm-8-Thalès']]
import pandas
from mathenjeu.datalog import enumerate_qcmlogdf
dfs = pandas.concat(list(enumerate_qcmlogdf(names, expected)))
dfs.T
person_id | c241c15008614ea67480 | 32606f02fa0df6aac111 | 5bd96adafa694996027d | 753a507a9205e4c196fa | 8a8c40ad28eb1206efd5 |
---|---|---|---|---|---|
simple_french_qcm-0-a0 | 1 | NaN | 1 | 1 | NaN |
simple_french_qcm-0-b | 1 | NaN | 1 | 1 | 1 |
simple_french_qcm-0-duration | 0 days 00:00:04.266000 | NaT | 0 days 00:00:06.904000 | 0 days 00:00:16.530000 | 0 days 00:00:02.920000 |
simple_french_qcm-0-good | 1 | NaN | 1 | 1 | 0 |
simple_french_qcm-0-nbvisit | 1 | NaN | 1 | 1 | 1 |
simple_french_qcm-5-a0 | 1 | NaN | NaN | 1 | NaN |
simple_french_qcm-5-a1 | 1 | NaN | 1 | NaN | NaN |
simple_french_qcm-5-a2 | 1 | NaN | NaN | NaN | NaN |
simple_french_qcm-5-b | 1 | NaN | 1 | 1 | 1000 |
simple_french_qcm-5-duration | 1 days 00:00:00 | NaT | 0 days 00:00:10.153000 | 0 days 00:00:11.740000 | 0 days 00:00:02.247000 |
simple_french_qcm-5-good | 1 | NaN | 0 | 1 | 0 |
simple_french_qcm-5-nbvisit | 0.5 | NaN | 1 | 1 | 2 |
simple_french_qcm-8-ANS | thalès | NaN | Astérix et Cléopâtre | Prout | |
simple_french_qcm-8-b | 1 | NaN | 1 | 1 | 1 |
simple_french_qcm-8-duration | 0 days 00:00:04.390000 | NaT | 0 days 00:03:02.506000 | 0 days 00:00:14.483000 | 0 days 00:00:01.422000 |
simple_french_qcm-8-good | 0 | NaN | 0 | 0 | 0 |
simple_french_qcm-8-nbvisit | 1 | NaN | 1 | 1 | 1 |
simple_french_qcm-1-a2 | NaN | 1 | 2 | NaN | NaN |
simple_french_qcm-1-b | NaN | 1 | 1001 | 1 | NaN |
simple_french_qcm-1-duration | NaT | 0 days 00:00:03.343000 | 0 | 0 days 00:00:14.010000 | NaT |
simple_french_qcm-1-good | NaN | 1 | 2 | 0 | NaN |
simple_french_qcm-1-nbvisit | NaN | 1 | 3 | 1 | NaN |
simple_french_qcm-2-a2 | NaN | 1 | 1 | 1 | NaN |
simple_french_qcm-2-b | NaN | 1 | 1 | 1 | NaN |
simple_french_qcm-2-duration | NaT | 0 days 00:00:06.750000 | 0 days 00:00:31.978000 | 0 days 00:00:28.765000 | NaT |
simple_french_qcm-2-good | NaN | 1 | 1 | 1 | NaN |
simple_french_qcm-2-nbvisit | NaN | 1 | 2 | 1 | NaN |
simple_french_qcm-3-a2 | NaN | 1 | NaN | NaN | 1 |
simple_french_qcm-3-a3 | NaN | 1 | NaN | NaN | 1 |
simple_french_qcm-3-b | NaN | 1 | 1 | 1 | 1000 |
simple_french_qcm-3-duration | NaT | 1 days 00:00:00 | 0 days 00:00:19.246000 | 0 days 00:00:19.492000 | 0 days 00:00:09.323000 |
simple_french_qcm-3-good | NaN | 1 | 0 | 0 | 1 |
simple_french_qcm-3-nbvisit | NaN | 0.5 | 1 | 1 | 3 |
simple_french_qcm-4-a2 | NaN | 1 | 1 | NaN | 1 |
simple_french_qcm-4-b | NaN | 1 | 1 | 1 | 2 |
simple_french_qcm-4-duration | NaT | 0 days 00:00:09.688000 | 0 days 00:00:21.230000 | 0 days 00:03:19.593000 | 0 |
simple_french_qcm-4-good | NaN | 1 | 1 | 0 | 1 |
simple_french_qcm-4-nbvisit | NaN | 1 | 1 | 1 | 5 |
simple_french_qcm-6-a3 | NaN | 1 | NaN | NaN | NaN |
simple_french_qcm-6-b | NaN | 1 | 1 | 1 | 1 |
simple_french_qcm-6-duration | NaT | 1 days 00:00:00 | 0 days 00:00:20.314000 | 0 days 00:00:21.868000 | 0 days 00:00:00.750000 |
simple_french_qcm-6-good | NaN | 0 | 0 | 1 | 0 |
simple_french_qcm-6-nbvisit | NaN | 0.5 | 1 | 1 | 1 |
simple_french_qcm-7-a2 | NaN | 1 | 1 | NaN | NaN |
simple_french_qcm-7-b | NaN | 1 | 1 | 1 | 1 |
simple_french_qcm-7-duration | NaT | 0 days 00:00:06.390000 | 0 days 00:00:17.141000 | 0 days 00:00:20.923000 | 0 days 00:00:01.188000 |
simple_french_qcm-7-good | NaN | 1 | 1 | 0 | 0 |
simple_french_qcm-7-nbvisit | NaN | 1 | 1 | 1 | 1 |
simple_french_qcm-3-a0 | NaN | NaN | 1 | 1 | NaN |
simple_french_qcm-6-a2 | NaN | NaN | 1 | NaN | NaN |
simple_french_qcm-1-a1 | NaN | NaN | NaN | 1 | NaN |
simple_french_qcm-4-a0 | NaN | NaN | NaN | 1 | NaN |
simple_french_qcm-6-a5 | NaN | NaN | NaN | 1 | NaN |
simple_french_qcm-7-a0 | NaN | NaN | NaN | 1 | NaN |
-a1 | NaN | NaN | NaN | NaN | NaN |
on-a2 | NaN | NaN | NaN | NaN | NaN |
simple_french_qcm-0-a1 | NaN | NaN | NaN | NaN | 1 |
simple_french_qcm-4-a3 | NaN | NaN | NaN | NaN | 1 |