Skip to content

Instantly share code, notes, and snippets.

@gatapia
Created April 13, 2018 02:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gatapia/eb841639416b1b8db81d8b4e2df896ca to your computer and use it in GitHub Desktop.
Save gatapia/eb841639416b1b8db81d8b4e2df896ca to your computer and use it in GitHub Desktop.
What is the optimal length of a machine learning proof of concept project
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import pml # from https://github.com/gatapia/py_ml_utils\n",
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# helper members\n",
"data_dir = '../data/'\n",
"score_fields = ['PublicScore', 'PrivateScore']\n",
"_cached_full_competitions_data = None\n",
"\n",
"def get_full_competitions_data():\n",
" global _cached_full_competitions_data\n",
"\n",
" if _cached_full_competitions_data is not None:\n",
" return _cached_full_competitions_data.copy()\n",
"\n",
" submissions = pml.read_df(data_dir + 'submissions.csv')\n",
" teams = pml.read_df(data_dir + 'teams.csv')\n",
" competitions = pml.read_df(data_dir + 'competitions.csv')\n",
" eval_algos = pml.read_df(data_dir + 'evaluationalgorithms.csv')\n",
"\n",
" d = submissions.\\\n",
" merge(teams, left_on='TeamId', right_on='Id').\\\n",
" merge(competitions, left_on='CompetitionId', right_on='Id').\\\n",
" merge(eval_algos, left_on='EvaluationAlgorithmId', right_on='Id')\n",
" d['DateSubmitted'] = pd.to_datetime(d.DateSubmitted)\n",
" for score_col in score_fields: d[score_col] = d[score_col].astype(np.float)\n",
"\n",
" _cached_full_competitions_data = d.copy()\n",
" return d\n",
"\n",
"\n",
"def get_valid_teams(\n",
" min_submissions=10,\n",
" min_participation_days=20,\n",
" scale_data=True,\n",
" flip_non_max_scores=True):\n",
" d = get_full_competitions_data()\n",
" teams = d.groupby('TeamId')\n",
"\n",
" team_submissions = teams.TeamId.count()\n",
" team_participation_duration = teams.DateSubmitted.agg(lambda d: d.max() - d.min())\n",
" team_first_date = teams.DateSubmitted.min()\n",
"\n",
" if flip_non_max_scores:\n",
" for score_col in score_fields: d.loc[~d.IsMax, score_col] = d[score_col][~d.IsMax] * -1\n",
"\n",
" d = d.merge(team_first_date.to_frame(), left_on='TeamId', right_index=True).\\\n",
" rename(columns={\n",
" 'DateSubmitted_y': 'FirstSubmission',\n",
" 'DateSubmitted_x': 'DateSubmitted'}).\\\n",
" merge(team_participation_duration.to_frame(), left_on='TeamId', right_index=True).\\\n",
" rename(columns={\n",
" 'DateSubmitted_y': 'ParticipationDuration',\n",
" 'DateSubmitted_x': 'DateSubmitted'})\n",
"\n",
" teams_w_min_submissions = team_submissions[team_submissions >= min_submissions].index\n",
" teams_w_min_participation = team_participation_duration[team_participation_duration.dt.days >= min_participation_days].index\n",
"\n",
" valid_teams = teams_w_min_submissions.intersection(teams_w_min_participation)\n",
" d = d[d.TeamId.isin(valid_teams)]\n",
"\n",
" if scale_data is not None:\n",
" scale_by_column = 'CompetitionId'\n",
" if isinstance(scale_data, str) and ':' in scale_data:\n",
" scale_data, scale_by_column = scale_data.split(':')\n",
" for score_col in score_fields:\n",
" if scale_data == 'normalise' or scale_data == True:\n",
" d[score_col] = d.groupby(scale_by_column)[score_col].apply(lambda x: (x-min(x))/(max(x)-min(x)))\n",
" if scale_data == '0-1':\n",
" d[score_col] = d.groupby(scale_by_column)[score_col].apply(lambda x: x.normalise())\n",
"\n",
" team_max_score = d.groupby('TeamId').PrivateScore.max()\n",
" d = d.merge(team_max_score.to_frame(), left_on='TeamId', right_index=True).\\\n",
" rename(columns={\n",
" 'PrivateScore_y': 'MaxPrivateScore',\n",
" 'PrivateScore_x': 'PrivateScore'})\n",
" print('get_valid_teams - competitions[%d] teams[%d]' % (len(d.CompetitionId.unique()), len(d.TeamId.unique())))\n",
" return d\n",
"\n",
"\n",
"def get_plot_data(valid_teams, n_days=5):\n",
" plot_data = None\n",
" for day_delta in range(0, n_days+1):\n",
" target_dates = valid_teams.FirstSubmission + pd.DateOffset(days=day_delta)\n",
" target_day_data = valid_teams[valid_teams.DateSubmitted <= target_dates]\n",
" day_df = target_day_data.groupby('TeamId').agg({\n",
" 'CompetitionId': 'first',\n",
" 'TeamId': 'first',\n",
" 'PrivateScore': 'last',\n",
" 'MaxPrivateScore': 'last',\n",
" 'ParticipationDuration': 'last'})\n",
" day_df['DayDelta'] = day_delta\n",
"\n",
" if plot_data is None: plot_data = day_df\n",
" else: plot_data = plot_data.append_bottom(day_df)\n",
" return plot_data.\\\n",
" sort_values(['TeamId', 'DayDelta']).\\\n",
" rename(columns={\n",
" 'CompetitionId': 'competition',\n",
" 'TeamId': 'team',\n",
" 'PrivateScore': 'score',\n",
" 'MaxPrivateScore': 'max_score',\n",
" 'ParticipationDuration': 'participation',\n",
" 'DayDelta': 'days'})"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\dev\\libs\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DtypeWarning: Columns (4,5,9) have mixed types. Specify dtype option on import or set low_memory=False.\n",
" \"\"\"Entry point for launching an IPython kernel.\n",
"C:\\dev\\libs\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DtypeWarning: Columns (4) have mixed types. Specify dtype option on import or set low_memory=False.\n",
" \"\"\"Entry point for launching an IPython kernel.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"get_valid_teams - competitions[253] teams[85970]\n"
]
}
],
"source": [
"all_data = get_valid_teams(0, 0, scale_data='0-1')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"get_valid_teams - competitions[94] teams[2701]\n"
]
}
],
"source": [
"plot_days = 50\n",
"X = get_valid_teams(min_submissions=plot_days, min_participation_days=plot_days, scale_data='0-1:TeamId')\n",
"X = get_plot_data(X, plot_days)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEKCAYAAAD+XoUoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl41eWd9/H3NzsEyELCGkJAA8qi\nIAGk2KlLdVBbtZ0uaG3V2jrtNXafeWprV/vMU2fmcTqdp7ZTq1SrVeu40hmmLlWsoiBhFzAQ9rBl\nhyxkO+f7/HEOGGMwB0xykt/5vK4rF+f8zn1Ovvflyefc3uf3u29zd0REJDEkxbsAERHpPwp9EZEE\notAXEUkgCn0RkQSi0BcRSSAKfRGRBKLQFxFJIAp9EZEEotAXEUkgKfEuoKu8vDwvKiqKdxkiIn3u\nWHuI+uZ2jjS30x4Ok5GSTPHoYaf1WmvWrKl29/ye2g240C8qKqK0tDTeZYiI9Lpw2NlW2cCzbx7m\nmQ37qa5qYmiycfmUUVw9axyXnD2KoWmnF8tmtieWdgMu9EVE+lJTawePr6ngha2HueDMPD5ZMoHc\nzLQ++V2NrR2s31vPmj11rNlbx7q9dTS0dGAG8yfl8sUPTubyGWPIHto3v787Cn0RSQiHjrRw/2u7\neXjVHo62dDA+ewivbK/mrue3ceXMsVx/fiHnFeZgZu94XjjsVNQdY1dNEzlDU5mUl8nwjNRuf0dV\nQyurd9fyxq7Iz1uHjhJ2MIOpo4fz0XPHMacwh4Vn5jEmK6M/uv0uCn0RCbQ39x/hvld38ccNBwi7\ns2jGGG6+YDJzJuZQdqiB36/aw5Nr9/PUuv2cPXYEnyopoKU9zPbDDWyvbKS8spFj7aF3vGb+8HQm\n5WUyOS+TwpFD2VvTzBu7a9lZ1QTAkNRkzpuYza0XF1MyMYdZhdmMOMkHRX+zgba0cklJiWtOX0RO\nV0t7iJU7a1heVsXL26rYVd1EZloyn5o7gc8vnMSE3KHvek5jawfPrN/PQyv3svXgUQBGj0hnyujh\nFI8aTvHoYUzOy6SuuZ1d1U3srGpkV3UTu6qbqGlqY0RGCnOLcpk3KfIzY3wWqcn9e3Kkma1x95Ie\n2yn0RWSgCIedV8ureax0H+WVjYzLHsK47AzGZw9lXHYGBTlDyBmaRmtHmJb2EC3tYVo6QrS2hzhQ\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1c354505390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mean_scores = X.groupby('days').score.mean()\n",
"ax = mean_scores.plot()\n",
"_ = ax.set_ylim([mean_scores[0], mean_scores[plot_days]])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEKCAYAAAD+XoUoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl8VPW9//HXJzuErCSEJWRBArIJ\nSAARreJWXFGrFnet1Vtvtdrl11qtdeviba+t3lZrqaJWq9brir1WEAVFkCXssskWIATITvZt5vP7\nYwaNEcwEZnJm+TwfjzyYOXNmzufo5D3ffOd7vl9RVYwxxkSGKKcLMMYY03Ms9I0xJoJY6BtjTASx\n0DfGmAhioW+MMRHEQt8YYyKIhb4xxkQQC31jjIkgFvrGGBNBYpwuoLOMjAzNy8tzugwTjuoPQG0p\npA+BhBSnqzGGpjYXNY1tHGxso83tJiEmmoKsPkf1WitXrqxQ1cyu9gu60M/Ly6OoqMjpMky4qdoJ\nT0yBoTNh5j+crsZEKLdb+aysjrmfHuCttXupKG+gd7Rw7rB+zBg3kDNH9KN33NHFsojs8mW/oAt9\nYwIiOg6Gnwvn/MrpSozDGlraeXVlCfM3HeCUoRlcXjiY9MS4gByrvqWdNbtrWLmrmpW7q1m9u5q6\n5nZEYHJ+OjefOoRzR/cntXdgjn84EmwTrhUWFqq19I0x/rb/YDPPLinmxWW7qG1uZ1BqL/bWNBEX\nE8X5YwZwzUk5nJiThoh86Xlut1JS3cTOygbSeseSn5FIUkLsYY9RXtfCiuIqlu/0/GzeX4tbQQSG\nZyVxYm4aE3LSmDo0g/4pCX49PxFZqaqFXe1nLX0T3hqr4P9+DGfdB2l5TldjHPDp3oM8/fFO3l5b\niluV6aP7c9MpQ5iQm8aW/XX8Y9kuXl+1lzdW72XEgGSuKMymuc3N1gN1bC2rZ1tZPU1tri+9ZmZS\nPPkZiQzJSCSnb292VzayvLiKHeUNAPSKjebE3FRuO6OAwtw0xuWkknyED4qeZi19E97e+j6seQn+\n4yPoP9rpakwPaG5zsXRHJQu3lPPhZ+XsrGggMS6aKyYO5jtT8xmc3vsrz6lvaeetNXt5YeluNu2r\nBSArOZ5hWUkU9EuiIKsPQzISqW5sY2dFAzvK69lZ0cDOigYqG1pJTohhYl46k/I9P6MHpRAb3bOD\nI62lb0zxx7D6BZh6pwV+iHC7lY+3VfBK0R62ldUzMLUXA1MTGJTam4GpCWSn9SKtdxwt7W6a21w0\nt7lpbnfR0uaitKaZDz8rZ+mOSlra3cTHRDHluL7cODWPGeMGkdLryC3tPvExXD05l6sm5bCrspG0\nxLiv3b+juuY2EuNiiIqSrncOAhb6Jjy1t8Dbd0JqLpz2M6erMV0oqW7kf4tKeHVlCXtrmkjtHcv4\nwansP9jMqt3V1DS2+fQ6+RmJXDkph9OHZ3LSkL4kxEZ3qw4RIS8jsVvPOVL/frCy0DfhaelfoHIr\nXPM6xH31z3njvIr6FhZuKefN1XtZvL0CgFOGZvDz847n7JFZxMd8Edj1Le3sq2mipKaJmsZW4mOi\n6RUbTXxsFAmx0STERJOWGMuAlF5OnU7IsNA34anwO9CnHww90+lKjJeqsnFfLR9sKuODLWWs2VOD\nKgxK7cUdZxZw2YRsstMO/wHdJz6GgqwkCrKSerjq8GOhb8KL2w3udkhIhnFXOV1NRHO5lc8O1LF6\ndw2rdlezeFsF+w42AzB2cCo/PGsYZxzfj1EDk78yTNIEjoW+CS9rXoBPnoDr3oKkLKeriSiqyifb\nK/l4WwWrd9ewtqSGxlbPUMf0xDgm5aXzw7P7MW14PzKT4h2uNnJZ6JvwUV8G834BWaM9XTumRzS3\nuZizppSnP97JlgN1xEQJIwcmc/mEbMbnpDE+J5Wc9N7Wmg8SPoW+iEwHHgOigadU9eFOj+cAzwGp\n3n3uUtV3RCQP2ARs8e66VFW/55/Sjenk3Z9DWxNc8KjnEkgTUBX1LbywdBcvLN1FRX0rx/dP4veX\nncAFJwykV1z3Rs2YntNl6ItINPA4cDZQAqwQkTmqurHDbr8AXlHVv4jISOAdIM/72HZVHeffso3p\nZOt8+PRVOO0uyBzmdDVhbU9VI08s3MZrq/bS2u7mjOP78d1T8plyXF9rzYcAX1r6k4BtqroDQERe\nBmYAHUNfgWTv7RSg1J9FGtOllc9A3wI49UdOVxK29lQ18ucPtvHaqhKiooTLJ2TznVPyOS7z6KYC\nNs7wJfQHAXs63C8BJnfa535gnojcDiQCZ3V4LF9EVgO1wC9UdVHnA4jILcAtADk5OT4Xb8znLn8O\n6kohxr4g9LfOYX/NSbncevpxZCX7d8Iw0zN8Cf3D/b3WecKeK4FnVfUREZkCPC8io4F9QI6qVorI\nBOBNERmlqrVfejHVWcAs8My90+2zMJGraif0SoVeaZBqDQZ/2lhayzOLd/LG6r0W9mHEl9AvAQZ3\nuJ/NV7tvbgKmA6jqJyKSAGSoahnQ4t2+UkS2A8MAm1HNHDu3C167Cdqa4dbF9uWtH7S2u3l3w36e\n/6SYFcXVJMRGcfXkHG49fajfpwI2zvAl9FcABSKSD+wFZgKdr3rZDZwJPCsiI4AEoFxEMoEqVXWJ\nyBCgANjht+pNZFvxFOxdCZc+ZYF/jA7UNvPist28uHw35XUt5KT35hfnj+DyCYNJ6R1ac8uYr9dl\n6Ktqu4jcBszFMxxztqpuEJEHgSJVnQP8GPibiPwQT9fPDaqqIvIN4EERaQdcwPdUtSpgZ2Mix8G9\n8P6DcNwZMOYyp6sJKa3tbjbtq2XNnhrW7qlhzZ4adlQ0IAKnD8vkuil5nDYsM2RmjTTdY/Ppm9D0\n8tWw7X34z08gPd/paoJebXMbb63ey5trSllfcpBWlxvwLAYybnAq4wancv6YAd2eYdIED5tP34Sv\ntibP/Dqn32WB/zVUldV7anhp2W7eXldKc5ubEQOSuWFq3udBPyAlwcbWRxgLfRN6YnvBlS9DkP2V\nGgxUle3lDSzaWs4/V+xh8/46EuOiuWR8NldNymFMdorTJRqHWeib0FL0DAw5DdKHhP2Xt63tbpbv\nrGL+pgNsLatjQEovstN6MTitN4PTezM4vReJ8TGsLznIql3VrNpdzardNRxs8iw4ckJ2Cr+9dAwX\njh1In3j7VTce9k4woaNkJfzrhzD5e3Duw13vH4JqGltZuKWc9zYd4KMt5dS1tBMfE8Xw/klsL6vg\nQF3zEf/AGZbVh3NH9+fEnDQm5KXZlbLmsCz0TWhwtcHbd0DSAJh2t9PV+N3aPTU8sXAb8zeV4XIr\nGX3iOf+EAZw5IotThmZ8PoFZS7uLvdVN7KluoqS6kYNNbYwamMK4wak+r+lqIpuFvgkNS5+AA+vh\n2y94FkgJA6rK4m2V/OXDbSzeVklyQgw3nzqE6aP7c8KglMMOmYyPiWZIZh+GWCveHCULfRP8qoth\nwW9h+Pkw4kKnqzlmbrcyb+N+/rJwO2tLDtIvKZ67zzueqybnWt+7CTh7h5ng1yvds+btlP90upJj\noqrM23iAP8z7jC0H6sjt25vfXDKGS08cREKszT9veoaFvgl+Cckw/TdOV3HUVJVFWyt4ZN4W1pYc\nZEhGIo/NHMf5YwYQEx3ldHkmwljom+DVWAWvXAfnPAQDxztdzVEpKq7i93O3sGxnFYNSe/G7b53A\npScOsrA3jrHQN8Fr/n2wawlIaHV9uN3Kh1vLmf3xThZtrSCjTzwPXDSKmZMGEx8TWudiwo+FvglO\nu5bAqr/DybfDgBOcrsYnja3tvL5qL88s3sn28gaykuO569zjuW5KLr3j7FfNBAd7J5rg097iGZOf\nmgOn/9zparq072ATf/9kFy8u283BpjZOyE7hsZnjOHf0AOJirBvHBBcLfRN8Vv0dKj6Dq1+DuOCc\n9VFVKdpVzbOLi3l3w35Ulemj+/OdqflMyE2zScxM0LLQN8Fnwo2Qkg0FZ3W9bw9rbnMxZ20pzy4u\nZuO+WlJ6xfLdU/K55qRcBqf3dro8Y7pkoW+Chyq01EJCCgw/1+lqAGh3udlR0cCG0oOs3XOQOWtL\nqWpoZXhWEr+9dAwXjxv0+RQJxoQCC30TPNb8A+bfDzfN88yi6YD6lnbmbdjPqt3VfLq3ls37a2lu\n8yw4Eh8TxWnDMrlhah5ThvS1LhwTkiz0TXCoL4e590C/EZCa16OHVlVWFFfzStEe3lm/j8ZWF0nx\nMYwcmMzVk3MZNTCZ0YNSGJKRaOPrTciz0DfBYe7d0NoAFz4GUT0TrPsONvH6qr38b9EeiisbSYyL\n5qKxA7m8MJvxg9NsjVgTliz0jfO2fwDrX4Fv/BQyhwf0ULXNbbz76X7eWrOXJdsrUYXJ+encdkYB\n543pb+PpTdizd7hx3uZ3oO9QOPXHAXn51nY3H35Wzpur9zJ/0wFa2t3kpPfm9mlDufTEbFsM3EQU\nC33jvPN+75lnJzbBry/b2NrOc0t28bdFO6hqaKVvYhwzJw5mxvhBjB+cal/EmohkoW+cU7EVJAr6\nHgeJff32si3tLl5atps/L9hORX0Lpw/P5PopeZxSkEGsfRFrIpyFvnGG2w1v3gq1++CONRB97Ev9\ntbvcvLaqhP95fxt7a5qYnJ/Ok9ecSGFeuh8KNiY8WOgbZxQ9DSUr4JJZxxT4Le0uVu6q5uOtFbyz\nfh/FlY2MzU7h4W+N4ZShGdaFY0wnFvqm59WWwvsPwpBpcMIV3X761gN1fLS1gkVby1m2o4qmNhcx\nUcKJuWncfd4Izh6ZZWFvzBFY6Jue9++fgqsVLvgDdCOci4qreGTeZ3yyoxKAIRmJXFGYzakFmZx0\nXF9bX9YYH9hvielZrnZIGuiZMtnHqRbWldTwyLzP+PCzcjL6xHHPeSM4d0x/stNsgjNjustC3/Ss\n6Bg473c+7bppXy1/eO8z3tt4gNTesbYgiTF+4NNvj4hMBx4DooGnVPXhTo/nAM8Bqd597lLVd7yP\n/Ry4CXABP1DVuf4r34SUJX+GQRMgd8rX7nagtpn/+vdmXl+9l6SEGH509jBunJpHUsKxj/AxJtJ1\nGfoiEg08DpwNlAArRGSOqm7ssNsvgFdU9S8iMhJ4B8jz3p4JjAIGAvNFZJiquvx9IibI7V0F793r\nmSv/CKHf3Obi6Y938viCbbS7lO+ddhy3nnYcKb0t7I3xF19a+pOAbaq6A0BEXgZmAB1DX4Fk7+0U\noNR7ewbwsqq2ADtFZJv39T7xQ+0mVLja4e0fQGI/OOu+rzysqrz76X5+/c4mSqqb+OaoLO45byQ5\nfa3P3hh/8yX0BwF7OtwvASZ32ud+YJ6I3A4kAoeWPBoELO303EFHVakJXcv+AvvXwxV/9yyQ0kFx\nRQN3vb6OpTuqOL5/Ei9+dzInD81wqFBjwp8voX+4MXXa6f6VwLOq+oiITAGeF5HRPj4XEbkFuAUg\nJyfHh5JMyKjZAwt+A8POhREXfemh4ooGvj3rE5rb3Dx08WiunDjY5qs3JsB8Cf0SYHCH+9l80X1z\nyE3AdABV/UREEoAMH5+Lqs4CZgEUFhZ+5UPBhLCkATDtHhg540tj8kuqG7n6qWW0trt55T+mMLx/\nkoNFGhM5fGlWrQAKRCRfROLwfDE7p9M+u4EzAURkBJAAlHv3myki8SKSDxQAy/1VvAlyqp4hmiff\nBqlffPbvO9jElX9bSl1zG8/fNNkC35ge1GXoq2o7cBswF9iEZ5TOBhF5UEQO/b3+Y+BmEVkLvATc\noB4bgFfwfOn7LvB9G7kTIZqq4clTYOv8L20uq23mqr8to6bBE/ijB6Uc4QWMMYHg0zh975j7dzpt\n+2WH2xuBqUd47q+BXx9DjcZhLrdSWd/C/tpm9h9s5kBtM/trm0lKiKUwN43Rg1JIiI3+8pPm3w9l\nGyHxiy9lK+pbuOqpZRyobeb5myYxdnBqz56IMcauyDVHtnZPDQ+8vYG1JQdxub/8VUt0lHy+LS46\nihOyU5iQl8bE3HSOb9tA9spnqTzhZvaTj7vkIK0uN/e8sZ6S6kaevXESE3JtumNjnCCqwfW9aWFh\noRYVFTldRkQ72NTGf8/dwgvLdpHZJ55vTchmYEoCWckJ9E9JoH9yAn37xFPT2MrKXdUU7apmRXEV\nn+49CK42/i/u5/SWFs5p+R2NfLEaVlxMFLOvn8gpBTYk0xh/E5GVqlrY1X7W0jefU1XmrC3loX9t\noqqhheun5PHjc4YdcfqDvn3iOWdUf84Z1R/wXFFb8tHfGbpoL8umPMl/DzyZKBGixPOXwXGZfWw9\nWmMcZqFvANhZ0cC9b37Kx9sqOCE7hWdvnNjtL1kTYqMZesYNMGwUkwdPCkyhxphjYqFvWLqjkpue\nXUGUCA/NGMVVk3OJjurmIiSqULsXUrLBAt+YoGWXP0a4Dz8r5/rZyxmY2ot5P/oG107J637gA6x9\nCf40Afat83+Rxhi/sZZ+BJu3YT+3vbiaof368PxNk+jbJ/7oXqihAubeAwPGQdZo/xZpjPErC/0I\nNWdtKT/85xrGDErhuRsnHdv0xXPvgZY6uPBRiLI/Ho0JZvYbGoFeKdrDHS+vpjA3jRe+O/nYAn/7\nAlj3Mky9A/qN8F+RxpiAsJZ+BFFVnltSzP1vb+TUggxmXVtIr7jorp/4dfatgb4F8I2f+KdIY0xA\nWehHiD1Vjdz71qcs3FLO2SOz+PNV44mPOcbABzjlhzD5exDb69hfyxgTcBb6Ya7N5ebpj3fy6PzP\niBbh3gtGcv2U3GOft75ss2dStdwpFvjGhBAL/TC2clc197yxns376zhnZBb3XzSKgal+CGi327P8\nYeV2uHM9xNmyhsaECgv9MFRW18xj87fy4vLd9E9OYNa1Ez6fKsEvVj4De5bBxU9a4BsTYiz0w0hF\nfQt//XA7zy/dRZtLufHkfH50zjD6xPvxf3Pdfpj/AOSfBmNn+u91jTE9wkI/DFQ1tDLrox08t6SY\nlnYXF48bxO1nFpAfiMnN/v0zaG+GC/74peUPjTGhwUI/hO2saOB/i/bw3JJiGttcXDR2ID84s4Dj\nMvsE5oCqkD3R89P3uMAcwxgTUBb6IWZ7eT3vrNvH/63fx+b9dYjA+WMGcMeZBRRkBXitWRHPerfG\nmJBloR8CGlvbeXrRTv61bh9bDtQBMCE3jXsvGMm5o/v7Z0ROVz78PaTnw5jLAn8sY0zAWOgHueY2\nF999rogl2yuZmJfGfReO5NzRA+ifktD1k/2ldDUs/A2ceL2FvjEhzkI/iLW0u/jeCyv5ZEclf/z2\nWC4Zn93zRbja4e07IDETzrq/549vjPErC/0g1eZyc9uLq1m4pZyHLx3jTOADLP8r7FsLlz0DvVKd\nqcEY4zc2y2YQane5ufOfa3hv4wEeuGgUMyflOFNIfTl88Gso+CaMusSZGowxfmUt/SDjdis/fXUd\n/7duH/ecN4LrT85zrpjEDLjkLzBwvI3JNyZMWOgHEVXlnjfX8/rqvfz47GHc/I0hzhXT3goxcTBy\nhnM1GGP8zrp3gsSuygaufXo5Ly3fw23ThnL7mQXOFdNUA38uhDUvOVeDMSYgrKXvsNZ2N39btIP/\neX8rcdFRPHTxaK6Z7FAf/iHvPwAH90C/452twxjjdxb6Dlq5q4q7X/+ULQfqOHd0f+6/aBRZyT04\n/v5wdi+Dotlw0n96+vKNMWHFQt8B9S3t/PadTfxj2W4GpiTw1HWFnDUyy+myPP34b98Bydkw7R6n\nqzHGBICFfg9rd7n53vMrWbK9gu9MzefH5wwj0Z9THx+L4kVQvhmufAniAzRpmzHGUT6ljYhMBx4D\nooGnVPXhTo//EZjmvdsb6Keqqd7HXMB672O7VfUifxQeqh7+92Y+3lbBf31rDN+e6HDffWdDz4Tb\nV9oMmsaEsS5DX0SigceBs4ESYIWIzFHVjYf2UdUfdtj/dqBjZ3CTqo7zX8mh6/VVJTz18U6um5Ib\nXIGvCgc+hf5jLPCNCXO+DNmcBGxT1R2q2gq8DHzd4O0rARvr18m6khruen09k/PTufeCkU6X82Xr\n/glPngI7FzldiTEmwHwJ/UHAng73S7zbvkJEcoF84IMOmxNEpEhElorIxUddaQgrr2vhP55fSWaf\neJ64+kRio4Po8oiGSph7N2RPgtypTldjjAkwX/r0D3f9vR5h35nAq6rq6rAtR1VLRWQI8IGIrFfV\n7V86gMgtwC0AOTlB1O3hB63tbm59YSXVja28duvJ9O0T73RJX/bevdB8EC58DKKC6MPIGBMQvvyW\nlwCDO9zPBkqPsO9MOnXtqGqp998dwEK+3N9/aJ9ZqlqoqoWZmZk+lBQ67puzgaJd1fz+srGMGpji\ndDlftuNDWPMPOPkHkBVkXU7GmIDwpaW/AigQkXxgL55gv6rzTiIyHEgDPumwLQ1oVNUWEckApgK/\n80fhwcrlVrbsr6NoVxWLt1Uwd8MBbj39OC4cO9Dp0r6qthSyxsBpP3W6EmNMD+ky9FW1XURuA+bi\nGbI5W1U3iMiDQJGqzvHueiXwsqp27PoZAfxVRNx4/qp4uOOon3Cxp6qRt9bsZUVxNat2VVPX0g5A\nVnI8N5ycx0/OGe5whUcw7ko44QqIina6EmNMD5EvZ7TzCgsLtaioyOkyfLa7spHLnlxCWV0Lw7L6\nUJiXzsS8NApz08lO64UE45TEZZth/3rP0ofBWJ8xpttEZKWqFna1X5BcChqayuqauXb2Mlra3bx7\n56kc3z/Z6ZK65nZ7plqo2AIFZ0GvNKcrMsb0IAv9o3SwqY3rZ6+grLaFF747OTQCH2DVc7BnKcx4\n3ALfmAhkY/SOQnObi5ufK2LrgTr+cs2JTMgNkfCs2w/v3Qd5p8K4q52uxhjjAGvpd1O7y81tL65i\nxa4qHv32OE4f3s/pknz37l3Q3gwXPGp9+cZEKAv9bnC7lZ+9tp75m8p4cMYoZow77IXJwWvUpZBz\nMmQMdboSY4xDLPS74ZH3tvDaqhLuPKuA66bkOV1O942M6AlOjTFYn77PVu2u5omF27l8QjZ3OLl+\n7dF4/yFY9IhnNk1jTESz0PdBS7uLn726jgHJCfzywpHBOfb+SPathY//CNW7rB/fGGPdO754fMF2\ntpbV88wNE0lKiHW6HN+5XZ4x+b37wtkPOF2NMSYIWOh3YdO+Wp5YsI1Lxg9i2vEhNFIHYPksKF0N\nl822MfnGGMC6d75Wu8vNz15bR0qv2OBb+KQrzbWw4Dcw9GzPqB1jjMFa+l9r9uKdrCs5yJ+vGk96\nYpzT5XRPQjJc9yYkZlpfvjHmcxb6R1Bc0cAj8z7j7JFZnD9mgNPldE/zQUhIgUETnK7EGBNkrHvn\nMDwXYa0jLiaKX108OrRG6zQfhMdP8ozYMcaYTiz0D+OlFbtZtrOKX5w/gqzkBKfL6Z73H4T6/ZD/\nDacrMcYEIQv9TprbXDwy7zNOGpLOFYWDu35CMNmzHFY8DZNusa4dY8xhWeh3MmdtKVUNrfzgjILQ\n6tZxtXnG5CcPhDN+4XQ1xpggZV/kdqCqPLO4mOFZSUw5rq/T5XTP/nWeq26/9TeIT3K6GmNMkLLQ\n72D5zio27avlt5eOCa1WPni6c+5YC30yna7EGBPErHung2cWF5PaO5aLQ2nKZFXY9r7nXwt8Y0wX\nLPS99lQ1Mm/jfq6clEOvuGiny/Hd+v+FFy6Fzf9yuhJjTAiw0Pd6YekuRIRrT8p1uhTfNVZ5VsMa\nVAjDz3O6GmNMCLDQBxpb23lp+W6mj+rPwNReTpfju3n3ei7GuvAxiAqhv06MMY6x0AdeX7WX2uZ2\nbpia53Qpvtu5CNa8AFNug/6jna7GGBMiIj70VZVnlxQzelAyhbkhNP2wq9Wz3u1pP3O6EmNMCIn4\nIZsfb6tgW1k9j1w+NrSGaQ490/NjjDHdEPEt/WcXF5PRJ44LxobITJrlW+Cj/4b2VqcrMcaEoIgO\n/eKKBj7YUsZVk3OJjwmBL0Ldbnj7TljyJ88XuMYY000R3b3z7JJiYqKEaybnOF2Kb1Y/D7uXwEV/\ntguxjDFHJWJb+m0uN6+vKuHc0QPoFwrTJ9eXwXv3Qu4pMP4ap6sxxoQon0JfRKaLyBYR2SYidx3m\n8T+KyBrvz2ciUtPhsetFZKv353p/Fn8sVu2qpra5nfPG9He6FN/MvRvamuDCR235Q2PMUeuye0dE\nooHHgbOBEmCFiMxR1Y2H9lHVH3bY/3ZgvPd2OnAfUAgosNL73Gq/nsVRWLClnJgoYerQDKdL8c1J\nt3oWRskocLoSY0wI86WlPwnYpqo7VLUVeBmY8TX7Xwm85L39TeA9Va3yBv17wPRjKdhfFm4pY2Je\nOkkJsU6X8vVUPf8OmgAnXudsLcaYkOdL6A8C9nS4X+Ld9hUikgvkAx9057kicouIFIlIUXl5uS91\nH5PSmiY2769j2vEh8GXo/Ps9i6O43U5XYowJA76E/uE6kPUI+84EXlVVV3eeq6qzVLVQVQszMwMf\nxAu3eD5Ypg3vF/BjHZN96zzDM90uiIrY79yNMX7kS5KUAB0Xi80GSo+w70y+6Nrp7nN7zAebyxiU\n2ouh/fo4XcqRuV2eFn7vdDj7QaerMcaECV9CfwVQICL5IhKHJ9jndN5JRIYDacAnHTbPBc4RkTQR\nSQPO8W5zTEu7i8XbKjjj+H7BPe3CiqegdBVMf9gT/MYY4wddjt5R1XYRuQ1PWEcDs1V1g4g8CBSp\n6qEPgCuBl1VVOzy3SkQewvPBAfCgqlb59xS6Z/nOKpraXMHdn9/eAov+AMedCaO/5XQ1xpgw4tMV\nuar6DvBOp22/7HT//iM8dzYw+yjr87sFm8uJi4liypAgHqoZEw/ffQ8QG5NvjPGriJuGYeGWMqYM\n6Ru8SyLWlkLSAEgNkakhjDEhJaKGhBRXNLCjooFpw4O0a6e5Fv52pmcJRGOMCYCICv2FW8oAOD1Y\nh2p+8Cuo2wdjrnC6EmNMmIqo0F+wpZwhGYnkZSQ6XcpXlRTB8lkw6WbInuB0NcaYMBUxod/U6uKT\nHZXB2cp3tXnG5CcNgDPudboaY0wYi5gvcj/ZUUFruzs4h2pWF0NjJZz3e0hIdroaY0wYi5jQX7C5\nnN5x0UzKD8ILnTIK4PaVEBcjkxJkAAAPHElEQVSE3U7GmLASEd07qsqCLWVMHZoRXMsiqsK6Vzzr\n3VrgG2N6QESE/rayekqqm4JvgrVPX4PXb4b1rzhdiTEmQkRE6C/4fKhmEPXnN1Z5xuMPPBHGXul0\nNcaYCBERffoLNpdzfP8kBqb2crqUL8y/zxP8174BUUHU5WSMCWth39J3uZWiXVWcWhBEc+0UL4ZV\nf4cp34f+Y5yuxhgTQcI+9KsaWmlzKYPTeztdyhfi+8DxF8DpNt2CMaZnhX33TkV9CwAZfeIdrqSD\nAWNh5j+crsIYE4HCvqUfVKFfsRXevhOaqp2uxBgToSIm9Pv2iXO2EFVP4G943TPtgjHGOCD8u3fq\nWoEgaOmvfgF2fQwXPgZ9gux6AWNMxAj/ln5DC3HRUSQnOPj5Vl8O834BOSfD+Oucq8MYE/HCP/Tr\nWsnoE+fsIujv3w+tDXDhoxAV9v/JjTFBLPy7d+pbyEhyuGvntLtgyDTIHO5sHcaYiBcRoZ+VnODM\nwV1tEBUDqYM9P8YY47Cw72uoqG+hb6JDI3c++BW8cKlnFk1jjAkCYR36qkplfasz3Tv7P4Ulf4Kk\ngRDj8HBRY4zxCuvQP9jURrtbe364ptvlWf6wVyqc81DPHtsYY75GWPfpf3E1bg+3tItmw94iuGQW\n9A7ClbqMMRErrFv65d4LszJ7sqXvdsHyv3lG65xwRc8d1xhjfBARLf2+PRn6UdHw3fmecflOXhtg\njDGHEdYt/R7v3qnY6hmpk5AMyQN65pjGGNMNYR36lfWtREcJab17IPRb6uDvM+CNWwJ/LGOMOUo+\nhb6ITBeRLSKyTUQOu/KHiFwhIhtFZIOIvNhhu0tE1nh/5vircF9U1LeQnhhHVFQPdLN88GuoLYWT\nvh/4YxljzFHqsk9fRKKBx4GzgRJghYjMUdWNHfYpAH4OTFXVahHpOI1kk6qO83PdPqmob+mZ4Zp7\nV8KyJ2HiTTB4YuCPZ4wxR8mXlv4kYJuq7lDVVuBlYEanfW4GHlfVagBVLfNvmUenvL418P35rnbP\nmPw+WXDmLwN7LGOMOUa+hP4gYE+H+yXebR0NA4aJyGIRWSoi0zs8liAiRd7tFx9jvd1SUdcDLf0G\n7+fbeb+DhJTAHssYY46RL0M2D9chrod5nQLgdCAbWCQio1W1BshR1VIRGQJ8ICLrVXX7lw4gcgtw\nC0BOTk43T+HwVJXKhpbAt/STB8ItH4KE9Xfixpgw4UtSlQAdp4jMBkoPs89bqtqmqjuBLXg+BFDV\nUu+/O4CFwPjOB1DVWapaqKqFmZmZ3T6Jw2loddHc5g5cS18Vlj7pWe82KtrG5BtjQoIvob8CKBCR\nfBGJA2YCnUfhvAlMAxCRDDzdPTtEJE1E4jtsnwpspAdU1AV4QfQNr8O7P4P1rwbm9Y0xJgC67N5R\n1XYRuQ2YC0QDs1V1g4g8CBSp6hzvY+eIyEbABfw/Va0UkZOBv4qIG88HzMMdR/0E0ucXZgVihs2m\navj3XTBwPBR+x/+vb4wxAeLTNAyq+g7wTqdtv+xwW4EfeX867rMEGHPsZXbf51MwBGIu/fn3Q2Ml\nXPOqp2vHGGNCRNh++1hR751szd8t/V2fwMpn4aRbYcBY/762McYEWBiHvqeln+7vln5KNpx4HUy7\n27+va4wxPSBsZ9msqG8hrXcssdF+/lxLHQwX/cm/r2mMMT0kfFv6da3+HblTsQ1e/DYcLPHfaxpj\nTA8L65Z+X39dmKUK/7oT9q+DqFj/vKYxxjggbFv6lQ1+bOmveRGKF8FZD0BSln9e0xhjHBC2oe+3\neXcaKmDePTD4JDjx+mN/PWOMcVBYhn5zm4u6lnb/DNf86PfQUg8XPgZRYfmfyxgTQcKyT9+vyyRO\nuweOOwP6HX/sr2WMMQ4L09D3XJh1TN07bc2emTMTkmHYN/1UmTHGOCss+ysqD03BcCyh/+F/wazT\noLXBT1UZY4zzwjL0j7l758AGWPI/ngnV4hL9WJkxxjgrTEP/GLp33G54+07PKljn/MrPlRljjLPC\nsk+/vK6FpPgYEmKPYgbMlbOhZDlc8lfone7/4owxxkFh2tJvObp59FVhw5uQfxqc8G3/F2aMMQ4L\ny5Z+RX3L0c2jLwLXvgnNB235Q2NMWArLln5l/VFMwVC6xrMiVnQMJPYNTGHGGOOwsAx9T/dON1r6\nLfXw8tXwik2zYIwJb2HXvdPmclPd2Na9lv6CX0NtCVw2O3CFGWNMEAi7ln5VQzeHa5auhmVPehY4\nz5kcwMqMMcZ5YRf65XWHLszyIfRd7TDnB5CYCWfeF+DKjDHGeWHXvVP5eUvfhz791jpIHgin/gh6\npQa4MmOMcV7YhX5Fd1r6vdLgypcDXJExxgSPsOve+Xzena+7OEsVFvwWqnZ4xuPbmHxjTIQIy9BP\niI0iMe5rpmDY8AZ8+DBs+XfPFWaMMUEgDEPfc2GWHKn13lQD794FA8bCpP/o2eKMMcZh4denX9/y\n9fPov/8ANJTDVa94rr41xpgIEpYt/cwjjdzZsxyKZsPkW2HguJ4tzBhjgkAYhn7LkUfuZB4Pp/4E\npt3ds0UZY0yQCKv+DbdbqWo4wmRrqp71bs+8t+cLM8aYIOFTS19EpovIFhHZJiJ3HWGfK0Rko4hs\nEJEXO2y/XkS2en8COqNZdWMrLrd+9cKsyu0w63Q4sDGQhzfGmKDXZUtfRKKBx4GzgRJghYjMUdWN\nHfYpAH4OTFXVahHp592eDtwHFAIKrPQ+t9r/p9LhatyOY/RV4V93QtVOWwnLGBPxfGnpTwK2qeoO\nVW0FXgZmdNrnZuDxQ2GuqmXe7d8E3lPVKu9j7wHT/VP6Vx26GrdvYofQX/sy7PwIzroPkvoH6tDG\nGBMSfAn9QcCeDvdLvNs6GgYME5HFIrJURKZ347l+U+69Gjfz0Fz6DZUw924YPBkm3BiowxpjTMjw\n5Yvcw13lpId5nQLgdCAbWCQio318LiJyC3ALQE5Ojg8lHV5FfadplZf/FVpq4YJHISrsBioZY0y3\n+ZKEJcDgDvezgdLD7POWqrap6k5gC54PAV+ei6rOUtVCVS3MzMzsTv1fUlHfQmy0kNIr1rPhGz+F\n6/8FWSOP+jWNMSac+BL6K4ACEckXkThgJjCn0z5vAtMARCQDT3fPDmAucI6IpIlIGnCOd1tAVNa3\n0DcxHmlvhsYqzxW3uVMCdThjjAk5XYa+qrYDt+EJ603AK6q6QUQeFJGLvLvNBSpFZCOwAPh/qlqp\nqlXAQ3g+OFYAD3q3BURFfSt9+8TBR/8Nj0/2BL8xxpjP+XRxlqq+A7zTadsvO9xW4Efen87PnQ30\nyOKzFfUtjI3bB4sfhdGX2RBNY4zpJKyuyK2sbeLm6McgPhm++WunyzHGmKATNqGvqpzR9C750Z/C\njCcgMcPpkowxJuiEzTjGupZ2xrGZ0rSJMO4qp8sxxpigJJ7u+OAhIuXArmN4iQygwk/lhIpIO+dI\nO1+wc44Ux3LOuara5Zj3oAv9YyUiRapa6HQdPSnSzjnSzhfsnCNFT5xz2HTvGGOM6ZqFvjHGRJBw\nDP1ZThfggEg750g7X7BzjhQBP+ew69M3xhhzZOHY0jfGGHMEYRP6vizpGOpEZLaIlInIpx22pYvI\ne97lKN/zTmwXNkRksIgsEJFN3qU47/BuD9vzFpEEEVkuImu95/yAd3u+iCzznvM/vRMghg0RiRaR\n1SLyL+/9sD5fABEpFpH1IrJGRIq82wL63g6L0O+wpOO5wEjgShEJx/mUn+WrK4/dBbyvqgXA+977\n4aQd+LGqjgBOAr7v/X8bzufdApyhqmOBccB0ETkJ+C/gj95zrgZucrDGQLgDz6SOh4T7+R4yTVXH\ndRiqGdD3dliEPr4t6RjyVPUjoPPUoTOA57y3nwMu7tGiAkxV96nqKu/tOjyhMIgwPm/1qPfejfX+\nKHAG8Kp3e1ids4hkA+cDT3nvC2F8vl0I6Hs7XEK/R5dlDDJZqroPPAEJ9HO4noARkTxgPLCMMD9v\nb1fHGqAMz9rS24Ea71TnEH7v8UeBnwJu7/2+hPf5HqLAPBFZ6V1BEAL83g6XCdd8WpbRhC4R6QO8\nBtypqrWehmD4UlUXME5EUoE3gBGH261nqwoMEbkAKFPVlSJy+qHNh9k1LM63k6mqWioi/YD3RGRz\noA8YLi19n5ZlDFMHRGQAgPffMofr8TsRicUT+P9Q1de9m8P+vAFUtQZYiOf7jFQROdRQC6f3+FTg\nIhEpxtM1ewaeln+4nu/nVLXU+28Zng/3SQT4vR0uoe/Lko7hag5wvff29cBbDtbid96+3aeBTar6\nhw4Phe15i0imt4WPiPQCzsLzXcYC4DLvbmFzzqr6c1XNVtU8PL+7H6jq1YTp+R4iIokiknToNp7l\nZD8lwO/tsLk4S0TOw9M6iAZmq2rYraIiIi8Bp+OZie8AcB+e9YlfAXKA3cDlgVySsqeJyCnAImA9\nX/T33o2nXz8sz1tETsDzBV40nobZK6r6oIgMwdMSTgdWA9eoaotzlfqft3vnJ6p6Qbifr/f83vDe\njQFeVNVfi0hfAvjeDpvQN8YY07Vw6d4xxhjjAwt9Y4yJIBb6xhgTQSz0jTEmgljoG2NMBLHQN6YT\nEblfRH7idB3GBIKFvjHGRBALfWMAEbnHux7DfGC4d9vNIrLCO6/9ayLSW0SSRGSnd2oIRCTZOyd6\nrIj8QEQ2isg6EXnZ0RMy5ggs9E3EE5EJeC7/Hw9cCkz0PvS6qk70zmu/CbjJO73zQjzTAON93muq\n2oZn3vPxqnoC8L0ePAVjfGahbwycCryhqo2qWssX8zaNFpFFIrIeuBoY5d3+FHCj9/aNwDPe2+uA\nf4jINXgWfzEm6FjoG+NxuPlIngVuU9UxwANAAoCqLgbyROQ0IFpVDy1feT6eFdwmACs7zBBpTNCw\n0DcGPgIuEZFe3lkPL/RuTwL2efvvr+70nL8DL+Ft5YtIFDBYVRfgWQwkFejTE8Ub0x024ZoxeL7I\nBa4DduFZn2Ej0IAnwHfhmeUzSVVv8O7fH9gJDFDVGu8HwwIgBc8CIC+o6sM9fR7GdMVC35ijICKX\nATNU9VqnazGmO6zP0ZhuEpE/AecC5zldizHdZS19Y4yJIPZFrjHGRBALfWOMiSAW+sYYE0Es9I0x\nJoJY6BtjTASx0DfGmAjy/wElMK4wmy2ddwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1c34eef56a0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"avg_improvement = (1.0) / X.participation.mean().days\n",
"\n",
"ax = mean_scores.plot()\n",
"ax.plot([0, plot_days], [mean_scores[0], mean_scores[0] + avg_improvement * plot_days], '--')\n",
"_ = ax.set_ylim([mean_scores[0], mean_scores[plot_days]])"
]
}
],
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment