{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example of Data Extraction"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# import openLA as la\n",
"import OpenLA as la"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"course_info, event_stream = la.start_analysis(files_dir=\"dataset_sample\", course_id=\"A\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Extract data about selected user"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"users = course_info.user_id()\n",
"user_stream = la.select_user(event_stream, users[0])"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'A_U1'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"users[0]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userid | \n",
" contentsid | \n",
" operationname | \n",
" pageno | \n",
" marker | \n",
" memo_length | \n",
" devicecode | \n",
" eventtime | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 10 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-09 10:57:15 | \n",
"
\n",
" \n",
" 1 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 9 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-09 11:00:59 | \n",
"
\n",
" \n",
" 2 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 8 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-09 11:03:31 | \n",
"
\n",
" \n",
" 3 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 30 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 10:14:12 | \n",
"
\n",
" \n",
" 4 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 29 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 10:27:24 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 1464 | \n",
" A_U1 | \n",
" C8 | \n",
" NEXT | \n",
" 2 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 15:27:39 | \n",
"
\n",
" \n",
" 1465 | \n",
" A_U1 | \n",
" C8 | \n",
" NEXT | \n",
" 3 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 15:27:57 | \n",
"
\n",
" \n",
" 1466 | \n",
" A_U1 | \n",
" C8 | \n",
" NEXT | \n",
" 4 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 15:28:07 | \n",
"
\n",
" \n",
" 1467 | \n",
" A_U1 | \n",
" C8 | \n",
" NEXT | \n",
" 5 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-05-29 15:42:36 | \n",
"
\n",
" \n",
" 1468 | \n",
" A_U1 | \n",
" C8 | \n",
" NEXT | \n",
" 6 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-05-29 15:43:16 | \n",
"
\n",
" \n",
"
\n",
"
1469 rows × 8 columns
\n",
"
"
],
"text/plain": [
" userid contentsid operationname pageno marker memo_length devicecode \\\n",
"0 A_U1 C1 PREV 10 NaN 0 tablet \n",
"1 A_U1 C1 PREV 9 NaN 0 tablet \n",
"2 A_U1 C1 PREV 8 NaN 0 tablet \n",
"3 A_U1 C1 PREV 30 NaN 0 tablet \n",
"4 A_U1 C1 PREV 29 NaN 0 tablet \n",
"... ... ... ... ... ... ... ... \n",
"1464 A_U1 C8 NEXT 2 NaN 0 tablet \n",
"1465 A_U1 C8 NEXT 3 NaN 0 tablet \n",
"1466 A_U1 C8 NEXT 4 NaN 0 tablet \n",
"1467 A_U1 C8 NEXT 5 NaN 0 tablet \n",
"1468 A_U1 C8 NEXT 6 NaN 0 tablet \n",
"\n",
" eventtime \n",
"0 2018-04-09 10:57:15 \n",
"1 2018-04-09 11:00:59 \n",
"2 2018-04-09 11:03:31 \n",
"3 2018-04-10 10:14:12 \n",
"4 2018-04-10 10:27:24 \n",
"... ... \n",
"1464 2018-04-24 15:27:39 \n",
"1465 2018-04-24 15:27:57 \n",
"1466 2018-04-24 15:28:07 \n",
"1467 2018-05-29 15:42:36 \n",
"1468 2018-05-29 15:43:16 \n",
"\n",
"[1469 rows x 8 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"user_stream.df # event stream related to user \"A_U1\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Extract data about selected contents"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"contents = course_info.contents_id()\n",
"content_stream = la.select_contents(event_stream, contents[0])"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'C1'"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"contents[0]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userid | \n",
" contentsid | \n",
" operationname | \n",
" pageno | \n",
" marker | \n",
" memo_length | \n",
" devicecode | \n",
" eventtime | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 10 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-09 10:57:15 | \n",
"
\n",
" \n",
" 1 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 9 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-09 11:00:59 | \n",
"
\n",
" \n",
" 2 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 8 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-09 11:03:31 | \n",
"
\n",
" \n",
" 3 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 30 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 10:14:12 | \n",
"
\n",
" \n",
" 4 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 29 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 10:27:24 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 262022 | \n",
" A_U99 | \n",
" C1 | \n",
" NEXT | \n",
" 15 | \n",
" NaN | \n",
" 0 | \n",
" pc | \n",
" 2018-06-05 16:07:52 | \n",
"
\n",
" \n",
" 262023 | \n",
" A_U99 | \n",
" C1 | \n",
" ADD MARKER | \n",
" 64 | \n",
" important | \n",
" 0 | \n",
" pc | \n",
" 2018-06-05 16:08:15 | \n",
"
\n",
" \n",
" 262024 | \n",
" A_U99 | \n",
" C1 | \n",
" NEXT | \n",
" 9 | \n",
" NaN | \n",
" 0 | \n",
" pc | \n",
" 2018-06-05 16:13:05 | \n",
"
\n",
" \n",
" 262025 | \n",
" A_U99 | \n",
" C1 | \n",
" ADD BOOKMARK | \n",
" 23 | \n",
" NaN | \n",
" 0 | \n",
" pc | \n",
" 2018-06-05 16:29:09 | \n",
"
\n",
" \n",
" 262026 | \n",
" A_U99 | \n",
" C1 | \n",
" NEXT | \n",
" 23 | \n",
" NaN | \n",
" 0 | \n",
" pc | \n",
" 2018-06-05 16:29:52 | \n",
"
\n",
" \n",
"
\n",
"
53992 rows × 8 columns
\n",
"
"
],
"text/plain": [
" userid contentsid operationname pageno marker memo_length \\\n",
"0 A_U1 C1 PREV 10 NaN 0 \n",
"1 A_U1 C1 PREV 9 NaN 0 \n",
"2 A_U1 C1 PREV 8 NaN 0 \n",
"3 A_U1 C1 PREV 30 NaN 0 \n",
"4 A_U1 C1 PREV 29 NaN 0 \n",
"... ... ... ... ... ... ... \n",
"262022 A_U99 C1 NEXT 15 NaN 0 \n",
"262023 A_U99 C1 ADD MARKER 64 important 0 \n",
"262024 A_U99 C1 NEXT 9 NaN 0 \n",
"262025 A_U99 C1 ADD BOOKMARK 23 NaN 0 \n",
"262026 A_U99 C1 NEXT 23 NaN 0 \n",
"\n",
" devicecode eventtime \n",
"0 tablet 2018-04-09 10:57:15 \n",
"1 tablet 2018-04-09 11:00:59 \n",
"2 tablet 2018-04-09 11:03:31 \n",
"3 tablet 2018-04-10 10:14:12 \n",
"4 tablet 2018-04-10 10:27:24 \n",
"... ... ... \n",
"262022 pc 2018-06-05 16:07:52 \n",
"262023 pc 2018-06-05 16:08:15 \n",
"262024 pc 2018-06-05 16:13:05 \n",
"262025 pc 2018-06-05 16:29:09 \n",
"262026 pc 2018-06-05 16:29:52 \n",
"\n",
"[53992 rows x 8 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"content_stream.df # event stream related to content \"C1\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 'select_user()' and 'select_contents()' are used for not only EventStream class but also converted classes."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"page_transition = la.convert_into_page_wise(event_stream, invalid_seconds=3)\n",
"user_page_transition = la.select_user(page_transition, users[0:2])\n",
"contents_page_transition = la.select_contents(user_page_transition, contents[0:2])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['A_U1', 'A_U10']"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"users[0:2]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['C1', 'C2']"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"contents[0:2]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userid | \n",
" contentsid | \n",
" pageno | \n",
" num_visits | \n",
" average_reading_seconds | \n",
" reading_seconds | \n",
" PREV | \n",
" NEXT | \n",
" CLOSE | \n",
" PAGE_JUMP | \n",
" ... | \n",
" ADD BOOKMARK | \n",
" ADD MARKER | \n",
" DELETE MARKER | \n",
" DELETE BOOKMARK | \n",
" ADD MEMO | \n",
" DELETE_MEMO | \n",
" CHANGE MEMO | \n",
" SEARCH | \n",
" SEARCH_JUMP | \n",
" LINK_CLICK | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A_U1 | \n",
" C1 | \n",
" 1 | \n",
" 13 | \n",
" 6686.230769 | \n",
" 86921 | \n",
" 0 | \n",
" 7 | \n",
" 0 | \n",
" 10 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" A_U1 | \n",
" C1 | \n",
" 2 | \n",
" 9 | \n",
" 214.222222 | \n",
" 1928 | \n",
" 0 | \n",
" 6 | \n",
" 1 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" A_U1 | \n",
" C1 | \n",
" 3 | \n",
" 7 | \n",
" 68.142857 | \n",
" 477 | \n",
" 0 | \n",
" 7 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" A_U1 | \n",
" C1 | \n",
" 4 | \n",
" 6 | \n",
" 74.833333 | \n",
" 449 | \n",
" 1 | \n",
" 5 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" A_U1 | \n",
" C1 | \n",
" 5 | \n",
" 6 | \n",
" 87.833333 | \n",
" 527 | \n",
" 0 | \n",
" 6 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 442 | \n",
" A_U10 | \n",
" C2 | \n",
" 58 | \n",
" 1 | \n",
" 179.000000 | \n",
" 179 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 443 | \n",
" A_U10 | \n",
" C2 | \n",
" 59 | \n",
" 1 | \n",
" 72.000000 | \n",
" 72 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 444 | \n",
" A_U10 | \n",
" C2 | \n",
" 60 | \n",
" 1 | \n",
" 16.000000 | \n",
" 16 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 445 | \n",
" A_U10 | \n",
" C2 | \n",
" 61 | \n",
" 1 | \n",
" 94.000000 | \n",
" 94 | \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 446 | \n",
" A_U10 | \n",
" C2 | \n",
" 62 | \n",
" 2 | \n",
" 310.000000 | \n",
" 620 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 1 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
258 rows × 22 columns
\n",
"
"
],
"text/plain": [
" userid contentsid pageno num_visits average_reading_seconds \\\n",
"0 A_U1 C1 1 13 6686.230769 \n",
"1 A_U1 C1 2 9 214.222222 \n",
"2 A_U1 C1 3 7 68.142857 \n",
"3 A_U1 C1 4 6 74.833333 \n",
"4 A_U1 C1 5 6 87.833333 \n",
".. ... ... ... ... ... \n",
"442 A_U10 C2 58 1 179.000000 \n",
"443 A_U10 C2 59 1 72.000000 \n",
"444 A_U10 C2 60 1 16.000000 \n",
"445 A_U10 C2 61 1 94.000000 \n",
"446 A_U10 C2 62 2 310.000000 \n",
"\n",
" reading_seconds PREV NEXT CLOSE PAGE_JUMP ... ADD BOOKMARK \\\n",
"0 86921 0 7 0 10 ... 0 \n",
"1 1928 0 6 1 0 ... 0 \n",
"2 477 0 7 0 0 ... 0 \n",
"3 449 1 5 0 0 ... 0 \n",
"4 527 0 6 0 0 ... 0 \n",
".. ... ... ... ... ... ... ... \n",
"442 179 0 1 0 0 ... 0 \n",
"443 72 0 1 0 0 ... 0 \n",
"444 16 0 1 0 0 ... 0 \n",
"445 94 0 1 0 0 ... 0 \n",
"446 620 1 0 0 1 ... 0 \n",
"\n",
" ADD MARKER DELETE MARKER DELETE BOOKMARK ADD MEMO DELETE_MEMO \\\n",
"0 0 0 0 0 0 \n",
"1 2 1 0 0 0 \n",
"2 0 0 0 0 0 \n",
"3 0 0 0 0 0 \n",
"4 0 0 0 0 0 \n",
".. ... ... ... ... ... \n",
"442 0 0 0 0 0 \n",
"443 0 0 0 0 0 \n",
"444 0 0 0 0 0 \n",
"445 0 0 0 0 0 \n",
"446 0 0 0 0 0 \n",
"\n",
" CHANGE MEMO SEARCH SEARCH_JUMP LINK_CLICK \n",
"0 0 0 0 0 \n",
"1 0 0 0 0 \n",
"2 0 0 0 0 \n",
"3 0 0 0 0 \n",
"4 0 0 0 0 \n",
".. ... ... ... ... \n",
"442 0 0 0 0 \n",
"443 0 0 0 0 \n",
"444 0 0 0 0 \n",
"445 0 0 0 0 \n",
"446 0 0 0 0 \n",
"\n",
"[258 rows x 22 columns]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"contents_page_transition.df # page transition data related to users \"A_U1\" and \"A_u10\", and contents \"C1\" and \"C2\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Extract data during, before, and after a lecture"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### During lecture"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"lecture_week=2\n",
"\n",
"event_stream_ = la.select_user(la.select_contents(event_stream, contents[0]), users[0]) # related to user 'A_U1' and content 'C1'\n",
"\n",
"stream_during_lecture = la.select_by_lecture_time(course_info, event_stream_, lecture_week=2, timing=\"during\") \n",
"\n",
"lecture_start = course_info.lecture_start_time(lecture_week)\n",
"lecture_end = course_info.lecture_end_time(lecture_week)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Timestamp('2018-04-17 14:50:00')"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lecture_start"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Timestamp('2018-04-17 16:20:00')"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lecture_end"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userid | \n",
" contentsid | \n",
" operationname | \n",
" pageno | \n",
" marker | \n",
" memo_length | \n",
" devicecode | \n",
" eventtime | \n",
"
\n",
" \n",
" \n",
" \n",
" 47 | \n",
" A_U1 | \n",
" C1 | \n",
" PAGE_JUMP | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:50:01 | \n",
"
\n",
" \n",
" 48 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:51:40 | \n",
"
\n",
" \n",
" 49 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 2 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:51:44 | \n",
"
\n",
" \n",
" 50 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 3 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:54:24 | \n",
"
\n",
" \n",
" 51 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 4 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:54:24 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 135 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 59 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 16:03:39 | \n",
"
\n",
" \n",
" 136 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 60 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 16:03:54 | \n",
"
\n",
" \n",
" 137 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 61 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 16:04:22 | \n",
"
\n",
" \n",
" 138 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 62 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 16:04:37 | \n",
"
\n",
" \n",
" 139 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 63 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 16:05:12 | \n",
"
\n",
" \n",
"
\n",
"
93 rows × 8 columns
\n",
"
"
],
"text/plain": [
" userid contentsid operationname pageno marker memo_length devicecode \\\n",
"47 A_U1 C1 PAGE_JUMP 1 NaN 0 tablet \n",
"48 A_U1 C1 NEXT 1 NaN 0 tablet \n",
"49 A_U1 C1 NEXT 2 NaN 0 tablet \n",
"50 A_U1 C1 NEXT 3 NaN 0 tablet \n",
"51 A_U1 C1 NEXT 4 NaN 0 tablet \n",
".. ... ... ... ... ... ... ... \n",
"135 A_U1 C1 NEXT 59 NaN 0 tablet \n",
"136 A_U1 C1 NEXT 60 NaN 0 tablet \n",
"137 A_U1 C1 NEXT 61 NaN 0 tablet \n",
"138 A_U1 C1 NEXT 62 NaN 0 tablet \n",
"139 A_U1 C1 NEXT 63 NaN 0 tablet \n",
"\n",
" eventtime \n",
"47 2018-04-17 14:50:01 \n",
"48 2018-04-17 14:51:40 \n",
"49 2018-04-17 14:51:44 \n",
"50 2018-04-17 14:54:24 \n",
"51 2018-04-17 14:54:24 \n",
".. ... \n",
"135 2018-04-17 16:03:39 \n",
"136 2018-04-17 16:03:54 \n",
"137 2018-04-17 16:04:22 \n",
"138 2018-04-17 16:04:37 \n",
"139 2018-04-17 16:05:12 \n",
"\n",
"[93 rows x 8 columns]"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stream_during_lecture.df # during the lecture time (between '2018-04-17 14:50:00' and '2018-04-17 16:20:00')"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"# If you want to include 5 minutes before the begin of lecture and after the end of lecture, \n",
"# the arguments 'extension_minutes_before_lecture' and 'extension_minutes_after_lecture' are useful.\n",
"\n",
"stream_during_lecture_add_5minutes = la.select_by_lecture_time(course_info, event_stream_, \n",
" lecture_week=2, timing=\"during\",\n",
" extension_minutes_before_lecture=5,\n",
" extension_minutes_after_lecture=5\n",
" ) "
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userid | \n",
" contentsid | \n",
" operationname | \n",
" pageno | \n",
" marker | \n",
" memo_length | \n",
" devicecode | \n",
" eventtime | \n",
"
\n",
" \n",
" \n",
" \n",
" 46 | \n",
" A_U1 | \n",
" C1 | \n",
" OPEN | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:49:55 | \n",
"
\n",
" \n",
" 47 | \n",
" A_U1 | \n",
" C1 | \n",
" PAGE_JUMP | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:50:01 | \n",
"
\n",
" \n",
" 48 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:51:40 | \n",
"
\n",
" \n",
" 49 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 2 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:51:44 | \n",
"
\n",
" \n",
" 50 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 3 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:54:24 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 135 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 59 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 16:03:39 | \n",
"
\n",
" \n",
" 136 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 60 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 16:03:54 | \n",
"
\n",
" \n",
" 137 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 61 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 16:04:22 | \n",
"
\n",
" \n",
" 138 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 62 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 16:04:37 | \n",
"
\n",
" \n",
" 139 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 63 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 16:05:12 | \n",
"
\n",
" \n",
"
\n",
"
94 rows × 8 columns
\n",
"
"
],
"text/plain": [
" userid contentsid operationname pageno marker memo_length devicecode \\\n",
"46 A_U1 C1 OPEN 1 NaN 0 tablet \n",
"47 A_U1 C1 PAGE_JUMP 1 NaN 0 tablet \n",
"48 A_U1 C1 NEXT 1 NaN 0 tablet \n",
"49 A_U1 C1 NEXT 2 NaN 0 tablet \n",
"50 A_U1 C1 NEXT 3 NaN 0 tablet \n",
".. ... ... ... ... ... ... ... \n",
"135 A_U1 C1 NEXT 59 NaN 0 tablet \n",
"136 A_U1 C1 NEXT 60 NaN 0 tablet \n",
"137 A_U1 C1 NEXT 61 NaN 0 tablet \n",
"138 A_U1 C1 NEXT 62 NaN 0 tablet \n",
"139 A_U1 C1 NEXT 63 NaN 0 tablet \n",
"\n",
" eventtime \n",
"46 2018-04-17 14:49:55 \n",
"47 2018-04-17 14:50:01 \n",
"48 2018-04-17 14:51:40 \n",
"49 2018-04-17 14:51:44 \n",
"50 2018-04-17 14:54:24 \n",
".. ... \n",
"135 2018-04-17 16:03:39 \n",
"136 2018-04-17 16:03:54 \n",
"137 2018-04-17 16:04:22 \n",
"138 2018-04-17 16:04:37 \n",
"139 2018-04-17 16:05:12 \n",
"\n",
"[94 rows x 8 columns]"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stream_during_lecture_add_5minutes.df # between '2018-04-17 14:50:00 - 5 minutes' and '2018-04-17 16:20:00 + 5 minutes'"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"# If you want to omit 10 minutes after the begin of lecture and before the end of lecture,\n",
"# negative value can be used for the arguments 'extension_minutes_before_lecture' and 'extension_minutes_after_lecture'\n",
"\n",
"stream_during_lecture_omit_10minutes = la.select_by_lecture_time(course_info, event_stream, \n",
" lecture_week=2, timing=\"during\",\n",
" extension_minutes_before_lecture=-10,\n",
" extension_minutes_after_lecture=-10\n",
" ) "
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userid | \n",
" contentsid | \n",
" operationname | \n",
" pageno | \n",
" marker | \n",
" memo_length | \n",
" devicecode | \n",
" eventtime | \n",
"
\n",
" \n",
" \n",
" \n",
" 54 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 7 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 15:01:43 | \n",
"
\n",
" \n",
" 55 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 8 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 15:01:44 | \n",
"
\n",
" \n",
" 56 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 9 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 15:01:47 | \n",
"
\n",
" \n",
" 57 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 10 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 15:01:56 | \n",
"
\n",
" \n",
" 58 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 11 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 15:01:56 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 263140 | \n",
" A_U99 | \n",
" C8 | \n",
" PREV | \n",
" 61 | \n",
" NaN | \n",
" 0 | \n",
" pc | \n",
" 2018-04-17 15:48:56 | \n",
"
\n",
" \n",
" 263141 | \n",
" A_U99 | \n",
" C8 | \n",
" PREV | \n",
" 60 | \n",
" NaN | \n",
" 0 | \n",
" pc | \n",
" 2018-04-17 15:49:01 | \n",
"
\n",
" \n",
" 263142 | \n",
" A_U99 | \n",
" C8 | \n",
" NEXT | \n",
" 52 | \n",
" NaN | \n",
" 0 | \n",
" pc | \n",
" 2018-04-17 15:50:11 | \n",
"
\n",
" \n",
" 263143 | \n",
" A_U99 | \n",
" C8 | \n",
" NEXT | \n",
" 53 | \n",
" NaN | \n",
" 0 | \n",
" pc | \n",
" 2018-04-17 15:51:26 | \n",
"
\n",
" \n",
" 263144 | \n",
" A_U99 | \n",
" C8 | \n",
" NEXT | \n",
" 54 | \n",
" NaN | \n",
" 0 | \n",
" pc | \n",
" 2018-04-17 15:51:32 | \n",
"
\n",
" \n",
"
\n",
"
24586 rows × 8 columns
\n",
"
"
],
"text/plain": [
" userid contentsid operationname pageno marker memo_length devicecode \\\n",
"54 A_U1 C1 NEXT 7 NaN 0 tablet \n",
"55 A_U1 C1 NEXT 8 NaN 0 tablet \n",
"56 A_U1 C1 NEXT 9 NaN 0 tablet \n",
"57 A_U1 C1 NEXT 10 NaN 0 tablet \n",
"58 A_U1 C1 NEXT 11 NaN 0 tablet \n",
"... ... ... ... ... ... ... ... \n",
"263140 A_U99 C8 PREV 61 NaN 0 pc \n",
"263141 A_U99 C8 PREV 60 NaN 0 pc \n",
"263142 A_U99 C8 NEXT 52 NaN 0 pc \n",
"263143 A_U99 C8 NEXT 53 NaN 0 pc \n",
"263144 A_U99 C8 NEXT 54 NaN 0 pc \n",
"\n",
" eventtime \n",
"54 2018-04-17 15:01:43 \n",
"55 2018-04-17 15:01:44 \n",
"56 2018-04-17 15:01:47 \n",
"57 2018-04-17 15:01:56 \n",
"58 2018-04-17 15:01:56 \n",
"... ... \n",
"263140 2018-04-17 15:48:56 \n",
"263141 2018-04-17 15:49:01 \n",
"263142 2018-04-17 15:50:11 \n",
"263143 2018-04-17 15:51:26 \n",
"263144 2018-04-17 15:51:32 \n",
"\n",
"[24586 rows x 8 columns]"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stream_during_lecture_omit_10minutes.df # between '2018-04-17 14:50:00 + 10 minutes' and '2018-04-17 16:20:00 - 10 minutes'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Before lecture"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"stream_before_lecture = la.select_by_lecture_time(course_info, event_stream_, lecture_week=lecture_week, timing=\"before\")"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Timestamp('2018-04-17 14:50:00')"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lecture_start"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userid | \n",
" contentsid | \n",
" operationname | \n",
" pageno | \n",
" marker | \n",
" memo_length | \n",
" devicecode | \n",
" eventtime | \n",
"
\n",
" \n",
" \n",
" \n",
" 36 | \n",
" A_U1 | \n",
" C1 | \n",
" CLOSE | \n",
" 53 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:21:24 | \n",
"
\n",
" \n",
" 37 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 23 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:22:21 | \n",
"
\n",
" \n",
" 38 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 24 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:22:39 | \n",
"
\n",
" \n",
" 39 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 25 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:22:56 | \n",
"
\n",
" \n",
" 40 | \n",
" A_U1 | \n",
" C1 | \n",
" PAGE_JUMP | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:51:07 | \n",
"
\n",
" \n",
" 41 | \n",
" A_U1 | \n",
" C1 | \n",
" OPEN | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:51:28 | \n",
"
\n",
" \n",
" 42 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 29 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 00:05:16 | \n",
"
\n",
" \n",
" 43 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 30 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 00:05:33 | \n",
"
\n",
" \n",
" 44 | \n",
" A_U1 | \n",
" C1 | \n",
" BOOKMARK_JUMP | \n",
" 53 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:00:03 | \n",
"
\n",
" \n",
" 45 | \n",
" A_U1 | \n",
" C1 | \n",
" PAGE_JUMP | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:00:44 | \n",
"
\n",
" \n",
" 46 | \n",
" A_U1 | \n",
" C1 | \n",
" OPEN | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:49:55 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" userid contentsid operationname pageno marker memo_length devicecode \\\n",
"36 A_U1 C1 CLOSE 53 NaN 0 tablet \n",
"37 A_U1 C1 NEXT 23 NaN 0 tablet \n",
"38 A_U1 C1 NEXT 24 NaN 0 tablet \n",
"39 A_U1 C1 NEXT 25 NaN 0 tablet \n",
"40 A_U1 C1 PAGE_JUMP 1 NaN 0 tablet \n",
"41 A_U1 C1 OPEN 1 NaN 0 tablet \n",
"42 A_U1 C1 NEXT 29 NaN 0 tablet \n",
"43 A_U1 C1 NEXT 30 NaN 0 tablet \n",
"44 A_U1 C1 BOOKMARK_JUMP 53 NaN 0 tablet \n",
"45 A_U1 C1 PAGE_JUMP 1 NaN 0 tablet \n",
"46 A_U1 C1 OPEN 1 NaN 0 tablet \n",
"\n",
" eventtime \n",
"36 2018-04-10 16:21:24 \n",
"37 2018-04-10 16:22:21 \n",
"38 2018-04-10 16:22:39 \n",
"39 2018-04-10 16:22:56 \n",
"40 2018-04-10 16:51:07 \n",
"41 2018-04-10 16:51:28 \n",
"42 2018-04-17 00:05:16 \n",
"43 2018-04-17 00:05:33 \n",
"44 2018-04-17 14:00:03 \n",
"45 2018-04-17 14:00:44 \n",
"46 2018-04-17 14:49:55 "
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stream_before_lecture.df # between the end of lecture 1 and the begin of lecture 2 ('2018-04-10 16:20:00' - '2018-04-17 14:50:00')"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"# If you want to include all logs before lecture 2, set the argument 'include_other_lecture_time' to True\n",
"stream_before_lecture2_include_other_lecture_time = la.select_by_lecture_time(course_info, event_stream_, \n",
" lecture_week=2, timing=\"before\",\n",
" include_other_lecture_time=True)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userid | \n",
" contentsid | \n",
" operationname | \n",
" pageno | \n",
" marker | \n",
" memo_length | \n",
" devicecode | \n",
" eventtime | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 10 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-09 10:57:15 | \n",
"
\n",
" \n",
" 1 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 9 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-09 11:00:59 | \n",
"
\n",
" \n",
" 2 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 8 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-09 11:03:31 | \n",
"
\n",
" \n",
" 3 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 30 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 10:14:12 | \n",
"
\n",
" \n",
" 4 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 29 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 10:27:24 | \n",
"
\n",
" \n",
" 5 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 28 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 10:27:24 | \n",
"
\n",
" \n",
" 6 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 27 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 10:37:19 | \n",
"
\n",
" \n",
" 7 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 26 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:13:55 | \n",
"
\n",
" \n",
" 8 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 28 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:15:34 | \n",
"
\n",
" \n",
" 9 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 7 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:21:19 | \n",
"
\n",
" \n",
" 10 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 29 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:22:54 | \n",
"
\n",
" \n",
" 11 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 30 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:24:29 | \n",
"
\n",
" \n",
" 12 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 31 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:26:12 | \n",
"
\n",
" \n",
" 13 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 25 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:31:14 | \n",
"
\n",
" \n",
" 14 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 32 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:31:35 | \n",
"
\n",
" \n",
" 15 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 33 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:34:19 | \n",
"
\n",
" \n",
" 16 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 34 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:34:58 | \n",
"
\n",
" \n",
" 17 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 35 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:38:19 | \n",
"
\n",
" \n",
" 18 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 12 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:40:26 | \n",
"
\n",
" \n",
" 19 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 6 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:41:01 | \n",
"
\n",
" \n",
" 20 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 36 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:42:10 | \n",
"
\n",
" \n",
" 21 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 37 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:45:54 | \n",
"
\n",
" \n",
" 22 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 38 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:47:09 | \n",
"
\n",
" \n",
" 23 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 39 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:47:46 | \n",
"
\n",
" \n",
" 24 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 13 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:55:49 | \n",
"
\n",
" \n",
" 25 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 8 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:56:38 | \n",
"
\n",
" \n",
" 26 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 5 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:57:56 | \n",
"
\n",
" \n",
" 27 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 14 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:58:40 | \n",
"
\n",
" \n",
" 28 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 9 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 15:58:45 | \n",
"
\n",
" \n",
" 29 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 24 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:00:24 | \n",
"
\n",
" \n",
" 30 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 15 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:05:57 | \n",
"
\n",
" \n",
" 31 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 6 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:07:44 | \n",
"
\n",
" \n",
" 32 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 16 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:15:31 | \n",
"
\n",
" \n",
" 33 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 16 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:15:34 | \n",
"
\n",
" \n",
" 34 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 7 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:17:20 | \n",
"
\n",
" \n",
" 35 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 23 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:19:10 | \n",
"
\n",
" \n",
" 36 | \n",
" A_U1 | \n",
" C1 | \n",
" CLOSE | \n",
" 53 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:21:24 | \n",
"
\n",
" \n",
" 37 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 23 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:22:21 | \n",
"
\n",
" \n",
" 38 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 24 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:22:39 | \n",
"
\n",
" \n",
" 39 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 25 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:22:56 | \n",
"
\n",
" \n",
" 40 | \n",
" A_U1 | \n",
" C1 | \n",
" PAGE_JUMP | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:51:07 | \n",
"
\n",
" \n",
" 41 | \n",
" A_U1 | \n",
" C1 | \n",
" OPEN | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-10 16:51:28 | \n",
"
\n",
" \n",
" 42 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 29 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 00:05:16 | \n",
"
\n",
" \n",
" 43 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 30 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 00:05:33 | \n",
"
\n",
" \n",
" 44 | \n",
" A_U1 | \n",
" C1 | \n",
" BOOKMARK_JUMP | \n",
" 53 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:00:03 | \n",
"
\n",
" \n",
" 45 | \n",
" A_U1 | \n",
" C1 | \n",
" PAGE_JUMP | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:00:44 | \n",
"
\n",
" \n",
" 46 | \n",
" A_U1 | \n",
" C1 | \n",
" OPEN | \n",
" 1 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-17 14:49:55 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" userid contentsid operationname pageno marker memo_length devicecode \\\n",
"0 A_U1 C1 PREV 10 NaN 0 tablet \n",
"1 A_U1 C1 PREV 9 NaN 0 tablet \n",
"2 A_U1 C1 PREV 8 NaN 0 tablet \n",
"3 A_U1 C1 PREV 30 NaN 0 tablet \n",
"4 A_U1 C1 PREV 29 NaN 0 tablet \n",
"5 A_U1 C1 PREV 28 NaN 0 tablet \n",
"6 A_U1 C1 PREV 27 NaN 0 tablet \n",
"7 A_U1 C1 PREV 26 NaN 0 tablet \n",
"8 A_U1 C1 NEXT 28 NaN 0 tablet \n",
"9 A_U1 C1 PREV 7 NaN 0 tablet \n",
"10 A_U1 C1 NEXT 29 NaN 0 tablet \n",
"11 A_U1 C1 NEXT 30 NaN 0 tablet \n",
"12 A_U1 C1 NEXT 31 NaN 0 tablet \n",
"13 A_U1 C1 PREV 25 NaN 0 tablet \n",
"14 A_U1 C1 NEXT 32 NaN 0 tablet \n",
"15 A_U1 C1 NEXT 33 NaN 0 tablet \n",
"16 A_U1 C1 NEXT 34 NaN 0 tablet \n",
"17 A_U1 C1 NEXT 35 NaN 0 tablet \n",
"18 A_U1 C1 NEXT 12 NaN 0 tablet \n",
"19 A_U1 C1 PREV 6 NaN 0 tablet \n",
"20 A_U1 C1 NEXT 36 NaN 0 tablet \n",
"21 A_U1 C1 NEXT 37 NaN 0 tablet \n",
"22 A_U1 C1 NEXT 38 NaN 0 tablet \n",
"23 A_U1 C1 NEXT 39 NaN 0 tablet \n",
"24 A_U1 C1 NEXT 13 NaN 0 tablet \n",
"25 A_U1 C1 NEXT 8 NaN 0 tablet \n",
"26 A_U1 C1 NEXT 5 NaN 0 tablet \n",
"27 A_U1 C1 NEXT 14 NaN 0 tablet \n",
"28 A_U1 C1 NEXT 9 NaN 0 tablet \n",
"29 A_U1 C1 PREV 24 NaN 0 tablet \n",
"30 A_U1 C1 NEXT 15 NaN 0 tablet \n",
"31 A_U1 C1 NEXT 6 NaN 0 tablet \n",
"32 A_U1 C1 NEXT 16 NaN 0 tablet \n",
"33 A_U1 C1 NEXT 16 NaN 0 tablet \n",
"34 A_U1 C1 NEXT 7 NaN 0 tablet \n",
"35 A_U1 C1 PREV 23 NaN 0 tablet \n",
"36 A_U1 C1 CLOSE 53 NaN 0 tablet \n",
"37 A_U1 C1 NEXT 23 NaN 0 tablet \n",
"38 A_U1 C1 NEXT 24 NaN 0 tablet \n",
"39 A_U1 C1 NEXT 25 NaN 0 tablet \n",
"40 A_U1 C1 PAGE_JUMP 1 NaN 0 tablet \n",
"41 A_U1 C1 OPEN 1 NaN 0 tablet \n",
"42 A_U1 C1 NEXT 29 NaN 0 tablet \n",
"43 A_U1 C1 NEXT 30 NaN 0 tablet \n",
"44 A_U1 C1 BOOKMARK_JUMP 53 NaN 0 tablet \n",
"45 A_U1 C1 PAGE_JUMP 1 NaN 0 tablet \n",
"46 A_U1 C1 OPEN 1 NaN 0 tablet \n",
"\n",
" eventtime \n",
"0 2018-04-09 10:57:15 \n",
"1 2018-04-09 11:00:59 \n",
"2 2018-04-09 11:03:31 \n",
"3 2018-04-10 10:14:12 \n",
"4 2018-04-10 10:27:24 \n",
"5 2018-04-10 10:27:24 \n",
"6 2018-04-10 10:37:19 \n",
"7 2018-04-10 15:13:55 \n",
"8 2018-04-10 15:15:34 \n",
"9 2018-04-10 15:21:19 \n",
"10 2018-04-10 15:22:54 \n",
"11 2018-04-10 15:24:29 \n",
"12 2018-04-10 15:26:12 \n",
"13 2018-04-10 15:31:14 \n",
"14 2018-04-10 15:31:35 \n",
"15 2018-04-10 15:34:19 \n",
"16 2018-04-10 15:34:58 \n",
"17 2018-04-10 15:38:19 \n",
"18 2018-04-10 15:40:26 \n",
"19 2018-04-10 15:41:01 \n",
"20 2018-04-10 15:42:10 \n",
"21 2018-04-10 15:45:54 \n",
"22 2018-04-10 15:47:09 \n",
"23 2018-04-10 15:47:46 \n",
"24 2018-04-10 15:55:49 \n",
"25 2018-04-10 15:56:38 \n",
"26 2018-04-10 15:57:56 \n",
"27 2018-04-10 15:58:40 \n",
"28 2018-04-10 15:58:45 \n",
"29 2018-04-10 16:00:24 \n",
"30 2018-04-10 16:05:57 \n",
"31 2018-04-10 16:07:44 \n",
"32 2018-04-10 16:15:31 \n",
"33 2018-04-10 16:15:34 \n",
"34 2018-04-10 16:17:20 \n",
"35 2018-04-10 16:19:10 \n",
"36 2018-04-10 16:21:24 \n",
"37 2018-04-10 16:22:21 \n",
"38 2018-04-10 16:22:39 \n",
"39 2018-04-10 16:22:56 \n",
"40 2018-04-10 16:51:07 \n",
"41 2018-04-10 16:51:28 \n",
"42 2018-04-17 00:05:16 \n",
"43 2018-04-17 00:05:33 \n",
"44 2018-04-17 14:00:03 \n",
"45 2018-04-17 14:00:44 \n",
"46 2018-04-17 14:49:55 "
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stream_before_lecture2_include_other_lecture_time.df # from the begin of logs to the begin of lecture 2 ('2018-04-17 14:50:00')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### After lecture"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [],
"source": [
"stream_after_lecture = la.select_by_lecture_time(course_info, event_stream_, lecture_week=2, timing=\"after\")"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Timestamp('2018-04-17 16:20:00')"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lecture_end"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userid | \n",
" contentsid | \n",
" operationname | \n",
" pageno | \n",
" marker | \n",
" memo_length | \n",
" devicecode | \n",
" eventtime | \n",
"
\n",
" \n",
" \n",
" \n",
" 140 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 17 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 14:06:08 | \n",
"
\n",
" \n",
" 141 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 49 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 14:40:09 | \n",
"
\n",
" \n",
" 142 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 50 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 14:40:46 | \n",
"
\n",
" \n",
" 143 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 51 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 14:40:52 | \n",
"
\n",
" \n",
" 144 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 52 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 14:41:00 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" userid contentsid operationname pageno marker memo_length devicecode \\\n",
"140 A_U1 C1 NEXT 17 NaN 0 tablet \n",
"141 A_U1 C1 NEXT 49 NaN 0 tablet \n",
"142 A_U1 C1 NEXT 50 NaN 0 tablet \n",
"143 A_U1 C1 NEXT 51 NaN 0 tablet \n",
"144 A_U1 C1 NEXT 52 NaN 0 tablet \n",
"\n",
" eventtime \n",
"140 2018-04-24 14:06:08 \n",
"141 2018-04-24 14:40:09 \n",
"142 2018-04-24 14:40:46 \n",
"143 2018-04-24 14:40:52 \n",
"144 2018-04-24 14:41:00 "
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stream_after_lecture.df # between the end of lecture 2 and the begin of lecture 3 ('2018-04-17 16:20:00' - '2018-04-24 14:50:00')"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"# If you want to include all logs after lecture 2, set the argument 'include_other_lecture_time' to True\n",
"stream_after_lecture2_include_other_lecture_time = la.select_by_lecture_time(course_info, event_stream_, \n",
" lecture_week=2, timing=\"after\",\n",
" include_other_lecture_time=True)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userid | \n",
" contentsid | \n",
" operationname | \n",
" pageno | \n",
" marker | \n",
" memo_length | \n",
" devicecode | \n",
" eventtime | \n",
"
\n",
" \n",
" \n",
" \n",
" 140 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 17 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 14:06:08 | \n",
"
\n",
" \n",
" 141 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 49 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 14:40:09 | \n",
"
\n",
" \n",
" 142 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 50 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 14:40:46 | \n",
"
\n",
" \n",
" 143 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 51 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 14:40:52 | \n",
"
\n",
" \n",
" 144 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 52 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-04-24 14:41:00 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 467 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 55 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-06-05 16:06:27 | \n",
"
\n",
" \n",
" 468 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 54 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-06-05 16:07:32 | \n",
"
\n",
" \n",
" 469 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 11 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-06-05 16:07:49 | \n",
"
\n",
" \n",
" 470 | \n",
" A_U1 | \n",
" C1 | \n",
" NEXT | \n",
" 23 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-06-05 16:22:51 | \n",
"
\n",
" \n",
" 471 | \n",
" A_U1 | \n",
" C1 | \n",
" PREV | \n",
" 24 | \n",
" NaN | \n",
" 0 | \n",
" tablet | \n",
" 2018-06-05 16:24:36 | \n",
"
\n",
" \n",
"
\n",
"
332 rows × 8 columns
\n",
"
"
],
"text/plain": [
" userid contentsid operationname pageno marker memo_length devicecode \\\n",
"140 A_U1 C1 NEXT 17 NaN 0 tablet \n",
"141 A_U1 C1 NEXT 49 NaN 0 tablet \n",
"142 A_U1 C1 NEXT 50 NaN 0 tablet \n",
"143 A_U1 C1 NEXT 51 NaN 0 tablet \n",
"144 A_U1 C1 NEXT 52 NaN 0 tablet \n",
".. ... ... ... ... ... ... ... \n",
"467 A_U1 C1 PREV 55 NaN 0 tablet \n",
"468 A_U1 C1 PREV 54 NaN 0 tablet \n",
"469 A_U1 C1 PREV 11 NaN 0 tablet \n",
"470 A_U1 C1 NEXT 23 NaN 0 tablet \n",
"471 A_U1 C1 PREV 24 NaN 0 tablet \n",
"\n",
" eventtime \n",
"140 2018-04-24 14:06:08 \n",
"141 2018-04-24 14:40:09 \n",
"142 2018-04-24 14:40:46 \n",
"143 2018-04-24 14:40:52 \n",
"144 2018-04-24 14:41:00 \n",
".. ... \n",
"467 2018-06-05 16:06:27 \n",
"468 2018-06-05 16:07:32 \n",
"469 2018-06-05 16:07:49 \n",
"470 2018-06-05 16:22:51 \n",
"471 2018-06-05 16:24:36 \n",
"\n",
"[332 rows x 8 columns]"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stream_after_lecture2_include_other_lecture_time.df # from the end of lecture 2 ('2018-04-17 16:20:00') to the end of logs."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Other than the above functions, following functions are available for EventStream\n",
"\n",
"- select_operation\n",
"\n",
"- select_marker_type\n",
"\n",
"- select_device\n",
"\n",
"- select_page\n",
"\n",
"- select_memo_length\n",
"\n",
"- select_time"
]
},
{
"cell_type": "code",
"execution_count": null,
"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.3"
},
"pycharm": {
"stem_cell": {
"cell_type": "raw",
"metadata": {
"collapsed": false
},
"source": []
}
}
},
"nbformat": 4,
"nbformat_minor": 4
}