Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "%matplotlib notebook\n",
- "import pandas as pd\n",
- "import numpy as np\n",
- "import matplotlib.pyplot as plt\n",
- "import pymc3 as pm\n",
- "import sqlite3\n",
- "#import seaborn as sns\n",
- "\n",
- "import sys\n",
- "sys.path.append('/Users/mikep/git/labs')\n",
- "sys.path.append('/usr/local/lib/python2.7/site-packages')\n",
- "\n",
- "colors = ['#348ABD', '#A60628', '#7A68A6', '#467821', '#D55E00', \n",
- " '#CC79A7', '#56B4E9', '#009E73', '#F0E442', '#0072B2']\n",
- "\n",
- "from cvxopt import matrix, solvers\n",
- "import cvxopt\n",
- "\n",
- "import cvxopt.glpk as g"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "data = pd.read_excel('/Users/mikep/Desktop/fantasy-football.xlsx')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Player Name</th>\n",
- " <th>Player on Team?</th>\n",
- " <th>Is QB?</th>\n",
- " <th>Is RB?</th>\n",
- " <th>Is WR?</th>\n",
- " <th>Is TE?</th>\n",
- " <th>Is K?</th>\n",
- " <th>Is D?</th>\n",
- " <th>Cost</th>\n",
- " <th>Point Projection</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>0</th>\n",
- " <td>Antonio Brown</td>\n",
- " <td>NaN</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>9200</td>\n",
- " <td>18.7</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>1</th>\n",
- " <td>Dez Bryant</td>\n",
- " <td>NaN</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>9100</td>\n",
- " <td>18.1</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>2</th>\n",
- " <td>DeMarco Murray</td>\n",
- " <td>NaN</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>9000</td>\n",
- " <td>20.6</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>3</th>\n",
- " <td>Calvin Johnson</td>\n",
- " <td>NaN</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>9000</td>\n",
- " <td>17.1</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>4</th>\n",
- " <td>Le'Veon Bell</td>\n",
- " <td>NaN</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>8900</td>\n",
- " <td>21.5</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Player Name Player on Team? Is QB? Is RB? Is WR? Is TE? Is K? Is D? \\\n",
- "0 Antonio Brown NaN 0 0 1 0 0 0 \n",
- "1 Dez Bryant NaN 0 0 1 0 0 0 \n",
- "2 DeMarco Murray NaN 0 1 0 0 0 0 \n",
- "3 Calvin Johnson NaN 0 0 1 0 0 0 \n",
- "4 Le'Veon Bell NaN 0 1 0 0 0 0 \n",
- "\n",
- " Cost Point Projection \n",
- "0 9200 18.7 \n",
- "1 9100 18.1 \n",
- "2 9000 20.6 \n",
- "3 9000 17.1 \n",
- "4 8900 21.5 "
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "data.head()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 80,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "nplayers = 142"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 211,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "#Function to Optimize\n",
- "p = -1.0*data.iloc[0:nplayers]['Point Projection']\n",
- "cc = matrix(p.values.tolist())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 263,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "# Salary = 60000, QB = 1, RB =2, WR = 3, K = 1, TE = 1, D/ST = 1\n",
- "# Append x >= 0, x<= 1 as list of zeros and ones\n",
- "\n",
- "max_qb = 1\n",
- "max_wr = 3\n",
- "max_rb = 2\n",
- "max_te = 1\n",
- "max_k = 1\n",
- "max_dst = 1\n",
- "max_salary = 60000\n",
- "\n",
- "h = matrix([max_salary,max_qb,max_rb,max_wr,max_te,max_k,max_dst]+list(np.zeros(len(p)))+list(np.ones(len(p))))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 264,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "#Constraints\n",
- "\n",
- "constraints = data.iloc[0:nplayers][['Cost',u'Is QB?', u'Is RB?', u'Is WR?',\n",
- " u'Is TE?', u'Is K?', u'Is D?']]\n",
- "\n",
- "# -1 Maximizes function\n",
- "# Append x >= 0, x<= 1 as list of zeros and ones\n",
- "\n",
- "G = constraints.T.append(-1*pd.DataFrame(np.eye(len(p)))).append(pd.DataFrame(np.eye(len(p)))).values.astype(float)\n",
- "G = cvxopt.sparse(matrix(G))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Integer Linear Programming"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 288,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "# 9 Players on Team\n",
- "included_players = np.ones(len(p))\n",
- "\n",
- "#Setting A[i] = 0 will remove specific player from consideration\n",
- "included_players[7] = 0.0\n",
- "\n",
- "A = matrix(list(included_players)).T\n",
- "b = matrix([9],tc='d')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 289,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "(status, x)=g.ilp(cc,G,h,A,b,I=set(range(nplayers))) #I = sets only integer values"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 290,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Player Name</th>\n",
- " <th>Player on Team?</th>\n",
- " <th>Is QB?</th>\n",
- " <th>Is RB?</th>\n",
- " <th>Is WR?</th>\n",
- " <th>Is TE?</th>\n",
- " <th>Is K?</th>\n",
- " <th>Is D?</th>\n",
- " <th>Cost</th>\n",
- " <th>Point Projection</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>58</th>\n",
- " <td>Dwayne Allen</td>\n",
- " <td>1.0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>5000</td>\n",
- " <td>6.7</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>14</th>\n",
- " <td>Torrey Smith</td>\n",
- " <td>1.0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>7100</td>\n",
- " <td>16.5</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>41</th>\n",
- " <td>Baltimore Ravens</td>\n",
- " <td>1.0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>5100</td>\n",
- " <td>7.8</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>5</th>\n",
- " <td>Tony Romo</td>\n",
- " <td>1.0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>8800</td>\n",
- " <td>19.2</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>8</th>\n",
- " <td>A.J. Green</td>\n",
- " <td>1.0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>8500</td>\n",
- " <td>17.5</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>17</th>\n",
- " <td>Giovani Bernard</td>\n",
- " <td>1.0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>6900</td>\n",
- " <td>18.3</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>16</th>\n",
- " <td>Kelvin Benjamin</td>\n",
- " <td>1.0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>6900</td>\n",
- " <td>15.8</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>84</th>\n",
- " <td>Justin Tucker</td>\n",
- " <td>1.0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>4700</td>\n",
- " <td>8.9</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>15</th>\n",
- " <td>Justin Forsett</td>\n",
- " <td>1.0</td>\n",
- " <td>0</td>\n",
- " <td>1</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>0</td>\n",
- " <td>7000</td>\n",
- " <td>19.1</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Player Name Player on Team? Is QB? Is RB? Is WR? Is TE? Is K? Is D? \\\n",
- "58 Dwayne Allen 1.0 0 0 0 1 0 0 \n",
- "14 Torrey Smith 1.0 0 0 1 0 0 0 \n",
- "41 Baltimore Ravens 1.0 0 0 0 0 0 1 \n",
- "5 Tony Romo 1.0 1 0 0 0 0 0 \n",
- "8 A.J. Green 1.0 0 0 1 0 0 0 \n",
- "17 Giovani Bernard 1.0 0 1 0 0 0 0 \n",
- "16 Kelvin Benjamin 1.0 0 0 1 0 0 0 \n",
- "84 Justin Tucker 1.0 0 0 0 0 1 0 \n",
- "15 Justin Forsett 1.0 0 1 0 0 0 0 \n",
- "\n",
- " Cost Point Projection \n",
- "58 5000 6.7 \n",
- "14 7100 16.5 \n",
- "41 5100 7.8 \n",
- "5 8800 19.2 \n",
- "8 8500 17.5 \n",
- "17 6900 18.3 \n",
- "16 6900 15.8 \n",
- "84 4700 8.9 \n",
- "15 7000 19.1 "
- ]
- },
- "execution_count": 290,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "data = data.iloc[0:nplayers]\n",
- "data['Player on Team?'] = np.concatenate(np.array(x))\n",
- "\n",
- "team = data.iloc[:nplayers].sort_values('Player on Team?',ascending=False)\n",
- "team[team['Player on Team?'] > 0]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 285,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "59900"
- ]
- },
- "execution_count": 285,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "team[team['Player on Team?'] > 0]['Cost'].sum()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 2",
- "language": "python",
- "name": "python2"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 2
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython2",
- "version": "2.7.12"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement