{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Exploration 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',\n", " '2018-12-12 17:56:34,145,INFO,[DATA],{\"msg\":\"event\",\"session\":{\"alias\":\"xavierd\"},\"client\":[\"167.220.197.38\",6274],\"events\":[\"focus:true,game:simple_french_qcm,qn:0\"]}\\n',\n", " '2018-12-12 17:56:34,224,INFO,[DATA],{\"msg\":\"event\",\"session\":{\"alias\":\"xavierd\"},\"client\":[\"167.220.196.38\",52686],\"events\":[\"focus:true,game:simple_french_qcm,qn:0\"]}\\n',\n", " '2018-12-12 17:56:34,255,INFO,[DATA],{\"msg\":\"answer\",\"session\":{\"alias\":\"xavierd\"},\"client\":[\"167.220.197.38\",6274],\"data\":{\"a0\":\"on\",\"b\":\"ok\",\"game\":\"simple_french_qcm\",\"qn\":\"0\",\"next\":\"1\",\"events\":\"-a0,on\"}}\\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:10]"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"data": {"text/plain": ["[{'person_id': 'c241c15008614ea67480',\n", " 'alias': 'xavierd',\n", " 'time': datetime.datetime(2018, 12, 12, 17, 56, 29, 989000),\n", " 'qtime': 'begin'},\n", " {'person_id': 'c241c15008614ea67480',\n", " 'alias': 'xavierd',\n", " 'time': datetime.datetime(2018, 12, 12, 17, 56, 34, 255000),\n", " 'qtime': 'end',\n", " 'simple_french_qcm-0-a0': 'on',\n", " 'simple_french_qcm-0-b': 'ok',\n", " 'game': 'simple_french_qcm',\n", " 'qn': '0',\n", " 'next': '1',\n", " 'events': '-a0,on',\n", " 'simple_french_qcm-0-nbvisit': 1.0,\n", " 'simple_french_qcm-0-duration': datetime.timedelta(seconds=4, microseconds=266000)},\n", " {'person_id': '32606f02fa0df6aac111',\n", " 'alias': 'xavierd',\n", " 'time': datetime.datetime(2018, 12, 12, 17, 56, 34, 302000),\n", " 'qtime': 'begin'},\n", " {'person_id': '32606f02fa0df6aac111',\n", " 'alias': 'xavierd',\n", " 'time': datetime.datetime(2018, 12, 12, 17, 56, 37, 645000),\n", " 'qtime': 'end',\n", " 'simple_french_qcm-1-a2': 'on',\n", " 'simple_french_qcm-1-b': 'ok',\n", " 'game': 'simple_french_qcm',\n", " 'qn': '1',\n", " 'next': '2',\n", " 'events': '-a2,on',\n", " 'simple_french_qcm-1-nbvisit': 1.0,\n", " 'simple_french_qcm-1-duration': datetime.timedelta(seconds=3, microseconds=343000)},\n", " {'person_id': '32606f02fa0df6aac111',\n", " 'alias': 'xavierd',\n", " 'time': datetime.datetime(2018, 12, 12, 17, 56, 37, 677000),\n", " 'qtime': 'begin'}]"]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["from mathenjeu.datalog import enumerate_qcmlog\n", "obs = list(enumerate_qcmlog(names))\n", "obs[:5]"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/plain": ["(81, 58)"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["import pandas\n", "df = pandas.DataFrame(obs)\n", "df.shape"]}, {"cell_type": "code", "execution_count": 7, "metadata": {"scrolled": false}, "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", "
01234
person_idc241c15008614ea67480c241c15008614ea6748032606f02fa0df6aac11132606f02fa0df6aac11132606f02fa0df6aac111
aliasxavierdxavierdxavierdxavierdxavierd
time2018-12-12 17:56:29.9890002018-12-12 17:56:34.2550002018-12-12 17:56:34.3020002018-12-12 17:56:37.6450002018-12-12 17:56:37.677000
qtimebeginendbeginendbegin
simple_french_qcm-0-a0NaNonNaNNaNNaN
simple_french_qcm-0-bNaNokNaNNaNNaN
gameNaNsimple_french_qcmNaNsimple_french_qcmNaN
qnNaN0NaN1NaN
nextNaN1NaN2NaN
eventsNaN-a0,onNaN-a2,onNaN
simple_french_qcm-0-nbvisitNaN1NaNNaNNaN
simple_french_qcm-0-durationNaT0 days 00:00:04.266000NaTNaTNaT
simple_french_qcm-1-a2NaNNaNNaNonNaN
simple_french_qcm-1-bNaNNaNNaNokNaN
simple_french_qcm-1-nbvisitNaNNaNNaN1NaN
simple_french_qcm-1-durationNaTNaTNaT0 days 00:00:03.343000NaT
simple_french_qcm-2-a2NaNNaNNaNNaNNaN
simple_french_qcm-2-bNaNNaNNaNNaNNaN
simple_french_qcm-2-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-2-durationNaTNaTNaTNaTNaT
simple_french_qcm-3-a2NaNNaNNaNNaNNaN
simple_french_qcm-3-a3NaNNaNNaNNaNNaN
simple_french_qcm-3-bNaNNaNNaNNaNNaN
simple_french_qcm-3-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-3-durationNaTNaTNaTNaTNaT
simple_french_qcm-4-a2NaNNaNNaNNaNNaN
simple_french_qcm-4-bNaNNaNNaNNaNNaN
simple_french_qcm-4-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-4-durationNaTNaTNaTNaTNaT
simple_french_qcm-5-a0NaNNaNNaNNaNNaN
simple_french_qcm-5-a1NaNNaNNaNNaNNaN
simple_french_qcm-5-a2NaNNaNNaNNaNNaN
simple_french_qcm-5-bNaNNaNNaNNaNNaN
simple_french_qcm-5-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-5-durationNaTNaTNaTNaTNaT
simple_french_qcm-6-a3NaNNaNNaNNaNNaN
simple_french_qcm-6-bNaNNaNNaNNaNNaN
simple_french_qcm-6-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-6-durationNaTNaTNaTNaTNaT
simple_french_qcm-7-a2NaNNaNNaNNaNNaN
simple_french_qcm-7-bNaNNaNNaNNaNNaN
simple_french_qcm-7-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-7-durationNaTNaTNaTNaTNaT
simple_french_qcm-8-ANSNaNNaNNaNNaNNaN
simple_french_qcm-8-bNaNNaNNaNNaNNaN
simple_french_qcm-8-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-8-durationNaTNaTNaTNaTNaT
simple_french_qcm-3-a0NaNNaNNaNNaNNaN
simple_french_qcm-6-a2NaNNaNNaNNaNNaN
simple_french_qcm-1-a1NaNNaNNaNNaNNaN
simple_french_qcm-4-a0NaNNaNNaNNaNNaN
simple_french_qcm-6-a5NaNNaNNaNNaNNaN
simple_french_qcm-7-a0NaNNaNNaNNaNNaN
simple_french_qcm-0-a1NaNNaNNaNNaNNaN
-a1NaNNaNNaNNaNNaN
on-a2NaNNaNNaNNaNNaN
onNaNNaNNaNNaNNaN
simple_french_qcm-4-a3NaNNaNNaNNaNNaN
\n", "
"], "text/plain": [" 0 \\\n", "person_id c241c15008614ea67480 \n", "alias xavierd \n", "time 2018-12-12 17:56:29.989000 \n", "qtime begin \n", "simple_french_qcm-0-a0 NaN \n", "simple_french_qcm-0-b NaN \n", "game NaN \n", "qn NaN \n", "next NaN \n", "events NaN \n", "simple_french_qcm-0-nbvisit NaN \n", "simple_french_qcm-0-duration NaT \n", "simple_french_qcm-1-a2 NaN \n", "simple_french_qcm-1-b NaN \n", "simple_french_qcm-1-nbvisit NaN \n", "simple_french_qcm-1-duration NaT \n", "simple_french_qcm-2-a2 NaN \n", "simple_french_qcm-2-b NaN \n", "simple_french_qcm-2-nbvisit NaN \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-3-a2 NaN \n", "simple_french_qcm-3-a3 NaN \n", "simple_french_qcm-3-b NaN \n", "simple_french_qcm-3-nbvisit NaN \n", "simple_french_qcm-3-duration NaT \n", "simple_french_qcm-4-a2 NaN \n", "simple_french_qcm-4-b NaN \n", "simple_french_qcm-4-nbvisit NaN \n", "simple_french_qcm-4-duration NaT \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 NaN \n", "simple_french_qcm-5-nbvisit NaN \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b NaN \n", "simple_french_qcm-6-nbvisit NaN \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b NaN \n", "simple_french_qcm-7-nbvisit NaN \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-ANS NaN \n", "simple_french_qcm-8-b NaN \n", "simple_french_qcm-8-nbvisit NaN \n", "simple_french_qcm-8-duration NaT \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", "simple_french_qcm-0-a1 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "on NaN \n", "simple_french_qcm-4-a3 NaN \n", "\n", " 1 \\\n", "person_id c241c15008614ea67480 \n", "alias xavierd \n", "time 2018-12-12 17:56:34.255000 \n", "qtime end \n", "simple_french_qcm-0-a0 on \n", "simple_french_qcm-0-b ok \n", "game simple_french_qcm \n", "qn 0 \n", "next 1 \n", "events -a0,on \n", "simple_french_qcm-0-nbvisit 1 \n", "simple_french_qcm-0-duration 0 days 00:00:04.266000 \n", "simple_french_qcm-1-a2 NaN \n", "simple_french_qcm-1-b NaN \n", "simple_french_qcm-1-nbvisit NaN \n", "simple_french_qcm-1-duration NaT \n", "simple_french_qcm-2-a2 NaN \n", "simple_french_qcm-2-b NaN \n", "simple_french_qcm-2-nbvisit NaN \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-3-a2 NaN \n", "simple_french_qcm-3-a3 NaN \n", "simple_french_qcm-3-b NaN \n", "simple_french_qcm-3-nbvisit NaN \n", "simple_french_qcm-3-duration NaT \n", "simple_french_qcm-4-a2 NaN \n", "simple_french_qcm-4-b NaN \n", "simple_french_qcm-4-nbvisit NaN \n", "simple_french_qcm-4-duration NaT \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 NaN \n", "simple_french_qcm-5-nbvisit NaN \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b NaN \n", "simple_french_qcm-6-nbvisit NaN \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b NaN \n", "simple_french_qcm-7-nbvisit NaN \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-ANS NaN \n", "simple_french_qcm-8-b NaN \n", "simple_french_qcm-8-nbvisit NaN \n", "simple_french_qcm-8-duration NaT \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", "simple_french_qcm-0-a1 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "on NaN \n", "simple_french_qcm-4-a3 NaN \n", "\n", " 2 \\\n", "person_id 32606f02fa0df6aac111 \n", "alias xavierd \n", "time 2018-12-12 17:56:34.302000 \n", "qtime begin \n", "simple_french_qcm-0-a0 NaN \n", "simple_french_qcm-0-b NaN \n", "game NaN \n", "qn NaN \n", "next NaN \n", "events NaN \n", "simple_french_qcm-0-nbvisit NaN \n", "simple_french_qcm-0-duration NaT \n", "simple_french_qcm-1-a2 NaN \n", "simple_french_qcm-1-b NaN \n", "simple_french_qcm-1-nbvisit NaN \n", "simple_french_qcm-1-duration NaT \n", "simple_french_qcm-2-a2 NaN \n", "simple_french_qcm-2-b NaN \n", "simple_french_qcm-2-nbvisit NaN \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-3-a2 NaN \n", "simple_french_qcm-3-a3 NaN \n", "simple_french_qcm-3-b NaN \n", "simple_french_qcm-3-nbvisit NaN \n", "simple_french_qcm-3-duration NaT \n", "simple_french_qcm-4-a2 NaN \n", "simple_french_qcm-4-b NaN \n", "simple_french_qcm-4-nbvisit NaN \n", "simple_french_qcm-4-duration NaT \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 NaN \n", "simple_french_qcm-5-nbvisit NaN \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b NaN \n", "simple_french_qcm-6-nbvisit NaN \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b NaN \n", "simple_french_qcm-7-nbvisit NaN \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-ANS NaN \n", "simple_french_qcm-8-b NaN \n", "simple_french_qcm-8-nbvisit NaN \n", "simple_french_qcm-8-duration NaT \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", "simple_french_qcm-0-a1 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "on NaN \n", "simple_french_qcm-4-a3 NaN \n", "\n", " 3 \\\n", "person_id 32606f02fa0df6aac111 \n", "alias xavierd \n", "time 2018-12-12 17:56:37.645000 \n", "qtime end \n", "simple_french_qcm-0-a0 NaN \n", "simple_french_qcm-0-b NaN \n", "game simple_french_qcm \n", "qn 1 \n", "next 2 \n", "events -a2,on \n", "simple_french_qcm-0-nbvisit NaN \n", "simple_french_qcm-0-duration NaT \n", "simple_french_qcm-1-a2 on \n", "simple_french_qcm-1-b ok \n", "simple_french_qcm-1-nbvisit 1 \n", "simple_french_qcm-1-duration 0 days 00:00:03.343000 \n", "simple_french_qcm-2-a2 NaN \n", "simple_french_qcm-2-b NaN \n", "simple_french_qcm-2-nbvisit NaN \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-3-a2 NaN \n", "simple_french_qcm-3-a3 NaN \n", "simple_french_qcm-3-b NaN \n", "simple_french_qcm-3-nbvisit NaN \n", "simple_french_qcm-3-duration NaT \n", "simple_french_qcm-4-a2 NaN \n", "simple_french_qcm-4-b NaN \n", "simple_french_qcm-4-nbvisit NaN \n", "simple_french_qcm-4-duration NaT \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 NaN \n", "simple_french_qcm-5-nbvisit NaN \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b NaN \n", "simple_french_qcm-6-nbvisit NaN \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b NaN \n", "simple_french_qcm-7-nbvisit NaN \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-ANS NaN \n", "simple_french_qcm-8-b NaN \n", "simple_french_qcm-8-nbvisit NaN \n", "simple_french_qcm-8-duration NaT \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", "simple_french_qcm-0-a1 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "on NaN \n", "simple_french_qcm-4-a3 NaN \n", "\n", " 4 \n", "person_id 32606f02fa0df6aac111 \n", "alias xavierd \n", "time 2018-12-12 17:56:37.677000 \n", "qtime begin \n", "simple_french_qcm-0-a0 NaN \n", "simple_french_qcm-0-b NaN \n", "game NaN \n", "qn NaN \n", "next NaN \n", "events NaN \n", "simple_french_qcm-0-nbvisit NaN \n", "simple_french_qcm-0-duration NaT \n", "simple_french_qcm-1-a2 NaN \n", "simple_french_qcm-1-b NaN \n", "simple_french_qcm-1-nbvisit NaN \n", "simple_french_qcm-1-duration NaT \n", "simple_french_qcm-2-a2 NaN \n", "simple_french_qcm-2-b NaN \n", "simple_french_qcm-2-nbvisit NaN \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-3-a2 NaN \n", "simple_french_qcm-3-a3 NaN \n", "simple_french_qcm-3-b NaN \n", "simple_french_qcm-3-nbvisit NaN \n", "simple_french_qcm-3-duration NaT \n", "simple_french_qcm-4-a2 NaN \n", "simple_french_qcm-4-b NaN \n", "simple_french_qcm-4-nbvisit NaN \n", "simple_french_qcm-4-duration NaT \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 NaN \n", "simple_french_qcm-5-nbvisit NaN \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b NaN \n", "simple_french_qcm-6-nbvisit NaN \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b NaN \n", "simple_french_qcm-7-nbvisit NaN \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-ANS NaN \n", "simple_french_qcm-8-b NaN \n", "simple_french_qcm-8-nbvisit NaN \n", "simple_french_qcm-8-duration NaT \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", "simple_french_qcm-0-a1 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "on NaN \n", "simple_french_qcm-4-a3 NaN "]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["df.head().T"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"text/plain": ["{'Clemence', 'thierry-d', 'xavierd', 'xavierg'}"]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["set(df.alias)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Pr\u00e9paration des donn\u00e9es"]}, {"cell_type": "code", "execution_count": 9, "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", "
13579
person_idc241c15008614ea6748032606f02fa0df6aac11132606f02fa0df6aac11132606f02fa0df6aac11132606f02fa0df6aac111
aliasxavierdxavierdxavierdxavierdxavierd
time2018-12-12 17:56:34.2550002018-12-12 17:56:37.6450002018-12-12 17:56:44.4270002018-12-12 17:56:54.3170002018-12-12 17:57:04.052000
qtimeendendendendend
simple_french_qcm-0-a0onNaNNaNNaNNaN
simple_french_qcm-0-bokNaNNaNNaNNaN
gamesimple_french_qcmsimple_french_qcmsimple_french_qcmsimple_french_qcmsimple_french_qcm
qn01234
next12345
events-a0,on-a2,on-a2,on-a2,on-a2,on-a3,on-a2,on-a2,on
simple_french_qcm-0-nbvisit1NaNNaNNaNNaN
simple_french_qcm-0-duration0 days 00:00:04.266000NaTNaTNaTNaT
simple_french_qcm-1-a2NaNonNaNNaNNaN
simple_french_qcm-1-bNaNokNaNNaNNaN
simple_french_qcm-1-nbvisitNaN1NaNNaNNaN
simple_french_qcm-1-durationNaT0 days 00:00:03.343000NaTNaTNaT
simple_french_qcm-2-a2NaNNaNonNaNNaN
simple_french_qcm-2-bNaNNaNokNaNNaN
simple_french_qcm-2-nbvisitNaNNaN1NaNNaN
simple_french_qcm-2-durationNaTNaT0 days 00:00:06.750000NaTNaT
simple_french_qcm-3-a2NaNNaNNaNonNaN
simple_french_qcm-3-a3NaNNaNNaNonNaN
simple_french_qcm-3-bNaNNaNNaNokNaN
simple_french_qcm-3-nbvisitNaNNaNNaN0.5NaN
simple_french_qcm-3-durationNaTNaTNaT1 days 00:00:00NaT
simple_french_qcm-4-a2NaNNaNNaNNaNon
simple_french_qcm-4-bNaNNaNNaNNaNok
simple_french_qcm-4-nbvisitNaNNaNNaNNaN1
simple_french_qcm-4-durationNaTNaTNaTNaT0 days 00:00:09.688000
simple_french_qcm-5-a0NaNNaNNaNNaNNaN
simple_french_qcm-5-a1NaNNaNNaNNaNNaN
simple_french_qcm-5-a2NaNNaNNaNNaNNaN
simple_french_qcm-5-bNaNNaNNaNNaNNaN
simple_french_qcm-5-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-5-durationNaTNaTNaTNaTNaT
simple_french_qcm-6-a3NaNNaNNaNNaNNaN
simple_french_qcm-6-bNaNNaNNaNNaNNaN
simple_french_qcm-6-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-6-durationNaTNaTNaTNaTNaT
simple_french_qcm-7-a2NaNNaNNaNNaNNaN
simple_french_qcm-7-bNaNNaNNaNNaNNaN
simple_french_qcm-7-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-7-durationNaTNaTNaTNaTNaT
simple_french_qcm-8-ANSNaNNaNNaNNaNNaN
simple_french_qcm-8-bNaNNaNNaNNaNNaN
simple_french_qcm-8-nbvisitNaNNaNNaNNaNNaN
simple_french_qcm-8-durationNaTNaTNaTNaTNaT
simple_french_qcm-3-a0NaNNaNNaNNaNNaN
simple_french_qcm-6-a2NaNNaNNaNNaNNaN
simple_french_qcm-1-a1NaNNaNNaNNaNNaN
simple_french_qcm-4-a0NaNNaNNaNNaNNaN
simple_french_qcm-6-a5NaNNaNNaNNaNNaN
simple_french_qcm-7-a0NaNNaNNaNNaNNaN
simple_french_qcm-0-a1NaNNaNNaNNaNNaN
-a1NaNNaNNaNNaNNaN
on-a2NaNNaNNaNNaNNaN
onNaNNaNNaNNaNNaN
simple_french_qcm-4-a3NaNNaNNaNNaNNaN
\n", "
"], "text/plain": [" 1 \\\n", "person_id c241c15008614ea67480 \n", "alias xavierd \n", "time 2018-12-12 17:56:34.255000 \n", "qtime end \n", "simple_french_qcm-0-a0 on \n", "simple_french_qcm-0-b ok \n", "game simple_french_qcm \n", "qn 0 \n", "next 1 \n", "events -a0,on \n", "simple_french_qcm-0-nbvisit 1 \n", "simple_french_qcm-0-duration 0 days 00:00:04.266000 \n", "simple_french_qcm-1-a2 NaN \n", "simple_french_qcm-1-b NaN \n", "simple_french_qcm-1-nbvisit NaN \n", "simple_french_qcm-1-duration NaT \n", "simple_french_qcm-2-a2 NaN \n", "simple_french_qcm-2-b NaN \n", "simple_french_qcm-2-nbvisit NaN \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-3-a2 NaN \n", "simple_french_qcm-3-a3 NaN \n", "simple_french_qcm-3-b NaN \n", "simple_french_qcm-3-nbvisit NaN \n", "simple_french_qcm-3-duration NaT \n", "simple_french_qcm-4-a2 NaN \n", "simple_french_qcm-4-b NaN \n", "simple_french_qcm-4-nbvisit NaN \n", "simple_french_qcm-4-duration NaT \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 NaN \n", "simple_french_qcm-5-nbvisit NaN \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b NaN \n", "simple_french_qcm-6-nbvisit NaN \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b NaN \n", "simple_french_qcm-7-nbvisit NaN \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-ANS NaN \n", "simple_french_qcm-8-b NaN \n", "simple_french_qcm-8-nbvisit NaN \n", "simple_french_qcm-8-duration NaT \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", "simple_french_qcm-0-a1 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "on NaN \n", "simple_french_qcm-4-a3 NaN \n", "\n", " 3 \\\n", "person_id 32606f02fa0df6aac111 \n", "alias xavierd \n", "time 2018-12-12 17:56:37.645000 \n", "qtime end \n", "simple_french_qcm-0-a0 NaN \n", "simple_french_qcm-0-b NaN \n", "game simple_french_qcm \n", "qn 1 \n", "next 2 \n", "events -a2,on \n", "simple_french_qcm-0-nbvisit NaN \n", "simple_french_qcm-0-duration NaT \n", "simple_french_qcm-1-a2 on \n", "simple_french_qcm-1-b ok \n", "simple_french_qcm-1-nbvisit 1 \n", "simple_french_qcm-1-duration 0 days 00:00:03.343000 \n", "simple_french_qcm-2-a2 NaN \n", "simple_french_qcm-2-b NaN \n", "simple_french_qcm-2-nbvisit NaN \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-3-a2 NaN \n", "simple_french_qcm-3-a3 NaN \n", "simple_french_qcm-3-b NaN \n", "simple_french_qcm-3-nbvisit NaN \n", "simple_french_qcm-3-duration NaT \n", "simple_french_qcm-4-a2 NaN \n", "simple_french_qcm-4-b NaN \n", "simple_french_qcm-4-nbvisit NaN \n", "simple_french_qcm-4-duration NaT \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 NaN \n", "simple_french_qcm-5-nbvisit NaN \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b NaN \n", "simple_french_qcm-6-nbvisit NaN \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b NaN \n", "simple_french_qcm-7-nbvisit NaN \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-ANS NaN \n", "simple_french_qcm-8-b NaN \n", "simple_french_qcm-8-nbvisit NaN \n", "simple_french_qcm-8-duration NaT \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", "simple_french_qcm-0-a1 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "on NaN \n", "simple_french_qcm-4-a3 NaN \n", "\n", " 5 \\\n", "person_id 32606f02fa0df6aac111 \n", "alias xavierd \n", "time 2018-12-12 17:56:44.427000 \n", "qtime end \n", "simple_french_qcm-0-a0 NaN \n", "simple_french_qcm-0-b NaN \n", "game simple_french_qcm \n", "qn 2 \n", "next 3 \n", "events -a2,on \n", "simple_french_qcm-0-nbvisit NaN \n", "simple_french_qcm-0-duration NaT \n", "simple_french_qcm-1-a2 NaN \n", "simple_french_qcm-1-b NaN \n", "simple_french_qcm-1-nbvisit NaN \n", "simple_french_qcm-1-duration NaT \n", "simple_french_qcm-2-a2 on \n", "simple_french_qcm-2-b ok \n", "simple_french_qcm-2-nbvisit 1 \n", "simple_french_qcm-2-duration 0 days 00:00:06.750000 \n", "simple_french_qcm-3-a2 NaN \n", "simple_french_qcm-3-a3 NaN \n", "simple_french_qcm-3-b NaN \n", "simple_french_qcm-3-nbvisit NaN \n", "simple_french_qcm-3-duration NaT \n", "simple_french_qcm-4-a2 NaN \n", "simple_french_qcm-4-b NaN \n", "simple_french_qcm-4-nbvisit NaN \n", "simple_french_qcm-4-duration NaT \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 NaN \n", "simple_french_qcm-5-nbvisit NaN \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b NaN \n", "simple_french_qcm-6-nbvisit NaN \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b NaN \n", "simple_french_qcm-7-nbvisit NaN \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-ANS NaN \n", "simple_french_qcm-8-b NaN \n", "simple_french_qcm-8-nbvisit NaN \n", "simple_french_qcm-8-duration NaT \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", "simple_french_qcm-0-a1 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "on NaN \n", "simple_french_qcm-4-a3 NaN \n", "\n", " 7 \\\n", "person_id 32606f02fa0df6aac111 \n", "alias xavierd \n", "time 2018-12-12 17:56:54.317000 \n", "qtime end \n", "simple_french_qcm-0-a0 NaN \n", "simple_french_qcm-0-b NaN \n", "game simple_french_qcm \n", "qn 3 \n", "next 4 \n", "events -a2,on-a2,on-a3,on-a2,on \n", "simple_french_qcm-0-nbvisit NaN \n", "simple_french_qcm-0-duration NaT \n", "simple_french_qcm-1-a2 NaN \n", "simple_french_qcm-1-b NaN \n", "simple_french_qcm-1-nbvisit NaN \n", "simple_french_qcm-1-duration NaT \n", "simple_french_qcm-2-a2 NaN \n", "simple_french_qcm-2-b NaN \n", "simple_french_qcm-2-nbvisit NaN \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-3-a2 on \n", "simple_french_qcm-3-a3 on \n", "simple_french_qcm-3-b ok \n", "simple_french_qcm-3-nbvisit 0.5 \n", "simple_french_qcm-3-duration 1 days 00:00:00 \n", "simple_french_qcm-4-a2 NaN \n", "simple_french_qcm-4-b NaN \n", "simple_french_qcm-4-nbvisit NaN \n", "simple_french_qcm-4-duration NaT \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 NaN \n", "simple_french_qcm-5-nbvisit NaN \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b NaN \n", "simple_french_qcm-6-nbvisit NaN \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b NaN \n", "simple_french_qcm-7-nbvisit NaN \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-ANS NaN \n", "simple_french_qcm-8-b NaN \n", "simple_french_qcm-8-nbvisit NaN \n", "simple_french_qcm-8-duration NaT \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", "simple_french_qcm-0-a1 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "on NaN \n", "simple_french_qcm-4-a3 NaN \n", "\n", " 9 \n", "person_id 32606f02fa0df6aac111 \n", "alias xavierd \n", "time 2018-12-12 17:57:04.052000 \n", "qtime end \n", "simple_french_qcm-0-a0 NaN \n", "simple_french_qcm-0-b NaN \n", "game simple_french_qcm \n", "qn 4 \n", "next 5 \n", "events -a2,on \n", "simple_french_qcm-0-nbvisit NaN \n", "simple_french_qcm-0-duration NaT \n", "simple_french_qcm-1-a2 NaN \n", "simple_french_qcm-1-b NaN \n", "simple_french_qcm-1-nbvisit NaN \n", "simple_french_qcm-1-duration NaT \n", "simple_french_qcm-2-a2 NaN \n", "simple_french_qcm-2-b NaN \n", "simple_french_qcm-2-nbvisit NaN \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-3-a2 NaN \n", "simple_french_qcm-3-a3 NaN \n", "simple_french_qcm-3-b NaN \n", "simple_french_qcm-3-nbvisit NaN \n", "simple_french_qcm-3-duration NaT \n", "simple_french_qcm-4-a2 on \n", "simple_french_qcm-4-b ok \n", "simple_french_qcm-4-nbvisit 1 \n", "simple_french_qcm-4-duration 0 days 00:00:09.688000 \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 NaN \n", "simple_french_qcm-5-nbvisit NaN \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-a3 NaN \n", "simple_french_qcm-6-b NaN \n", "simple_french_qcm-6-nbvisit NaN \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-a2 NaN \n", "simple_french_qcm-7-b NaN \n", "simple_french_qcm-7-nbvisit NaN \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-ANS NaN \n", "simple_french_qcm-8-b NaN \n", "simple_french_qcm-8-nbvisit NaN \n", "simple_french_qcm-8-duration NaT \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", "simple_french_qcm-0-a1 NaN \n", "-a1 NaN \n", "on-a2 NaN \n", "on NaN \n", "simple_french_qcm-4-a3 NaN "]}, "execution_count": 10, "metadata": {}, "output_type": "execute_result"}], "source": ["df2 = df[df.qtime == 'end'].copy()\n", "df2.head().T"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": ["cols = ['alias'] + [c for c in df2.columns if \"simple_french_qcm\" in c and '-a' in c]\n", "df_question = df2[cols]\n", "cols = ['alias'] + [c for c in df2.columns if \"simple_french_qcm\" in c and '-b' in c]\n", "df_bouton = df2[cols]\n", "cols = ['alias'] + [c for c in df2.columns if \"simple_french_qcm\" in c and '-nb' in c]\n", "df_visit = df2[cols]\n", "cols = ['alias'] + [c for c in df2.columns if \"simple_french_qcm\" in c and '-ANS' in c]\n", "df_ans = df2[cols]\n", "cols = ['alias'] + [c for c in df2.columns if \"simple_french_qcm\" in c and '-dur' in c]\n", "df_dur = df2[cols]"]}, {"cell_type": "code", "execution_count": 11, "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", "
13579
aliasxavierdxavierdxavierdxavierdxavierd
simple_french_qcm-0-duration0 days 00:00:04.266000NaTNaTNaTNaT
simple_french_qcm-1-durationNaT0 days 00:00:03.343000NaTNaTNaT
simple_french_qcm-2-durationNaTNaT0 days 00:00:06.750000NaTNaT
simple_french_qcm-3-durationNaTNaTNaT1 days 00:00:00NaT
simple_french_qcm-4-durationNaTNaTNaTNaT0 days 00:00:09.688000
simple_french_qcm-5-durationNaTNaTNaTNaTNaT
simple_french_qcm-6-durationNaTNaTNaTNaTNaT
simple_french_qcm-7-durationNaTNaTNaTNaTNaT
simple_french_qcm-8-durationNaTNaTNaTNaTNaT
\n", "
"], "text/plain": [" 1 3 \\\n", "alias xavierd xavierd \n", "simple_french_qcm-0-duration 0 days 00:00:04.266000 NaT \n", "simple_french_qcm-1-duration NaT 0 days 00:00:03.343000 \n", "simple_french_qcm-2-duration NaT NaT \n", "simple_french_qcm-3-duration NaT NaT \n", "simple_french_qcm-4-duration NaT NaT \n", "simple_french_qcm-5-duration NaT NaT \n", "simple_french_qcm-6-duration NaT NaT \n", "simple_french_qcm-7-duration NaT NaT \n", "simple_french_qcm-8-duration NaT NaT \n", "\n", " 5 7 \\\n", "alias xavierd xavierd \n", "simple_french_qcm-0-duration NaT NaT \n", "simple_french_qcm-1-duration NaT NaT \n", "simple_french_qcm-2-duration 0 days 00:00:06.750000 NaT \n", "simple_french_qcm-3-duration NaT 1 days 00:00:00 \n", "simple_french_qcm-4-duration NaT NaT \n", "simple_french_qcm-5-duration NaT NaT \n", "simple_french_qcm-6-duration NaT NaT \n", "simple_french_qcm-7-duration NaT NaT \n", "simple_french_qcm-8-duration NaT NaT \n", "\n", " 9 \n", "alias xavierd \n", "simple_french_qcm-0-duration NaT \n", "simple_french_qcm-1-duration NaT \n", "simple_french_qcm-2-duration NaT \n", "simple_french_qcm-3-duration NaT \n", "simple_french_qcm-4-duration 0 days 00:00:09.688000 \n", "simple_french_qcm-5-duration NaT \n", "simple_french_qcm-6-duration NaT \n", "simple_french_qcm-7-duration NaT \n", "simple_french_qcm-8-duration NaT "]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["df_dur.head().T"]}, {"cell_type": "code", "execution_count": 12, "metadata": {"scrolled": false}, "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", "
simple_french_qcm-8-ANS
alias
ClemenceProut
thierry-dAst\u00e9rix et Cl\u00e9op\u00e2tre
xavierdthal\u00e8s
xavierg
\n", "
"], "text/plain": [" simple_french_qcm-8-ANS\n", "alias \n", "Clemence Prout\n", "thierry-d Ast\u00e9rix et Cl\u00e9op\u00e2tre\n", "xavierd thal\u00e8s\n", "xavierg "]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["import numpy \n", "\n", "def aggnotnan_serie(values):\n", " res = []\n", " for v in values:\n", " if isinstance(v, float) and numpy.isnan(v):\n", " continue\n", " if pandas.isnull(v):\n", " continue\n", " if v in ('ok', 'on'):\n", " v = 1\n", " elif v == 'skip':\n", " v = 1000\n", " res.append(v)\n", " if len(res) > 0: \n", " if isinstance(res[0], str):\n", " r = \",\".join(str(_) for _ in res)\n", " else:\n", " if len(res) == 1:\n", " r = res[0]\n", " else:\n", " try:\n", " r = sum(res)\n", " except:\n", " r = 0\n", " else:\n", " r = numpy.nan\n", " return r\n", "\n", "\n", "def aggnotnan(values):\n", " if isinstance(values, pandas.core.series.Series):\n", " r = aggnotnan_serie(values)\n", " return r\n", " else:\n", " res = []\n", " for col in values.columns:\n", " val = list(values[col])\n", " res.append(aggnotnan_serie(val))\n", " df = pandas.DataFrame(res, columns)\n", " return df\n", " \n", "gr_ans = df_ans.groupby(\"alias\").agg(aggnotnan)\n", "gr_ans"]}, {"cell_type": "code", "execution_count": 13, "metadata": {"scrolled": false}, "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", "
simple_french_qcm-0-durationsimple_french_qcm-1-durationsimple_french_qcm-2-durationsimple_french_qcm-3-durationsimple_french_qcm-4-durationsimple_french_qcm-5-durationsimple_french_qcm-6-durationsimple_french_qcm-7-durationsimple_french_qcm-8-duration
alias
Clemence0 days 00:00:16.5300000 days 00:00:14.0100000 days 00:00:28.7650000 days 00:00:19.4920000 days 00:03:19.5930000 days 00:00:11.7400000 days 00:00:21.8680000 days 00:00:20.9230000 days 00:00:14.483000
thierry-d0 days 00:00:06.90400000 days 00:00:31.9780000 days 00:00:19.2460000 days 00:00:21.2300000 days 00:00:10.1530000 days 00:00:20.3140000 days 00:00:17.1410000 days 00:03:02.506000
xavierd0 days 00:00:04.2660000 days 00:00:03.3430000 days 00:00:06.7500001 days 00:00:000 days 00:00:09.6880001 days 00:00:001 days 00:00:000 days 00:00:06.3900000 days 00:00:04.390000
xavierg0 days 00:00:02.920000NaNNaT0 days 00:00:09.32300000 days 00:00:02.2470000 days 00:00:00.7500000 days 00:00:01.1880000 days 00:00:01.422000
\n", "
"], "text/plain": [" simple_french_qcm-0-duration simple_french_qcm-1-duration \\\n", "alias \n", "Clemence 0 days 00:00:16.530000 0 days 00:00:14.010000 \n", "thierry-d 0 days 00:00:06.904000 0 \n", "xavierd 0 days 00:00:04.266000 0 days 00:00:03.343000 \n", "xavierg 0 days 00:00:02.920000 NaN \n", "\n", " simple_french_qcm-2-duration simple_french_qcm-3-duration \\\n", "alias \n", "Clemence 0 days 00:00:28.765000 0 days 00:00:19.492000 \n", "thierry-d 0 days 00:00:31.978000 0 days 00:00:19.246000 \n", "xavierd 0 days 00:00:06.750000 1 days 00:00:00 \n", "xavierg NaT 0 days 00:00:09.323000 \n", "\n", " simple_french_qcm-4-duration simple_french_qcm-5-duration \\\n", "alias \n", "Clemence 0 days 00:03:19.593000 0 days 00:00:11.740000 \n", "thierry-d 0 days 00:00:21.230000 0 days 00:00:10.153000 \n", "xavierd 0 days 00:00:09.688000 1 days 00:00:00 \n", "xavierg 0 0 days 00:00:02.247000 \n", "\n", " simple_french_qcm-6-duration simple_french_qcm-7-duration \\\n", "alias \n", "Clemence 0 days 00:00:21.868000 0 days 00:00:20.923000 \n", "thierry-d 0 days 00:00:20.314000 0 days 00:00:17.141000 \n", "xavierd 1 days 00:00:00 0 days 00:00:06.390000 \n", "xavierg 0 days 00:00:00.750000 0 days 00:00:01.188000 \n", "\n", " simple_french_qcm-8-duration \n", "alias \n", "Clemence 0 days 00:00:14.483000 \n", "thierry-d 0 days 00:03:02.506000 \n", "xavierd 0 days 00:00:04.390000 \n", "xavierg 0 days 00:00:01.422000 "]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["gr_dur = df_dur.groupby(\"alias\").agg(aggnotnan)\n", "gr_dur"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"name": "stderr", "output_type": "stream", "text": ["c:\\python372_x64\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\core.py:1235: UserWarning: FixedFormatter should only be used together with FixedLocator\n", " ax.set_xticklabels(xticklabels)\n"]}, {"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["gr_dur.T.plot();"]}, {"cell_type": "code", "execution_count": 15, "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", "
aliasClemencethierry-dxavierdxavierg
simple_french_qcm-0-a01.01.01.0NaN
simple_french_qcm-1-a2NaN2.01.0NaN
simple_french_qcm-2-a21.01.01.0NaN
simple_french_qcm-3-a2NaNNaN1.01.0
simple_french_qcm-3-a3NaNNaN1.01.0
simple_french_qcm-4-a2NaN1.01.01.0
simple_french_qcm-5-a01.0NaN1.0NaN
simple_french_qcm-5-a1NaN1.01.0NaN
simple_french_qcm-5-a2NaNNaN1.0NaN
simple_french_qcm-6-a3NaNNaN1.0NaN
simple_french_qcm-7-a2NaN1.01.0NaN
simple_french_qcm-3-a01.01.0NaNNaN
simple_french_qcm-6-a2NaN1.0NaNNaN
simple_french_qcm-1-a11.0NaNNaNNaN
simple_french_qcm-4-a01.0NaNNaNNaN
simple_french_qcm-6-a51.0NaNNaNNaN
simple_french_qcm-7-a01.0NaNNaNNaN
simple_french_qcm-0-a1NaNNaNNaN1.0
simple_french_qcm-4-a3NaNNaNNaN1.0
\n", "
"], "text/plain": ["alias Clemence thierry-d xavierd xavierg\n", "simple_french_qcm-0-a0 1.0 1.0 1.0 NaN\n", "simple_french_qcm-1-a2 NaN 2.0 1.0 NaN\n", "simple_french_qcm-2-a2 1.0 1.0 1.0 NaN\n", "simple_french_qcm-3-a2 NaN NaN 1.0 1.0\n", "simple_french_qcm-3-a3 NaN NaN 1.0 1.0\n", "simple_french_qcm-4-a2 NaN 1.0 1.0 1.0\n", "simple_french_qcm-5-a0 1.0 NaN 1.0 NaN\n", "simple_french_qcm-5-a1 NaN 1.0 1.0 NaN\n", "simple_french_qcm-5-a2 NaN NaN 1.0 NaN\n", "simple_french_qcm-6-a3 NaN NaN 1.0 NaN\n", "simple_french_qcm-7-a2 NaN 1.0 1.0 NaN\n", "simple_french_qcm-3-a0 1.0 1.0 NaN NaN\n", "simple_french_qcm-6-a2 NaN 1.0 NaN NaN\n", "simple_french_qcm-1-a1 1.0 NaN NaN NaN\n", "simple_french_qcm-4-a0 1.0 NaN NaN NaN\n", "simple_french_qcm-6-a5 1.0 NaN NaN NaN\n", "simple_french_qcm-7-a0 1.0 NaN NaN NaN\n", "simple_french_qcm-0-a1 NaN NaN NaN 1.0\n", "simple_french_qcm-4-a3 NaN NaN NaN 1.0"]}, "execution_count": 16, "metadata": {}, "output_type": "execute_result"}], "source": ["gr_question = df_question.groupby(\"alias\").agg(aggnotnan)\n", "gr_question.T"]}, {"cell_type": "code", "execution_count": 16, "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", "
aliasClemencethierry-dxavierdxavierg
simple_french_qcm-0-b1.01.01.01.0
simple_french_qcm-1-b1.01001.01.0NaN
simple_french_qcm-2-b1.01.01.0NaN
simple_french_qcm-3-b1.01.01.01000.0
simple_french_qcm-4-b1.01.01.02.0
simple_french_qcm-5-b1.01.01.01000.0
simple_french_qcm-6-b1.01.01.01.0
simple_french_qcm-7-b1.01.01.01.0
simple_french_qcm-8-b1.01.01.01.0
\n", "
"], "text/plain": ["alias Clemence thierry-d xavierd xavierg\n", "simple_french_qcm-0-b 1.0 1.0 1.0 1.0\n", "simple_french_qcm-1-b 1.0 1001.0 1.0 NaN\n", "simple_french_qcm-2-b 1.0 1.0 1.0 NaN\n", "simple_french_qcm-3-b 1.0 1.0 1.0 1000.0\n", "simple_french_qcm-4-b 1.0 1.0 1.0 2.0\n", "simple_french_qcm-5-b 1.0 1.0 1.0 1000.0\n", "simple_french_qcm-6-b 1.0 1.0 1.0 1.0\n", "simple_french_qcm-7-b 1.0 1.0 1.0 1.0\n", "simple_french_qcm-8-b 1.0 1.0 1.0 1.0"]}, "execution_count": 17, "metadata": {}, "output_type": "execute_result"}], "source": ["gr_bouton = df_bouton.groupby(\"alias\").agg(aggnotnan)\n", "gr_bouton.T"]}, {"cell_type": "code", "execution_count": 17, "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", "
aliasClemencethierry-dxavierdxavierg
simple_french_qcm-0-nbvisit1.01.01.01.0
simple_french_qcm-1-nbvisit1.03.01.0NaN
simple_french_qcm-2-nbvisit1.02.01.0NaN
simple_french_qcm-3-nbvisit1.01.00.53.0
simple_french_qcm-4-nbvisit1.01.01.05.0
simple_french_qcm-5-nbvisit1.01.00.52.0
simple_french_qcm-6-nbvisit1.01.00.51.0
simple_french_qcm-7-nbvisit1.01.01.01.0
simple_french_qcm-8-nbvisit1.01.01.01.0
\n", "
"], "text/plain": ["alias Clemence thierry-d xavierd xavierg\n", "simple_french_qcm-0-nbvisit 1.0 1.0 1.0 1.0\n", "simple_french_qcm-1-nbvisit 1.0 3.0 1.0 NaN\n", "simple_french_qcm-2-nbvisit 1.0 2.0 1.0 NaN\n", "simple_french_qcm-3-nbvisit 1.0 1.0 0.5 3.0\n", "simple_french_qcm-4-nbvisit 1.0 1.0 1.0 5.0\n", "simple_french_qcm-5-nbvisit 1.0 1.0 0.5 2.0\n", "simple_french_qcm-6-nbvisit 1.0 1.0 0.5 1.0\n", "simple_french_qcm-7-nbvisit 1.0 1.0 1.0 1.0\n", "simple_french_qcm-8-nbvisit 1.0 1.0 1.0 1.0"]}, "execution_count": 18, "metadata": {}, "output_type": "execute_result"}], "source": ["gr_visit = df_visit.groupby(\"alias\").agg(aggnotnan)\n", "gr_visit.T"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Histogrammes"]}, {"cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": ["nonan_question = gr_question.fillna(0)"]}, {"cell_type": "code", "execution_count": 19, "metadata": {"scrolled": false}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["import matplotlib.pyplot as plt\n", "\n", "fig, ax = plt.subplots(nonan_question.shape[0], 1, \n", " figsize=(8, nonan_question.shape[0]))\n", "for i in range(0, nonan_question.shape[0]):\n", " ax[i].set_ylabel(nonan_question.index[i])\n", " ax[i].bar(list(range(nonan_question.shape[1])), \n", " nonan_question.iloc[i,:])"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Clustering"]}, {"cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": ["nonan_question = gr_question.fillna(0)"]}, {"cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": ["from sklearn.cluster import KMeans\n", "km = KMeans(n_clusters=2)"]}, {"cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [{"data": {"text/plain": ["KMeans(n_clusters=2)"]}, "execution_count": 23, "metadata": {}, "output_type": "execute_result"}], "source": ["km.fit(nonan_question)"]}, {"cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([1, 0, 0, 1])"]}, "execution_count": 24, "metadata": {}, "output_type": "execute_result"}], "source": ["pred = km.predict(nonan_question)\n", "pred"]}, {"cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": ["solution = pandas.DataFrame(data=pred, columns=[\"cluster\"], index=nonan_question.index)"]}, {"cell_type": "code", "execution_count": 25, "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", "
cluster
alias
Clemence1
thierry-d0
xavierd0
xavierg1
\n", "
"], "text/plain": [" cluster\n", "alias \n", "Clemence 1\n", "thierry-d 0\n", "xavierd 0\n", "xavierg 1"]}, "execution_count": 26, "metadata": {}, "output_type": "execute_result"}], "source": ["solution"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## ACP"]}, {"cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [{"data": {"text/plain": ["(4, 19)"]}, "execution_count": 27, "metadata": {}, "output_type": "execute_result"}], "source": ["nonan_question.shape"]}, {"cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [{"data": {"text/plain": ["PCA(n_components=2, svd_solver='arpack')"]}, "execution_count": 28, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.decomposition import PCA\n", "acp = PCA(n_components=2, svd_solver='arpack')\n", "acp.fit(nonan_question)"]}, {"cell_type": "code", "execution_count": 28, "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", "
X1X2cluster
alias
Clemence1.745710-1.4849541
thierry-d-1.574330-0.8835460
xavierd-1.0575720.4618060
xavierg0.8861931.9066951
\n", "
"], "text/plain": [" X1 X2 cluster\n", "alias \n", "Clemence 1.745710 -1.484954 1\n", "thierry-d -1.574330 -0.883546 0\n", "xavierd -1.057572 0.461806 0\n", "xavierg 0.886193 1.906695 1"]}, "execution_count": 29, "metadata": {}, "output_type": "execute_result"}], "source": ["coord = acp.transform(nonan_question)\n", "data = pandas.DataFrame(data=coord, columns=['X1', 'X2'], index=nonan_question.index)\n", "data[\"cluster\"] = solution\n", "data"]}, {"cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(1, 1)\n", "colors = ['red', 'blue', 'orange', 'green']\n", "for i in range(0, 2):\n", " data[data.cluster==i].plot(x=\"X1\", y=\"X2\", \n", " kind=\"scatter\", \n", " ax=ax, label=\"c%d\" % i, \n", " color=colors[i])"]}, {"cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [{"data": {"text/plain": ["Index(['X1', 'X2', 'cluster', 'weight'], dtype='object')"]}, "execution_count": 31, "metadata": {}, "output_type": "execute_result"}], "source": ["data.columns"]}, {"cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [{"data": {"text/plain": ["(array([-1.57433033, -1.05757229]), array([-0.88354622, 0.46180558]))"]}, "execution_count": 32, "metadata": {}, "output_type": "execute_result"}], "source": ["data.loc[data.cluster == 0, 'X1'].values, data.loc[data.cluster == 0, 'X2'].values"]}, {"cell_type": "code", "execution_count": 32, "metadata": {"scrolled": false}, "outputs": [{"data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEICAYAAABvQ5JRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAkj0lEQVR4nO3de3xU9Z3/8dcHCEJR44UgF0GoVZFLCjFEKNaCVqKUVVHQKG69LEvRutbulp9U3a5a3bq6WhdWEVuqdetPxFSQbqlQFaSytQQUQlC5yIYfEC5BSwQEhOTz++OcxCFMLjiTM5Pwfj4e88iZc77n+/3ONzPznnOZM+buiIiIRKVVqjsgIiLHFgWPiIhESsEjIiKRUvCIiEikFDwiIhIpBY+IiERKwZMmzOw+M/tNqvsBYGZ7zOyrqe5HIswsy8xWmNl5Ke7H/zGz580s7V9rZvacmT0YTn/TzNakuk+xzOwPZnZjqvshiUv7F0NLYmbXm9my8I19a/hCuiCJ9fc0MzezNonU4+7Hu/uGZPUramaWAfwauM3dlzdxW8PMbHMdyy4DcoCb3b2qKfsRtvcdM3vbzHaZ2TYz+4WZnfBl6nL3P7n7OcnuYyLc/TJ3/3Wq+yGJU/BExMz+EXgC+FfgNKAH8BRwRQq7dZhEAyuV7VmgFYC7H3T3ke7+P8mq/8tw9z+4e4G7V0bUZCbwINAVOBc4HXg0orZFGs/ddWviG8Ebwh5gbD1l7gN+E04PAzbXWl4KfDuczgOWAZ8C24HHw/n/D/CwrT3AkHD+LcAHwF+B+cAZMfU68H1gHfC/MfO+Fk4/BzwJ/B7YDfwFODNm/RHAGqCCIEjfAsbX8xgLgd+EfR8fjs0MYCuwheCNs3VY/iZgCTA1rP9D4OKY+hYBD4Vl9gFfA3oDfwQ+Cft1TUz5kcD74ePYAvwoZtkoYAWwC/gfILvW2P8IKA778RLQDugQtlsVM+ZdCT7QTQY+Aj4GZgGn1PO/P+q2G/m8uwpYVc/ygcC74Xi8BMwEHoz3HAz7MSnsx97wf3Ya8Idw/deBk2PKDw4fyy5gJTCs1v/tp+H/bTewAOgYLmsXPj8+DtctAk6LWW98ON0KuBfYCOwAngcyw2U9CZ7DNxK8JnYC98S0H/f1o1t0t5R34Fi4AZcCh4A29ZS5j8YHz5+Bvw2njwcGh9PVL7g2MetdCawn+ATcJnyx/k/Mcid4oz4FaB8zLzZ4PglfrG2AF4CZ4bKO4Yv3qnDZD4CD1B88B8M+tQLaA3OA6QRv4p2ApcD3wvI3heP2QyADuJbgzfeUcPmi8I2lb9h+JrAJuDm8nxO+6fQNy28FvhlOnwzkhNM54ZvX+UDr8A2rFDguZuyXEoTKKQQhPrGe/9WdwDsEWxzHhY/vxTrG5Eu33Yjn3RPV/6s4y9oSvGlXj+2Y8H9TX/C8QxA23cI+v0sQXscBbwL/EpbtRhAcI8P/8yXh/ayY/9tHwNnhc2AR8HC47HvA74CvhONxHnBizHrVwXMLwfP6qwSvgVeA/6r1OvhFWP/XgQPAufW9fnSL7qZdbdE4Fdjp7oeSVN9B4Gtm1tHd97j7O/WU/R7wM3f/IGz/X4EBZnZGTJmfufsn7r6vjjpecfel4fovAAPC+SOB1e7+SrhsCrCtgb7/2d3neHDM40TgMuBOd9/r7juAnwMFMeV3AE94sPvsJYKtmO/ELH/O3VeH7V8KlLr7s+5+yN3fBX5L8KYKwbj1MbMT3f2v4XKAvwemu/tf3L3Sg+MIBwg+tVeb4u5l7v4JwRvjAOr2PYJP2Jvd/QBB4I6pY9distsGwMwuIQixn9RRZDBB4FSPbSHB1kV9prr7dnffAvwJ+Iu7vxc+xtkEIQRwAzDP3ee5e5W7/5FgC2NkTF3Puvva8Dk3K+YxHSR4vXwtHI/l7v5pnL6MI9hS2eDue4AfAwW1xvh+d9/n7isJtrq+HtNGY18/0gQUPNH4GOiYxGMaf0fwafFDMysys1H1lD0D+I/wgPMugq0XI/hUWm1TA+3FhslnBJ8SIfgUXrOuuzsQ90B7HW2dQfDmtzWmf9MJtnyqbQnrrbYxbLeu+s6vriusbxzQOVx+NcGb30Yze8vMhsSs90+11uteq526xiCeM4DZMXV9AFQSbC3EK5vMtjGzwcD/Bca4+9o6inUl/tjWZ3vM9L4496v7dQYwttZjugDoElO+rsf0XwS7g2eaWZmZPRKeLBKv/7H93UiwlRs7xnW1cTSvH2kCkR5MPob9GdhPsIupsBHl9xLsagDAzFoDWdX33X0dcF14MP0qoNDMTiXYvVDbJuAhd3+hnva+7CXKtxLsTqrup8Xeb0Rbmwg+3XesZ2uwm5lZzBtkD2BuPfW95e6XxG3YvQi4Inwju53gk3Z3vhijhxroe9xq48zbBNzi7ksasX4ibR/BzAYSjM8t7v5GPUW3En9sP0pCNzYR7Pb6+6Nd0d0PAvcD95tZT2AewVbujFpFywgCrloPgt2y22ngOVjX68fd9x5tf+XL0RZPBNy9gmCXx5NmdqWZfcXMMszsMjN7JM4qa4F24emxGQTHZY6rXmhmN5hZVri7alc4uxIoJzjQHfsdnKeBH5tZ33DdTDMbm6SH9nugf/iY2hCcpNC5gXVquPtWggPLj5nZiWbWyszONLNvxRTrBNwRjtdYgmNV8+qo8r+Bs83sb8PyGWY2yMzONbO2ZjbOzDLDN7dPCcYMgmMBE83s/PDsuA7h2DfmVOTtwKlmlhkz72ngoerdmRZ8p6iusxcTafswZtYPeA34B3f/XQPF/0zwRn2HmbUxs6sIjuMlw2+AvzGzfDNrbWbtwtPOG/pQgpkNN7P+4YetTwl2i8U7K/BF4Idm1svMjifYhfxSY3Zn1/P6kYgoeCLi7o8D/0gQIuUEnwpvJzi4XrtsBXAb8EuCs6/2cvgurEuB1Wa2B/gPoMDd97v7Z4RneYW7OAa7+2zg3wh2XXwKlBAcV0nGY9oJjAUeIdid2IdgX/6Bo6jmuwQHut8nOOuukMN3yfwFOIvgJIGHCHYffVxHf3YTnGVXQPCJeBvBY68O7b8FSsNxmEhwLAJ3X0ZwrOU/wz6sJzixoUHu/iHBm+CGcMy7EvxP5gILzGw3wUH58+tY/0u3Hcc/EWwZz7Dgu2J7zGx1He1+TvBp/6aw3WsJDtAnzN03EXxN4G6+eK5PonHvN50JngOfEuyifIsgyGr7FcFuucXA/xLsUfiHRnYx7uunketKEtjhu3hFvrxw18VmYJy7L0xCfTcRnMWUtC/ZikjqaYtHEhLuTjnJzI4j+IRrBJ/wRUTiUvBIooYQHJDeCfwNcGU9p2WLiGhXm4iIREtbPCIiEqm0/h5Px44dvWfPnqnuhohIs7F8+fKd7p7VcMnUSevg6dmzJ8uWLUt1N0REmg0za+gKFCmX8K42M+tuZgvN7AMzW21mP4hTxsxsipmtN7NiM8tJtF0REWmeknGM5xDwT+5+LsGFB79vZn1qlbmM4EuAZwETgGlJaFdEjgFlZWWMGTOm4YLSbCQcPO6+tfoqv+E3xz/g8AtQQvAt5uc98A5wkpl1QUSkAV27dqWwsDGXOAxUVurqN+kuqWe1hRf1G0hwmZNY3Tj8KsKbOTKcquuYYMHPQy8rLy9PZvdEJGJFRUVkZ2ezf/9+9u7dS9++fSkpKeHiiy8mJyeH/v378+qrrwJw11138dRTT9Wse9999/HYY49RWlpKv379gCBUJk2axKBBg8jOzmb69OkALFq0iOHDh3P99dfTv39/qqqquO222+jbty+jRo1i5MiRRxVe0rSS+dPDxxP89smdcX4/w+KsEvcLRO7+DPAMQG5urr5kJNKMDRo0iMsvv5x7772Xffv2ccMNN9C7d29mz57NiSeeyM6dOxk8eDCXX345BQUF3Hnnndx2220AzJo1i9dee42qqqqa+mbMmEFmZiZFRUUcOHCAoUOHMmLECACWLl1KSUkJvXr1orCwkNLSUlatWsWOHTs499xzueWWW1IyBnKkpARPeAXl3wIvuHu8Cw1uJrj8fLXTCS7iKCItTfEseOMBqNgMmafzk9F3M+iWf6Ndu3ZMmTKFqqoq7r77bhYvXkyrVq3YsmUL27dvZ+DAgezYsYOysjLKy8s5+eST6dGjB6WlpTVVL1iwgOLi4pqtl4qKCtatW0fbtm3Jy8ujV69eALz99tuMHTuWVq1a0blzZ4YPH56KkZA6JBw84W+wzAA+CK/AHM9c4HYzm0lwld6K8JL4ItKSFM+C390BB8OrJlVs4pOXf8CeT1pz8IRT2L9/Py+//DLl5eUsX76cjIwMevbsyf79wcWhx4wZQ2FhIdu2baOgoOCI6t2dqVOnkp+ff9j8RYsW0aFDh8PKSfpKxjGeoQSXm7/IzFaEt5FmNtHMJoZl5gEbCC75/guCS/6LSEvzxgNfhE5owuxd/PRbbRg3bhx33XUXFRUVdOrUiYyMDBYuXMjGjV987aSgoICZM2dSWFgY90y2/Px8pk2bxsGDBwFYu3Yte/ce+fttF1xwAb/97W+pqqpi+/btLFq0KLmPUxKS8BaPu79N/GM4sWWc4EfCRKQlqzj8l8+fX/k5bVrB9V/bQ+XkyXzjG9/gwgsvZObMmeTm5jJgwAB69+5dU75v377s3r2bbt260aXLkSe+jh8/ntLSUnJycnB3srKymDNnzhHlrr76at544w369evH2Wefzfnnn09mZuYR5SQ10voiobm5ua4rF4g0Iz/vBxWbjpyf2R1+WBJpV/bs2cPxxx/Pxx9/TF5eHkuWLKFz50b/QG6zZWbL3T031f2oT1pfMkdEmpmLf3L4MR6AjPbB/IiNGjWKXbt28fnnn/PP//zPx0ToNBcKHhFJnuxrgr8xZ7Vx8U++mB8hHddJXwoeEUmu7GtSEjTSfOj3eEREJFIKHhERiZSCR0REIqXgERGRSCl4REQkUgoeERGJlIJHREQipeAREZFIKXhERCRSCh4REYmUgkdERCKl4BERkUgpeEREJFIKHhERiZSCR0REIqXgERGRSCUleMzsV2a2w8zi/qi6mQ0zswozWxHeov8dXBERSQvJ+gXS54D/BJ6vp8yf3H1UktoTEZFmKilbPO6+GPgkGXWJiEjLFuUxniFmttLM/mBmfesqZGYTzGyZmS0rLy+PsHsiIhKFqILnXeAMd/86MBWYU1dBd3/G3XPdPTcrKyui7omISFQiCR53/9Td94TT84AMM+sYRdsiIpJeIgkeM+tsZhZO54XtfhxF2yIikl6Sclabmb0IDAM6mtlm4F+ADAB3fxoYA9xqZoeAfUCBu3sy2hYRkeYlKcHj7tc1sPw/CU63FhGRY5yuXCAiIpFS8IiISKQUPCIiEikFj4iIRErBIyIikVLwiIhIpBQ8IiISKQWPiIhESsEjIiKRUvCIiEikFDwiIhIpBY+IiERKwSMiIpFS8IiISKQUPCIiEikFj4iIRErBIyIikVLwiIhIpBQ8IiISKQWPiIhEKinBY2a/MrMdZlZSx3Izsylmtt7Mis0sJxntiohI85OsLZ7ngEvrWX4ZcFZ4mwBMS1K7IiLSzCQleNx9MfBJPUWuAJ73wDvASWbWJRlti4hI8xLVMZ5uwKaY+5vDeUcwswlmtszMlpWXl0fSORERiU5UwWNx5nm8gu7+jLvnuntuVlZWE3dLRESiFlXwbAa6x9w/HSiLqG0REUkjUQXPXOC74dltg4EKd98aUdsiIpJG2iSjEjN7ERgGdDSzzcC/ABkA7v40MA8YCawHPgNuTka7IiLS/CQleNz9ugaWO/D9ZLQlIiLNm65cICIikVLwiIhIpBQ8IiISKQWPiIhESsEjIiKRUvCIiEikFDwiIhIpBY+IiERKwSMiIpFS8IiISKQUPCIiEikFj4iIRErBIyIikVLwiIhIpBQ8IiISKQWPiIhESsEjIiKRUvCIiEikFDwtVFlZGWPGjEmojptuuonCwsIk9UhEJKDgaaG6du16VKFRWVnZhL0REflCUoLHzC41szVmtt7MJsdZPszMKsxsRXj7STLabamKiorIzs5m//797N27l759+1JSUsLFF19MTk4O/fv359VXXwXgrrvu4qmnnqpZ97777uOxxx6jtLSUfv36AUGoTJo0iUGDBpGdnc306dMBWLRoEcOHD+f666+nf//+uDu33347ffr04Tvf+Q47duyI/sGLSIvXJtEKzKw18CRwCbAZKDKzue7+fq2if3L3UYm2dywYNGgQl19+Offeey/79u3jhhtuoHfv3syePZsTTzyRnTt3MnjwYC6//HIKCgq48847ue222wCYNWsWr732GlVVVTX1zZgxg8zMTIqKijhw4ABDhw5lxIgRACxdupSSkhJ69erFK6+8wpo1a1i1ahXbt2+nT58+3HLLLSkZAxFpuRIOHiAPWO/uGwDMbCZwBVA7eKQBc97bwqPz11C2ax+dj/8m22b9kE4nn8CUKVOoqqri7rvvZvHixbRq1YotW7awfft2Bg4cyI4dOygrK6O8vJyTTz6ZHj16UFpaWlPvggULKC4urtn1VlFRwbp162jbti15eXn06tULgMWLF3PdddfRunVrunbtykUXXZSKYRCRFi4ZwdMN2BRzfzNwfpxyQ8xsJVAG/MjdV8erzMwmABMAevTokYTuNQ9z3tvCj19Zxb6DwbGWzdvK2V7+Vw4dOsT+/ft5+eWXKS8vZ/ny5WRkZNCzZ0/2798PwJgxYygsLGTbtm0UFBQcUbe7M3XqVPLz8w+bv2jRIjp06HDYPDNrokcoIhJIxjGeeO9UXuv+u8AZ7v51YCowp67K3P0Zd89199ysrKwkdK95eHT+mprQAfh4/lQyv3kDrc76JnfddRcVFRV06tSJjIwMFi5cyMaNG2vKFhQUMHPmTAoLC+OeyZafn8+0adM4ePAgAGvXrmXv3r1HlLvwwguZOXMmlZWVbN26lYULFzbBIxWRY10ytng2A91j7p9OsFVTw90/jZmeZ2ZPmVlHd9+ZhPZbhLJd+2qm95S8Aa1a06HPMKiqpOith2pCITc3lwEDBtC7d++a8n379mX37t1069aNLl26HFH3+PHjKS0tJScnB3cnKyuLOXPmHFFu9OjRvPnmm/Tv35+zzz6bb33rW03xUEXkGGfutTdOjrICszbAWuBiYAtQBFwfuyvNzDoD293dzSwPKCTY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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["data[\"weight\"] = 10\n", "# Plot miles per gallon against horsepower with other semantics\n", "fig, ax = plt.subplots(1, 1)\n", "ax.plot(data.loc[data.cluster == 0, 'X1'].values, \n", " data.loc[data.cluster == 0, 'X2'].values, 'o', label='c0')\n", "ax.plot(data.loc[data.cluster == 1, 'X1'].values, \n", " data.loc[data.cluster == 1, 'X2'].values, 'o', label='c1')\n", "ind = list(data.index)\n", "for i in range(0, data.shape[0]):\n", " ax.text(data.iloc[i, 0], data.iloc[i, 1], ind[i])\n", "ax.set_title('Clustering repr\u00e9sent\u00e9 en 2 dimensions');"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Prediction\n"]}, {"cell_type": "code", "execution_count": 33, "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", "
aliasClemencethierry-dxavierdxavierg
simple_french_qcm-0-a01.01.01.00.0
simple_french_qcm-1-a20.02.01.00.0
simple_french_qcm-2-a21.01.01.00.0
simple_french_qcm-3-a20.00.01.01.0
simple_french_qcm-3-a30.00.01.01.0
simple_french_qcm-4-a20.01.01.01.0
simple_french_qcm-5-a01.00.01.00.0
simple_french_qcm-5-a10.01.01.00.0
simple_french_qcm-5-a20.00.01.00.0
simple_french_qcm-6-a30.00.01.00.0
simple_french_qcm-7-a20.01.01.00.0
simple_french_qcm-3-a01.01.00.00.0
simple_french_qcm-6-a20.01.00.00.0
simple_french_qcm-1-a11.00.00.00.0
simple_french_qcm-4-a01.00.00.00.0
simple_french_qcm-6-a51.00.00.00.0
simple_french_qcm-7-a01.00.00.00.0
simple_french_qcm-0-a10.00.00.01.0
simple_french_qcm-4-a30.00.00.01.0
\n", "
"], "text/plain": ["alias Clemence thierry-d xavierd xavierg\n", "simple_french_qcm-0-a0 1.0 1.0 1.0 0.0\n", "simple_french_qcm-1-a2 0.0 2.0 1.0 0.0\n", "simple_french_qcm-2-a2 1.0 1.0 1.0 0.0\n", "simple_french_qcm-3-a2 0.0 0.0 1.0 1.0\n", "simple_french_qcm-3-a3 0.0 0.0 1.0 1.0\n", "simple_french_qcm-4-a2 0.0 1.0 1.0 1.0\n", "simple_french_qcm-5-a0 1.0 0.0 1.0 0.0\n", "simple_french_qcm-5-a1 0.0 1.0 1.0 0.0\n", "simple_french_qcm-5-a2 0.0 0.0 1.0 0.0\n", "simple_french_qcm-6-a3 0.0 0.0 1.0 0.0\n", "simple_french_qcm-7-a2 0.0 1.0 1.0 0.0\n", "simple_french_qcm-3-a0 1.0 1.0 0.0 0.0\n", "simple_french_qcm-6-a2 0.0 1.0 0.0 0.0\n", "simple_french_qcm-1-a1 1.0 0.0 0.0 0.0\n", "simple_french_qcm-4-a0 1.0 0.0 0.0 0.0\n", "simple_french_qcm-6-a5 1.0 0.0 0.0 0.0\n", "simple_french_qcm-7-a0 1.0 0.0 0.0 0.0\n", "simple_french_qcm-0-a1 0.0 0.0 0.0 1.0\n", "simple_french_qcm-4-a3 0.0 0.0 0.0 1.0"]}, "execution_count": 34, "metadata": {}, "output_type": "execute_result"}], "source": ["nonan_question.T"]}, {"cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [{"data": {"text/plain": ["('simple_french_qcm-7-a0', {0.0, 1.0})"]}, "execution_count": 35, "metadata": {}, "output_type": "execute_result"}], "source": ["xcols = nonan_question.columns[:15]\n", "ycol = nonan_question.columns[16]\n", "ycol, set(nonan_question[ycol])"]}, {"cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": ["from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(nonan_question[xcols], nonan_question[ycol], test_size=0.5)"]}, {"cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [{"data": {"text/plain": ["RandomForestClassifier()"]}, "execution_count": 37, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.ensemble import RandomForestClassifier\n", "clr = RandomForestClassifier()\n", "clr.fit(X_train, y_train)"]}, {"cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[1, 1],\n", " [0, 0]], dtype=int64)"]}, "execution_count": 38, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.metrics import confusion_matrix\n", "confusion_matrix(y_test, clr.predict(X_test))"]}, {"cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": []}, {"cell_type": "code", "execution_count": 39, "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}