From 87da69f4ce3d3fbb812379fa2da0bd97aa8c5ab3 Mon Sep 17 00:00:00 2001
From: ustcchx <110163957+ustcchx@users.noreply.github.com>
Date: Wed, 3 May 2023 22:12:47 +0800
Subject: [PATCH 01/32] Add files via upload
---
.../MOOCCubeX_analysis/MOOCCubeX.ipynb | 1093 +++++++++++++++++
.../MOOCCubeX_analysis/newplot(1).png | Bin 0 -> 37602 bytes
.../MOOCCubeX_analysis/newplot(2).png | Bin 0 -> 29454 bytes
.../MOOCCubeX_analysis/newplot(3).png | Bin 0 -> 26520 bytes
.../MOOCCubeX_analysis/newplot(4).png | Bin 0 -> 29562 bytes
.../MOOCCubeX_analysis/newplot(5).png | Bin 0 -> 42173 bytes
.../MOOCCubeX_analysis/newplot(6).png | Bin 0 -> 28678 bytes
.../MOOCCubeX_analysis/newplot(7).png | Bin 0 -> 18800 bytes
.../MOOCCubeX_analysis/newplot(8).png | Bin 0 -> 39902 bytes
9 files changed, 1093 insertions(+)
create mode 100644 docs/analysis/MOOCCubeX_analysis/MOOCCubeX.ipynb
create mode 100644 docs/analysis/MOOCCubeX_analysis/newplot(1).png
create mode 100644 docs/analysis/MOOCCubeX_analysis/newplot(2).png
create mode 100644 docs/analysis/MOOCCubeX_analysis/newplot(3).png
create mode 100644 docs/analysis/MOOCCubeX_analysis/newplot(4).png
create mode 100644 docs/analysis/MOOCCubeX_analysis/newplot(5).png
create mode 100644 docs/analysis/MOOCCubeX_analysis/newplot(6).png
create mode 100644 docs/analysis/MOOCCubeX_analysis/newplot(7).png
create mode 100644 docs/analysis/MOOCCubeX_analysis/newplot(8).png
diff --git a/docs/analysis/MOOCCubeX_analysis/MOOCCubeX.ipynb b/docs/analysis/MOOCCubeX_analysis/MOOCCubeX.ipynb
new file mode 100644
index 0000000..7f774de
--- /dev/null
+++ b/docs/analysis/MOOCCubeX_analysis/MOOCCubeX.ipynb
@@ -0,0 +1,1093 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "36f54933",
+ "metadata": {},
+ "source": [
+ " # MOOCCUBEX Data Analysis"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9fc1c223",
+ "metadata": {},
+ "source": [
+ "|Field |description | \n",
+ "|:----------|:---------- | \n",
+ "|log_id |ID of the user's question record, combined with a unique key of user_id and problem_id |\n",
+ "|user_id |User ID, starting with U_|\n",
+ "|problem_id\t|Problem ID, starting with Pm_|\n",
+ "|is_correct\t|Is the question correct|\n",
+ "|attempts\t|Number of attempted questions|\n",
+ "|score\t|score|\n",
+ "|submit_time\t|Question time|"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "37a45801",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import re\n",
+ "import plotly.express as px\n",
+ "from plotly.subplots import make_subplots\n",
+ "import plotly.graph_objs as go"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "a79a09f8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "path = \"user-problem.csv\"\n",
+ "data = pd.read_csv(path,encoding = \"utf-8\",low_memory=False,iterator=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "85112a66",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "loop=True\n",
+ "chunksize = 10000000\n",
+ "chunks =[]\n",
+ "while loop :\n",
+ " try :\n",
+ " chunk=data.get_chunk(chunksize)\n",
+ " chunks.append(chunk)\n",
+ " except StopIteration:\n",
+ " loop=False\n",
+ " print(\"Iteration is stopped\")\n",
+ "df=pd.concat(chunks,ignore_index=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "3412bec3",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " log_id | \n",
+ " problem_id | \n",
+ " user_id | \n",
+ " is_correct | \n",
+ " attempts | \n",
+ " score | \n",
+ " submit_time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 10000_6906522 | \n",
+ " Pm_6906522 | \n",
+ " U_10000 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 2020-10-27101156 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 10000_6906523 | \n",
+ " Pm_6906523 | \n",
+ " U_10000 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 2020-10-27101213 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 10000_6906524 | \n",
+ " Pm_6906524 | \n",
+ " U_10000 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 2020-10-27101228 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 10000_6906525 | \n",
+ " Pm_6906525 | \n",
+ " U_10000 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 2020-10-27101456 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 10000_6906526 | \n",
+ " Pm_6906526 | \n",
+ " U_10000 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 2020-10-27101518 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " log_id problem_id user_id is_correct attempts score \\\n",
+ "0 10000_6906522 Pm_6906522 U_10000 0 1 NaN \n",
+ "1 10000_6906523 Pm_6906523 U_10000 0 1 NaN \n",
+ "2 10000_6906524 Pm_6906524 U_10000 1 1 NaN \n",
+ "3 10000_6906525 Pm_6906525 U_10000 0 1 NaN \n",
+ "4 10000_6906526 Pm_6906526 U_10000 0 1 NaN \n",
+ "\n",
+ " submit_time \n",
+ "0 2020-10-27101156 \n",
+ "1 2020-10-27101213 \n",
+ "2 2020-10-27101228 \n",
+ "3 2020-10-27101456 \n",
+ "4 2020-10-27101518 "
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "77cf9b36",
+ "metadata": {},
+ "source": [
+ "## general feature "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "8a352a50",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " is_correct | \n",
+ " attempts | \n",
+ " score | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " count | \n",
+ " 1.333843e+08 | \n",
+ " 1.333843e+08 | \n",
+ " 6.254807e+07 | \n",
+ "
\n",
+ " \n",
+ " mean | \n",
+ " 8.613328e-01 | \n",
+ " 1.058706e+00 | \n",
+ " 1.159764e+00 | \n",
+ "
\n",
+ " \n",
+ " std | \n",
+ " 3.455989e-01 | \n",
+ " 4.070407e-01 | \n",
+ " 1.596116e+00 | \n",
+ "
\n",
+ " \n",
+ " min | \n",
+ " 0.000000e+00 | \n",
+ " 1.000000e+00 | \n",
+ " -1.000000e+00 | \n",
+ "
\n",
+ " \n",
+ " 25% | \n",
+ " 1.000000e+00 | \n",
+ " 1.000000e+00 | \n",
+ " 1.000000e+00 | \n",
+ "
\n",
+ " \n",
+ " 50% | \n",
+ " 1.000000e+00 | \n",
+ " 1.000000e+00 | \n",
+ " 1.000000e+00 | \n",
+ "
\n",
+ " \n",
+ " 75% | \n",
+ " 1.000000e+00 | \n",
+ " 1.000000e+00 | \n",
+ " 1.000000e+00 | \n",
+ "
\n",
+ " \n",
+ " max | \n",
+ " 1.000000e+00 | \n",
+ " 4.580000e+02 | \n",
+ " 1.000000e+02 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " is_correct attempts score\n",
+ "count 1.333843e+08 1.333843e+08 6.254807e+07\n",
+ "mean 8.613328e-01 1.058706e+00 1.159764e+00\n",
+ "std 3.455989e-01 4.070407e-01 1.596116e+00\n",
+ "min 0.000000e+00 1.000000e+00 -1.000000e+00\n",
+ "25% 1.000000e+00 1.000000e+00 1.000000e+00\n",
+ "50% 1.000000e+00 1.000000e+00 1.000000e+00\n",
+ "75% 1.000000e+00 1.000000e+00 1.000000e+00\n",
+ "max 1.000000e+00 4.580000e+02 1.000000e+02"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "312bd565",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "the number of records:\n",
+ "133384333\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(\"the number of records:\")\n",
+ "print(df['log_id'].count())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "36576d5b",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Part of missing values for every column\n",
+ "log_id 0.000000\n",
+ "problem_id 0.000000\n",
+ "user_id 0.000000\n",
+ "is_correct 0.000000\n",
+ "attempts 0.000000\n",
+ "score 0.531069\n",
+ "submit_time 0.000000\n",
+ "dtype: float64\n"
+ ]
+ }
+ ],
+ "source": [
+ "print('Part of missing values for every column')\n",
+ "print(df.isnull().sum() / len(df))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "6f057650",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "the number of users\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "1290530"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "print(\"the number of users\")\n",
+ "len(df.user_id.unique())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "f3dcbf7d",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "the number of problems\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "1371695"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "print(\"the number of problems\")\n",
+ "len(df.problem_id.unique())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "07dab257",
+ "metadata": {},
+ "source": [
+ "## sort by user_id"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "e1602c0d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = df['user_id'].value_counts().reset_index() "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "76b2edd6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds.columns = [\n",
+ " 'user_id',\n",
+ " 'count'\n",
+ "]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "b203884f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds['user_id'] = ds['user_id'].astype(str) + '-' #将数据转成str类。否则纵坐标出错"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "36746ee5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = ds.sort_values(['count']).tail(50)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "677e924f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig = px.bar(\n",
+ " ds,\n",
+ " x = 'count',\n",
+ " y = 'user_id',\n",
+ " orientation='h',\n",
+ " title='Top 50 users by the number of solving problem'\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f4341df0",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "944aafcc",
+ "metadata": {},
+ "source": [
+ ".png)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "799da954",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = df['user_id'].value_counts().reset_index() "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "acf85353",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds.columns = [\n",
+ " 'user_id',\n",
+ " 'count'\n",
+ "]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "50a52ed4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds= ds.astype(str)\n",
+ "ds = ds.applymap(lambda x: re.sub(r'U_','', x))\n",
+ "ds = ds.astype(int)\n",
+ "ds = ds.sort_values('user_id')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "f9afb4d5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig = px.histogram(\n",
+ " ds,\n",
+ " x = 'user_id',\n",
+ " y = 'count',\n",
+ " title = 'User solving problem distribution'\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7bbe6efa",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0622bb95",
+ "metadata": {},
+ "source": [
+ ".png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b3138ea9",
+ "metadata": {},
+ "source": [
+ "## Sort by correct answer"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "58ef6f6d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = df['is_correct'].value_counts().reset_index()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "35cd2761",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds.columns = [\n",
+ " 'is_correct',\n",
+ " 'percent'\n",
+ "]\n",
+ "ds['percent'] /= len(df)\n",
+ "ds = ds.sort_values(['percent'])\n",
+ "fig = px.pie(\n",
+ " ds,\n",
+ " names = ['0', '1'],\n",
+ " values = 'percent',\n",
+ " title = 'Percent of the record that user solve the problem correctly ' \n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "80f39aff",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cab53918",
+ "metadata": {},
+ "source": [
+ ".png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "120d707a",
+ "metadata": {},
+ "source": [
+ "## Sorted by submit_time"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "a53fe1e3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds=df['submit_time']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "ee7ae99a",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "ds=pd.DataFrame(ds)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "7f2e4ee2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = ds.applymap(lambda x: re.sub(r'-[0-9]{8}','', x))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "4aaf86ed",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = ds.sort_values(['submit_time'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "fb3595a2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = ds['submit_time'].value_counts().reset_index()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "422893cd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds.columns=[\n",
+ " 'submit_time',\n",
+ " 'count'\n",
+ "]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "8e918012",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig = px.bar(\n",
+ " ds,\n",
+ " x = 'submit_time',\n",
+ " y = 'count',\n",
+ " title = 'User solving problem date distribution'\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "920ca5a4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7b7afecf",
+ "metadata": {},
+ "source": [
+ ".png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e717fbfd",
+ "metadata": {},
+ "source": [
+ "## Sorted by attempts"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "4b0a27e8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "grouped=df.groupby(by=['problem_id'],as_index=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "f73623df",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "series=grouped['attempts'].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "495ce3c9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "series = series.sort_values(['attempts']).tail(50)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "ae520d85",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig = px.bar(\n",
+ " series,\n",
+ " x = 'attempts',\n",
+ " y = 'problem_id',\n",
+ " orientation='h',\n",
+ " title='Top 50 problems with the highest average number of attempts'\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "50b1daed",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fc160732",
+ "metadata": {},
+ "source": [
+ ".png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "81428311",
+ "metadata": {},
+ "source": [
+ "## sorted by problem_id"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "df74434d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = df['problem_id'].value_counts().reset_index()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "0be37872",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds.columns = [\n",
+ " 'problem_id', \n",
+ " 'count'\n",
+ "]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "4d428a65",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = ds.sort_values('problem_id')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "2608b31b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds= ds.astype(str)\n",
+ "ds = ds.applymap(lambda x: re.sub(r'Pm_','', x))\n",
+ "ds = ds.astype(int)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "3c106870",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig = px.histogram(\n",
+ " ds, \n",
+ " x='problem_id', \n",
+ " y='count', \n",
+ " title=\"records'distribution on problem_id\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5e33da7b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0261f3e8",
+ "metadata": {},
+ "source": [
+ ".png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0bff5ed9",
+ "metadata": {},
+ "source": [
+ "## sorted by score"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "2d72da44",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "grouped=df.groupby(by=['user_id'],as_index=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "d0b54395",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "series=grouped['score'].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "0b2f8d20",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds=series['score'].value_counts().reset_index()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "c436fb0d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds.columns=[\n",
+ " 'avg_score',\n",
+ " 'count'\n",
+ "]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "id": "144c4700",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds=ds.sort_values(['avg_score'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "id": "1ef5d9a5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig = px.histogram(\n",
+ " ds, \n",
+ " x='avg_score', \n",
+ " y='count', \n",
+ " title='average score distribution'\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d3ba0c58",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ebca4e37",
+ "metadata": {},
+ "source": [
+ ".png)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "797e033c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "grouped=df.groupby(by=['problem_id'],as_index=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "8554638a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "series=grouped['score'].mean()\n",
+ "series=series.dropna(axis=0,how='any')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "id": "4c850207",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "series.columns=[\n",
+ " 'problem_id',\n",
+ " 'avg_score'\n",
+ "]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "377d934e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "series=series.sort_values(['avg_score']).tail(50)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "id": "9e0b8398",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig = px.bar(\n",
+ " series,\n",
+ " x = 'avg_score',\n",
+ " y = 'problem_id',\n",
+ " orientation='h',\n",
+ " title='Top 50 problems that have a high score'\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "1bab1e09",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9d4a5aed",
+ "metadata": {},
+ "source": [
+ ".png)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "93c3e211",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "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.10.9"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/analysis/MOOCCubeX_analysis/newplot(1).png b/docs/analysis/MOOCCubeX_analysis/newplot(1).png
new file mode 100644
index 0000000000000000000000000000000000000000..498bc6c548cb671dd8b7449a5cb2c1d27a685856
GIT binary patch
literal 37602
zcmeFZXIPV4*EOo>7CRs!BE3ry6qFWqw96fh*-@bh(
zRBu3U?b~;Nux}sLiNlA$Hy@3uAApbj&bL&q@5^mvncBCHW1lMYnx4DqY^Bdj{m!_B
zEiAh?&$WYGW=~%8(Oz`?9uVMub{>NWa{^jb6gS4dM=Isps)z?0J#-V@rzmJOP)K#qbGgX5>
zul)0NXu`SQ!}#;v;RiSN;ah3>Os@U?)vxi=B5eNaJC2u}`=JoUS1y13=d{2dUd6uq
zukZeM@OumXzbpU$joI|ly05O1+siFe`y1yk5s(*ck5S2=gKUVBe{_i*xZ
za0|jTIhLOAfcuX|LXu<4yBvQ;~Yg}JJudF(K+BXTx;-P12bcjXQh$wox~oibksD0rHJc5M$tXn
zEw1I43{SNJ4a?E2T?A?I%rk5Ay08l3RAzJ=jDNYewGV#a&r!Qhd9z&78;+Ir)o%@U
z;noggVGTD6QkO`}?5~uLvZ0f<-<=nuG4z(uKCVAHcf$C==C=mc-sg|tnN9bEb|p5q
z=kLnI-}!x>A7OyENfe7*3v1w!p2S`rea5R_Oz9>Bo+;RPnz2ZTAW$aK$!oof(2G>Y
zsz-bB{TjUtC%IWFwe$#|t%+TH{c{&V1bPFw`xt%{Z!=6*#f3;BkRgjxH
zE;;&El(G6%hkSnE~WWXarcyHli}61}zMIU2fi?TEw35hk_`a{iDo
z>f*Z6K-+w$8I#7Dy;v|Lus;t9(Xvrw3f^&KC8u85+$y;+&;m8CR)GjoXCYGMJL=KX
zsSJ3nLQT2EU38wGM^rtOhB_$FqFru+WaqElq%hSK3_~8cY>bC(1dR)ann?{XZw+SA
z4`I!scv>VycHhWOQhW0T;AF}<1i#|*zx%SwJrY5%>7B6D5m!w~f0^g0AbX#4u4){%
z#16*iv_0$%4T)~!**-)CaG=S
zMlc=KP+#2l9iPzqJ(Gj8aFLqZsZ^}2khyhvcHhaV!K)g~dvkrsyx##@j%QEaWOr80
zZpLgco{P<2p!xiE==24G>e70`?hi~byQG9vujHL0oiw2x(pNUQI9jAs_4|+RN-f%r
z9SgTaV|IsG`JEjj5_p_KpehO$a&yO`U`oaq_>6}}W8TgdZ0V&^3s0xwt)!{NB0)mP
zrraf$TU86C&h*71b@_N(fq<0OEPNo&mw+?14H-|2qEB)b^02pJ3>ffB?U$EP^r^61
z?yR0f5y{~zOlq4x_Pg`yb-x2^RQw}JbP{%&xi~Aa7CEQf{u-9GLh5uhZePBQKWX3*
zfx9C4J&j$gdp6AeN*k7#nOb2qoWdjP_=G7o5~&0!D~sp3Y+WmAU8PFZHQlwCqhxGW
zsh`&=VNLFOJ{fyr_~SEcTbcN5o+_CXY(-5~jp&1O2qrBEu9e3-@%Fh5dwpzY$B|Ed
zqVYbkcJGt%tKpW>@`-+Z?$)?Qe`)JAi{u@Ln^>(CQBETU8)*4AznP2Dd)dX+;e!=)
zBxOI1>G>;VT`OUiD(BG#SpDZy>!-2@pBpQW%o%oOi*0jP$6da1E>kDHxKTk+af_ys
zwa+bX?X!n29=3dw-$Z5JqI)7^P~>&>JQ}W|K)qR+>sYF3Ebd8EF2Av|{^<_ZY1+L{
zn##P&h{;$^>|$=rN}F3>H9H@=e{ztfgMqX#7&yrYQBB!^-9C{d8|S|3nJBE1lFAyJ
z2XBEE6SxV_cjZ1l`n}xH!|vP!Tn>E3?`&~Fe3V`(rY|*#M@;Q>^l_i@zCwBf{#9HH
z6yoW#@;b+oy0NH{r>wEaVb{38c3oYQ=F!pn;tZsl@7r@&_{Q3l@S%_&LiS3;G)uI!
zTH!6ibRhDM{HLcCpG1>246vz}`muKAId|hx$W(>_VQ6_TZ0>vwHs>6IRnib2ntcTq
zy1ah!cRrTHH53B3@(4o;30by4xr6Gwik!~(w7Kov%6;XRfBxEWKQy{{VP^R$gVAcL
zgS5Rw?BrI<7sIm2z|Zjx$hNnw3h~CS9ERtHk5OwIt=fFK+?W|H%JQABKMSs6@Z;0Y
zxg?q7)h@?MOJnKs*Q_v){#5dI?ykW%+~UK8;(PBVry!-`Fh05{EsDt^vPk{lSiFg
zW}Fg_Px>{#NZc7cmV${ybWXfzF&-;RA3S_g({@G0E#5I={B&%l<#tD(1GA)QdlwM~
zg*+h73~u|S+9+PSr9kq|r)5-3JpJ4mWuI`u!@}{b(aLf}l)tbI-#fPNTCQ#1zb%$*
zYRb6EdZNAidP2Y^x4ZVm{lzClP`x!UEBxa83=bZbVon|`S5Dc$dZ>M8{L(k8`j>g=
zim{kpHCbWXp?%#f_gIyz`HXwvZugMS?<9MPXDAvj^b)V&srX*C4Ie6RY+yocbcRLF
z@oEqxFlK{|w*_%;Z)bO_m3^{WP&Rn9IukL@;FeS-u~~LGvqDxSD)W
zO@NT`;aoqr9YK<`%=uDz-x5=tDd%1G$FM4wp+U&jk_z6Q9JW+J+393Gthc7au?RdqFwA3hsw8dU43(-^=%4=!B|YXk%t27PX?grlr@zhf#XdAi
zGb`@=?;d`S_4KuUc#$V!_x}mBDA47RtzRZv+1ge_kJ^LLup*m=5d(qrWj)
z1?MBUSELQ!(LedsuN+Sa3^wR>^V#38{Qat-6Z@gW1U+$`e-HNjlYMBDgBD+Yzw!^1
zasaa%NQ)1+{^y&$N3YU>%!}*1_@RH#&RuaIevPkF(`x^JaVl8Z?$0x`*KaA-u!cSv
z=Hw6?U(ro7V%Qj}p?i4s^~k|5$-Y^~!-DJmYdS;gA|xJVxv0jL&^r)39FyuxE@d|Q
z*VuP*dkBf{*AJWC&GuLMvCh{foFbt-8mz6Ko-Nd-Lzwp(k6I*2W~6fv*iL_>kRGvi3+p_Zc|4FPZkQYDQ!H!Yw3JWuAa9hNvG4RmpHIS3j8legKVt`J-@53j9Wc
z<@sEB)sNwjaN#GE=YD&~Cm$rMFLA~0GNDbn9&i&ZTI?Q}qHxrzmVy5;ZY{d2*d#TB
zrjJ~N3*63m`_UxRR@B+QJJVf%gt^*bpRZ9Zuy&q6Q#`Oi!EBdPmq^rrB*Mmy60sDOYukq?o8b;8%^x>e$l8Kz}_<2tQ`{GNL}N!
z&EuyUbD>zI)vEp3B{3JL+gf^WRT!5IaIg5a&vMuK%SXMT`LSD7FouiXcsT7YgjF^R
zg1g8(1jz#iOKyRV(Rq8(mL^
zhmL&Nj`9a_EBQ{0IUfqiRB$_4nu9Rbklvs{i=g-XKIn{H?vY{Zm&k2@SE=oKzIwdinJnRji2wmw^vGUc{J}gJ9A0mbiQk+uv%|i&nul#o*V*
zpTdjlF4)xuBAJB;q&_qNYM}0S82LV-d69(G$Q+sF0y`1XEb?es`=FrFY$Bu
zD5SJ4$SAB#O_CVUB%AR@CP}nOYXwe52wJXxZ?)TtpYUeLv~aYsOt&r)2haRS424S?
zVeI*O1v5a7Cn*ODKR{htd|6YZ^bnQf!K#G~x{c|SeAf!Q&d2cB3#s;P)OaMs&mxEo
ztdKG>fd<{rR{TC1&?jm(F4=BB>M=W2$ub*S*R!Fw$9sK9kd|UjH=8GwoE^w}#gT
zbEc{AI6>9{>ZfooGb-5rt5}ShO5Kxd*p{ze0)(T6E(t}RWI#{ps^ZFEerJ#_3CKHx
z>$!$H#c~z+k?NHaJwJR+7dmYHsP3Tfn%SMO!UA`?;~G{y{7btA6<$PBQ2i1ewEVR7<>Z5C#EX{<2ytI6tbD^rWnz6K
z@fx4PX4W~6AlD=W(eFk{;YP*b*!9bg#-dh
z%sEN>bI8irq#Kci*SH9+8Le9%=n(Vj9|ZTIaQagV@@JvMty72haS$wBAN{@Xi6>5h
zj$H?+LC3#s(0~0SNQYzhp_8s1;UF*pL~smBTsvOM%8n)>cf3Q{@N3drYb~sJoG8D%
z$}{*@A~|fLH4taWdRvG`_~ro}=5+;<_!{Np4}PgXE_L
zn=uyo2)z_$2}JY`#PdP>=Oab(oj<~4t5VlC^ZmOT(;3^cD}9~nmYupcFMOO~>d2@E
z6mQW^=PRLZ`SV_;1I!fw<1iGs;2B((Crt`GtC!En7xk?Y{0z;5Ms(MAN?rY@yG|9
zQNrYm#GORY@y{@#SnK4VGVdWs9Z3_j$JcvCwai_mcVhJ
zi^Be4Fp8^SJ9X2n^|Hc{#^b45Dq$)qBhgon;n&^=3nz=A5spr>$4}tbE>4}%X2Rp7
zr2l&H0-o?u1OxZKO)$ZS-s>E@jj^03kR$pEJ!{X?DJ-?(WsVq-p#~GHxH8%7bu*&d
zdwX7mU?oQH%K5Zg?v_?cp={zpr;WB$?#}hm#a$6kf@h{bg=g~Cy8cF1)?ojwRUJ+C
zU=UH^5O5OQPzZqRr?ac3SpwGq5q_wEyy9GL*fO}9E~B;Dino-lrC`soA(!%OyNfNC+egM(UK0K
zS?yb3>$hgsb%Z!~!VK0Ms&|~U`{f9m)5TBN8AxRR0XEkZkCN{gTvj$>qFcDM0I5)7
zQ;yhby_-sg>r-uu}Ue$tSu^Bb)Xv
zHlC?fwx_BoDJIBuT5O)L|KCi?2;Zgs?Ig{K1bJ7d*=y#i^mZ!P&YrfNCi{(+sKk1(`+)*as^GA*Z$Aa1H)e
zb9mhMG;u`$W;w6MTY&@9dYV6pQr$)kS1=9)S!)PM(%~$FLtHmW4@zs-RyE*IrCB?{2mnsg-*ld
z+f-BR^U-HG&`B|;yBU7*32D5bO7h1A0`xznAxFle$vGrUr@M~UI7sa;Nh?Q9n1h&bOPxYhA*_&Hic;b%^Q<#r-G1mFw4nI}*zM*YZs
z3k|UNXV3RDfl-Al;HB<^>3q4$N;-*`P-ofezHK(A9>1P=IGW=E*TaEQ{W$5QIxoYh
zQ`Z|_0q1_{W|=tGBRKPLs^i|PWeBWb1Eux?Q0GWxC<{i4PUspk^eV0{xwh@8ZXG1n
zOqop+)VKxhz>~zN6Zfux3bWEayhQeay~m2}F!e--Y%8wi1CQOQOiZ|3Pu)iS)&j)(
zxk6jxqDe<_^5@W+e-WVj@HheH&rjgG2PD8O5RJ+cpu?6P;CI1nTjU5@Y41|63F1w2
z*(R>=54s|t<*C+|4@35$HC225@o)}2p?e=1(fW0hjTSMZ`)zR_9Vs;P(LR~0`|xx7
zTwZAKJc8@8{CS1B5;0ir?+uuSgKR=&QQX}hut2O-ZSV8JwjHhE12(SNJ9$SKbr$g9$@C1LmDj>*n6-qo_ScE2j_<*}>S-g(yw)_EL
z(pc-xwbHyimDUvT!r|u5qDotd#>a~OPiI8RhGcsy<|F_RxQ^)$coW!HX&xjC%5Ot%
zAkE_hz=d;j9)ub>EDQj(fwz}x9PLXNiPwx*ms`v09*hyFE!vvAo_0%`mBYWuqVtuu
zx<*VZ?pA>a@EpV?zR8&e*0v^-nc{EX58t;xIAT!!u70a-S#Gp3=eRZEz~cs8Xhvd#
z96@6A$=N`_vN6`g>9o_`Rf4ec=L!O1&*ZojQ3Y&>n4S@y0+t>O?iAZBWq&4vGM-KQ
zxyF@kb&(tsdbA#Td$KFjVl2df`bqZY^bC8{5*rrszCIkb*psX
zZ7;Oa!l?SJ9HZ{+9#7fUus6b8{PF4PywJPTT6!Mya)Tde5__|51-dCXeQ3}3`9
zb%(2qL$M}}u#Nk`Yp2|gwM4
zp6%Q1w)=XU6gXc$=&)7#>>jHdLNBJXq#RitrS?N#c5@Yfmf6RUw$gqflR?_OKIbN!
zB>y@CQgt>|L8sb;6O;Igt6Hnm9ZCXVu
z%2-!({iUt?5s1x-rAC67O|6W#?qC61^pt2bM6}13&4h`j*e(0QaEkQ$?A3Y$0Do?u
z2&11UK`hzK-b~BXPGZ@5ezgQWFxX9Bj*$ya`57-QtmQ1!^zBRRp?qT%ausx7-rnRDM!d^o0J=}p2I6s!kC412&LC%ZXw`FU_4X&
z$H3>A(^J3N{d3g7QKmSfE6qD#Q`M=Nb2kf>4}XXGj6fmwO>TXG1-@SmUF>)({dS^v
z^@^XccKiFjj+^FIeP!G$!)B5m#U?o3FyQZUZnSHk0iVEI{%V)?
z(*P%=V5Tj5rgamm2dB{LX|1Ma*v&XLDQ`IMb4jw>sY-ikcmokjj8AV;&?WGtM|bnL%>oOzP`b3
zNQoX?stSAUNndslxK3gi5LYhn)-*Yo7$m&ek)2l74I?IFa>L{cWjr-qvWs?vXC5Y&
zEJn_OItah917rVpj002mM9yF;hW&fYI2-BbYXuxjT@7OORI=JTE$Vorj<)K0cw|<;0ut77-3s7lxJRk$WYO4+&K{Q>WsBO)Q7%OeZwCqDxYI!L4_|P
zX@N;f!
zP5?MGLHv8*ckr&-e9JTtTuI}>-X*}Mn?Tn48}c>s-he_Fb6kv00i#qsWf)=2LEu$=
zpqc?r0#Eph4ghBN0Y(CZjsD%5z*(YIlS!Ethmht=zm?vsJIf}x&{)1V8a%q-=?tl<
z=9eH`9DX?-N6}@~PT5(3y_nuZP`>8cN?Hp5x;aI=zRXPF6PrkEm1|W`q49rXkz~Fp
z4%}qI*HlCo#drhSQ;vXO{mj&Z0Nz~+#kTyA#(T~)*Er4o@YnjR_Hz8-mtaieXYtwa
znaN;U#ParUyxkrt4IWJ7lzZ?Kj;A-tfe7EL__Kq}VRrpdO}6k#gx+8|m|
z^P_ehN;03WiHW3F#3pGNTR#P`Gl3Ap2Vmzj+i$gdJSH~?xdMeC!ZqJ)*J%I`@M^!m
z-vMx{`t61qC9Hb#P!wqCK2a+<{uAojLIF&*IKzWZVp5Y41am4MJ%Y6JMB(lq5%MTO
zAsgruojg%UwVR;(^RdPbeR|=8mDYpgG7<42>9ywuA@viY4`xbQq`4#@zyOe=kI&14
z%tH6bpI}YN2aL=Ahmb1X**pleL@WIY=d&FQ&k&VYOZOa<3ZG`;&F+a~qE%erd@*j%
zp^vpjQW!1Q5Szh&$dRTA3Z)|+9+b!-{q~ri#&3vuXZM#hC?sB6%6G-5l2mC63qEHs
zKUrM8b#nl6DG`9mQthFY4yD#t7w?Th!NF_9x-*|flMvIGL@6}F!l>fJQT&?3sw=$;
zwq^P?7VUHIEti`^50|!FxjG0ITnA6H#Mgi2Hw6N
z^d_NY@Fz#&{TiM>=HU17pe1piCY9jSmVkEUo|0U!^Bz5p!u6`uCUvE3M%DM^%MLUp
z1=Cq)g7r+|YAbOB$A0?LKeL&w_CO>mJ&A#2iO?GyzT#K@9r9B?^F~UggRU5j$$LGs
zltb|E&e=$?9RmUx!%iYA$|Z5T4zoSOyLbQ>n&6|xVk2jMT|dUx3!0&+gk@D@euG5q
zL-%to9A{Ps`QgRA{4k`o_6a;8Uj=&~04swm#R`1%)Wa)xjw~>aCo$$EW`ZFUu$T-d
zdyhZ68|1-_hly1KWq?!LG=rFL->V**p^KLbX#&(SZBnU%-MfJIyVZ&+at24QHQ#C!
z4EU!5ncS3gVB36p&MCXX-ND^F!Zl00c(%i{v{fziH7hGFqp-hpu+B%yHfFz#W5KDHxSCU^Xs2DZbF*?>IjbN}`LWbut*`d7jU
zDif}hcn&f9<6-Mg+~&|;RWJ?yDRG<@um!&Vu!Uk6wiCO8Xx~gNIHxJM>7KVx2Bdjm
zW%DxLF-2v3a~}#9$Y~S$bpgn}wK?UsPg&e(T`{|Hwf{%P-C*-At^8|=v=D++hQCD#DwJIk<`E*er_eCD`%
zY)^tMw0u^7vTK_bQM{zT2B#wxSoL5wI0^P+LV0jHgm{5gAhM*L*(4$P2iT-ga&bKXYe>VMc-O~_*V3MS}zC;u0v_?1kK)R
zz+JLSt6<6X;)TtjAS+>2_Y?!!NP>8p|13DHz4*Wa$VK?-2Qvz)B%%AjxI
z;TUa3JWlpn@^gQ&kVK%zpf1j_Tj+cHd(?Iy5ghDC(!K
zo!!45nsEJn00@1$5;Ba(KyYQ-<163LD38|X2h!)Cda!jci<`^D1SzioNo4SUQZ^+F*SvsK%-S~hSNa`u2JdB!gfq(J5DTcZbW1U=Q;V&K!vYK)`5
zaPk(E7E!)DV(fy#IWQG_RiSYG8;ciYpv2tdQt+-%??bY<3O@1sNHwI@j#{)_O`d5OZ&$)EEAbi~@_#TYGSJnr(PQYzX+w!2vKyy((IoW@=C(+NJ!*&jY|okI*|mW=!f`VnpX$C|
zh4bsHtMwbsmKpIIka@Pqsx4}Z)eBA2gtt|m-F8t2{7-gomQFrdez06de9+gE@3j8n
z!qT_Ga+`U%wXa5{E8jhexlJNdo=rP*ET`yw2@gZlznxQHoA!$hEIz
zdL2+Jv6QMEV8n8Rgto~*-3o27_yr7S#&g5+o^C8E=#74TqgPT=uS0eJ3(A|^nAQBs
ze*KLbFk<-Q=*xD{^0WX~7b6rdH9*L^2c%c@#P3*I(wWEBv9T~Lkf_=e$lfQMX1ZN%
z69wm2Ek8w2DVDz=`InsQe}Q
zN;{$!D9QXjy$(dHAUH9Zv--OtmfYypZU+orX2A%XYFx*RsP0lSGPCGXx)W<&)DMYr
zku$+}+L0@7wo?FI`Mo5|E5@q;T3fP5XcZ;Pz7y>B^Mht+T*pG94}7^G2@<8g4Oavb
zg|lT6a;rcgOP3RnNEFiO)?&AZ5W(@2*8+z7%g8097@|tumu{_HFSfnPpsjLdN
zfy%0Q8HhyfS&k@lbhLxGw>@^84I#OdrsC0S!R^#3>7TCNSV&4?KuFr==jc$>2001K
z*RlQ0#)hfN*rxd2uJPya;xFpegg<1Zq;n{|JWdjg1QlkIR<1Yd^gry#LpczhfCnrK
zKs6ve;nGY6)MI}$vraisKmD;Y3%7B=$3$k!a)ZB|+{0i$iApH3
z(veQ_bq)(~5>E1q)_et%d9@ek=H1uQws+przd7~b*#~SPbi9Q*Ja?%N-STckuS6d_
zo!vg{a}kAG=e^6Y4@%5(aS;ZktmD53Jc`?(_Xs@H%d7t`W|9{B&>ncTI|4B>cY(Tg
z%GKTpg>x1Va{YipzUxTvbV4C*^zs?^21(u{i?yDqz4YUF*g9)2z1z1m49J~W-B_z<
z@bbjUrP@$^ec70y|bdNoTj(+MX5(-&J?`)
z-v9BvWy!XHJ1LIH0_@JLZj=&Te7Sc?Z^guS8V
z501Ec%b;*0N1D%jgLO;$pXkZ|5lhjoyz}h_xCzMiOYDPx->2wkBSipV2-B4vfR5_h
zl?=Z5?v92|j1~D%&y2qw(7S{Impo=YJRBa9?$cnR)kTvTw~OP~!KI9|oo?vGcIvI>vTY(@}$_I3aOI>_jhcm
z9{uz>&(e$yT7CGeBr@lB?0R~;M)ct3mZuGxjj`ObqB}g5p-}CO>zjjF&qHB-cTq^k
z9Hw^^z$?w2dmdzSCM>qfHXz-#Z>{$i0z`{22%V8Ux9b>+(f!j`RE4@7tGnwuYK_^;
z!-phonb(Rag-PG?rkq=Fle3RIw6Yt={3N)nQcUFgm9fW!xDTlTc(1iTK>a8;AZB00
zKfVRLg6`F&p;I75Y(OEKyB1*&it$}5Qg~Q)KQlG16Z5(b5ovJg^42MiJJDvH#Quj$
z2|u|+rD8To*y!fW3yU?Nn})9iPcQ=W$nz%31JJW}e1iehbq%T_ErZ|*o%_-KAZj$&
zx7*;<)Fa>&DD^OJ9i$acW_bgUshzXRq?HKZ!{m9Cij}cJe68+PfI|V*uOv|YA~gr)
z>2MONEUSD$fzOatil4Cg(V`_|5bUFQN(;_Xvb>t`KnY?$29Yt~9i|?X5mW1_dHM~#
zp2SUP$@-kTPKPL8x^{UCpsrX+Agwu$M_#fW3t_^GIM^GRr)<
zLPBP<7E}3Cf#PDFjb!ZR2u*~{DBCTK%`Q6+^mFg3oQS0
z05V>;j`@ghyTr1x#X|O=-Y9v5+cNt4%%{UHt^tXw*5LtG55th=UzzIFL5z&GE=IPa
za7FJH#V$gLP1vyb%RggeE>i9IsibSA9P=JM*~Nad%QPZM{uy;4`L3}?tfsslw^
z>1CK+bA=Y3J7LB}LGnW7cxNm#>%%jQh0_q3JSjeY!5XL0vtjFETW?Pj%W|wfJ5Rgk
zyMBg;0B%MPr3ns3Lcuj*l*ECd=zdxyK=E1r=%dtN>_-KHm(=}a
zxPll@aue*+L*T3c3`1UFPx%MKW2H(@YMsC%FIr1K3x+3LbG-%F#aS~z3tKw&}xDIM`XcVrb8S7Gv>Wz@h}mZqV{%
zhHkz572<^0xsps@kctefOse+!z4i_ZbfWTQz9wRNnakPI
zfC#ttqlXfAST;^`qDi_qQi>27;TP&1NQ+++AT~IIfH@6_RUjF$oukCpB97R>i^3Bv
zN}xu44qpatf&Oj&CW%aF(!H*NFead!0de`aat46bb|{t?$c|$<0(j%8&?e{yF?R(~
z$RiQ2KAr}gCh9+egODcFmBD_nek;Z-jX
z2Np3^ZEpIO7W&Emrgu`Km8?
zE*CBvwq(tvmHbqn
z=2sF*hr04?>PMc-F-U(Lsce=P_zRaTl`m+eDe&+EmH+pPSSoXIJqj7D3%zrb19e-G=Y0zvsbLbZP(XFh3IT@X>49yTZx3v|c9GwQ(E-M2GR%Lg%u4n7ZdltwJ
zg*PdqrApa;pfA4|;FN1A^azFIwD`;+08X~RHAh2Ez|UO2D1Ji?j8g3;Z#5uX)gM|b
z8P}cS@6ss^sq!0LuX|9Ffoba~I0@1r#R1#*2HSlQ`}84u{YGwlzH8wcS$W
zq_X?^Sp?gfYfFR>eY#vO3)_y4(!l7VsbxwOl~EWg_fo9iC1I;JDE8Qg7Ft?bXad(S
zngI0|xX*kV9G0Au6?BLq8*d6M3B+v%4CedGP0
zkR?>NX@k@w@TW*~_Uy0);;NENY8i^h?uZ`wDMvir>DhNXd?t@MrniumgnlI+ItV;j
z^|AwTmJUG_`|c)-!VPZFScQRzbZrW7Qf4yXj!a+UL%oO5KVwqA9I*`C#Hj(bC&5|(
zh*GE84GQ%WegW+#Ub(Bjt1~qo8YwcRbEZf@?J45l0ctO^UOYDsyva=5VFJttvi#jv
z4+v7?@=_!z4!bn~SJfgzT1hposS9B>?g7bm*J8;aKWkLR_}jUTWZ9`;9b$9pvZu>T
z#}X*`QSsnK&)mjq8S^Gpp2W`y`zf!7fjs(;%xxRU+(4k>)*Q=FR0>E#(-US!z)+I9g`B=Z-bb@$|eWcj8)RtPy*fc!`}C{
zQNiqH^*33Wo`K5$lca0(z~M%{`0toQfloz$!za_x^GAJ{k>PEC&SkM5hFzLkhtGta
zQ&%(ZDs7zotp!Mg`$y~m&f|%t^{ZK*kpmunhk?@b?dagKU(<
zfk%-F{uc53(Iy#oWeSX-qRV1=iK13O1I@?!tL*bHE@xL*_Vn4bn8WQyX9}8>N3$Hb
z2=)(x&Nl&AEuwg)Nt_y5E?X*GqXFu`5Afb6fk##32b^N#PLVRUzg`+mQcgw{$btjA
zG+J<69LOYJ)-E;g$BSr-Xj%dS{3{SJ{sB=>;N{``Xki-QbpG_2FY63&N2GdW90!4K
z1vqWbP^|BdI)>ir>I!N*>4+B@<~xh*VfEcrja`cwuS>u$3IOCFPNgat2eLx(k2m=D
z+Eeb5U`eO|cSeyRRyrJ~=&oJ3U@1>$WiW!ePju^=wrbvujJ05b#1*k7%|;&g0rE&N
zX0!sx<5kftXtlihg^sd;?{vKPIpDU>$)#XbeQ8^#Qs9}!TJvlR!J|#LOGiL8KFO@x
z(jQ(Plkfc<1hbO8NBeglDh>41bvY(Pc6RbEk!}4g=2&1@L@RxMbP&jtbG^&tnW4nh
z<1s?M(DFMQc5V_VWcjGPjR8H$GORi9r1L+bL$h+GE9XI};~3gz<)`QIroJ`r6NBK)
zj%k+;8i86|@%13vWuTOq(0sLH{Ii{10i?*5rJ8r}zIX2?G$+ZK#E6ukB|iO7lCUve@kRLjJIcIJ;C`^0_+LG<#O|5K+Yb}E3-=g0YRed))kPbv@;12
zY+TFdK{dpuNleefwYGEj$D{PN+s#&w;6Wt*kodYXjdm9-@DQztXC
zwzs1DA}(IuZ0ET1#&5dU~xxZxzgZ9h;GHu_DK2m3&53twM0A4wIc{4j1)Fr!Y`3;vMW#!!nv)5q7q83`16>
zO|eq3Q}~KQ|HW5u0Ip3Z5!9eu!5DAaD0u;;W8XYpf`RmQwskMqW<@S5I|nPCD~^^I
z9Mu^P`N9^s2!i0%jLw-~WT8wC-D^LO1%M4Ly60l4-WVv@WbdrJi+n1|vhu2C5frq}
z*^jYr-i3y;WK-CbV;nab1d6SWWri}|R6ZUK%F0RS7#Pn`j^sWu#Wb+znacXp#{eg{
z!Z(nLc~+L^_g?F!qV=q))7bg_lE?15*y`d>dTAKpVb`|^RZm@o##NnB#u5w*XL#w$`9OG<=viNVEZx2$h^B;>=3#ck*YH|e71ULJ&=X{
z`=Y5~HylPz^33waMvy*c9DqWyv)-f#1HWi^Gc7EK@)@4?tL;)v1CW~k2|y&dohq$r
z>9zYY+T{_1tMY-^cS3@-%vwToZ~2)Iczn!qK2LBY5>vCkZTgV#qL=wnq|Kw?Dq9c`
zTy@a>Z|5)i&f#0L)e5KFx^l9FcX!?gFAmj%mnX!(iM0bS?R}W`uTPgs;OK;(cFC(i
zw1Ku!&g94phy^N$fNq1rRh%QSbk(b8^TG{pq@s)@16qGsh3<6PK>*uk<~kr|*=I^RRZ4%8qxpu(C}jBvAsLL5G=
z&;YR*N+SBdX`ZIiE(aFr34x9NdDx8|<
zH9-6-f&J8(EZK+r^a{W!=pI-DhD~Y<*QNuMngzromx4~e1t3exJUiBNBUE-5YM~rXB{l#0$){6~GWHR=0$7Ds9OzuOZ~7r`S`>{DhF?R8~fV6*kgjCDG9g4!y6{
zG{O_MuBI!-S~i|K;i0d-b32b##Q%-!+vc+pF+dn+{!d{X3g>YGdx4;KR&saL%BiE^
zIru4!gUdH2IVGve*S$IBStk}vOZVFsj^vMIIfZ)W#HuKua4HSRyICmQ0oA4RP$)6=
z0py}Sl=zs3ftCwsI9>vPs7xIpz+!FS+48lt0}x@P=FVC(mhgFRuiIs1vhI)8*lz)C
zpkYvz@^koBya!|=1Wt@&G)uh>Xaa9CNV^JU9{z!etpFw>$DhC52HUh1Y0GFC2rqxh
z>vsxggG96|$Z&8N<
zRBYS>V+w_ZTqcz;OtSv
zFny^Av-ofHl`#~g*g7mtShMg)c~e#|!dh}XfRbF8p`lox2A2^J%IeVqu3x&-XPu^T
z+Bl{G)TH7=uFiyl;{Zv1qO+faz)pxg&9wvwERsnhCix;7;p$m&>?D3oWGtValD7WB
zr%+PMeXSeq!!%AY#zF)PJb&fgi83feR{6WD{NN%A|%%VMTyyJAEC%5ZMRN#EvkO180n2%
z+Db+6JmxDs^-5Cv!KU6x#U=)^B*oX1dg{`D1Eo{Np?SYJPrLa)R|Yg%uA>|ff&`u3
zq`gaZ`ur1WA8MpC;=%&0=4PiJ-l631@ULXbt
zde|B|f+60XuY7Y0-#J#Yh<3&si~*8!+|0>5=QIBiUvLdgTh1VSu$q`CZE#xUZu8mj
zV+xYOk$eo287H{&UHe`L(<%Z8l5yt$Mg0r0oGAMt9DZkVtBQZX{oU9%L?VIC}>v
zyB>5m+63H2>#kWG!4>(>7jY4Q6|ZqNq^>eq>5aXZQGPIOm;;~q7%R{D639-IUYzPa
z4XWuPftN?pfMsXC(c7^Flqw59C^~h`#C6EC_IV{@H*L;{A!a1Ksn(Csi+>@`gg1Y=o*rp$WQmL3uLD-#{Mw?b(0fn6C@p99^}S
zKIOH={?-)sjpXnw1^^J1U1(XuU#xYCl-4ei-$IAf%2EVVL_pAhVxzlqqf`g8KkjkvK(R
zQXo>i7qRj-UpX^$W;xIp*v1b`;F>r@$Z18c@cJ89+(9h`lhLqN_Hfn65*3JX!OEe>
zE8sk@L
zt(KfT#i8+pzQd&c_e%bzaZG-OcX#>`>)ijZX=3D#j@wxUrLe6}Km7Feh;-NOp6ho(D&t1>X*++*cp?x2R8)%
z)+!KV`M}oV@&w62hbc6IMB7m_{=I10d9mpSYeqan+#*tG_uv8Lmpt|0+Za&{>Rq3*#!&6+)mThzW2atHB{48d>LSZ4H;0K7dAuny0Tp7}*4o{|?4^3Lgs6-nj?BL0LB4Z!E3}C)032
zgD&KYXt~dF1kIr5$DAmXMChyiM&LLX?+a3Q{@Lyc*bk2LWyk4~y}H~QsLRQl$g|`&
zZlQ2;N>h$JC|q4b@xy5p?z!rs6c3a*GOCgRIB`&a`6YRkv!?8uS6289puYVjXZnYX
z7w$g&gYx@jYrX(0JBHzy)~_1_>F#%Xsk7i`!HBvc(7$h0{LDImFEBlD0RzugY?rVb
z5bVA{R-OaDu9ED+rls32>1(z7y05!C($m}3%;VP$Jy!&J{k1>Y-;5)e8G>8uTUe+B
zc#>ImT6kM0OxDQ$m0I8N$T|{y-@XX`Kr#KI7vyjBE~cjDK5JlBPshrG2uINDznI
zaV49*zscFm0{`oSgWbCHuAOFuk;GIkKu*T%V&@kgmMuVkq}@6TK%QkvM6i)Tx}eGT
zcjmi~InhZvm++c=!0%~XY*$qVpTSq#f3;->!L`(wPccg6Zztdh6j>!c5J~8CG=Z;*
zGM~d>{XZ#yi-1q{NonqA>*Gv$dy2}Bgw)Ozy%`_==udkpY~N$ay>*`}R;Mz9ge$TH
z3oSP*3n_|gUeEgfNhoF-g#7VC?D>1V&qUdc88fQOMuuI3LBs+!d3nuRI@bTEy*Ces
zvVZ@^+e?cjNo6Y)N>oJIDNFWB$bOfy57|bRp_HtVJ-h7NAjUeDN~MxLBQut=hoLYd
z`|rF^clCKb-{bim$MgL6+<)A<<`~y?y|;6Dov-u7ax#i>B>sACx~O##zPY&JZA%#eVNy
zyLL=SC7ULvl2@AzCXRGjsU&!(?D#ooy_$w
zJ|I?6JO5^aFKn5T%YpRTD5$DR1*jS%deG2IJm4!oA7qxE8RnKJgJU4O@dk90Aj&AY
z@JQGhP_-#e!Q16a99lPfB;j)-Oox&4+`i!Ix$gWAk}=pm4qEMj#iw+I-YP-#
zX2Ae0ah~FD42N)s*HF}E5
zHfPv*@7CN8#l{zb-BN6iP7|x$Ra-Cw+uiYl`@2MA5Rma%U(P|{>?rY`iIJ@L=~Cnw
zi{f5?vmu>Z(_J7v1nv3y3EW`K)yscg4^#m2ur9kT2_-C~>%Hk`If9MPCrU7Dvdf09
zE;HTnOh6!ApqZ2S=1uglJQ}pCl^mGaZ64AN0`FBQuY%jk5TuqKliLiuw<{C#j+0#{u9P
zTMmv6)gxWaKgokmlBzz!NnNwYk8Frr$NOgp`P>guZNzwCC$9IU`7MkCfxqpYY@9^l
z@t%33PofQeXzuLC&yZ#@6Y$FQ9lsK%CkTrWD(XP8nOh^4kIClT+EtLPd~-6YhI2$p
zd`Si;p;qOkVJb&@nR179cM{olk}p;?33dI7DE;mv)E2g%fG_0qbccv>DugGtoQz2S
zIz3rU>yU9F(B?itzu>>&gBEyxk)${YjZv3{^?J2p@u8{Obak^sS{S3I!Bem&TGls@L*bJgWOvuh
zscNq;q!C-jppg7KGyu5u&ptv1azi@J$|8EnCNlmb7Zd&aB3?tfQJ{a~DMdnjq0euu
zXJW>@Jx;B~=){5GslmY8K~!$_NILKA$)zUmI5nES3)1u`zu%oG%(o>JWB?)7JB25?
z;w=l^K%~@e)e9a5xsxah>O_UB%G@|dSX;>ne^l~ZXTEv%bWii)P%gC$O6D66(5NVC
zUu(@XBvTOjBcfVr*tiCWQu5yDmr-RprY5^TF9K@&IMqKlBSv8&`jOq|rZ1mn+D?Y{
z`USF}??8|7$hoioP^(U#n23|My27NQ#{7s)JDet=_oHob;Lz2797ucN81Y%1c@N~>
zIL2$`D1gzs_7=AY-54#^QBvk5az8x&lSC@-n}2?9_?LefFe8;e>6&kXSQszbT>WMQ
zz;(yDd@O-$&IRbFFG_(idFruco0g)ZhmrchkuRkX4YE{eh2++z_G%?nu5t2Ztjyir
zi_$r{)dEt=!Yu6$-X1aMv>&|cC9xS~|1LN;r$RT+8>Ej+i
zyG_jH#9p2Av8eJ-hrtsItu?3X
zu1Joe=;&V0$Aa)n_&|CB=_o`H`>c8h+IUT=@+Z9CyT5my^j!L=-btX~^lD>Jz-foJ
z-wy9rI7*p)cEN%RMBl>LBSceZcx{O0Swu=Ls>98~mJpl}WV^=bz=W|RbxGrDP(34t
z7K`ktqjk&QM3rrpT|*LOEqJTGzX@Mv1Yrz3wNBk
zJ9_jU(h{cvp&JL|O*s-S+AINydx3L&3&_mEM=#EwfKlqSIFy_OU+B~TtoRX|!<(E@
zY;@ZBZJ*}+N?a-z2#$`|y?7hTrMchP9cZRKDj9Ip<*wfJk~LEIyg@tw$4J%EhdK-I
zKlMc^j|@(Z)F+?q2CFlB+Yze`cQz*Y6%(!5!aFXRC3`6)$a0cKA&!t8F%aOn86)Uy>2C7uuyh>p#_>gBhxE->}_fCpUY
z>fJnL$@^}uFt<(U`m!ymZ@if{p%5#jAU2mXTKa_IEH}|?y(iM|vPYFu=VF(O;=)`H
zubrDut!otKD$zz_aGF2LQFwt#Mi##)nzXi4Ta4#n?9`5C0aw^bR273U2G~i_Kb>Kz
z0=}^5n}WyH@Cgr_Yj+-l$LUbI=@18&RrPnvx|-bsA+$5gX3vE+z7EiAh1GqiwF^4U
z<5qkEE|8ta`2B7<|8#$*;QkI1PXiW%Wp1rC13C<7P&C$3RqzbCxS9qZ59v(
zPf`js81y0KrB^-x*^bH!-U1`E<|G&UJTl%sy`c6$_x-^}NxgnOqak)wxIT2>6}*az
zgY>N-EjR4mVPdLEc3~(~XjKi;;L7CODvJhjSfbJC!4~26O-ql#U8YOFcZ2`YRsKzv(zZ(3Ja?yZ4HJb@rHVoI
z@j#&C*CBk(#ig}WZBzA{-WSuWlpq%2mfD|e$s5Ky`bewpPs3klQBpM51p{zu@{QIP
zRvo&*C3N;4`5g+Wiv;_|{lR%l`@Nfwd0MgAR0o$=kYy?p>S)0{wOTXu($Ng)(Y_jLPH~}r$h7FO^gbKT+3{FRQ_+jD0Rj-~)@4-{Mysc=XXu1vzmm4rqx}c1;dPAFWw~
z(c82tlJi1a(&qy7ngb2db
zqNM5I$HZ!IVVWg3*i?P1qOmqQ+U?!Y9C*1eje(q>2hvmzc~?Qz(vUAX4f^!QhwwU3_
z8xKX~Q_B%@d1FstIBPMI
z3n8vERSc~{o|Cr8e9fheQ@zY$1{y?~t&8JCX%q;0wG`Lf`MIr@Ta)CD8Ul(hebxZi
zHb1B3K*67ZegMMvZ^|3nB-Rj7tbeOv37&$&05ww7}f?2N(i3Cyn#>T7oR8VoU5E
z)Rg&r8)87+4zC$d9Y_}R0b%>SGzbKFt*t+~jd7}s0DCzVZ`jZF_g8%@jAHxo_%iho|=ooiK}xZ;j&
zi~%SRgh5uYxHY!~&2)OTKV?g>>=TatX0Ls()$QxQs2%B`>0A~0o-fJZ&330%o++Y9@H6Xb&x^AX%vf01AwjU`@S4m8Am{A@ozN^F+gd-919BUv8fJ%RKeNau#X<;@(Q7^S%>
z!s?`H<1}VzP|!A-Vdg!Fb@zb$@QN?h_kBLA$Q$JB9w(QKUl~fY9d=zu-)z0=WM#!%
z)22U3!oI+uaUT%L3keNoR|skgv~-(kpFPPj%hseI{dWdr;^LJo@U<_ImH}T^2S-Dr
z@b=gGkC<``*3d~AnpE-V5ztKB>Y*Ea-}}RMF9Mn2iMUQb%MSUQFS$h=L0=>9p;dO1-*Y3qRZG!AZ1rMtrY=fOL7(D+yIyK
z%ZYn6>z4qnuYk7hN3{I@7n&Ogwne=Q!0(iIWUf@#tBm^SG%Y!j
zANtMRV)0wir8Fq?9rIY2ZQL|t@9mu;x3P&%)}N7V)(OqrE3Qz{63HAhIf#S6mTrhV
zSy=+@yVj4GwTD)&^LQ&^lSCDOCYY?i_|lL`tBnGVBB=)|_WlYq-v*49ZruJ66%nqq2@Z5cAxeydEUXJigf@R%MW
zmr7EczczLRx+^B;nbo3{gIpWXxDyYd2+)!KfDnc77cVF(?1z;VynB)P&+BWR{IDWN
zboq!T8p)0q|7lI;zO}rby}#4f?^=bK?BE9zA+ei5W==`l_X`3fqKf)oCq@xrxkO)f(k)zTtcyt1c)cpfx>8GJQMlbXNGi`54r%7*eC#cwtOLYVdV^nc_EzafiX*7)qAA?bqLS_7>b
zq5`<^`fAKm>_t}R7pT5(@`4m~nxKD;^
z&c5Ql)@&k&w+c51oc*t|LaPk{lp3k5w=qzx`=KH=TFzp9NQgS~h=tc~(XmFrbuZ$o)3)p{LcrPW&sH1Ke`A`j
zrgq>oLb+sJ&p3@kd7DqbLL9#Q{`Wi(No9W}TT!dY*72artq{tzhV+)NDb@$z;B{~*
z?=fsJ7qdW81uyCH6QR{~Cr)m_y(4H=dD=a8g)PF;py;B@&Hd0!EULI=3#d5>7pbX150wBaYAYbw`&(N4sE8cO
zN}6T7l4c#5$uT_CSNn)YR!ot2K@r-<*tX>_K}}=SukL$Xu`_Y)m2f({;Uz+ZX5
z8nksSkP7yM9l%S`y+?6~H_|F%p}{U0mTs3o#4~NRF%pQ72azRJ+9um5+y4%G(jsuY
zL41U0B{4ddS
zE6o8_t1dsZ!)R$$k-kB7UzyP+-ue;KHU4eB5?cvItb9={I^^~a7r;SLuBA)v4z~
z3IGNTV(Ti1zq%dD{?tR}C6rkEtb&CtvSRN6Rw{`$i`)vnkS=Sw1Nw^a26ni*```<=
zYR=4o2e#94X{LRBm061|hQIg4_8&cq$rXzY&7UR5hcSc^A~@yt;?z-6wPsJV>#M%;
z39a@sdStEkVOzOA+S*|tvu4cKCbxsm0!IiMaKhwwhlpgzu_pf~7a7Y)9)54ftI=K(
zIErdhvimd>+{2Nr_k!T1#Y~oe89QzGV;;#c*?tgsa=#rc85SDxf6z{4+d1dM-mrJ^
z#`E{KD}fER
zBwnQOxN>zp;X98A^k(NB*6m01k%IUnN|4sdxcz*S;FE@G390emX{~f1ORTIn*S>p!
zRms}4F;o8$6;4wg{BU3|
zbTTlIBkH`jYz9NSZCk&
zdU8WQOEWvj0wd=7I8t$ftfN>;K~fHI!Z31w*`FDk;!4JrHn~rT4=|$trNxGE8Lj3K
zYx3O+_~DxdKgt-&dhI|^sH_muA|?UD!;pSb{xkhtE!#;e(dUp5TxgI>Vww>LBIzu{KT0x>T?
z*0!Z*^#784iamf%yeKkx?7S=~-HN-B>E9|Ah#~wqgXv}DJga~91VG~c9G$%k3@HE5
zzUyW_#ome~cYqN3`rY?aXJkn=DYYul+xKq)the=nS*@S~&Oc91UIod?*nZ2&R!PJ^
z*&^ug2wQ~Qn;ppTr()4h1*4qUb|gt$b$_6Ruu{o1aBDk#BO5l6mai=)9)5~{ZE;$?
z4xe%XY$%W5N8PxQ(vMS50KdMkY=*4UlJW!JBk6LLB&!ymhOL8~?TI_V8}76)NFcxbPzrq-8DDOX2%KCi#l0S&SmyqT2Q!y|`HK49d*M$PIwL
zg_PSEq%lKwX33&NMdU4Cv#Z)p@9_Cn_dv6<3jrf{^L_yaw!nNCuDSfU=H=zSbV#>U
zG$n(npVC&Ey>@oMf^u{Sz}OE=$H)XTrJHfw%pqD*>_pX4Z8#u(tf_lWLKEt-9&@5jwfZ7
zhs^LD?ZRfH6X{Q>!rbet}=KHxJe^pY-Ez
zUD$Yc?*4PJS~c8Q|LC(L2HGtR)e_YE-tK$}9xocQNF_>DL<@!a82{5HZQF>m1cubb
z?ew_CxfU16^`2j|2j)IX(-9y<^kjJ@By_*wMH$q~JMn;l(i
ziB`%6p_MGTk{msFDbbhildY|MsO(7?j?FrwA{yemf=wtR-as^-;h>pQvOJs72DmQ3
zkshs+!Lt<2wZW{{n-6#v@4qp%v$9p9J&UbKFNd@=QPN{cLqsRG-Mc20qk_RY#kYBo
z+RdnoA3iDbi4k0OTC}^?1&xQHJf`&Pp4p4NBGKI!yie7TTAVLMP0{Tb15U-U*I`G^
z7;*kOinv~lyNP6t$l@uO{VBi8-RbLONa@y&L@s!`rultzOXYj>>t&2`>GQed#4hWh
z(yq$Z<0;GJ9m_{zgmc0RhZE0AD{5&xM;%uLQA3CbO&4RHJq#K=rKxhkeOyV)U`esn?Ne@9L{(Qm3asTbJ88RJ_%c
z*UN=h(UuuuJ|^A7ea2Ou}WinTwRBe`uo~+u7do_X$RN$Itm<-
z!6$B(7xdajkK1uQCD;=NzFDS4w&!capW$On1hWC
zB`iil79i{P$$5@YlGfkAp|X8~8a=MoM2p}167aX%FllySE3%7*9qNCWZ
z3Yg({l{v%Kygn40*wr1A$cE-?VUdXuy2J)wb{x#2(N=1*et9B2C^#|B`eWuM8B%@T
zZshyvzKN=E^WI^s-g-0+AD$dfx8AduPLnvMbvLmKt6w?7fa@9zO(YL$`w};i^IK(`
zxXio_Y^MoW*zI~EBeV2y+ApQnTf^jcy>H8AhZmBhAzHhKXH-rM*iU}VRMNNL(P8hTurW=%jgN|CKInUyZTvo8!>17QRybM-qtZQ{H$h@u#DK)83r85
zb@khaVPUckOE={<=nH*;mxEWIKD`^)`baeV;P2mu>DOkhbmV;=h%T}FICV(6iTYG2
zrVGw9K0I4n!n2sB_O_!lKNg!kQ!oDIvTmC
zXO=4R#kB8ZI|}uPgr^2GZPv#!+Fj#d?-gIkh*SJWDSYHBLzLf=|FRCeRfO!S{o9r6
zl~{j(Clro?O5tgH@V@B6JXBM$&eg=OGS`Y*+N2Z7o|Jp{z0=7S++;HnD!Y7wRgA%F
zI>kK%J>fkE43Y*b|LEi2X6$@GYszt2OX?`eu~<
zSv@vW_3iLCCC43DyF2R%3f&Ynyr_~pg{jBKsYQ$}6$F+)ZbEt|7mL1(gR6MCNOokmPzmySOh+}5|C3amtxm$_6Bym-*wTbLd6ILr?1
zWDM+eaZP@+(fM!+tqt)T*)@d}J~23a2fr>4T{KZ;qo=HmJ~)o^&ppmX4j|!&&@6-Z
zKYsA8X27*-DcU9=KI%1=OLvkF&JdrJccVk=zO^oC?HcECZmAqd+aW_D#~e{ddBXW_
zba^`V0ZyhVA)#9j29e`~tU=uw7C|RIFg^3&Zp4nHduhZRB5VF5vL{-1zPzeZBOa|^(aN!B`q}h7A>JhJXj7rtnX_E|9@U?#u9w(^TNRyLz_RN&
zyi1w>W|t>>DlpJgPa$kOm=fAPm6IJXsE$}3CVAKcZ_36hVJS>9a58#Z)uy(gBj$ta
z@5W5$S}saj%-<=&1QjpljwwTOyRbbMmv2QV%Ik3VD5)|u;3psJM=ze>GUehL=r=c<
z7@%T9uv8nLZ6~P~Hn7Wz1J|AqWmo_sEEKtXJOCCez`ny3iEA!p-Y+IKWneeUC&WBv
zA*QygSVsPPCPvu#1$x6
z$DhX%5M6L%-MZaYin20S^@s$8dtlIzG)s)&(*Dx0M6q%bCIa+bGoc
zBJ&W_a$^QYH%=b83NBhWX4MIHQ$C1@EL9P020SD;yPS*-ky=VVHajP`3FTSb7%oqe
zgLU-}Nr~fx4JF6ZB7Yffk#r=xixyUAY1@kHhT6>aH1nm3V`Wo~4az<3H1PCOmVt(y
z@GI8tANe6TFv#J?mcgC67Dlebz{5jVAC9a67qSL3X6Y=KIb&h(#0p8I!a;9+#KWKl
zd$*zdg9HQ>Cf+}Tic=6&s5x={Z+`!y1VvIYhM(k@Mxci%86p|Y~Dx51j%SQ$yY
)1;@6#1K;fWp*NRpO@>6W%CSAqy7efQ;qiLmwu(Y|<2@J?!|
z`^6?-(F&xSMK#a1mu#hFk5CZCChUEs?rxWL^g%ZILzgo?cj^9J+QF=f?pr+zk)t<9
z-)0P7vQ~E_esY+to_qJ8qIR^hvr0qY<2X4kL@2vanImt;A{%U0{$rlqDzLKxq5}oM
z(g+^BeB=o{d!J*b81ig78GL=SZD?D!BjLq-%p&IUC-<+BTYC*|xt8b^89%htB<%c(
zra$Y{$lNgTC@`^P2T=!Is5vjbvmVU9C5ruF1ixI9+Sw%8b1=ShmM%(g1b^*q$0%2L
zMm?mY7n%sQRc)0YshE!zk#p7EqFnH&?4L#?f2EF>u;GF{zBS|KKTrZ^jB*x3BcLgQ
z*wPy3covQhbyr9_xEKR}h|OhvZ^LQ4O_&aYAn4aKM+IhNA*qRbznPq}HPVsu;*JzD
z`$LoBCG1%Uu2;I^|Z1mM7>*9jUK)n39+$d6r|Z
zspRweiiub@#OLRL>HK=-H`ADw?f~N}XE^#2PIZk=WEnSj<*_hfGj2A2HPMJT;RR05
z;*kqppAejY{kF+c$y`orLt(CKt5amLc#*zQNx6b+t%k8(Ew(3ydUYC29>mPeH5f2X
zX3yNI)F$fMF1mGh9xEG|ujtMWJuE|V48L4`5gr*FjT<-);WSf1Qz)CX7fjK(
z5(|!;?l|iGkZ(lq({~z@u)1Mv>^gA6wFY^1@`5Kr`3{G7R#Tj074+Ya9S^}kE8(wXO5Eo$)yR$=kE=2Tn!98;WyQmjhw+Rcy4TsS3^5x{SD~s9+m7kbmmYaVX8s{#V
zhV44Qa60VnhB$(8x;DCieWTiy3*}cVN1~oZ-mEbwdAr%(M2?PKxF@!zvG(DKO%M0W
z!U=vL;>Jxis(03P{vl#!7i3<|N|e#VfKZA;ulAr&N8mGN-p9E6pS}(ySKiNPpPV?M
z7c$xw@;cCyFv8hntuX&0__DLZolCjpIn}o^sEt<$#s*sFo!?x~JMAtRVQO6(G6Ie$
zTgtmtJ~3!BU-g#*WsYt2%|mfZHw-UqczC8}19jsLvi9dF89nlJh5gv3LnaT0a&o&!
z)o0Qc-Sp2@pOws-Cn@KKc{_~-liG7Wf3h}UzWCYpmWXI>(4&)2+Ida3-H_N4pYzbc
zbjkgb$9K8r#tL+`)a2B&L;jxE_i{lP9Z(>?>#Na`dLvpI;y_dam!a?W);<8I#0a8h
zMpbu$SR4`jLryUopFnl&XMc|-3|7B+G$kF|EfwcTI%5cgU%>QqD&1|hzm1vu}e
zBx2E4C~>EoQnG9Jk~m)n|c
zr+iACgM>?j!psLpocI)9a5ZW;l8f}D4$1Gia?o62>Be%l9fc|K4c&P`4@n|j)(we=
zu~-*sIL;Ck7?u!3iFJ|}5=2grEnN%mL^JJ66>gdhRM+d|!=+S>T5`MpUBA28cW0;6
zi*89hKH2Dcqu$k|ZS?jJjt$P6MX?H$sfqFV;@7IVhGpWCa>3JEwi1jDG4EqGC{CcX
z6A%Q{?LllpP|p5Meh>gM_g&=u-AEwjLKafYy&L|t0qZtwhT-pcm2&JiyRl+H5H#ZN
z&$jP@JNqbV{C#J7oX*C-Kik6tyOKUM?O$`W`Y*5&TmJrx=Mn^d2f0)a{cF`${sr*J
zuHP)(%4e6r|Kp`qqR;gc8KLdyKh@~u4}5eXgcJvrm`%UG^G05Gh-9(7mx9<0rV
z)8^a%9<`^iwc<=8pRJDfGXU#kng|mH2DC4-^7ADDcbMzMPlt8-)KT_F1P
z-d&OY$aK(O1sfa|)3CZKw;3;Pe{bR+G{GKJ^$|}Rsn)zGdHdV#J<(unBApdT70bHh
z8&c;4jt9}w$*+%x93beUJhB2AC9v|{Q+2~D_p#tg+%OSnU@TDJc$;|P?KHzTu$(?Y
zUfEw_96z?}1O+nUEQ{~#qeYfT`V>s~DGSlnJ@ecE=G*$>j@4oQ*b7MG-ZaeWUf;fl
zr>^)GLzX-$Ofk^?P=$O0edNqk8K2+KcDd~~$(>gGyb_u=~F
z%Zpz)x(+Qn|G=8(&5Sq%6=#`N-3VxR)x6DM`)=h$yCFyFHZ$M%=k`qWg%82*Z;i9JuWb6G3Q1D_WwCs&yn<=g>TniH#u_|
vg0@#WrXT*At^YUW|8L6w_jmc{<#nm|P4tq=r(4#+e~NNyvbpE~@%;Y)Aw3~J
literal 0
HcmV?d00001
diff --git a/docs/analysis/MOOCCubeX_analysis/newplot(2).png b/docs/analysis/MOOCCubeX_analysis/newplot(2).png
new file mode 100644
index 0000000000000000000000000000000000000000..a690dfc995727fcdb0b9cc99b0d87ef4ab4f6144
GIT binary patch
literal 29454
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