{
 "metadata": {
  "name": "",
  "signature": "sha256:1c0a7df21c62c8de36deff0fd4e698ff5c4703762062161f8f7821e21f522e50"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "#Predicting Student Performance\n",
      "\n",
      "###A data science experiment using data from the KDD 2010 Educational Data Mining Challenge\n",
      "\n",
      "The aim of this IPython Notebook is to show how we can use Python to build predictive algorithms that solve data science problems in the arena of education.\n",
      "\n",
      "**This notebook is still heavily under construction**"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import pandas as pd\n",
      "import numpy as np\n",
      "import matplotlib.pyplot as plt"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 1
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Get the data: Algebra 2005-2006\n",
      "train_filepath = 'data/algebra0506/algebra_2005_2006_train.txt'\n",
      "test_filepath  = 'data/algebra0506/algebra_2005_2006_test.txt'\n",
      "traindata = pd.read_table(train_filepath)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Some more information the data format can be found on the [challenge website](https://pslcdatashop.web.cmu.edu/KDDCup/rules_data_format.jsp)"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Inspect some of the training data\n",
      "traindata.head()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
        "<table border=\"1\" class=\"dataframe\">\n",
        "  <thead>\n",
        "    <tr style=\"text-align: right;\">\n",
        "      <th></th>\n",
        "      <th>Row</th>\n",
        "      <th>Anon Student Id</th>\n",
        "      <th>Problem Hierarchy</th>\n",
        "      <th>Problem Name</th>\n",
        "      <th>Problem View</th>\n",
        "      <th>Step Name</th>\n",
        "      <th>Step Start Time</th>\n",
        "      <th>First Transaction Time</th>\n",
        "      <th>Correct Transaction Time</th>\n",
        "      <th>Step End Time</th>\n",
        "      <th>Step Duration (sec)</th>\n",
        "      <th>Correct Step Duration (sec)</th>\n",
        "      <th>Error Step Duration (sec)</th>\n",
        "      <th>Correct First Attempt</th>\n",
        "      <th>Incorrects</th>\n",
        "      <th>Hints</th>\n",
        "      <th>Corrects</th>\n",
        "      <th>KC(Default)</th>\n",
        "      <th>Opportunity(Default)</th>\n",
        "    </tr>\n",
        "  </thead>\n",
        "  <tbody>\n",
        "    <tr>\n",
        "      <th>0</th>\n",
        "      <td> 1</td>\n",
        "      <td> 0BrbPbwCMz</td>\n",
        "      <td> Unit ES_04, Section ES_04-1</td>\n",
        "      <td> EG4-FIXED</td>\n",
        "      <td> 1</td>\n",
        "      <td> 3(x+2) = 15</td>\n",
        "      <td> 2005-09-09 12:24:35.0</td>\n",
        "      <td> 2005-09-09 12:24:49.0</td>\n",
        "      <td> 2005-09-09 12:25:15.0</td>\n",
        "      <td> 2005-09-09 12:25:15.0</td>\n",
        "      <td>  40</td>\n",
        "      <td> NaN</td>\n",
        "      <td> 40</td>\n",
        "      <td> 0</td>\n",
        "      <td> 2</td>\n",
        "      <td> 3</td>\n",
        "      <td> 1</td>\n",
        "      <td> [SkillRule: Eliminate Parens; {CLT nested; CLT...</td>\n",
        "      <td>    1</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>1</th>\n",
        "      <td> 2</td>\n",
        "      <td> 0BrbPbwCMz</td>\n",
        "      <td> Unit ES_04, Section ES_04-1</td>\n",
        "      <td> EG4-FIXED</td>\n",
        "      <td> 1</td>\n",
        "      <td>     x+2 = 5</td>\n",
        "      <td> 2005-09-09 12:25:15.0</td>\n",
        "      <td> 2005-09-09 12:25:31.0</td>\n",
        "      <td> 2005-09-09 12:25:31.0</td>\n",
        "      <td> 2005-09-09 12:25:31.0</td>\n",
        "      <td>  16</td>\n",
        "      <td>  16</td>\n",
        "      <td>NaN</td>\n",
        "      <td> 1</td>\n",
        "      <td> 0</td>\n",
        "      <td> 0</td>\n",
        "      <td> 1</td>\n",
        "      <td> [SkillRule: Remove constant; {ax+b=c, positive...</td>\n",
        "      <td> 1~~1</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2</th>\n",
        "      <td> 3</td>\n",
        "      <td> 0BrbPbwCMz</td>\n",
        "      <td> Unit ES_04, Section ES_04-1</td>\n",
        "      <td>      EG40</td>\n",
        "      <td> 1</td>\n",
        "      <td>   2-8y = -4</td>\n",
        "      <td> 2005-09-09 12:25:36.0</td>\n",
        "      <td> 2005-09-09 12:25:43.0</td>\n",
        "      <td> 2005-09-09 12:26:12.0</td>\n",
        "      <td> 2005-09-09 12:26:12.0</td>\n",
        "      <td>  36</td>\n",
        "      <td> NaN</td>\n",
        "      <td> 36</td>\n",
        "      <td> 0</td>\n",
        "      <td> 2</td>\n",
        "      <td> 3</td>\n",
        "      <td> 1</td>\n",
        "      <td> [SkillRule: Remove constant; {ax+b=c, positive...</td>\n",
        "      <td>    2</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>3</th>\n",
        "      <td> 4</td>\n",
        "      <td> 0BrbPbwCMz</td>\n",
        "      <td> Unit ES_04, Section ES_04-1</td>\n",
        "      <td>      EG40</td>\n",
        "      <td> 1</td>\n",
        "      <td>    -8y = -6</td>\n",
        "      <td> 2005-09-09 12:26:12.0</td>\n",
        "      <td> 2005-09-09 12:26:34.0</td>\n",
        "      <td> 2005-09-09 12:26:34.0</td>\n",
        "      <td> 2005-09-09 12:26:34.0</td>\n",
        "      <td>  22</td>\n",
        "      <td>  22</td>\n",
        "      <td>NaN</td>\n",
        "      <td> 1</td>\n",
        "      <td> 0</td>\n",
        "      <td> 0</td>\n",
        "      <td> 1</td>\n",
        "      <td> [SkillRule: Remove coefficient; {ax+b=c, divid...</td>\n",
        "      <td> 1~~1</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>4</th>\n",
        "      <td> 5</td>\n",
        "      <td> 0BrbPbwCMz</td>\n",
        "      <td> Unit ES_04, Section ES_04-1</td>\n",
        "      <td>      EG40</td>\n",
        "      <td> 2</td>\n",
        "      <td>  -7y-5 = -4</td>\n",
        "      <td> 2005-09-09 12:26:38.0</td>\n",
        "      <td> 2005-09-09 12:28:36.0</td>\n",
        "      <td> 2005-09-09 12:28:36.0</td>\n",
        "      <td> 2005-09-09 12:28:36.0</td>\n",
        "      <td> 118</td>\n",
        "      <td> 118</td>\n",
        "      <td>NaN</td>\n",
        "      <td> 1</td>\n",
        "      <td> 0</td>\n",
        "      <td> 0</td>\n",
        "      <td> 1</td>\n",
        "      <td> [SkillRule: Remove constant; {ax+b=c, positive...</td>\n",
        "      <td> 3~~1</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
        "<p>5 rows \u00d7 19 columns</p>\n",
        "</div>"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 3,
       "text": [
        "   Row Anon Student Id            Problem Hierarchy Problem Name  \\\n",
        "0    1      0BrbPbwCMz  Unit ES_04, Section ES_04-1    EG4-FIXED   \n",
        "1    2      0BrbPbwCMz  Unit ES_04, Section ES_04-1    EG4-FIXED   \n",
        "2    3      0BrbPbwCMz  Unit ES_04, Section ES_04-1         EG40   \n",
        "3    4      0BrbPbwCMz  Unit ES_04, Section ES_04-1         EG40   \n",
        "4    5      0BrbPbwCMz  Unit ES_04, Section ES_04-1         EG40   \n",
        "\n",
        "   Problem View    Step Name        Step Start Time First Transaction Time  \\\n",
        "0             1  3(x+2) = 15  2005-09-09 12:24:35.0  2005-09-09 12:24:49.0   \n",
        "1             1      x+2 = 5  2005-09-09 12:25:15.0  2005-09-09 12:25:31.0   \n",
        "2             1    2-8y = -4  2005-09-09 12:25:36.0  2005-09-09 12:25:43.0   \n",
        "3             1     -8y = -6  2005-09-09 12:26:12.0  2005-09-09 12:26:34.0   \n",
        "4             2   -7y-5 = -4  2005-09-09 12:26:38.0  2005-09-09 12:28:36.0   \n",
        "\n",
        "  Correct Transaction Time          Step End Time  Step Duration (sec)  \\\n",
        "0    2005-09-09 12:25:15.0  2005-09-09 12:25:15.0                   40   \n",
        "1    2005-09-09 12:25:31.0  2005-09-09 12:25:31.0                   16   \n",
        "2    2005-09-09 12:26:12.0  2005-09-09 12:26:12.0                   36   \n",
        "3    2005-09-09 12:26:34.0  2005-09-09 12:26:34.0                   22   \n",
        "4    2005-09-09 12:28:36.0  2005-09-09 12:28:36.0                  118   \n",
        "\n",
        "   Correct Step Duration (sec)  Error Step Duration (sec)  \\\n",
        "0                          NaN                         40   \n",
        "1                           16                        NaN   \n",
        "2                          NaN                         36   \n",
        "3                           22                        NaN   \n",
        "4                          118                        NaN   \n",
        "\n",
        "   Correct First Attempt  Incorrects  Hints  Corrects  \\\n",
        "0                      0           2      3         1   \n",
        "1                      1           0      0         1   \n",
        "2                      0           2      3         1   \n",
        "3                      1           0      0         1   \n",
        "4                      1           0      0         1   \n",
        "\n",
        "                                         KC(Default) Opportunity(Default)  \n",
        "0  [SkillRule: Eliminate Parens; {CLT nested; CLT...                    1  \n",
        "1  [SkillRule: Remove constant; {ax+b=c, positive...                 1~~1  \n",
        "2  [SkillRule: Remove constant; {ax+b=c, positive...                    2  \n",
        "3  [SkillRule: Remove coefficient; {ax+b=c, divid...                 1~~1  \n",
        "4  [SkillRule: Remove constant; {ax+b=c, positive...                 3~~1  \n",
        "\n",
        "[5 rows x 19 columns]"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's begin asking some basic questions of the data\n",
      "\n",
      "### How many students are interacting with the system?"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Take the column of anonimized student IDs and count the number of unique entries\n",
      "print 'Number of students: ', len(np.unique(traindata['Anon Student Id']))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Number of students:  "
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "574\n"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "### How long does it take a student to solve any problem step on average?"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "csd = traindata['Correct Step Duration (sec)']\n",
      "csd.describe()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 5,
       "text": [
        "count    620129.000000\n",
        "mean         18.071478\n",
        "std          34.796694\n",
        "min           0.000000\n",
        "25%           5.000000\n",
        "50%           8.000000\n",
        "75%          18.000000\n",
        "max        1907.000000\n",
        "Name: Correct Step Duration (sec), dtype: float64"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "So ignoring all the students that did not solve a problem step correctly, the average duraction for any problem step was about 18 seconds.\n",
      "\n",
      "Let's histogram this data to see the distribution."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%matplotlib inline\n",
      "hist = plt.hist(np.array(csd.dropna()),bins=100,normed=True,log=False,range=(0,100))\n",
      "plt.xlabel('Time to correct answer (sec)')\n",
      "plt.ylabel('Fraction')\n",
      "plt.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x1080423d0>"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "counts, bins = hist[0], hist[1]\n",
      "cdf = np.cumsum(counts)\n",
      "plt.plot(bins[1::], cdf)\n",
      "plt.xlabel('Time to correct answer (sec)')\n",
      "plt.ylabel('Cumulative fraction')\n",
      "plt.axis((0,100,0,1.0))\n",
      "plt.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEPCAYAAACtCNj2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlwnPd93/H3YrFY3Ccv8BAJkJQlWYoEkJItB3ZkgaLd\nxB0nJiOncZUmMyZtd5qZNrVEOo1nMtNOTFnueNxpxjpSp62a1pIluZ1xp7ZIKj4g25IoUJJ1iwB4\ngSeOxY3FHk//+D0PdrHEYnfBPZ/9vGYwz7XPPj88wP6++/xOEBERERERERERERERERERKUIPr3Bs\nH9ALHMhTWkREJImKPFzjICbjX063vTxuL7tynxwREUkmH0HhcWAwybH7gXF7fRDYk4f0iIhIEvkI\nCitpBsbittsKlRARESl8UADwFDoBIiJiFDooBIBWe70FGC1gWkREyl5lga7bjAkITwG7MRXNHcDR\nxBc+99xzVmNjY35TJyJS4i5evDjwwAMP7Mj0vHwEhf2YjP+LwN/Z+47Z+07ay15MkHgt8eTGxka6\nu7sTd5elI0eOcPjw4UInoyjoXsSUy72IWhbzoShzoSizociS5VwowmwoytOPf4f7HviXzIWizIei\nzIcjzIcte+nsM8u5sDkvauXvd/BVeKiqrKDK66HKay+XbJt1n9eDvzJ+uwKf10NlhXmdzxtb+uLe\nq8bnpdZXQY3PC7B9NWnMR1B4xv6Jtztu/Ql7eRwRcR0nM58JRZhdiDC9EGFmIcLMgsnUZxdMhj6z\nuD9i77eP2+vz4WjKaw0PT3Gp/1JG6fN6oNrnxW9n0P7KCqrtDNlf6aHa2baX1XGv8S++zrzW7zWv\n89vn+rzOa0zG7a3IXxXq+VWeV6jiIxEpIQuRKFPBCFPB8OJyOhhhKmgy+elghJmFsJ3hR5eszy5E\nyNaX8erKCmrsb8K1S5Zm/Zev1fKZrg3UVFZQ7Ytl4rF17+J2jb3P5y101WpxUVAoIT09PYVOQtHQ\nvYjJ9F7Mh6NMzIWZmA8TmA8RmAszGYwwNR9mws70J+fDTAXt/cEIwTS+pa+kurKC2qoK6nxe6qqW\n/tT6Kqit8lK75FgFtT6vvd9k+NWVqb9p3+n5XXp2tV9XWstd0TcHPXbsmKU6BZHkopbFdDDC+FyI\n8bkw43MhxmbDS7YDc2EC82Gm5sMEI5l/b/d6oN5fSaPfS4O/kga/lwa/l3p/JfVVXur9XurjMvr6\nKi91fu9iEMhnsYkY/f397NmzJ+MbrycFkSIViVoE5sOMzoYYmw0xOhtidCa0uD1mZ/6BuRCZ5PM+\nr4cmfyXNNZU0Vcd+GqorabIz/cZqL43+ysX16soKPB5l7OVAQUGkACJRi9HZEFdnFrg6HWJkZoGr\ns6HF9ZEZk+mn2zKmrspLS43J6NtqfLTU+uxts2ypqaS52qcMXlJSUBDJgYVIlCvTC1yaMj+Xpxe4\nPBXk8vQCV6ZDjKeZ4TdVV9JWW0lrrY82+6c1btlqZ/pVlaoslexQUBBZpelgmAuTC1yYDHJhMsjF\nqSAXJhe4OBlkZDa04rkeoLW2krV1Vayt87G2roo19nJtnY+2OpPxq2WM5JuCgsgKZhYinJ+YZ3gi\nyPmJ4GIAuDAZZDIYSXpehQfW1lWxocH8rG/ws6G+ivUNVayrq6KtzkelKl+lCCkoSNmLRC2uTC9w\nfiLI+Yl5zk0EOReY51xgnrG5cNLz/JUVbGqsor3BT3ujn42NftobqtjY6GdtfZUyfSlJCgpSNizL\nYmQ2xNDYHKfH583P2BxnA/MsJGm+U+X1sLnJz8bGajY1+dnU6GdTkwkArTWVqrAV11FQEFdaiEQ5\nPT7PwOgcg6NzDI3NMTQ+x1SSIp+2Wh+bm/z2TzU3NFezpdnPuvoqKpTxSxlRUJCStxCJcnpsnveu\nzvD+yCynRuc4PTa3bNv9Br+XjpYaOlqr2dZaw7aWarY2V1Pv10dBBBQUpASNzoZ4+/IMb12e5u3L\nMwyMzhFKaN/pAbY0+dneVkNnWw2dreanrdanIh+RFSgoSFGzLItzgSBvXJrmrcvTvHV5hktTC9e8\nbnOTnw+treXGNeans63GGT5YRDKgoCBFxbIszk8Eee3CFK9fnOaNi9ME5pe2AKr1VXDTujpuWVfH\nLevruHldHXVVCgAi2aCgIAUXmAvRPzzFq8NTnLwwxcjM0o5frTWV3NZez20b6vnw+jq2tdRogDWR\nHFFQkLwLRy3euTLDiXOTnBie5NTI3JLx9puqK7mjvZ7bNzZwx8Z6NjX6VQ8gkicKCpIXgbkQL5+b\n5NdnJ+kfnmQ2FBuf3+f1cOv6enZvbqB7UwMdrTVqBipSIAoKkjOXpoL0DQXoOz3BO1dmljwNbG7y\nc+fmRnZtbuC32huo1oBuIkVBQUGy6uJUkJ8PBvjZ4DinRucW9/sqPNy+sZ6PbGnirhsaaW/wFzCV\nIpKMgoJct/G5ED8dGOcfB8Z59+rs4v4aXwV3bWmkZ1szd25upFYthESKnoKCrMpCOMovz0xw7NQY\nJ85PLs4NUF1Zwd1bm/hEhwkEGudfpLQoKEhGBkZn+fF7Y7wwMLY4jpDXAx+9oZE9O1q564Ym1Q+I\nlDAFBUlpPhzlZ4Pj/OidEd6LKx7a0VbD3hvbuKezmeYaXwFTKCLZoqAgSV2aCvK/37rK8++PMb1g\nngrqqrz07mjh0ze2sWNNbYFTKCLZpqAg13jnygzP/uYKfacDi3UFN62t5TM3r+ETnS0qHhJxMQUF\nASBqWbx0dpIfvHGZNy/PAKauYM+OFv7g1nXs1FOBSFlQUChzkajFPw6M879eu8S5iSAA9VVefu+m\nNj774bWsqasqcApFJJ8UFMqUEwz+4eQlhidNMFhT52Pfrev4Jx9qU58CkTKloFBmopbFL4YC/LdX\nL3LefjJob6jij7s20LujVZPNi5Q5BYUyYVkWr5yf5O9PXGTAHn6ivaGKL3Rt4F4FAxGxKSiUgTPj\nc3z318P0D08BsKbWxxe6N/CpG9sUDERkCQUFF5sOhnmy/xL/5+2rRC1TgfzHd6znn96yFr+alYrI\nMhQUXMiyLH46OM6jvx5mfC5MhQc+c9Ma/mTXBvU8FpEVKSi4zPDEPP/pxfOcvGCKij68vo5/9bHN\nbG9TPwMRSU1BwSUiUYsfvnmF//rqRRYiFg1+Lwfu2sTeG1s1i5mIpE1BwQXOT8zzrZ+d5e0rpify\nfTtbOfiRTTRV688rIpnJR66xDwgAncATqzguSViWxY/eGeHxl4YJRizaan38m49v4a4tTYVOmoiU\nqFwHhW57eRyT6XcBJ+OOdwGDcfsSj0sSgbkQ3/7FOX51dgIwYxR95e7NNPj1dCAiq5frHOR+4Hl7\nfRDYw7WZ/sPAXkzQOJ7j9LjCyeEpHv7pacbmwtRXefnXPVv4RGdLoZMlIi6Q66DQDIzFbbclHD8J\nDNmvOZDjtJQ8y7J4+o0r/P2JC0QtuG1DPYfu2cq6eg1aJyLZkY+yhpWavjQDpzAB4QmgHxMkJMHs\nQoRv/fwsfacDAHyhawP/vGsDXvVIFpEsynVQCACt9noLMJpw/ADwGDBpv3Y/8Ejimxw5cmRxvaen\nh56enlyktWhdnAzy9ecHORuYp9ZXwaF7tnH3VlUmi0hMX18ffX19i9t79+5d1fvkOig8BezG1BV0\nAEft/c2YIAAmIECsMvoahw8fzmESi9tbl6b562NDTMyH2dpczV/f18GmpupCJ0tEikziF+b+/v5V\nvU+ug8JJTFDoxQSB1+z9x+z9jwAPYiqhW1GT1CVeODXGf/z5WUJRi92bG/h393ZQp3kORCSH8lGn\n4GT08S2LdsetX1NcJPDMG5d5/OULAHz2ljV8+aObVX8gIjmnRu1FxrIs/uHkJf57/yUAvvLRTfzB\nresKnCoRKRcKCkXEsiy+d+IiT71+mQoP/MXHb2DvjYmteEVEckdBoUhYlsVjLw3z3JtX8Xrg8Ce3\n8TvqkCYieaagUAQsy+K/vHKB5968SmWFh7/q3cbHtjYXOlkiUoY0/VYReLL/Ek+/cQWvBwUEESko\nBYUC+/7rl/gfJy9R4YGvfVIBQUQKS0GhgP7fe6N875WLeICvfmKrBrUTkYJTUCiQl89N8J2+swD8\n+W9vYc/O1hRniIjknoJCAbw/Mst/OH6aqAV/dPt6PnPzmkInSUQEUFDIu8tTC3z9JwPMh6P07mjh\nz3a3FzpJIiKLFBTyaCES5d8fH2J8LswdG+v5i4/fgMejoStEpHgoKOTRo78a5v2RWdbXV/FX93bg\n8+r2i0hxSbfzWhdm2szE2lALuDOrKXKpYx+M8aN3R/BVePh6bweN1eo3KCLFJ92c6QeY4a4PsfJM\narKMobE5vvPiOQC+cvdmblxbW+AUiYgsL92g0Ap8OZcJcatgOMrfvHCaYDjKnh0t/N5NGuBORIpX\nuoXa3wC+msuEuNX3TlzgTGCezU1+/vy3t6hiWUSKWrpPCn+EqVf4S2Asbr8F7Mx2otzi5PAUP3RG\nPb1nGzU+zZomIsUt3aDwhzlNhQtNB8M88vMzAHyhu131CCJSEtINCoM5TYUL/edfnmdkJsRNa2v5\nZ7evL3RyRETSkm6dQhPwKKboKGovvws05ihdJe2lsxO8MDCOv7KCh+7ZqrmVRaRkpBsUnsC0QNpl\nn9MJrLH3S5xgOMrf/uo8AP+iewObm6oLnCIRkfSlW3y0H2gBJuztAHAA88Tw+Rykq2Q99fplLk0t\n0NFSze/fuq7QyRERyUi6TwpDmKeEeLtQXcMSwxPzPPX6ZcAMh12pYiMRKTHpPikcwvRofgwTCLYD\nB1GrpEWWZfG3vzpPKGpx385Wbt1QX+gkiYhkLN0nhWeAHZgnhjZgwN5+NkfpKjkvnp7gxPkp6qu8\nfPGujYVOjojIqmQyKtsg8M1cJaSURaIW3ztxAYA/3d1OS42vwCkSEVmdVEHhBKbo6OEkxzVKKnD0\ngzHOTwRpb6jid2/SLGoiUrpSBYWDmKKiAyw/OqqV9RSVmIVwlCf7LwLwJ7vaVbksIiUtVVDot5fH\nMHUJiSJAWQ/o83/fHeHqTIiOlmo+ub2l0MkREbkuqYJCNMm645kspqXkzC5E+J+vmSaof7p7IxUa\nAVVESlyqoOC0TjoK3JfjtJSc5966ysR8mFvW1fHRGzTih4iUvnSbpN4HfA64w97eB3wxJykqEXOh\nCD988wpgWhxpngQRcYN0g8KjmOaoTs43BHwNMyheWfrJ+2NMBSPcsq6OOzY2FDo5IiJZkW5QuB/z\ntHDS3u63t7+Ui0QVu0jU4jn7KWH/bRrfSETcI92gMI4ZPjteE2ZgvLLz4pkAl6YW2NhYxd1bE2+L\niEjpymTsoxe4duyjQzlKV9GyLItn3jBPCZ+7dZ3mShARV0k3KDyDKTLajxkdNWAvh9I4d5/9+k6W\nn3+hG+jAzNdQ9PMzvH15hnevztLg93LfztZCJ0dEJKvSLT6C2NhHXwYOYwLCvSnO6baXx+1l1zKv\nOYwZWK85yfGi8sxvzFPCZ25eQ42vrPvtiYgLpfuk0IGpVHYK0D2Yb/Z77GUy9wPP2+uD9utPxh3f\nD7xirz+SZloK5uJkkF+emcBX4eGzt6wtdHJERLIu3SeFH2CKfyow9Qn99naq+RSaMbOzORKHytht\n7+sCHkwzLQXz4/dHsYBPdDbTWquRUEXEfdJ9UugGejHTcT4PPA48jenpnGqU1FQ1sSOYp4c9mPqH\na+ZoOHLkyOJ6T08PPT09aSY7eyJRi6Pvm/j26RuXGwZKRKRw+vr66OvrW9zeu3fvqt4n3aAQALYB\nr2OKixrtfdvTOM8pXmoBRhOOjxKrrA5gAsw1QeHw4cNpJjN3Xh2eZGQ2xMbGKn6rXbOqiUhxSfzC\n3N/fv8Krk0u3+Ogw5tt8E6bS+AXME8OJFOc9hSlmAlMvcdReb7aXz8QdbwZeTjM9effj98xTwqdu\nbNOQFiLiWukGhccx3/gnMH0TjmDqGVI9nziVyr2YJ4HX7O1j9nLI3r/Pfv/n0kxPXgXmQvz67AQV\nHtQMVURcLd3ioxOYlkJOD+ZMhsx2+h4cj9u3e5njRTvf8/FT44SjFndtaWRNXVWhkyMikjPpPikc\npwx7L4Ppwfzj901ViCqYRcTtMm199CVMfwOHBezMdqKKybtXZzkzPk9TdSUf0ZwJIuJy6QaFg6Ru\nWupKx0+ZCuY9O1rweTPpAC4iUnpSBYUIpinpCZafo9nVopZF32lTjfLJ7apgFhH3SxUUvkWscnm5\nOZotwLUDAL1zeYax2TDr66vYuaam0MkREcm5VOUhh+zXHLeXiT+uDQgAv7CfEn57W5P6JohIWchk\njuayYlkWL56eAODj25pTvFpExB1Uc5rEByNzXJ5eoLW2kpvX1xU6OSIieaGgkIRTdNSzrZkKFR2J\nSJlQUFiGZVn8YigWFEREykW6QaEJM1T2GGZk0y7MgHiu7M01NDbPhckgTdWV3LZBI6KKSPnIZJKd\nMcygdR7MQHdD9n7XcfomfGxrE94KFR2JSPlIt0fzHmLDXTsOsXRWNdd48bSKjkSkPKX7pDAE7ErY\nt4ul4yC5wsjMAkPj81RXVnDHRhUdiUh5SfdJ4UuYoa2PYZ4YnsY8PaSao7nk9A9PAXB7e73GOhKR\nspNuUNgP/BmwDvN0MIAZJC+w0kml6FU7KHRvaihwSkRE8i/doDABfB0zdebTwCu4MCBELWvxSWHX\nZlc2rBIRWVG65SOHMLOldQL9wDcxTVO/m6N0FcTg6BwT82HW1vnY0uQvdHJERPIu00LzAKbo6KR9\nrqvGRHKKjnZtatQAeCJSltINCgcwxUZR4GFgBDMb244cpasgXh2eBGDXZtUniEh5SrdO4X5MUHBl\n5TLAXCjCW5dm8ABdGxUURKQ8pRsUXFVMtJzfXJomFLW4cU0tjdXp3hYREXdJlfudwFQyP5zkuAXc\nmdUUFchiqyM1RRWRMpYqKBzEVCwfwIx5lMjKeooKZLGSWfUJIlLGUgWFfnt5DGhb5ngEF0zJOTKz\nwBl7aIub12lCHREpX6mCQjTJuuOZLKalYH5zaRqA2zZoaAsRKW+pgoKTQx7FxZXNb16aAeDWDXpK\nEJHylu7X4mQB4d5sJaSQ3rpsgsKH12tUVBEpb+m2vezAjJQaP8FAK2ak1NZsJyqfZhYiDI3NUVnh\n4UNrawudHBGRgspk5rVOTAskZ/yjTlwwdPY7V2awgJ1ravBXqj5BRMpbuk8K3UAvZrTU54HHMT2c\nj1Li/RTetCuZVXQkIpL+k0IA2GavtwKN9r7tOUhTXsXqE1TJLCKS7pPCYczIqC3AceAFzPzMJ3KU\nrrwIRy3evaKgICLiSDcoOMVFE5hhL/ZjAsQTOUpXXgyMzhKMWGxu8tNc4yt0ckRECi6Tkd/iR0fN\npNPaPvvcTlYOIg8Cj2TwvtdNRUciIkulCgqnUhy3gJ0rHO+2l8cxQaELUwyVaA+mL0Reg4LTaU2V\nzCIiRqqgcP91vv/9mNZKAIOYzH+5oJD3gfUsy+Lty6blkXoyi4gY6Q6It1rNmAppx3KD6nVhniQO\nXee1MnJxaoGxuTBN1ZVsatR8zCIikH6dwvNJ9lvAp1Kcm2qy44L0iH7rstM/oU7zMYuI2NINCt9M\n2G4Gvgb8TYrzAsQy/RZgNOG485SQd2+rkllE5BrpBoVjSfa9Ajy7wnlPAbsxGX8Hpgc0mKDitEjq\nxBQrtZKkIvrIkSOL6z09PfT09KSZ7OQ+GJkD0HhHIuIKfX199PX1LW7v3bt3Ve9zPZMRt5C6R/NJ\nTFDoxQSB1+z9x+z9TkA5ADSRpML58OHD15HMa4UiUYbGTFDY3qagICKlL/ELc3//6qqE0w0Ky/Vc\n7sZ0akvF6ZsQX0y0e5nX5K0j3NnAPKGoxaZGP3VVJT9xnIhI1qQbFA5ivsU3xu0LAENZT1EevG8X\nHe1cU1PglIiIFJd0g0Iv8PAy+y1KcI7mD0ZmAdixRkVHIiLx0h0l9WFMj+OKhJ+SCwgQCwo7FRRE\nRJZINygMYVoalbxw1GLQrmTe2abiIxGReOkWH/0hcBp4jKU9lC3gW1lOU06dHZ8nFLFob6ii3n89\nja9ERNwn3VzxCDCOaYZa0t1/PxhV0ZGISDLpBoXdmM5nEzlMS16oPkFEJLl06xSexrRAKnmn1BxV\nRCSpdJ8U7sT0VQhwbZ3CSvMpFJVI1GLALj7aoZ7MIiLXyKSiueSdDcwTjFisr6+isVqVzCIiidLN\nGQdzmoo8UX2CiMjK8jGfQtE4Nar6BBGRleR6PoWioicFEZGV5Xo+haIRtSwG7CeFHerJLCKyrHSb\npC4nnfkUisblqQXmw1FaaypprvEVOjkiIkUpH/MpFIWhcfOUsK1VTwkiIslkMp9CogAl1CppaGwe\ngI6W6gKnRESkeKUbFFY3r1sROW2PjNqhJwURkaTSqVPYBzwVt30QOAV8MScpypGhcfOksK1FQUFE\nJJlUTwoHMBPsHIrb5wQIp5nq32U7Udm2EIlyfmIeD3CDio9ERJJKFRQOYYa4OB63bwJTwTwGfIMS\nCArnAvNELdjU6Ke68noaXImIuFuqHLKT5DOuHaNEmqQuVjK36ilBRGQlqYLCEGYuheXsokRaH512\nmqOqPkFEZEWpgsLDmKKibQn7OzBTcz6WgzRlXexJQUFBRGQlqeoUHseMczSIaZY6BrRiOq4dAh7J\naeqyxOm4puIjEZGVpdNP4ZuY4LAbU8cwALyK6bxW9KaCYUZmQvi9Htob/IVOjohIUUu381qA5QfF\nK3pn7P4JN7RU463wFDg1IiLFzfXtM4ecnsyqZBYRScn9QcHpyaxKZhGRlFwfFJwxj7apJ7OISEqu\nDgqWZS0+Kag5qohIaq4OCldnQswsRGj0e2mtSbdOXUSkfLk6KJwejw2X7fGo5ZGISCouDwoaLltE\nJBPuDgpOJbN6MouIpMXdQcGpZNaTgohIWlwbFCJRizMBExS2qjmqiEha8tEkZx9mmIxO4Illjh+w\nl9uBw9m66IXJIKGIxbp6H3VV3my9rYiIq+X6SaHbXjozt3UlHO/FjKn0BCZo9GbrwqpkFhHJXK6D\nwv3AuL0+COxJON4Zt2/Q3s6K2JhHKjoSEUlXrouPmjFzMDjaEo7HFyd1A9/P1oWdJ4WtelIQEUlb\nPiqa0+k11o2Zo+G1bF30tCbWERHJWK6fFAKYmdoAWoDRJK/rBb6W7E2OHDmyuN7T00NPT8+KFw2G\no1yYDFLhgS1NCgoi4n59fX309fUtbu/du3dV75ProPAUZsa245h5nY/a+5uJzdx2kNi0nr3EKqUX\nHT6cWaOkc4F5ohZsafJTVenaVrciIosSvzD39/ev6n1ynWOetJe9mCDgFA85s7jtAY4ApzB1D1Y2\nLnpacyiIiKxKPvopOJXJ8U8Au+3lMWLFS1mjlkciIqvjyrIV9VEQEVkdlwYFDYQnIrIargsK08Ew\nV2dCVHk9tDf4C50cEZGS4rqgcMYuOrqhuRpvhSbWERHJhOuCwpBaHomIrJrrgsJifYJaHomIZMx1\nQWFg1ASFTj0piIhkzFVBIWpZDNp9FLa3KSiIiGTKVUHhwmSQuVCUtlofLTW+QidHRKTkuCooOEVH\nO/SUICKyKq4KCqdGVXQkInI9XBUUBkZnAdjRVlvglIiIlCbXBAXLsjg1Yj8prNGTgojIargmKIzN\nhgnMh6mv8rKhvqrQyRERKUmuCQoDY6boaHtbDR6PhrcQEVkN1wQFp+ioU5XMIiKr5p6goOaoIiLX\nzTVBQS2PRESunyuCwsxChItTC/i8HrY0ayA8EZHVckVQcHoyd7TUUKk5FEREVs0lQSHW8khERFbP\nFUFBlcwiItnhiqAQe1JQJbOIyPUo+aAwHQxzenyeCg90tKqSWUTkepR8UOgfniJqwa3r66nxeQud\nHBGRklbyQeGlc5MA3LWlscApEREpfSUdFKKWxSt2ULhTQUFE5LqVdFD4YGSWwHyYdfU+trWoPkFE\n5HqVdFB42Sk62tykkVFFRLLAFUFBRUciItlRskFhfDbEe1dn8Xk93LGxvtDJERFxhZINCieGzVPC\n7e1qiioiki0lGxRePus0RW0qcEpERNyjJINCJGpxYngKgDs3qz5BRCRbSjIovHRugpmFCJub/Gxq\n8hc6OSIirlGZh2vsAwJAJ/DEKo4vMT4b4jt95wD49IfaspdKERHJ+ZNCt708bi+7Mjy+RNSyeOTn\nZxifC3N7ez37bl2XpWSWhr6+vkInoWjoXsToXsToXly/XAeF+4Fxe30Q2JPh8SWe/c0VTpyfotHv\n5dA9W/GW2Sxr+oeP0b2I0b2I0b24frkOCs3AWNx2YnlPquOL3rs6w/deuQDAv/3EVtbUVWUrjSIi\nYstHRXOqr/Mpv+5blsW3f3GOiAW//+G13L1VzVBFRHIh1+UvR4CjmDqD/UAH8EgGx3nyySdPtbe3\nb89xOkVEXOXixYsDDzzwwI5CpyNRF3DAXn8QuMNeb05xXERECiDXxUcn7WUvptnpa/b2sRTHRURE\nRFJ6MG59H+YLxYEkrxUpBw8nbC/3uUj7s1LsPZrL/UN/wP45ErevnO/JHuA+ez2jPi4u0435P1jV\nh95lrisDdIGDmN/XsdznIqPPSjEHhXL+0IP5pz6G6eXdaW8796Bc74kVt/55Mujj4jKHgWcxdXMZ\nf+hdpAvztz9uL7sov8/I45jf3bFc36/7McXz8fuSKuagkFHHNhfqJPY7D9rbnyeDP67LdBH7oAM0\nkWYfF5fZD7xirz+CqZcr58+KU3TSibkX5fxlAZbv+5V2fzAo7qCQ0S/iQk8QGwuqGziBuSejca8p\np3vSusy+8urSbuzG/N27iNWvlOtn5SQwhPndnd+/XO9FvOv6XBRzUIDy/NAn6gZeJdZSqxzvSeJT\nApgnJidQtLA0WLrdCLH/B6c8uRz/L5qBU5i6gycw/ZygPO+FI/5z4XyJzOizko9RUlernD/08XqB\nr9nr5XpPOu2fNszv3wU8hfnWfByTGRwtWOryaxTz7RjM/8OdlO//xQHgMWAScw/2U773whH/uejE\nfC48ZPD8iFO1AAAERElEQVRZKeYnhacwvxSU14c+3kFiPbx7Kd978qz9Y2HqEizKt4/LM8T+B5qB\nlynf/wswAQFMhheg/O7FfkyG/0V7e7nPhas+Kwcon6ZlifZgykZP2ct77f3lfE/EOIApNvpGwr5y\n/L94kGub55brvRAREREREREREREREREREREREREREREpRq8C0WV+IpiexCdyeO1oDt8710o57QAP\nkf0RRRP7D4hIiWokNgrpvfa2s683h9ct5Yy1lNPeTO6C/akcva+IFMAYS+fNdkZrBTOUwKvAo/br\nnrePD2AyyPgZ0vbE7X8eE1wSHbWPO2PV7I875+kk58S/bsxOS+L+xPOd8WAetn+XjoTtVOld7nqJ\naY930H5tNO56Tjpexdwnp+d6/Df1x4iN/vmQfa4TkB9iaRAawATvZOlO/J0TPURsmITEa6f7d0z2\ndzjC0klgRKSEpQoKUeBzmMzByRAaMZmXk2k5Qxl/0j72KCaTXo5zjvPe99rv/TRLMxriXueksQOT\nsX4uxfnOse8C25bZXim9ya4Xn/Z4zfb+2+PS4cyi51z3q/b2o5iMFkwGe8q+fpf9um/HnXsUU5y3\nLe7azpNdsnTH/46JTsTtX+7ajddxX3pJ/vcWkRKTKijEj1v/KEvH4nEyk4NcmymMsTwnY30Ik4E5\nOpKc81DCNe/AZGQrne9kkCTZXim9idfrInZ/khUfxX+bfoylwSn+d4qvr9nH0icHp9jOOT6O+f0O\nYL69n7DXk6U78XdMFH9suWtD5vfFOT/x95QiV8xDZ0vxi/+wB7j2w+8BtmO+fcYfs1hZK0unGBzC\nfFNN5BTBOJzRHz+f4vz4Y4nbK6U38XonSe0vMRm6837x14q/RvwcAM9i7sEP7OU3MKPldmMC3ABm\nqtbPY2ZhO5Yi3YnXjddMbDa/la692vsyyPJ/OylSxTx0tpQ+C/Ot8xlMBuP8pJoicRSTCTkSMy5H\nIOF1zoT26Z6/nJXSm+x6yezHBIR7gb32+6ajE5PR7wB2AV+yr9MPHMIUHx2zj90HfB8TKDK9z5lc\nO5v3RURKVKrio/iWJUdYWimZWBbda68/RqzsPFFinYJzzg9YWhzkcIqFuuxzBjAVph0rnJ+Y7sRt\np2x+ufQmu1582uMdiDvXaeETXw4ff934e+tULDfFve5zmHvs1OOAKUZyKrdXus+J10oUn/Zk117t\nfVHxkYiLLBcUnEnjO4EP4o4dIVZpCqYitNFe78VkLlHgJ3H7Ez1tnwexb6dRzMQpyc45QKx1T3zg\nSHZ+YroTt1OlN9n14tMe73n79a8QK0a6d5nrxt9b57yo/XqnvH4PS+/r03b6UqV7ud8xXnyrqGTX\nXun9Ifl92YO5/yIiUiIeJHedzB4m9mQjIiIloAl1XhObt9AJEJGCC2ICwxxwKYvvuw/TKqk/i+8p\nIiIiIiIiIiIiIiIiIiIiIiIiRen/A/RnwxcA8Cf2AAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x11efe2790>"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The histogram shows visually what mere statistics hints at. The distribution of students is heavily weighted towards those who are solving problems in under 20 seconds. The cumulative distribution function (CDF) shows that roughly 80% of successful students solve the problem within 20 seconds. After 40 seconds, 90% of successful students have finished the problem. Almost no students take longer than 80 seconds."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "### Completion time by problem\n",
      "\n",
      "OK, let's ask a slightly harder question: how are students doing problem by problem? The answer will take several parts.\n",
      "\n",
      "First, let's get the number of unique problems"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# The unique identifier for each problem is the 'Problem Name'\n",
      "problems = traindata['Problem Name']"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 43
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Get just the uniques\n",
      "problems = np.unique(problems)\n",
      "print 'Number of unique problems: ', len(problems)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Number of unique problems:  1084\n"
       ]
      }
     ],
     "prompt_number": 44
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "pmedian_times = {}\n",
      "for p in problems:\n",
      "    pmedian_times[p] = traindata[traindata['Problem Name'] == p]['Correct Step Duration (sec)'].median()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "{'NEWS02': 5.0, 'NEWS01': 11.0, 'PROP19': 6.0, 'REAL29': 5.5, 'PROP12': 12.0, 'REAL25': 9.0, 'REAL27': 9.0, 'REAL20': 15.0, 'REAL19B': 10.0, 'TRANSFORMG019': 1.6669999999999998, 'NEWSQUARE4TRE': 8.0, 'NEWSQUARE2TRE': 7.0, 'DEC03C': 13.0, 'DEC03B': 8.0, 'DEC03A': 12.0, 'EG11C': 10.0, 'EG11B': 11.0, 'EG11A': 10.0, 'EG-FACTOR18': 9.0, 'BH1T39A': 12.0, 'BH1T39B': 11.0, 'BH1T39C': 12.0, 'IPCSNOW': 6.0, 'PROP13': 18.0, 'DIST01': 6.0, 'EG-FACTOR10': 7.0, 'EG-FACTOR11': 9.0, 'EG-FACTOR12': 6.0, 'EG-FACTOR13': 4.0, 'EG-FACTOR14': 6.0, '2PTFB22': 7.0, '2PTFB21': 7.0, '2PTFB20': 8.0, 'EG35': 5.0, 'EG34': 6.0, 'EG37': 4.0, 'EG36': 8.0, 'EG31': 6.0, 'EG30': 7.0, 'EG33': 4.0, 'EG32': 4.0, 'LIT24A': 11.5, 'TRANSFORMG027': 2.5, 'SYSFB19': 8.0, 'SYSFB18': 10.0, 'DEMO_10': 6.0, 'EG38': 7.0, 'TRANSFORMG020': 2.5, 'TRANSFORMG021': 2.0, 'LIT33A': 8.0, 'PROP10': 11.0, 'LIT70A': 11.0, 'PERCENT15': 7.0, 'TPH04': 7.0, 'IPCBABY': 9.0, 'LIT86': 9.0, 'LIT69': 11.0, 'TRANSFORMV031': 3.0, 'DISTFB07_SP': 8.0, 'EG20A': nan, 'LDEMO_PTY': 7.0, 'RXMX_3B': 12.0, 'JAN11A': 13.0, 'JAN11C': 12.0, 'JAN11B': 13.0, 'YGT5X+12': 4.0, 'PERCENT17': 10.0, 'BH1T46': 8.0, 'LIT65': 10.0, 'RXMX_3A': 12.0, 'L3NOV07A': 13.0, 'JAN03': 9.0, 'TRANSFORMV042': 4.0, 'TRANSFORMV041': 2.25, 'P-3X-YLT6': 5.0, 'TRANSFORMN029': 3.5, 'LIT3A': 5.5, 'TRANSFORMV039': 4.0, 'LIT62': 10.0, 'LIT80A': 10.0, 'TRANSFORMN028': 2.0, 'L3NOV07B': 11.0, 'EG42C': 15.0, 'EG42B': 13.0, 'EG42A': 14.0, 'LIT1A': 6.0, 'L6FB19': 10.0, 'EMX03A': 9.0, 'EG38B': 5.5, 'EG38C': 6.0, 'REAL19C': 13.0, 'EG38A': 7.0, 'LIT66': 11.0, 'FOR01': 6.0, 'LIT67': 11.0, 'FOR02': 8.0, 'DISTFB12_SP': 8.0, 'BH1T08C': 10.0, 'LIT9': 4.5, 'LIT8': 6.0, 'DIST04_SP': 7.0, 'LIT5': 5.0, 'LIT4': 6.0, 'LIT7': 8.0, 'LIT6': 7.0, 'BH1T24B': 13.0, 'BH1T24C': 10.0, 'LIT3': 5.0, 'BH1T24A': 12.0, 'BH1T32A': 11.0, 'YGTX-7': 9.0, 'BH1T32C': 11.0, 'BH1T32B': 8.0, 'XGE0': 3.0, 'PSNPOLEVAULT': 6.0, 'TRANSFORMG024': 2.0, 'SYSFB25': 9.0, 'SYSFB12': 9.0, '2PTFB16': 7.0, 'LIT39': 10.0, 'LIT38': 8.0, 'TRANSFORMG007': 2.0, 'JAN08': 6.5, 'JAN09': 9.0, 'JAN06': 8.0, 'JAN07': 9.0, 'JAN04': 13.5, 'JAN05': 11.0, 'LIT37': 7.0, 'EG55A': 15.0, 'LIT35': 6.0, 'JAN01': 8.0, 'EG-EQS06': 5.0, 'EG-EQS07': 4.0, 'EG-EQS04': 5.0, 'EG-EQS05': 5.0, 'EG-EQS02': 3.0, 'EG-EQS03': 3.0, 'EG-EQS01': 3.0, 'EG-EQS08': 4.0, 'EG-EQS09': 4.0, 'BH1T32': 10.0, 'BH1T33': 19.0, 'BH1T30': 10.0, 'BH1T31': 11.0, 'BH1T36': 12.0, 'BH1T37': 6.0, 'BH1T34': 13.0, 'BH1T35': 12.0, 'PERCENT03B': 9.0, 'PERCENT03C': 9.0, 'BH1T38': 5.0, 'BH1T39': 13.0, 'TRANSFORMN017': 1.75, 'TRANSFORMN016': 2.0, 'TRANSFORMN030': 2.0, 'EG-FACTOR15': 7.0, 'LIT59A': 12.0, 'LIT32A': 9.0, 'EG-FACTOR16': 6.0, 'TRANSFORMN010': 2.0, 'NEWQUAD7TRE': 7.0, 'EG-FACTOR17': 5.0, 'TRANSFORMN011': 1.5, 'PROP16': 9.0, 'PROP17': 6.0, 'PROP14': 6.0, 'PROP15': 6.0, 'EG-FACTOR50': 7.0, 'EG9B': 7.0, 'EG9A': 19.0, 'P-2X+5YGT10': 5.0, 'TRANSFORMG053': 2.25, 'BH1T29A': 12.0, 'SYSFB11': 10.0, 'BH1T29C': 10.0, 'BH1T29B': 11.0, 'TRANSFORMG062': 3.0, 'BH1T14': 4.0, 'PROP18': 6.0, 'TPH11': 7.0, 'TRANSFORMG064': 3.5, 'BH1T15': 16.0, 'SYSFB17': 10.0, 'TRANSFORMN003': 2.0, 'YGE4X-11': 5.0, 'LIT11A': 13.0, 'TRANSFORMG002': 2.0, 'LIT32': 7.0, 'BH1T17': 13.0, 'SYSFB15': 9.0, 'TRANSFORMN026': 2.5, 'EG7A': 6.0, 'BH1T10': 14.0, 'EG7C': 6.0, 'EG7B': 6.0, 'PERCENT01A': 10.0, 'EG33C': 4.0, 'EG33B': 4.0, 'EG33A': 4.0, 'EG24': 8.0, 'LIT66A': 11.0, 'TRANSFORMA007': 2.0, 'BH1T13': 5.0, 'PERCENT04C': 11.0, 'LIT74A': 10.0, 'PERCENT04A': 11.0, 'TRANSFORMG025': 2.0, 'FOR06C': 9.0, 'FOR06B': 13.0, 'FOR06A': 4.5, 'BH1T02B': 10.0, 'BH1T02C': 8.0, 'BH1T02A': 10.0, 'LIT49': 8.0, 'TRANSFORMG023': 2.0, 'TRANSFORMA004': 2.0, 'YGT-4X-10': 4.0, 'LIT34A': 8.0, 'LIT69A': 12.0, 'DISTFB01_SP': 8.0, 'TRANSFORMN020': 2.0, 'LIT82': 12.0, 'BH1T27C': 8.0, 'BH1T27B': 9.0, 'BH1T27A': 9.0, 'TRANSFORMA038': 3.0, 'TRANSFORMA005': 3.0, 'BH1T47A': 12.0, 'EG39C': 5.0, 'BH1T47C': 8.0, 'BH1T47B': 16.0, 'TRANSFORMA037': 2.5, 'TRANSFORMA036': 2.5, 'TRANSFORMA035': 2.0, 'EG39B': 7.5, 'TRANSFORMA033': 2.0, 'TRANSFORMA032': 2.0, 'TRANSFORMA031': 2.0, 'EG50A': 10.0, 'TRANSFORMA034': 2.0, 'TRANSFORMA050': 2.0, 'LIT7A': 6.0, 'IPCPAIGE': 9.0, 'TRANSFORMG052': 2.0, 'TRANSFORMN022': 2.0, 'LIT80': 10.0, 'EG-S-FACTOR12': 4.0, 'EG-S-FACTOR13': 4.0, 'EG-S-FACTOR10': 4.0, 'EG-S-FACTOR11': 5.0, 'EG-S-FACTOR16': 4.0, 'EG-S-FACTOR17': 4.0, 'EG-S-FACTOR14': 4.0, 'EG-S-FACTOR15': 5.0, 'EG-S-FACTOR18': 4.0, 'EG-S-FACTOR19': 4.0, 'LIT28A': 13.0, '1PTB09': 7.0, '1PTB08': 6.0, 'TRANSFORMV019': 2.0, 'LIT79': 11.0, 'LIT78': 9.5, '1PTB03': 6.0, '1PTB02': 7.0, 'FEB13': 8.0, 'FEB12': 5.0, '1PTB07': 6.0, '1PTB06': 12.0, '1PTB05': 6.0, '1PTB04': 8.0, 'TOYSALES': 10.0, 'L3REAL21': 8.0, '2PTS08': 7.0, '2PTS07': 7.0, '2PTS06': 8.0, '2PTS03': 7.0, '2PTS02': 6.0, '2PTS01': 8.5, 'NEWQUAD9TRE': 7.0, 'LIT23A': 12.0, 'TRANSFORMN002': 1.5, 'LIT30': 8.0, 'SYSFB24': 9.0, 'L3JAN02': 4.0, 'EG59A': 10.0, 'REAL00': 7.0, 'LIT9A': 5.0, 'RXMX1A': 11.0, 'RXMX1B': 11.0, 'RXMX1C': 11.0, 'REAL13C': 13.0, 'REAL13B': 11.0, 'REAL13A': 13.0, 'SYSFB10': 8.0, 'LDEMO_MSYS': 11.0, 'EG39': 5.0, 'TRANSFORMG009': 2.0, 'PERCENT01B': 10.0, 'L3NOV10': 17.0, 'L3NOV12': 13.0, 'LIT49A': 9.0, 'EG-EPS04-FIXED': 15.0, 'BH1T15B': 13.0, 'BH1T15C': 12.0, 'LIT43': 12.0, 'BH1T15A': 11.0, 'L3REAL50': 6.0, 'PERCENT01C': 10.0, 'TRANSFORMN019': 2.0, 'REAL28': 10.0, 'DISTFB11_SP': 11.0, 'SYS19': 7.0, 'SYS18': 10.0, 'REAL33': 7.0, 'REAL32': 9.0, 'REAL31': 6.0, 'REAL30': 9.0, 'REAL37': 8.0, 'REAL36': 6.0, 'REAL35': 9.0, '1PTFB11': 7.0, '1PTFB10': 7.0, '1PTFB13': 8.0, '1PTFB12': 6.0, '1PTFB15': 6.0, '1PTFB14': 9.0, '1PTFB17': 10.0, '1PTFB16': 8.0, '1PTFB18': 8.0, 'LIT62A': 10.0, 'LIT29A': 12.0, 'EG47A': 9.0, 'EG9': nan, 'EG8': 8.0, 'EG-FACTOR29': 6.0, 'EG-FACTOR28': 4.5, 'EG37A': 31.5, 'LIT25': 7.0, 'EG-FACTOR25': 8.5, 'EG-FACTOR24': 7.75, 'EG-FACTOR27': 5.0, 'EG-FACTOR26': 4.0, 'EG-FACTOR21': 5.0, 'EG-FACTOR20': 10.0, 'EG-FACTOR23': 8.0, 'EG-FACTOR22': 5.0, 'EG40': 8.0, 'EG41': 7.0, 'EG42': 14.0, 'EG43': 10.0, 'EG44': 8.0, 'EG45': 8.0, 'EG46': 8.0, 'EG47': 8.0, 'EG48': 8.0, 'EG49': 8.0, 'TRANSFORMG011': 2.0, 'TRANSFORMG010': 3.0, 'TRANSFORMG017': 2.0, 'TRANSFORMG016': 2.0, 'TRANSFORMG015': 2.0, 'TRANSFORMG014': 2.0, 'L5FB03': 8.0, 'YLT3X+5': 4.0, 'BH1T21C': 13.0, 'L5FB02': 8.0, 'BH1T23C': 15.0, 'BH1T23B': 13.0, 'BH1T23A': 13.0, 'REAL13': 12.0, 'EMX04': 9.0, 'BH1T33B': 20.0, 'BH1T33C': 23.0, 'BH1T33A': 17.0, 'L5FB03A': 14.0, 'DEMO_8': 8.0, 'L5FB03B': 12.0, 'REAL01': 6.0, 'NEWSQUARE5TRE': 7.0, 'DEMO_5': 10.0, 'SYS10': 9.0, 'LIT52A': 8.0, 'TRANSFORMN006': 2.0, 'L5FB05': 8.5, 'FOR08_SP': 8.0, 'YLE-3X-13': 5.0, 'L5FB04': 12.0, 'EG62A': 17.0, 'LIT29': 7.0, 'REAL19': 11.0, 'TRANSFORMG037': 2.0, 'LIT15A': 14.5, 'TRANSFORMV025': 3.0, 'L3REAL45': 8.0, 'BH1T08A': 9.0, 'BH1T08B': 9.0, 'DISTFB06_SP': 9.0, 'RXMX_2': 9.0, 'FOR05': 10.0, 'FOR06': 8.0, 'FOR07': 5.0, 'LIT36': 6.0, 'TRANSFORMV010': 2.75, 'TRANSFORMV020': 1.75, 'EG10A': 40.0, 'EG10B': 34.0, 'EG10C': 7.0, 'TRANSFORMG005': 2.5, 'REAL48': 7.0, 'LIT79A': 18.0, 'EG6A': 6.0, 'LIT47A': 7.0, 'TRANSFORMV026': 3.5, 'TRANSFORMV011': 3.0, 'TRANSFORMV040': 4.0, 'LIT57A': 13.0, 'L1FB12C': 10.0, 'L1FB12B': 16.0, 'L1FB12A': 15.0, 'NEWQUAD3TRE': 5.0, 'YGE0': 3.0, 'LIT24': 6.0, 'FEB11': 7.0, 'LIT26': 7.0, 'LIT27': 6.0, 'LIT20': 8.0, 'LIT21': 6.0, 'LIT22': 7.0, 'LIT23': 6.0, 'TRANSFORMV012': 2.5, 'LIT75A': 5.0, 'LIT28': 7.0, 'EG32A': 4.0, 'EG32B': 4.0, 'EG32C': 4.0, 'REAL32C': 11.0, 'TRANSFORMV024': 2.0, 'TRANSFORMV027': 2.25, 'LIT74': 9.0, 'TRANSFORMV021': 2.0, 'SYS08': 6.0, 'TRANSFORMV023': 2.0, 'TRANSFORMV022': 2.0, 'L2FB15C': 10.0, 'L2FB15B': 9.0, 'L2FB15A': 10.0, 'TRANSFORMV029': 3.0, 'TRANSFORMV028': 2.0, 'L3REAL12': 8.0, 'LIT72': 8.0, 'DIST11_SP': 9.0, 'LIT71': 10.0, 'LIT68A': 19.0, 'LIT70': 11.0, 'BH1T21': 11.0, 'BH1T20': 10.0, 'BH1T23': 13.0, 'BH1T22': 15.0, 'BH1T25': 4.0, 'BH1T24': 12.0, 'BH1T27': 9.0, 'BH1T26': 13.0, 'BH1T29': 12.0, 'EG16': 4.0, 'EG15': 4.0, 'EG14': 5.0, 'EG13': 5.0, 'EG12': nan, 'EG11': 5.0, 'EG10': 7.0, 'EG5-FIXED': 13.0, 'LDEMO_4QGRPH': 10.0, 'TRANSFORMG018': 3.0, 'EG53A': 8.0, 'TPH15': 7.0, 'TRANSFORMN009': 1.5, 'NEWQUAD11TRE': 5.0, 'EG43A': 14.0, 'PROP07': 12.0, 'PROP06': 11.0, 'PROP01': 10.0, 'LIT2A': 12.0, 'PROP03': 10.0, 'NEWQUAD10TRE': 6.0, 'TRANSFORMG057': 3.25, 'TRANSFORMG056': 2.0, 'TRANSFORMG055': 3.0, 'TRANSFORMG054': 2.0, 'PROP09': 10.0, 'PROP08': 9.0, 'TRANSFORMG051': 2.5, 'TRANSFORMG050': 2.0, 'NOV04A': 17.0, 'L2FB14A': 12.0, 'TRANSFORMG059': 3.0, 'L2FB14B': 12.0, 'REAL02': 6.0, 'PERCENT18': 10.0, 'LIT53A': 10.0, 'NOV04B': 14.0, 'REAL06': 9.0, 'REAL05': 5.0, 'PERCENT11': 5.0, 'PERCENT10': 6.0, 'PERCENT12': 10.0, 'DEC01A': 8.0, 'EG1-FIXED': 12.0, 'DEC01C': 7.0, 'DEC01B': 7.0, 'TRANSFORMN008': 2.5, 'TRANSFORMA021': 2.25, 'BH1T34C': 10.0, 'EG13A': 4.0, 'BH1T34B': 12.5, 'EG-EQS01-FIXED': 4.0, 'P-3X-7YLE14': 6.0, 'EG19': nan, 'EG18': 4.0, 'EG17': 5.0, 'TRANSFORMG003': 2.5, 'LDEMO_SYS': 9.0, 'BH1T28': 9.0, 'EG58A': 9.0, 'LIT17A': 11.0, 'LIT22A': 13.0, 'EG-FACTOR32': 8.0, 'PERCENT14B': 8.0, 'PERCENT14C': 8.0, 'LIT35A': 9.0, 'PERCENT14A': 9.0, 'RXMX_2A': 11.0, 'TRANSFORMN007': 2.0, 'EMX03C': 8.0, 'LIT72A': 7.0, 'TRANSFORMG035': 1.5, 'EMX03B': 8.0, 'TRANSFORMN005': 1.5, 'DEC05': 6.0, 'DEC04': 7.0, 'DEC07': 7.0, 'DEC06': 6.0, 'DEC01': 8.0, 'LDEMO_MBGRPH': 14.0, 'DEC03': 15.0, 'DEC02': 8.0, 'TRANSFORMA042': 2.0, 'TRANSFORMG036': 2.0, 'BH1T28B': 8.0, 'EG14A': 4.0, 'BH1T28A': 8.0, 'NOV13': 7.0, 'LIT12A': 6.0, 'NOV11': 7.0, 'NOV14': 5.0, 'L6FB18': 9.0, 'BH1T41C': 9.0, 'BH1T41B': 8.0, 'BH1T41A': 10.0, 'TRANSFORMG012': 2.25, 'REAL19A': 9.5, 'NEWSQUARE7TRE': 7.0, 'LIT68': 14.0, 'BH1T10A': 12.0, 'FEB08': 6.0, 'FEB09': 8.0, 'LIT82A': 7.0, 'RXMX_3C': 14.5, 'EG56A': 21.0, 'FEB02': 6.0, 'FEB03': 8.0, 'L3NOV07C': 11.0, 'FEB01': 8.0, 'FEB06': 5.0, 'FEB07': 10.0, 'FEB04': 8.0, 'FEB05': 8.0, 'EG36A': 24.0, 'EG36B': 5.0, 'EG36C': 4.0, 'LIT87': 8.0, 'TRANSFORMA054': 3.0, 'TRANSFORMA051': 4.0, 'LIT84': 9.5, 'TRANSFORMA053': 3.0, 'TRANSFORMA052': 3.0, 'LIT85': 14.0, 'LIT1': 5.0, 'LIT60': 6.0, 'NEWQUAD1TRE': 7.25, 'LIT46A': 10.0, 'LIT83': 20.0, 'PROP05': 11.0, 'BH1T26A': 13.0, 'BH1T26B': 10.0, 'BH1T26C': 13.0, 'BH1T30C': 9.0, 'BH1T30B': 12.0, 'BH1T30A': 10.0, 'LIT81': 9.0, 'TRANSFORMN001': 1.5, 'NEWQUAD4TRE': 6.0, 'YGE2X+7': 5.0, 'LIT30A': 13.0, 'IPCSWIMMING': 8.0, 'TRANSFORMA001': 2.0, 'L3NOV10A': 13.0, 'DISTFB04_SP': 8.0, 'L3NOV10C': 14.5, 'L3NOV10B': 14.0, 'LIT65A': 10.0, 'EG8A': 9.0, 'DISTFB13_SP': 6.0, 'LIT50A': 9.0, 'LIT19': 6.0, 'LIT18': 7.0, 'YGT-2X': 5.0, 'LIT15': 7.0, 'LIT6A': 8.0, 'LIT17': 7.0, 'LIT16': 5.0, 'LIT11': 6.0, 'LIT10': 7.0, 'LIT13': 6.5, 'LIT12': 4.5, '2X+3YGT9': 4.0, 'EG-S-FACTOR29': 6.0, 'EG-S-FACTOR28': 5.5, 'EG-S-FACTOR27': 6.0, 'EG-S-FACTOR26': 6.0, 'EG-S-FACTOR25': 5.0, 'EG-S-FACTOR24': 5.0, 'EG-S-FACTOR23': 5.0, 'EG-S-FACTOR22': 5.0, 'EG-S-FACTOR21': 5.0, 'EG-S-FACTOR20': 4.0, 'JAN13C': 11.0, 'JAN13B': 8.5, 'JAN13A': 17.0, 'SYS09': 10.0, 'SYS06': 13.0, 'SYS07': 7.0, 'SYS04': 11.0, 'SYS05': 13.0, 'SYS02': 9.0, 'LIT16A': 13.5, 'LIT2': 6.0, 'SYS01': 12.0, 'LIT63': 10.0, 'BH1T50': 7.0, 'BH1T51': 11.0, 'BH1T52': 11.0, 'RXMX_2B': 13.0, 'EG17A': 4.0, 'EG-FACTOR33': 6.0, 'EG-FACTOR30': 5.0, 'EG-FACTOR31': 4.0, 'EG-FACTOR36': 6.0, 'EG-FACTOR37': 4.0, 'EG-FACTOR34': 5.0, 'EG-FACTOR35': 4.0, 'EG-FACTOR38': 5.0, 'EG-FACTOR39': 5.0, 'SYSFB06': 9.0, 'LIT64': 10.0, 'EG53': 8.0, 'EG52': 8.0, 'EG51': 9.0, 'EG50': 9.0, 'EG57': 8.0, 'EG56': 16.0, 'EG55': 12.0, 'EG54': 8.0, 'DISTFB08_SP': 8.0, 'EG59': 9.0, 'EG58': 7.0, 'TRANSFORMG008': 2.0, 'LIT31A': 7.0, 'LIT88': 8.0, 'LIT89': 12.0, 'EG5C': 5.0, 'EG5B': 6.0, 'EG5A': 6.0, 'LIT8A': 4.0, 'JAN04C': 12.0, 'JAN04B': 12.0, 'JAN04A': 8.5, 'LIT64A': 11.0, 'NOV06': 5.0, 'EG18A': 3.5, 'LIT76A': 23.0, 'LIT48A': 11.5, '4X-5YGT40': 6.0, 'NEWQUAD5TRE': 6.0, 'NEWSQUARE3TRE': 6.0, 'TRANSFORMG061': 2.0, 'TRANSFORMN004': 2.0, 'EG-FACTOR19': 4.0, 'SYSFB08': 8.0, 'EG6-FIXED': 14.0, 'LIT36A': 8.0, '2X+YGE6': 4.0, 'BH1T35A': 11.0, 'BH1T35B': 11.0, 'BH1T35C': 13.0, 'DIST03_SP': 9.0, 'TRANSFORMG049': 2.0, 'TRANSFORMG006': 2.25, 'L5FB16': 12.0, 'LDEMO_PTPT': 6.0, 'DIST05_SP': 7.0, 'IPCTURDUCKEN': 6.0, 'L5FB17': 7.0, 'YLT2X-5': 4.0, 'EG52A': 9.0, 'TRANSFORMA024': 2.0, 'LIT5A': 17.5, 'TRANSFORMA010': 2.0, 'TRANSFORMA013': 1.75, 'TRANSFORMA012': 2.0, 'TRANSFORMA015': 1.5, 'TRANSFORMA014': 2.5, 'TRANSFORMA017': 2.0, 'TRANSFORMA016': 2.25, 'TRANSFORMA019': 2.0, 'TRANSFORMA018': 2.25, 'NOV04C': 14.0, 'SYSFB09': 9.0, 'PROP04': 13.0, 'LIT26A': 11.0, 'TRANSFORMG001': 1.5, 'BH1T22A': 14.0, 'BH1T22B': 14.0, 'BH1T22C': 13.0, 'PERCENT14': 8.0, 'LIT51': 8.0, 'LIT50': 9.0, 'LIT53': 8.0, 'LIT52': 9.0, 'LIT55': 8.0, 'LIT54': 7.0, 'LIT57': 6.0, 'LIT56': 8.0, 'LIT59': 6.0, 'LIT58': 6.0, 'TRANSFORMA039': 3.0, 'PERCENT16': 7.0, 'EG-EPS01-FIXED': 4.0, 'TRANSFORMV036': 2.0, 'TRANSFORMV034': 2.75, 'TRANSFORMV032': 3.0, 'TRANSFORMV033': 2.75, 'TRANSFORMV030': 2.0, 'LIT18A': 3.0, 'L1FB12': 9.0, 'L1FB13': 7.0, 'LIT40': 15.0, 'REAL18_SP': 9.0, 'EG63A': 8.5, 'LIT33': 6.0, 'TRANSFORMG022': 1.5, 'LIT21A': 8.0, 'XLT150': 4.0, 'LIT31': 7.0, 'TRANSFORMN014': 1.5, 'TRANSFORMN015': 2.0, 'EG28': 6.0, 'EG29': 6.0, 'BH1T18': 5.0, 'BH1T19': 11.0, 'TRANSFORMN012': 2.0, 'TRANSFORMN013': 1.75, 'EG22': 8.0, 'EG23': 9.0, 'EG20': nan, 'EG21': 8.0, 'EG26': 8.0, 'EG27': 8.0, 'BH1T12': 5.0, 'EG25': 8.0, 'RXMX1': 11.0, 'YLT250': 4.0, 'TRANSFORMA011': 3.0, 'LIT34': 6.0, 'TRANSFORMG048': 2.0, 'BH1T17A': 12.0, 'BH1T17B': 14.0, 'BH1T17C': 13.0, 'DIST02_SP': 7.0, 'TRANSFORMG040': 2.0, 'TRANSFORMG041': 3.0, 'TRANSFORMG042': 2.0, 'TRANSFORMG043': 2.0, 'TRANSFORMG044': 2.5, 'TRANSFORMG045': 2.0, 'TRANSFORMG046': 2.0, 'TRANSFORMG047': 3.0, 'LIT78A': 29.0, 'EG49A': 9.0, 'RXMX_2C': 11.0, 'REAL10': 8.0, 'PERCENT08': 2.0, 'PERCENT09': 9.0, 'REAL17': 14.0, 'REAL16': 9.0, 'PERCENT02': 3.5, 'PERCENT03': 10.0, 'PERCENT01': 10.0, 'PERCENT06': 11.0, 'PERCENT07': 7.0, 'PERCENT04': 10.0, 'PERCENT05': 11.0, 'LIT60A': 12.0, 'TRANSFORMA049': 2.5, 'BH1T34A': 10.0, 'EG45A': 8.0, 'EG35A': 6.0, 'TRANSFORMV007': 3.0, 'EG35C': 6.0, 'EG35B': 6.0, 'TRANSFORMV002': 2.0, 'EG-FACTOR09': 7.0, 'EG-FACTOR08': 5.0, 'DIST09_SP': 7.0, 'LDEMO_WKST': 15.0, 'EG-FACTOR03': 7.0, 'EG-FACTOR02': 6.0, 'EG-FACTOR01': 11.0, 'L2FB14C': 14.0, 'EG-FACTOR07': 8.0, 'EG-FACTOR06': 7.0, 'EG-FACTOR05': 7.0, 'EG-FACTOR04': 8.0, 'EG-EPS09': 4.0, 'EG-EPS08': 4.0, 'PROP02': 10.0, 'TRANSFORMG039': 1.5, 'TRANSFORMG038': 1.5, 'EG-EPS01': 4.0, 'EG57A': 9.0, 'EG-EPS03': 4.0, 'EG-EPS02': 4.0, 'EG-EPS05': 5.0, 'EG-EPS04': 5.0, 'EG-EPS07': 5.0, 'EG-EPS06': 5.0, 'EG19A': 2.0, 'L3FB01': 8.0, 'BH1T31A': 11.0, 'BH1T31B': 12.0, 'BH1T31C': 13.0, 'EG3-FIXED': 9.0, 'EMX04A': 9.0, 'REAL17C': 12.0, 'TRANSFORMG028': 2.0, 'REAL17B': 13.0, 'NOV04': 15.0, 'NOV05': 8.0, 'L2FB15': 9.0, 'L2FB14': 10.0, 'REAL17A': 13.0, 'TRANSFORMN018': 2.0, 'YLT-X-4': 5.0, 'NOV09': 7.0, 'EG48A': 8.0, 'IPCRETIREMENT': 8.0, 'NEWQUAD8TRE': 5.0, 'PERCENT03A': 9.0, 'LIT13A': 7.0, 'TRANSFORMN032': 2.0, 'LIT54A': 9.0, 'NEWQUAD2TRE': 7.0, 'TRANSFORMG026': 2.5, 'EG37C': 6.0, 'EMX04B': 10.5, 'EMX04C': 11.0, 'EG12B': 4.0, 'EG12C': 19.0, 'EG37B': 7.0, 'L6FB06': 9.0, 'L6FB07': 10.0, 'SYSFB13': 9.0, 'TRANSFORMA046': 3.0, 'TRANSFORMA047': 2.0, 'TRANSFORMA044': 2.5, 'TRANSFORMA045': 2.5, 'L6FB08': 9.0, 'TRANSFORMA043': 2.5, 'TRANSFORMA040': 2.0, 'TRANSFORMA041': 2.5, 'EG3': 7.0, 'EG2': 6.0, 'SYSFB23': 8.0, 'LIT25A': 13.0, 'EG1': 6.0, 'LIT76': 9.0, 'EG7': 6.5, 'EG6B': 7.0, 'BH1T09': 6.5, 'EG6': 6.0, 'LIT77A': 10.0, 'BH1T08': 8.0, 'EG5': 6.0, 'REAL32A': 14.0, 'DISTFB10_SP': 8.0, 'PERCENT05A': 11.0, 'PERCENT05B': 10.0, 'EG4': 7.0, 'L3_DEMO': 6.0, 'P-2X+YLE9': 5.0, 'IPCBASEBALL': 8.0, 'YLE-7X+20': 6.0, 'LIT77': 9.0, 'JAN14': 8.5, 'JAN11': 11.0, 'SYSFB02': 10.0, 'JAN13': 58.0, 'JAN12': 7.0, 'YLEX+7': 4.0, 'SYS03': 10.0, 'SYSFB03': 8.0, 'PERCENT04B': 11.0, 'EG-S-FACTOR30': 6.0, 'SYSFB04': 8.0, 'LIT37A': 9.0, 'SYSFB05': 9.0, 'BH1T47': 15.0, 'EG-EQS04-FIXED': 11.0, 'BH1T45': 7.0, 'BH1T44': 15.0, 'BH1T43': 10.0, 'BH1T42': 8.0, 'BH1T41': 8.0, 'BH1T40': 10.0, 'TRANSFORMN025': 3.0, 'TRANSFORMN024': 1.75, 'TRANSFORMN027': 1.75, 'SYSFB07': 8.0, 'REAL32B': 14.0, 'BH1T49': 5.0, 'BH1T48': 15.0, '3X-YLT6': 4.0, 'LIT81A': 14.0, '2PTFB14': 8.0, '2PTFB15': 7.0, '2PTFB12': 7.0, '2PTFB13': 7.0, '2PTFB10': 6.0, '2PTFB11': 7.0, 'REAL20A': 13.0, 'EG9C': 3.0, 'REAL20C': 12.0, 'REAL20B': 13.0, '2PTFB18': 9.0, '2PTFB19': 12.0, 'EG-FACTOR47': 23.0, 'EG-FACTOR46': 5.0, 'EG-FACTOR45': 21.0, 'EG-FACTOR44': 11.0, 'EG-FACTOR43': 11.0, 'EG-FACTOR42': 9.0, 'EG-FACTOR41': 18.5, 'EG-FACTOR40': 5.0, 'IPCEVEREST': 7.0, 'PROP11': 6.0, 'EG39A': 12.0, 'EG-FACTOR49': 8.0, 'EG-FACTOR48': 13.0, 'SYSFB22': 8.0, 'LDEMO_GRPH': 13.0, 'SYSFB20': 7.0, 'SYSFB21': 9.0, 'EG62': 13.0, 'EG63': 8.0, 'EG60': 9.0, 'EG61': 13.0, 'BH1T19B': 9.0, 'BH1T19C': 9.0, 'BH1T19A': 12.0, 'TRANSFORMA020': 3.0, 'BH1T21A': 12.0, 'EG15A': 5.0, 'EG2-FIXED': 9.0, 'BH1T21B': 13.0, 'NEWQUAD6TRE': 6.0, 'LIT75': 10.5, 'LIT73': 10.0, 'TRANSFORMA022': 2.5, 'LIT27A': 11.0, 'TRANSFORMA023': 2.5, 'LIT19A': 12.0, 'TRANSFORMG063': 1.5, 'L3NOV12C': 13.0, 'RXMX_3': 14.0, 'TRANSFORMG004': 2.0, 'EMX03': 8.0, 'LDEMO_DIST_SP': 9.0, 'LIT20A': 13.5, 'LIT67A': 11.0, 'SYSFB14': 9.0, 'P-2X-2YGE9': 6.0, 'DIST10_SP': 8.0, 'EG6C': 6.0, 'TRANSFORMN031': 1.5, 'LIT58A': 13.0, 'DISTFB03_SP': 8.0, 'BH1T10C': 14.0, 'BH1T10B': 14.0, 'TRANSFORMG013': 2.0, 'TRANSFORMA002': 2.0, 'TRANSFORMA003': 2.0, 'EG16A': 5.0, 'TRANSFORMA006': 2.5, 'DIST06_SP': 7.0, 'EG8B': 8.0, 'EG8C': 8.0, 'TRANSFORMA008': 2.0, 'TRANSFORMA009': 1.5, 'NEWSQUARE8TRE': 8.0, 'BH1T28C': 10.0, 'LIT51A': 8.0, 'LIT10A': 8.0, 'EG-S-FACTOR01': 12.0, 'EG-S-FACTOR03': 4.0, 'EG-S-FACTOR02': 4.0, 'EG-S-FACTOR05': 4.0, 'EG-S-FACTOR04': 4.0, 'EG-S-FACTOR07': 4.0, 'EG-S-FACTOR06': 5.0, 'EG-S-FACTOR09': 4.0, 'EG-S-FACTOR08': 4.0, 'FBSMR1': 10.0, 'FBSMR2': 14.0, 'FBSMR3': 10.5, 'LIT42': 9.0, 'IPCCHEF': 7.0, 'EG46A': 8.0, 'LIT41': 13.0, 'LIT46': 7.0, 'LIT47': 8.0, 'LIT44': 11.0, 'EG34B': 5.0, 'EG34C': 5.0, 'LIT48': 9.0, 'EG34A': 6.0, 'LIT63A': 11.0, 'TRANSFORMV003': 2.25, 'LDEMO_WSLVR': 14.0, 'TRANSFORMV001': 3.0, 'PERCENT05C': 10.0, 'EG4-FIXED': 9.0, 'TRANSFORMV006': 3.0, 'TRANSFORMV005': 2.25, 'TRANSFORMV004': 2.0, 'TRANSFORMV009': 2.5, 'TRANSFORMV008': 3.0, 'X-3YGE20': 5.0, 'NEWS01C': 10.0, '7X-4YGE15': 5.0, 'NEWS01B': 8.0, 'NEWS01A': 9.0, 'BH1T36A': 10.0, 'BH1T36C': 13.0, 'BH1T36B': 13.0, 'L5FB04A': 9.0, 'L5FB04B': 12.0, 'L5FB04C': 17.0, 'BH1T03': 5.0, 'BH1T02': 9.0, 'LIT83A': 22.0, 'BH1T07': 7.0, 'BH1T06': 9.0, 'BH1T05': 5.0, 'BH1T04': 6.0, 'L3NOV08': 6.5, 'L3NOV07': 10.0, 'L3NOV12B': 14.0, 'L3NOV12A': 15.0, 'DISTFB05_SP': 7.0, 'LIT4A': 4.0, 'EG51A': 9.0, 'TRANSFORMG058': 2.75, 'L5FB03C': 11.5, 'NEWSQUARE1TRE': 8.0}\n"
       ]
      }
     ],
     "prompt_number": 47
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import operator"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 69
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "sorted_times = sorted(pmedian_times.iteritems(), key=operator.itemgetter(1), reverse=True)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 86
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "traindata.columns"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 88,
       "text": [
        "Index([u'Row', u'Anon Student Id', u'Problem Hierarchy', u'Problem Name', u'Problem View', u'Step Name', u'Step Start Time', u'First Transaction Time', u'Correct Transaction Time', u'Step End Time', u'Step Duration (sec)', u'Correct Step Duration (sec)', u'Error Step Duration (sec)', u'Correct First Attempt', u'Incorrects', u'Hints', u'Corrects', u'KC(Default)', u'Opportunity(Default)'], dtype='object')"
       ]
      }
     ],
     "prompt_number": 88
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "traindata['Step Name']"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 89,
       "text": [
        "0        3(x+2) = 15\n",
        "1            x+2 = 5\n",
        "2          2-8y = -4\n",
        "3           -8y = -6\n",
        "4         -7y-5 = -4\n",
        "5            -7y = 1\n",
        "6           7y+4 = 7\n",
        "7             7y = 3\n",
        "8         -5+9y = -6\n",
        "9            9y = -1\n",
        "10        -7-3x = -2\n",
        "11    -7-3x+7 = -2+7\n",
        "12           -3x = 5\n",
        "13     -3x/-3 = 5/-3\n",
        "14         -9 = 8y+9\n",
        "...\n",
        "809679             -4x = 5\n",
        "809680       -4x/-4 = 5/-4\n",
        "809681            x = 5/-4\n",
        "809682          0 = -1y-10\n",
        "809683    0+10 = -1y-10+10\n",
        "809684      10 = -1y-10+10\n",
        "809685            10 = -1y\n",
        "809686      10/-1 = -1y/-1\n",
        "809687        -10 = -1y/-1\n",
        "809688           -7+2x = 4\n",
        "809689       -7+2x+7 = 4+7\n",
        "809690            2x = 4+7\n",
        "809691             2x = 11\n",
        "809692         2x/2 = 11/2\n",
        "809693           -2+5x = 8\n",
        "Name: Step Name, Length: 809694, dtype: object"
       ]
      }
     ],
     "prompt_number": 89
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}