{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Pr\u00e9traitement des logs\n", "\n", "Traitements de logs g\u00e9n\u00e9r\u00e9s par un QCM."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Observations brutes"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [{"data": {"text/plain": ["['logs\\\\QCMApp.log']"]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["import os\n", "names = [os.path.join(\"logs\", _) for _ in os.listdir(\"logs\") if '.log' in _]\n", "names = names[-1:]\n", "names"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/plain": ["['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',\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']"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["with open(names[0], 'r', encoding=\"utf-8\") as f:\n", " lines = f.readlines()\n", "lines[5:7]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Let's retrieve the expected answers from the QCM."]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"data": {"text/plain": ["[['simple_french_qcm-0-a0'],\n", " ['simple_french_qcm-1-a2'],\n", " ['simple_french_qcm-2-a2'],\n", " ['simple_french_qcm-3-a3'],\n", " ['simple_french_qcm-4-a2'],\n", " ['simple_french_qcm-5-a0', 'simple_french_qcm-5-a2'],\n", " ['simple_french_qcm-6-a5'],\n", " ['simple_french_qcm-7-a2'],\n", " ['simple_french_qcm-8-Thal\u00e8s']]"]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["from mathenjeu.tests import simple_french_qcm\n", "qcm = simple_french_qcm()\n", "expected = qcm.expected_answers()\n", "expected"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
person_idc241c15008614ea6748032606f02fa0df6aac1115bd96adafa694996027d753a507a9205e4c196fa8a8c40ad28eb1206efd5
simple_french_qcm-0-a01NaN11NaN
simple_french_qcm-0-b1NaN111
simple_french_qcm-0-duration0 days 00:00:04.266000NaT0 days 00:00:06.9040000 days 00:00:16.5300000 days 00:00:02.920000
simple_french_qcm-0-good1NaN110
simple_french_qcm-0-nbvisit1NaN111
simple_french_qcm-5-a01NaNNaN1NaN
simple_french_qcm-5-a11NaN1NaNNaN
simple_french_qcm-5-a21NaNNaNNaNNaN
simple_french_qcm-5-b1NaN111000
simple_french_qcm-5-duration1 days 00:00:00NaT0 days 00:00:10.1530000 days 00:00:11.7400000 days 00:00:02.247000
simple_french_qcm-5-good1NaN010
simple_french_qcm-5-nbvisit0.5NaN112
simple_french_qcm-8-ANSthal\u00e8sNaNAst\u00e9rix et Cl\u00e9op\u00e2treProut
simple_french_qcm-8-b1NaN111
simple_french_qcm-8-duration0 days 00:00:04.390000NaT0 days 00:03:02.5060000 days 00:00:14.4830000 days 00:00:01.422000
simple_french_qcm-8-good0NaN000
simple_french_qcm-8-nbvisit1NaN111
simple_french_qcm-1-a2NaN12NaNNaN
simple_french_qcm-1-bNaN110011NaN
simple_french_qcm-1-durationNaT0 days 00:00:03.34300000 days 00:00:14.010000NaT
simple_french_qcm-1-goodNaN120NaN
simple_french_qcm-1-nbvisitNaN131NaN
simple_french_qcm-2-a2NaN111NaN
simple_french_qcm-2-bNaN111NaN
simple_french_qcm-2-durationNaT0 days 00:00:06.7500000 days 00:00:31.9780000 days 00:00:28.765000NaT
simple_french_qcm-2-goodNaN111NaN
simple_french_qcm-2-nbvisitNaN121NaN
simple_french_qcm-3-a2NaN1NaNNaN1
simple_french_qcm-3-a3NaN1NaNNaN1
simple_french_qcm-3-bNaN1111000
simple_french_qcm-3-durationNaT1 days 00:00:000 days 00:00:19.2460000 days 00:00:19.4920000 days 00:00:09.323000
simple_french_qcm-3-goodNaN1001
simple_french_qcm-3-nbvisitNaN0.5113
simple_french_qcm-4-a2NaN11NaN1
simple_french_qcm-4-bNaN1112
simple_french_qcm-4-durationNaT0 days 00:00:09.6880000 days 00:00:21.2300000 days 00:03:19.5930000
simple_french_qcm-4-goodNaN1101
simple_french_qcm-4-nbvisitNaN1115
simple_french_qcm-6-a3NaN1NaNNaNNaN
simple_french_qcm-6-bNaN1111
simple_french_qcm-6-durationNaT1 days 00:00:000 days 00:00:20.3140000 days 00:00:21.8680000 days 00:00:00.750000
simple_french_qcm-6-goodNaN0010
simple_french_qcm-6-nbvisitNaN0.5111
simple_french_qcm-7-a2NaN11NaNNaN
simple_french_qcm-7-bNaN1111
simple_french_qcm-7-durationNaT0 days 00:00:06.3900000 days 00:00:17.1410000 days 00:00:20.9230000 days 00:00:01.188000
simple_french_qcm-7-goodNaN1100
simple_french_qcm-7-nbvisitNaN1111
simple_french_qcm-3-a0NaNNaN11NaN
simple_french_qcm-6-a2NaNNaN1NaNNaN
simple_french_qcm-1-a1NaNNaNNaN1NaN
simple_french_qcm-4-a0NaNNaNNaN1NaN
simple_french_qcm-6-a5NaNNaNNaN1NaN
simple_french_qcm-7-a0NaNNaNNaN1NaN
-a1NaNNaNNaNNaNNaN
on-a2NaNNaNNaNNaNNaN
simple_french_qcm-0-a1NaNNaNNaNNaN1
simple_french_qcm-4-a3NaNNaNNaNNaN1
\n", "
"], "text/plain": ["person_id c241c15008614ea67480 32606f02fa0df6aac111 \\\n", "simple_french_qcm-0-a0 1 NaN \n", "simple_french_qcm-0-b 1 NaN \n", "simple_french_qcm-0-duration 0 days 00:00:04.266000 NaT \n", "simple_french_qcm-0-good 1 NaN \n", "simple_french_qcm-0-nbvisit 1 NaN \n", "simple_french_qcm-5-a0 1 NaN \n", "simple_french_qcm-5-a1 1 NaN \n", "simple_french_qcm-5-a2 1 NaN \n", "simple_french_qcm-5-b 1 NaN \n", "simple_french_qcm-5-duration 1 days 00:00:00 NaT \n", "simple_french_qcm-5-good 1 NaN \n", "simple_french_qcm-5-nbvisit 0.5 NaN \n", "simple_french_qcm-8-ANS thal\u00e8s NaN \n", "simple_french_qcm-8-b 1 NaN \n", "simple_french_qcm-8-duration 0 days 00:00:04.390000 NaT \n", "simple_french_qcm-8-good 0 NaN \n", "simple_french_qcm-8-nbvisit 1 NaN \n", "simple_french_qcm-1-a2 NaN 1 \n", "simple_french_qcm-1-b NaN 1 \n", "simple_french_qcm-1-duration NaT 0 days 00:00:03.343000 \n", "simple_french_qcm-1-good NaN 1 \n", "simple_french_qcm-1-nbvisit NaN 1 \n", "simple_french_qcm-2-a2 NaN 1 \n", "simple_french_qcm-2-b NaN 1 \n", "simple_french_qcm-2-duration NaT 0 days 00:00:06.750000 \n", "simple_french_qcm-2-good NaN 1 \n", "simple_french_qcm-2-nbvisit NaN 1 \n", "simple_french_qcm-3-a2 NaN 1 \n", "simple_french_qcm-3-a3 NaN 1 \n", "simple_french_qcm-3-b NaN 1 \n", "simple_french_qcm-3-duration NaT 1 days 00:00:00 \n", "simple_french_qcm-3-good NaN 1 \n", "simple_french_qcm-3-nbvisit NaN 0.5 \n", "simple_french_qcm-4-a2 NaN 1 \n", "simple_french_qcm-4-b NaN 1 \n", "simple_french_qcm-4-duration NaT 0 days 00:00:09.688000 \n", "simple_french_qcm-4-good NaN 1 \n", "simple_french_qcm-4-nbvisit NaN 1 \n", "simple_french_qcm-6-a3 NaN 1 \n", "simple_french_qcm-6-b NaN 1 \n", "simple_french_qcm-6-duration NaT 1 days 00:00:00 \n", "simple_french_qcm-6-good NaN 0 \n", "simple_french_qcm-6-nbvisit NaN 0.5 \n", "simple_french_qcm-7-a2 NaN 1 \n", "simple_french_qcm-7-b NaN 1 \n", "simple_french_qcm-7-duration NaT 0 days 00:00:06.390000 \n", "simple_french_qcm-7-good NaN 1 \n", "simple_french_qcm-7-nbvisit NaN 1 \n", "simple_french_qcm-3-a0 NaN NaN \n", "simple_french_qcm-6-a2 NaN NaN \n", "simple_french_qcm-1-a1 NaN NaN \n", "simple_french_qcm-4-a0 NaN NaN \n", "simple_french_qcm-6-a5 NaN NaN \n", "simple_french_qcm-7-a0 NaN NaN \n", "-a1 NaN NaN \n", "on-a2 NaN NaN \n", "simple_french_qcm-0-a1 NaN NaN \n", "simple_french_qcm-4-a3 NaN NaN \n", "\n", "person_id 5bd96adafa694996027d 753a507a9205e4c196fa \\\n", "simple_french_qcm-0-a0 1 1 \n", "simple_french_qcm-0-b 1 1 \n", "simple_french_qcm-0-duration 0 days 00:00:06.904000 0 days 00:00:16.530000 \n", "simple_french_qcm-0-good 1 1 \n", "simple_french_qcm-0-nbvisit 1 1 \n", "simple_french_qcm-5-a0 NaN 1 \n", "simple_french_qcm-5-a1 1 NaN \n", "simple_french_qcm-5-a2 NaN NaN \n", "simple_french_qcm-5-b 1 1 \n", "simple_french_qcm-5-duration 0 days 00:00:10.153000 0 days 00:00:11.740000 \n", "simple_french_qcm-5-good 0 1 \n", "simple_french_qcm-5-nbvisit 1 1 \n", "simple_french_qcm-8-ANS Ast\u00e9rix et Cl\u00e9op\u00e2tre Prout \n", "simple_french_qcm-8-b 1 1 \n", "simple_french_qcm-8-duration 0 days 00:03:02.506000 0 days 00:00:14.483000 \n", "simple_french_qcm-8-good 0 0 \n", "simple_french_qcm-8-nbvisit 1 1 \n", "simple_french_qcm-1-a2 2 NaN \n", "simple_french_qcm-1-b 1001 1 \n", "simple_french_qcm-1-duration 0 0 days 00:00:14.010000 \n", "simple_french_qcm-1-good 2 0 \n", "simple_french_qcm-1-nbvisit 3 1 \n", "simple_french_qcm-2-a2 1 1 \n", "simple_french_qcm-2-b 1 1 \n", "simple_french_qcm-2-duration 0 days 00:00:31.978000 0 days 00:00:28.765000 \n", "simple_french_qcm-2-good 1 1 \n", "simple_french_qcm-2-nbvisit 2 1 \n", "simple_french_qcm-3-a2 NaN NaN \n", "simple_french_qcm-3-a3 NaN NaN \n", "simple_french_qcm-3-b 1 1 \n", "simple_french_qcm-3-duration 0 days 00:00:19.246000 0 days 00:00:19.492000 \n", "simple_french_qcm-3-good 0 0 \n", "simple_french_qcm-3-nbvisit 1 1 \n", "simple_french_qcm-4-a2 1 NaN \n", "simple_french_qcm-4-b 1 1 \n", "simple_french_qcm-4-duration 0 days 00:00:21.230000 0 days 00:03:19.593000 \n", "simple_french_qcm-4-good 1 0 \n", "simple_french_qcm-4-nbvisit 1 1 \n", "simple_french_qcm-6-a3 NaN NaN \n", "simple_french_qcm-6-b 1 1 \n", "simple_french_qcm-6-duration 0 days 00:00:20.314000 0 days 00:00:21.868000 \n", "simple_french_qcm-6-good 0 1 \n", "simple_french_qcm-6-nbvisit 1 1 \n", "simple_french_qcm-7-a2 1 NaN \n", "simple_french_qcm-7-b 1 1 \n", "simple_french_qcm-7-duration 0 days 00:00:17.141000 0 days 00:00:20.923000 \n", "simple_french_qcm-7-good 1 0 \n", "simple_french_qcm-7-nbvisit 1 1 \n", "simple_french_qcm-3-a0 1 1 \n", "simple_french_qcm-6-a2 1 NaN \n", "simple_french_qcm-1-a1 NaN 1 \n", "simple_french_qcm-4-a0 NaN 1 \n", "simple_french_qcm-6-a5 NaN 1 \n", "simple_french_qcm-7-a0 NaN 1 \n", "-a1 NaN NaN \n", "on-a2 NaN NaN \n", "simple_french_qcm-0-a1 NaN NaN \n", "simple_french_qcm-4-a3 NaN NaN \n", "\n", "person_id 8a8c40ad28eb1206efd5 \n", "simple_french_qcm-0-a0 NaN \n", "simple_french_qcm-0-b 1 \n", "simple_french_qcm-0-duration 0 days 00:00:02.920000 \n", "simple_french_qcm-0-good 0 \n", "simple_french_qcm-0-nbvisit 1 \n", "simple_french_qcm-5-a0 NaN \n", "simple_french_qcm-5-a1 NaN \n", "simple_french_qcm-5-a2 NaN \n", "simple_french_qcm-5-b 1000 \n", "simple_french_qcm-5-duration 0 days 00:00:02.247000 \n", "simple_french_qcm-5-good 0 \n", "simple_french_qcm-5-nbvisit 2 \n", "simple_french_qcm-8-ANS \n", "simple_french_qcm-8-b 1 \n", "simple_french_qcm-8-duration 0 days 00:00:01.422000 \n", "simple_french_qcm-8-good 0 \n", "simple_french_qcm-8-nbvisit 1 \n", "simple_french_qcm-1-a2 NaN \n", "simple_french_qcm-1-b NaN \n", "simple_french_qcm-1-duration NaT \n", "simple_french_qcm-1-good NaN \n", "simple_french_qcm-1-nbvisit NaN \n", "simple_french_qcm-2-a2 NaN \n", "simple_french_qcm-2-b NaN \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-2-good NaN \n", "simple_french_qcm-2-nbvisit NaN \n", "simple_french_qcm-3-a2 1 \n", "simple_french_qcm-3-a3 1 \n", "simple_french_qcm-3-b 1000 \n", "simple_french_qcm-3-duration 0 days 00:00:09.323000 \n", "simple_french_qcm-3-good 1 \n", "simple_french_qcm-3-nbvisit 3 \n", "simple_french_qcm-4-a2 1 \n", "simple_french_qcm-4-b 2 \n", "simple_french_qcm-4-duration 0 \n", "simple_french_qcm-4-good 1 \n", "simple_french_qcm-4-nbvisit 5 \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b 1 \n", "simple_french_qcm-6-duration 0 days 00:00:00.750000 \n", "simple_french_qcm-6-good 0 \n", "simple_french_qcm-6-nbvisit 1 \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b 1 \n", "simple_french_qcm-7-duration 0 days 00:00:01.188000 \n", "simple_french_qcm-7-good 0 \n", "simple_french_qcm-7-nbvisit 1 \n", "simple_french_qcm-3-a0 NaN \n", "simple_french_qcm-6-a2 NaN \n", "simple_french_qcm-1-a1 NaN \n", "simple_french_qcm-4-a0 NaN \n", "simple_french_qcm-6-a5 NaN \n", "simple_french_qcm-7-a0 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "simple_french_qcm-0-a1 1 \n", "simple_french_qcm-4-a3 1 "]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["import pandas\n", "from mathenjeu.datalog import enumerate_qcmlogdf\n", "dfs = pandas.concat(list(enumerate_qcmlogdf(names, expected)))\n", "dfs.T"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": []}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": []}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.2"}}, "nbformat": 4, "nbformat_minor": 2}