{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### This is an experiment in using the Kotlin kernel for Jupyter \n",
    "Note: this notebook was updated July 2021 to point to newer versions of its dependencies, which had become deprecated and were not allowing the notebook to complete successfully. It was also used for a presentation of Kotlin's Jupyter kernel in March 2021, so the 2020 season data, which didn't exist at the time the initial article was written, was added."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"zsgaf8\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"library\">\n",
       "       if(!window.letsPlotCallQueue) {\n",
       "           window.letsPlotCallQueue = [];\n",
       "       }; \n",
       "       window.letsPlotCall = function(f) {\n",
       "           window.letsPlotCallQueue.push(f);\n",
       "       };\n",
       "       (function() {\n",
       "           var script = document.createElement(\"script\");\n",
       "           script.type = \"text/javascript\";\n",
       "           script.src = \"https://cdnjs.cloudflare.com/ajax/libs/lets-plot/2.0.2/lets-plot.min.js\";\n",
       "           script.onload = function() {\n",
       "               window.letsPlotCall = function(f) {f();};\n",
       "               window.letsPlotCallQueue.forEach(function(f) {f();});\n",
       "               window.letsPlotCallQueue = [];\n",
       "               \n",
       "               \n",
       "           };\n",
       "           script.onerror = function(event) {\n",
       "               window.letsPlotCall = function(f) {};\n",
       "               window.letsPlotCallQueue = [];\n",
       "               var div = document.createElement(\"div\");\n",
       "               div.style.color = 'darkred';\n",
       "               div.textContent = 'Error loading Lets-Plot JS';\n",
       "               document.getElementById(\"zsgaf8\").appendChild(div);\n",
       "           };\n",
       "           var e = document.getElementById(\"zsgaf8\");\n",
       "           e.appendChild(script);\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "// two \"supported\" packages, we can skip the full dependency & import boilerplate\n",
    "%use lets-plot, krangl  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><table><tr><th style=\"text-align:left\">Rk</th><th style=\"text-align:left\">Year</th><th style=\"text-align:left\">Tms</th><th style=\"text-align:left\">Cmp</th><th style=\"text-align:left\">Att</th><th style=\"text-align:left\">Cmp%</th><th style=\"text-align:left\">Yds</th><th style=\"text-align:left\">TD</th><th style=\"text-align:left\">TD%</th><th style=\"text-align:left\">Int</th><th style=\"text-align:left\">Int%</th><th style=\"text-align:left\">Y/A</th><th style=\"text-align:left\">AY/A</th><th style=\"text-align:left\">Y/C</th><th style=\"text-align:left\">Y/G</th><th style=\"text-align:left\">Rate</th><th style=\"text-align:left\">Sk</th><th style=\"text-align:left\">SkYds</th><th style=\"text-align:left\">NY/A</th><th style=\"text-align:left\">ANY/A</th><th style=\"text-align:left\">Sk%</th></tr><tr><td style=\"text-align:left\" title=\"1\">1</td><td style=\"text-align:left\" title=\"2020\">2020</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"11756\">11756</td><td style=\"text-align:left\" title=\"18018\">18018</td><td style=\"text-align:left\" title=\"65.2\">65.2</td><td style=\"text-align:left\" title=\"122957\">122957</td><td style=\"text-align:left\" title=\"871\">871</td><td style=\"text-align:left\" title=\"4.8\">4.8</td><td style=\"text-align:left\" title=\"395\">395</td><td style=\"text-align:left\" title=\"2.2\">2.2</td><td style=\"text-align:left\" title=\"7.2\">7.2</td><td style=\"text-align:left\" title=\"7.2\">7.2</td><td style=\"text-align:left\" title=\"11.1\">11.1</td><td style=\"text-align:left\" title=\"240.2\">240.2</td><td style=\"text-align:left\" title=\"93.6\">93.6</td><td style=\"text-align:left\" title=\"1135\">1135</td><td style=\"text-align:left\" title=\"7543\">7543</td><td style=\"text-align:left\" title=\"6.42\">6.42</td><td style=\"text-align:left\" title=\"6.4\">6.4</td><td style=\"text-align:left\" title=\"5.9\">5.9</td></tr><tr><td style=\"text-align:left\" title=\"2\">2</td><td style=\"text-align:left\" title=\"2019\">2019</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"11331\">11331</td><td style=\"text-align:left\" title=\"17853\">17853</td><td style=\"text-align:left\" title=\"63.5\">63.5</td><td style=\"text-align:left\" title=\"120301\">120301</td><td style=\"text-align:left\" title=\"797\">797</td><td style=\"text-align:left\" title=\"4.5\">4.5</td><td style=\"text-align:left\" title=\"410\">410</td><td style=\"text-align:left\" title=\"2.3\">2.3</td><td style=\"text-align:left\" title=\"7.2\">7.2</td><td style=\"text-align:left\" title=\"7.1\">7.1</td><td style=\"text-align:left\" title=\"11.4\">11.4</td><td style=\"text-align:left\" title=\"235.0\">235.0</td><td style=\"text-align:left\" title=\"90.4\">90.4</td><td style=\"text-align:left\" title=\"1276\">1276</td><td style=\"text-align:left\" title=\"8610\">8610</td><td style=\"text-align:left\" title=\"6.29\">6.29</td><td style=\"text-align:left\" title=\"6.2\">6.2</td><td style=\"text-align:left\" title=\"6.7\">6.7</td></tr><tr><td style=\"text-align:left\" title=\"3\">3</td><td style=\"text-align:left\" title=\"2018\">2018</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"11462\">11462</td><td style=\"text-align:left\" title=\"17671\">17671</td><td style=\"text-align:left\" title=\"64.9\">64.9</td><td style=\"text-align:left\" title=\"121737\">121737</td><td style=\"text-align:left\" title=\"847\">847</td><td style=\"text-align:left\" title=\"4.8\">4.8</td><td style=\"text-align:left\" title=\"419\">419</td><td style=\"text-align:left\" title=\"2.4\">2.4</td><td style=\"text-align:left\" title=\"7.4\">7.4</td><td style=\"text-align:left\" title=\"7.3\">7.3</td><td style=\"text-align:left\" title=\"11.4\">11.4</td><td style=\"text-align:left\" title=\"237.8\">237.8</td><td style=\"text-align:left\" title=\"92.9\">92.9</td><td style=\"text-align:left\" title=\"1281\">1281</td><td style=\"text-align:left\" title=\"8530\">8530</td><td style=\"text-align:left\" title=\"6.42\">6.42</td><td style=\"text-align:left\" title=\"6.3\">6.3</td><td style=\"text-align:left\" title=\"6.8\">6.8</td></tr><tr><td style=\"text-align:left\" title=\"4\">4</td><td style=\"text-align:left\" title=\"2017\">2017</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"10856\">10856</td><td style=\"text-align:left\" title=\"17488\">17488</td><td style=\"text-align:left\" title=\"62.1\">62.1</td><td style=\"text-align:left\" title=\"114870\">114870</td><td style=\"text-align:left\" title=\"741\">741</td><td style=\"text-align:left\" title=\"4.2\">4.2</td><td style=\"text-align:left\" title=\"430\">430</td><td style=\"text-align:left\" title=\"2.5\">2.5</td><td style=\"text-align:left\" title=\"7.0\">7.0</td><td style=\"text-align:left\" title=\"6.8\">6.8</td><td style=\"text-align:left\" title=\"11.3\">11.3</td><td style=\"text-align:left\" title=\"224.4\">224.4</td><td style=\"text-align:left\" title=\"86.9\">86.9</td><td style=\"text-align:left\" title=\"1195\">1195</td><td style=\"text-align:left\" title=\"7810\">7810</td><td style=\"text-align:left\" title=\"6.15\">6.15</td><td style=\"text-align:left\" title=\"5.9\">5.9</td><td style=\"text-align:left\" title=\"6.4\">6.4</td></tr><tr><td style=\"text-align:left\" title=\"5\">5</td><td style=\"text-align:left\" title=\"2016\">2016</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"11526\">11526</td><td style=\"text-align:left\" title=\"18295\">18295</td><td style=\"text-align:left\" title=\"63.0\">63.0</td><td style=\"text-align:left\" title=\"123639\">123639</td><td style=\"text-align:left\" title=\"786\">786</td><td style=\"text-align:left\" title=\"4.3\">4.3</td><td style=\"text-align:left\" title=\"415\">415</td><td style=\"text-align:left\" title=\"2.3\">2.3</td><td style=\"text-align:left\" title=\"7.2\">7.2</td><td style=\"text-align:left\" title=\"7.0\">7.0</td><td style=\"text-align:left\" title=\"11.4\">11.4</td><td style=\"text-align:left\" title=\"241.5\">241.5</td><td style=\"text-align:left\" title=\"89.3\">89.3</td><td style=\"text-align:left\" title=\"1118\">1118</td><td style=\"text-align:left\" title=\"7225\">7225</td><td style=\"text-align:left\" title=\"6.37\">6.37</td><td style=\"text-align:left\" title=\"6.2\">6.2</td><td style=\"text-align:left\" title=\"5.8\">5.8</td></tr><tr><td style=\"text-align:left\" title=\"6\">6</td><td style=\"text-align:left\" title=\"2015\">2015</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"11527\">11527</td><td style=\"text-align:left\" title=\"18298\">18298</td><td style=\"text-align:left\" title=\"63.0\">63.0</td><td style=\"text-align:left\" title=\"124843\">124843</td><td style=\"text-align:left\" title=\"842\">842</td><td style=\"text-align:left\" title=\"4.6\">4.6</td><td style=\"text-align:left\" title=\"436\">436</td><td style=\"text-align:left\" title=\"2.4\">2.4</td><td style=\"text-align:left\" title=\"7.3\">7.3</td><td style=\"text-align:left\" title=\"7.1\">7.1</td><td style=\"text-align:left\" title=\"11.5\">11.5</td><td style=\"text-align:left\" title=\"243.8\">243.8</td><td style=\"text-align:left\" title=\"90.2\">90.2</td><td style=\"text-align:left\" title=\"1187\">1187</td><td style=\"text-align:left\" title=\"7850\">7850</td><td style=\"text-align:left\" title=\"6.41\">6.41</td><td style=\"text-align:left\" title=\"6.3\">6.3</td><td style=\"text-align:left\" title=\"6.1\">6.1</td></tr><tr><td style=\"text-align:left\" title=\"7\">7</td><td style=\"text-align:left\" title=\"2014\">2014</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"11200\">11200</td><td style=\"text-align:left\" title=\"17879\">17879</td><td style=\"text-align:left\" title=\"62.6\">62.6</td><td style=\"text-align:left\" title=\"121247\">121247</td><td style=\"text-align:left\" title=\"807\">807</td><td style=\"text-align:left\" title=\"4.5\">4.5</td><td style=\"text-align:left\" title=\"450\">450</td><td style=\"text-align:left\" title=\"2.5\">2.5</td><td style=\"text-align:left\" title=\"7.2\">7.2</td><td style=\"text-align:left\" title=\"7.0\">7.0</td><td style=\"text-align:left\" title=\"11.5\">11.5</td><td style=\"text-align:left\" title=\"236.8\">236.8</td><td style=\"text-align:left\" title=\"88.9\">88.9</td><td style=\"text-align:left\" title=\"1212\">1212</td><td style=\"text-align:left\" title=\"7651\">7651</td><td style=\"text-align:left\" title=\"6.35\">6.35</td><td style=\"text-align:left\" title=\"6.1\">6.1</td><td style=\"text-align:left\" title=\"6.3\">6.3</td></tr><tr><td style=\"text-align:left\" title=\"8\">8</td><td style=\"text-align:left\" title=\"2013\">2013</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"11102\">11102</td><td style=\"text-align:left\" title=\"18136\">18136</td><td style=\"text-align:left\" title=\"61.2\">61.2</td><td style=\"text-align:left\" title=\"120626\">120626</td><td style=\"text-align:left\" title=\"804\">804</td><td style=\"text-align:left\" title=\"4.4\">4.4</td><td style=\"text-align:left\" title=\"502\">502</td><td style=\"text-align:left\" title=\"2.8\">2.8</td><td style=\"text-align:left\" title=\"7.1\">7.1</td><td style=\"text-align:left\" title=\"6.8\">6.8</td><td style=\"text-align:left\" title=\"11.6\">11.6</td><td style=\"text-align:left\" title=\"235.6\">235.6</td><td style=\"text-align:left\" title=\"86.0\">86.0</td><td style=\"text-align:left\" title=\"1295\">1295</td><td style=\"text-align:left\" title=\"8551\">8551</td><td style=\"text-align:left\" title=\"6.21\">6.21</td><td style=\"text-align:left\" title=\"5.9\">5.9</td><td style=\"text-align:left\" title=\"6.7\">6.7</td></tr><tr><td style=\"text-align:left\" title=\"9\">9</td><td style=\"text-align:left\" title=\"2012\">2012</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"10833\">10833</td><td style=\"text-align:left\" title=\"17788\">17788</td><td style=\"text-align:left\" title=\"60.9\">60.9</td><td style=\"text-align:left\" title=\"118418\">118418</td><td style=\"text-align:left\" title=\"757\">757</td><td style=\"text-align:left\" title=\"4.3\">4.3</td><td style=\"text-align:left\" title=\"468\">468</td><td style=\"text-align:left\" title=\"2.6\">2.6</td><td style=\"text-align:left\" title=\"7.1\">7.1</td><td style=\"text-align:left\" title=\"6.7\">6.7</td><td style=\"text-align:left\" title=\"11.6\">11.6</td><td style=\"text-align:left\" title=\"231.3\">231.3</td><td style=\"text-align:left\" title=\"85.6\">85.6</td><td style=\"text-align:left\" title=\"1169\">1169</td><td style=\"text-align:left\" title=\"7533\">7533</td><td style=\"text-align:left\" title=\"6.25\">6.25</td><td style=\"text-align:left\" title=\"5.9\">5.9</td><td style=\"text-align:left\" title=\"6.2\">6.2</td></tr><tr><td style=\"text-align:left\" title=\"10\">10</td><td style=\"text-align:left\" title=\"2011\">2011</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"10464\">10464</td><td style=\"text-align:left\" title=\"17410\">17410</td><td style=\"text-align:left\" title=\"60.1\">60.1</td><td style=\"text-align:left\" title=\"117601\">117601</td><td style=\"text-align:left\" title=\"745\">745</td><td style=\"text-align:left\" title=\"4.3\">4.3</td><td style=\"text-align:left\" title=\"506\">506</td><td style=\"text-align:left\" title=\"2.9\">2.9</td><td style=\"text-align:left\" title=\"7.2\">7.2</td><td style=\"text-align:left\" title=\"6.7\">6.7</td><td style=\"text-align:left\" title=\"12.0\">12.0</td><td style=\"text-align:left\" title=\"229.7\">229.7</td><td style=\"text-align:left\" title=\"84.3\">84.3</td><td style=\"text-align:left\" title=\"1188\">1188</td><td style=\"text-align:left\" title=\"7729\">7729</td><td style=\"text-align:left\" title=\"6.32\">6.32</td><td style=\"text-align:left\" title=\"5.9\">5.9</td><td style=\"text-align:left\" title=\"6.4\">6.4</td></tr><tr><td style=\"text-align:left\" title=\"11\">11</td><td style=\"text-align:left\" title=\"2010\">2010</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"10491\">10491</td><td style=\"text-align:left\" title=\"17269\">17269</td><td style=\"text-align:left\" title=\"60.8\">60.8</td><td style=\"text-align:left\" title=\"113450\">113450</td><td style=\"text-align:left\" title=\"751\">751</td><td style=\"text-align:left\" title=\"4.3\">4.3</td><td style=\"text-align:left\" title=\"511\">511</td><td style=\"text-align:left\" title=\"3.0\">3.0</td><td style=\"text-align:left\" title=\"7.0\">7.0</td><td style=\"text-align:left\" title=\"6.5\">6.5</td><td style=\"text-align:left\" title=\"11.5\">11.5</td><td style=\"text-align:left\" title=\"221.6\">221.6</td><td style=\"text-align:left\" title=\"84.1\">84.1</td><td style=\"text-align:left\" title=\"1130\">1130</td><td style=\"text-align:left\" title=\"7514\">7514</td><td style=\"text-align:left\" title=\"6.17\">6.17</td><td style=\"text-align:left\" title=\"5.7\">5.7</td><td style=\"text-align:left\" title=\"6.1\">6.1</td></tr><tr><td style=\"text-align:left\" title=\"12\">12</td><td style=\"text-align:left\" title=\"2009\">2009</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"10372\">10372</td><td style=\"text-align:left\" title=\"17033\">17033</td><td style=\"text-align:left\" title=\"60.9\">60.9</td><td style=\"text-align:left\" title=\"111851\">111851</td><td style=\"text-align:left\" title=\"710\">710</td><td style=\"text-align:left\" title=\"4.2\">4.2</td><td style=\"text-align:left\" title=\"525\">525</td><td style=\"text-align:left\" title=\"3.1\">3.1</td><td style=\"text-align:left\" title=\"7.0\">7.0</td><td style=\"text-align:left\" title=\"6.4\">6.4</td><td style=\"text-align:left\" title=\"11.5\">11.5</td><td style=\"text-align:left\" title=\"218.5\">218.5</td><td style=\"text-align:left\" title=\"83.0\">83.0</td><td style=\"text-align:left\" title=\"1101\">1101</td><td style=\"text-align:left\" title=\"7066\">7066</td><td style=\"text-align:left\" title=\"6.17\">6.17</td><td style=\"text-align:left\" title=\"5.6\">5.6</td><td style=\"text-align:left\" title=\"6.1\">6.1</td></tr><tr><td style=\"text-align:left\" title=\"13\">13</td><td style=\"text-align:left\" title=\"2008\">2008</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"10081\">10081</td><td style=\"text-align:left\" title=\"16526\">16526</td><td style=\"text-align:left\" title=\"61.0\">61.0</td><td style=\"text-align:left\" title=\"108177\">108177</td><td style=\"text-align:left\" title=\"646\">646</td><td style=\"text-align:left\" title=\"3.9\">3.9</td><td style=\"text-align:left\" title=\"465\">465</td><td style=\"text-align:left\" title=\"2.8\">2.8</td><td style=\"text-align:left\" title=\"6.9\">6.9</td><td style=\"text-align:left\" title=\"6.5\">6.5</td><td style=\"text-align:left\" title=\"11.4\">11.4</td><td style=\"text-align:left\" title=\"211.3\">211.3</td><td style=\"text-align:left\" title=\"83.2\">83.2</td><td style=\"text-align:left\" title=\"1036\">1036</td><td style=\"text-align:left\" title=\"6589\">6589</td><td style=\"text-align:left\" title=\"6.16\">6.16</td><td style=\"text-align:left\" title=\"5.7\">5.7</td><td style=\"text-align:left\" title=\"5.9\">5.9</td></tr><tr><td style=\"text-align:left\" title=\"14\">14</td><td style=\"text-align:left\" title=\"2007\">2007</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"10425\">10425</td><td style=\"text-align:left\" title=\"17045\">17045</td><td style=\"text-align:left\" title=\"61.2\">61.2</td><td style=\"text-align:left\" title=\"109722\">109722</td><td style=\"text-align:left\" title=\"720\">720</td><td style=\"text-align:left\" title=\"4.2\">4.2</td><td style=\"text-align:left\" title=\"534\">534</td><td style=\"text-align:left\" title=\"3.1\">3.1</td><td style=\"text-align:left\" title=\"6.9\">6.9</td><td style=\"text-align:left\" title=\"6.3\">6.3</td><td style=\"text-align:left\" title=\"11.2\">11.2</td><td style=\"text-align:left\" title=\"214.3\">214.3</td><td style=\"text-align:left\" title=\"82.6\">82.6</td><td style=\"text-align:left\" title=\"1102\">1102</td><td style=\"text-align:left\" title=\"7152\">7152</td><td style=\"text-align:left\" title=\"6.05\">6.05</td><td style=\"text-align:left\" title=\"5.5\">5.5</td><td style=\"text-align:left\" title=\"6.1\">6.1</td></tr><tr><td style=\"text-align:left\" title=\"15\">15</td><td style=\"text-align:left\" title=\"2006\">2006</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"9796\">9796</td><td style=\"text-align:left\" title=\"16389\">16389</td><td style=\"text-align:left\" title=\"59.8\">59.8</td><td style=\"text-align:left\" title=\"104861\">104861</td><td style=\"text-align:left\" title=\"648\">648</td><td style=\"text-align:left\" title=\"4.0\">4.0</td><td style=\"text-align:left\" title=\"520\">520</td><td style=\"text-align:left\" title=\"3.2\">3.2</td><td style=\"text-align:left\" title=\"6.9\">6.9</td><td style=\"text-align:left\" title=\"6.2\">6.2</td><td style=\"text-align:left\" title=\"11.5\">11.5</td><td style=\"text-align:left\" title=\"204.8\">204.8</td><td style=\"text-align:left\" title=\"80.4\">80.4</td><td style=\"text-align:left\" title=\"1164\">1164</td><td style=\"text-align:left\" title=\"7416\">7416</td><td style=\"text-align:left\" title=\"5.97\">5.97</td><td style=\"text-align:left\" title=\"5.4\">5.4</td><td style=\"text-align:left\" title=\"6.6\">6.6</td></tr><tr><td style=\"text-align:left\" title=\"16\">16</td><td style=\"text-align:left\" title=\"2005\">2005</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"9790\">9790</td><td style=\"text-align:left\" title=\"16464\">16464</td><td style=\"text-align:left\" title=\"59.5\">59.5</td><td style=\"text-align:left\" title=\"104168\">104168</td><td style=\"text-align:left\" title=\"644\">644</td><td style=\"text-align:left\" title=\"3.9\">3.9</td><td style=\"text-align:left\" title=\"506\">506</td><td style=\"text-align:left\" title=\"3.1\">3.1</td><td style=\"text-align:left\" title=\"6.8\">6.8</td><td style=\"text-align:left\" title=\"6.2\">6.2</td><td style=\"text-align:left\" title=\"11.4\">11.4</td><td style=\"text-align:left\" title=\"203.5\">203.5</td><td style=\"text-align:left\" title=\"80.1\">80.1</td><td style=\"text-align:left\" title=\"1182\">1182</td><td style=\"text-align:left\" title=\"7553\">7553</td><td style=\"text-align:left\" title=\"5.90\">5.90</td><td style=\"text-align:left\" title=\"5.3\">5.3</td><td style=\"text-align:left\" title=\"6.7\">6.7</td></tr><tr><td style=\"text-align:left\" title=\"17\">17</td><td style=\"text-align:left\" title=\"2004\">2004</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"9772\">9772</td><td style=\"text-align:left\" title=\"16354\">16354</td><td style=\"text-align:left\" title=\"59.8\">59.8</td><td style=\"text-align:left\" title=\"107797\">107797</td><td style=\"text-align:left\" title=\"732\">732</td><td style=\"text-align:left\" title=\"4.5\">4.5</td><td style=\"text-align:left\" title=\"524\">524</td><td style=\"text-align:left\" title=\"3.2\">3.2</td><td style=\"text-align:left\" title=\"7.1\">7.1</td><td style=\"text-align:left\" title=\"6.5\">6.5</td><td style=\"text-align:left\" title=\"11.8\">11.8</td><td style=\"text-align:left\" title=\"210.5\">210.5</td><td style=\"text-align:left\" title=\"82.8\">82.8</td><td style=\"text-align:left\" title=\"1196\">1196</td><td style=\"text-align:left\" title=\"7541\">7541</td><td style=\"text-align:left\" title=\"6.14\">6.14</td><td style=\"text-align:left\" title=\"5.6\">5.6</td><td style=\"text-align:left\" title=\"6.8\">6.8</td></tr><tr><td style=\"text-align:left\" title=\"18\">18</td><td style=\"text-align:left\" title=\"2003\">2003</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"9695\">9695</td><td style=\"text-align:left\" title=\"16493\">16493</td><td style=\"text-align:left\" title=\"58.8\">58.8</td><td style=\"text-align:left\" title=\"102628\">102628</td><td style=\"text-align:left\" title=\"654\">654</td><td style=\"text-align:left\" title=\"4.0\">4.0</td><td style=\"text-align:left\" title=\"538\">538</td><td style=\"text-align:left\" title=\"3.3\">3.3</td><td style=\"text-align:left\" title=\"6.6\">6.6</td><td style=\"text-align:left\" title=\"6.0\">6.0</td><td style=\"text-align:left\" title=\"11.3\">11.3</td><td style=\"text-align:left\" title=\"200.4\">200.4</td><td style=\"text-align:left\" title=\"78.3\">78.3</td><td style=\"text-align:left\" title=\"1092\">1092</td><td style=\"text-align:left\" title=\"6839\">6839</td><td style=\"text-align:left\" title=\"5.84\">5.84</td><td style=\"text-align:left\" title=\"5.2\">5.2</td><td style=\"text-align:left\" title=\"6.2\">6.2</td></tr><tr><td style=\"text-align:left\" title=\"19\">19</td><td style=\"text-align:left\" title=\"2002\">2002</td><td style=\"text-align:left\" title=\"32\">32</td><td style=\"text-align:left\" title=\"10314\">10314</td><td style=\"text-align:left\" title=\"17292\">17292</td><td style=\"text-align:left\" title=\"59.6\">59.6</td><td style=\"text-align:left\" title=\"108661\">108661</td><td style=\"text-align:left\" title=\"694\">694</td><td style=\"text-align:left\" title=\"4.0\">4.0</td><td style=\"text-align:left\" title=\"528\">528</td><td style=\"text-align:left\" title=\"3.1\">3.1</td><td style=\"text-align:left\" title=\"6.7\">6.7</td><td style=\"text-align:left\" title=\"6.1\">6.1</td><td style=\"text-align:left\" title=\"11.3\">11.3</td><td style=\"text-align:left\" title=\"212.2\">212.2</td><td style=\"text-align:left\" title=\"80.4\">80.4</td><td style=\"text-align:left\" title=\"1175\">1175</td><td style=\"text-align:left\" title=\"7540\">7540</td><td style=\"text-align:left\" title=\"5.88\">5.88</td><td style=\"text-align:left\" title=\"5.3\">5.3</td><td style=\"text-align:left\" title=\"6.4\">6.4</td></tr><tr><td style=\"text-align:left\" title=\"20\">20</td><td style=\"text-align:left\" title=\"2001\">2001</td><td style=\"text-align:left\" title=\"31\">31</td><td style=\"text-align:left\" title=\"9542\">9542</td><td style=\"text-align:left\" title=\"16181\">16181</td><td style=\"text-align:left\" title=\"59.0\">59.0</td><td style=\"text-align:left\" title=\"102080\">102080</td><td style=\"text-align:left\" title=\"635\">635</td><td style=\"text-align:left\" title=\"3.9\">3.9</td><td style=\"text-align:left\" title=\"545\">545</td><td style=\"text-align:left\" title=\"3.4\">3.4</td><td style=\"text-align:left\" title=\"6.8\">6.8</td><td style=\"text-align:left\" title=\"6.0\">6.0</td><td style=\"text-align:left\" title=\"11.5\">11.5</td><td style=\"text-align:left\" title=\"205.8\">205.8</td><td style=\"text-align:left\" title=\"78.5\">78.5</td><td style=\"text-align:left\" title=\"1196\">1196</td><td style=\"text-align:left\" title=\"7559\">7559</td><td style=\"text-align:left\" title=\"5.87\">5.87</td><td style=\"text-align:left\" title=\"5.2\">5.2</td><td style=\"text-align:left\" title=\"6.9\">6.9</td></tr></table><p>... only showing top 20 rows</p></body></html>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "// csv is courtesy of pro-football-reference: https://www.pro-football-reference.com/years/NFL/passing.htm\n",
    "val dfPassing = DataFrame.readCSV(\"nfl_passing.csv\")\n",
    "dfPassing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{Rk=[Ljava.lang.Integer;@2873d672, Year=[Ljava.lang.Integer;@3bc735b3, Tms=[Ljava.lang.Integer;@577f9109, Cmp=[Ljava.lang.Integer;@4303b7f0, Att=[Ljava.lang.Integer;@757529a4, Cmp%=[Ljava.lang.Double;@779de014, Yds=[Ljava.lang.Integer;@5c41d037, TD=[Ljava.lang.Integer;@2234078, TD%=[Ljava.lang.Double;@5ec77191, Int=[Ljava.lang.Integer;@4642b71d, Int%=[Ljava.lang.Double;@1450078a, Y/A=[Ljava.lang.Double;@c68a5f8, AY/A=[Ljava.lang.Double;@69c6161d, Y/C=[Ljava.lang.Double;@3aefae67, Y/G=[Ljava.lang.Double;@2e1792e7, Rate=[Ljava.lang.Double;@6719a5b8, Sk=[Ljava.lang.String;@3eb631b8, SkYds=[Ljava.lang.String;@796d3c9f, NY/A=[Ljava.lang.String;@6bff19ff, ANY/A=[Ljava.lang.String;@41e1455d, Sk%=[Ljava.lang.String;@4e558728}"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val mapPassing = dfPassing.filter { (it[\"Year\"] lt 2021) AND (it[\"Year\"] gt 1990) }.toMap()\n",
    "mapPassing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"wMKWMm\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "'ggtitle':{\n",
       "'text':\"Avg Adjusted Yds/Attempt per NFL regular season\"\n",
       "},\n",
       "'mapping':{\n",
       "'x':\"Year\",\n",
       "'y':\"AY/A\"\n",
       "},\n",
       "'data':{\n",
       "'Year':[2020.0,2019.0,2018.0,2017.0,2016.0,2015.0,2014.0,2013.0,2012.0,2011.0,2010.0,2009.0,2008.0,2007.0,2006.0,2005.0,2004.0,2003.0,2002.0,2001.0,2000.0,1999.0,1998.0,1997.0,1996.0,1995.0,1994.0,1993.0,1992.0,1991.0],\n",
       "'AY/A':[7.2,7.1,7.3,6.8,7.0,7.1,7.0,6.8,6.7,6.7,6.5,6.4,6.5,6.3,6.2,6.2,6.5,6.0,6.1,6.0,6.1,6.0,6.2,6.1,5.9,6.2,6.1,5.9,5.9,6.0]\n",
       "},\n",
       "'ggsize':{\n",
       "'width':640,\n",
       "'height':240\n",
       "},\n",
       "'kind':\"plot\",\n",
       "'scales':[],\n",
       "'layers':[{\n",
       "'mapping':{\n",
       "},\n",
       "'stat':\"identity\",\n",
       "'data':{\n",
       "},\n",
       "'position':\"stack\",\n",
       "'geom':\"bar\"\n",
       "}]\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"wMKWMm\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();    \n",
       "   </script>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = lets_plot(mapPassing) { x = \"Year\"; y = \"AY/A\" } + ggsize(640, 240)\n",
    "p + geom_bar(stat=Stat.identity) +\n",
    "    ggtitle(\"Avg Adjusted Yds/Attempt per NFL regular season\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"oOhxan\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "'ggtitle':{\n",
       "'text':\"Total Combined Passer Rating per NFL regular season\"\n",
       "},\n",
       "'mapping':{\n",
       "'x':\"Year\",\n",
       "'y':\"Rate\"\n",
       "},\n",
       "'data':{\n",
       "'Year':[2020.0,2019.0,2018.0,2017.0,2016.0,2015.0,2014.0,2013.0,2012.0,2011.0,2010.0,2009.0,2008.0,2007.0,2006.0,2005.0,2004.0,2003.0,2002.0,2001.0,2000.0,1999.0,1998.0,1997.0,1996.0,1995.0,1994.0,1993.0,1992.0,1991.0],\n",
       "'Rate':[93.6,90.4,92.9,86.9,89.3,90.2,88.9,86.0,85.6,84.3,84.1,83.0,83.2,82.6,80.4,80.1,82.8,78.3,80.4,78.5,78.1,77.1,78.3,77.2,76.9,79.2,78.4,76.7,75.3,76.2]\n",
       "},\n",
       "'ggsize':{\n",
       "'width':640,\n",
       "'height':240\n",
       "},\n",
       "'kind':\"plot\",\n",
       "'scales':[],\n",
       "'layers':[{\n",
       "'mapping':{\n",
       "},\n",
       "'stat':\"identity\",\n",
       "'data':{\n",
       "},\n",
       "'position':\"stack\",\n",
       "'geom':\"bar\"\n",
       "}]\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"oOhxan\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();    \n",
       "   </script>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = lets_plot(mapPassing) { x = \"Year\"; y = \"Rate\" } + ggsize(640, 240)\n",
    "p + geom_bar(stat=Stat.identity) +\n",
    "    ggtitle(\"Total Combined Passer Rating per NFL regular season\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "val dfPassingRanges = dfPassing\n",
    "    .filter { (it[\"Year\"] lt 2021) AND (it[\"Year\"] gt 1990) }\n",
    "    .addColumn(\"YearRange\") { it[\"Year\"].map<Double>{ floor(it.minus(1).div(5.0)).times(5).plus(1).toInt() }}\n",
    "    .addColumn(\"Years\") { it[\"YearRange\"].map<Int>{ \"$it - ${it + 4}\" }}\n",
    "\n",
    "val mapPassingRanges = dfPassingRanges\n",
    "    .select({ listOf(\"Year\", \"AY/A\", \"Rate\", \"YearRange\", \"Years\") })\n",
    "    .groupBy(\"YearRange\", \"Years\")\n",
    "    .summarize(\n",
    "        \"mean_AY/A\" to { it[\"AY/A\"].mean(removeNA = true) },\n",
    "        \"mean_Rate\" to { it[\"Rate\"].mean(removeNA = true) }\n",
    "    ).toMap()\n",
    "    \n",
    "val xlimits = mapPassingRanges[\"Years\"]?.toSet()?.reversed()?.filterNotNull()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"P3bEky\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "'ggtitle':{\n",
       "'text':\"Average Adjusted Yards/Attempt per NFL regular season\"\n",
       "},\n",
       "'mapping':{\n",
       "'x':\"Years\",\n",
       "'y':\"mean_AY/A\"\n",
       "},\n",
       "'data':{\n",
       "'mean_AY/A':[7.080000000000001,6.859999999999999,6.38,6.159999999999999,6.06,6.0200000000000005],\n",
       "'Years':[\"2016 - 2020\",\"2011 - 2015\",\"2006 - 2010\",\"2001 - 2005\",\"1996 - 2000\",\"1991 - 1995\"]\n",
       "},\n",
       "'ggsize':{\n",
       "'width':720,\n",
       "'height':240\n",
       "},\n",
       "'kind':\"plot\",\n",
       "'scales':[{\n",
       "'aesthetic':\"x\",\n",
       "'limits':[\"1991 - 1995\",\"1996 - 2000\",\"2001 - 2005\",\"2006 - 2010\",\"2011 - 2015\",\"2016 - 2020\"]\n",
       "},{\n",
       "'aesthetic':\"y\",\n",
       "'limits':[4.0,8.0]\n",
       "}],\n",
       "'layers':[{\n",
       "'mapping':{\n",
       "},\n",
       "'stat':\"identity\",\n",
       "'data':{\n",
       "},\n",
       "'position':\"stack\",\n",
       "'geom':\"bar\"\n",
       "}]\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"P3bEky\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();    \n",
       "   </script>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot(mapPassingRanges) { x = \"Years\"; y = \"mean_AY/A\" } + ggsize(720, 240)\n",
    "p + geomBar(stat=Stat.identity) + scaleXDiscrete(limits = xlimits) +\n",
    "    scaleYContinuous(limits = Pair(4.0, 8.0)) +\n",
    "    ggtitle(\"Average Adjusted Yards/Attempt per NFL regular season\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"cTIjQs\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "'ggtitle':{\n",
       "'text':\"Total Combined Passer Rating per NFL regular season\"\n",
       "},\n",
       "'mapping':{\n",
       "'x':\"Years\",\n",
       "'y':\"mean_Rate\"\n",
       "},\n",
       "'data':{\n",
       "'Years':[\"2016 - 2020\",\"2011 - 2015\",\"2006 - 2010\",\"2001 - 2005\",\"1996 - 2000\",\"1991 - 1995\"],\n",
       "'mean_Rate':[90.61999999999999,87.00000000000001,82.66,80.02000000000001,77.52000000000001,77.16]\n",
       "},\n",
       "'ggsize':{\n",
       "'width':720,\n",
       "'height':240\n",
       "},\n",
       "'kind':\"plot\",\n",
       "'scales':[{\n",
       "'aesthetic':\"x\",\n",
       "'limits':[\"1991 - 1995\",\"1996 - 2000\",\"2001 - 2005\",\"2006 - 2010\",\"2011 - 2015\",\"2016 - 2020\"]\n",
       "}],\n",
       "'layers':[{\n",
       "'mapping':{\n",
       "},\n",
       "'stat':\"identity\",\n",
       "'data':{\n",
       "},\n",
       "'position':\"stack\",\n",
       "'geom':\"bar\"\n",
       "}]\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"cTIjQs\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();    \n",
       "   </script>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot(mapPassingRanges) { x = \"Years\"; y = \"mean_Rate\" } + ggsize(720, 240)\n",
    "p + geomBar(stat=Stat.identity) + scaleXDiscrete(limits = xlimits) +\n",
    "    ggtitle(\"Total Combined Passer Rating per NFL regular season\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Kotlin",
   "language": "kotlin",
   "name": "kotlin"
  },
  "language_info": {
   "codemirror_mode": "text/x-kotlin",
   "file_extension": ".kt",
   "mimetype": "text/x-kotlin",
   "name": "kotlin",
   "nbconvert_exporter": "",
   "pygments_lexer": "kotlin",
   "version": "1.5.30-dev-598"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}