Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.65 KB | None | 0 0
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "code",
  5. "execution_count": 7,
  6. "metadata": {
  7. "collapsed": false
  8. },
  9. "outputs": [],
  10. "source": [
  11. "%matplotlib notebook\n",
  12. "import pandas as pd\n",
  13. "import numpy as np\n",
  14. "import matplotlib.pyplot as plt\n",
  15. "import pymc3 as pm\n",
  16. "import sqlite3\n",
  17. "#import seaborn as sns\n",
  18. "\n",
  19. "import sys\n",
  20. "sys.path.append('/Users/mikep/git/labs')\n",
  21. "sys.path.append('/usr/local/lib/python2.7/site-packages')\n",
  22. "\n",
  23. "colors = ['#348ABD', '#A60628', '#7A68A6', '#467821', '#D55E00', \n",
  24. " '#CC79A7', '#56B4E9', '#009E73', '#F0E442', '#0072B2']\n",
  25. "\n",
  26. "from cvxopt import matrix, solvers\n",
  27. "import cvxopt\n",
  28. "\n",
  29. "import cvxopt.glpk as g"
  30. ]
  31. },
  32. {
  33. "cell_type": "code",
  34. "execution_count": 2,
  35. "metadata": {
  36. "collapsed": false
  37. },
  38. "outputs": [],
  39. "source": [
  40. "data = pd.read_excel('/Users/mikep/Desktop/fantasy-football.xlsx')"
  41. ]
  42. },
  43. {
  44. "cell_type": "code",
  45. "execution_count": 3,
  46. "metadata": {
  47. "collapsed": false
  48. },
  49. "outputs": [
  50. {
  51. "data": {
  52. "text/html": [
  53. "<div>\n",
  54. "<table border=\"1\" class=\"dataframe\">\n",
  55. " <thead>\n",
  56. " <tr style=\"text-align: right;\">\n",
  57. " <th></th>\n",
  58. " <th>Player Name</th>\n",
  59. " <th>Player on Team?</th>\n",
  60. " <th>Is QB?</th>\n",
  61. " <th>Is RB?</th>\n",
  62. " <th>Is WR?</th>\n",
  63. " <th>Is TE?</th>\n",
  64. " <th>Is K?</th>\n",
  65. " <th>Is D?</th>\n",
  66. " <th>Cost</th>\n",
  67. " <th>Point Projection</th>\n",
  68. " </tr>\n",
  69. " </thead>\n",
  70. " <tbody>\n",
  71. " <tr>\n",
  72. " <th>0</th>\n",
  73. " <td>Antonio Brown</td>\n",
  74. " <td>NaN</td>\n",
  75. " <td>0</td>\n",
  76. " <td>0</td>\n",
  77. " <td>1</td>\n",
  78. " <td>0</td>\n",
  79. " <td>0</td>\n",
  80. " <td>0</td>\n",
  81. " <td>9200</td>\n",
  82. " <td>18.7</td>\n",
  83. " </tr>\n",
  84. " <tr>\n",
  85. " <th>1</th>\n",
  86. " <td>Dez Bryant</td>\n",
  87. " <td>NaN</td>\n",
  88. " <td>0</td>\n",
  89. " <td>0</td>\n",
  90. " <td>1</td>\n",
  91. " <td>0</td>\n",
  92. " <td>0</td>\n",
  93. " <td>0</td>\n",
  94. " <td>9100</td>\n",
  95. " <td>18.1</td>\n",
  96. " </tr>\n",
  97. " <tr>\n",
  98. " <th>2</th>\n",
  99. " <td>DeMarco Murray</td>\n",
  100. " <td>NaN</td>\n",
  101. " <td>0</td>\n",
  102. " <td>1</td>\n",
  103. " <td>0</td>\n",
  104. " <td>0</td>\n",
  105. " <td>0</td>\n",
  106. " <td>0</td>\n",
  107. " <td>9000</td>\n",
  108. " <td>20.6</td>\n",
  109. " </tr>\n",
  110. " <tr>\n",
  111. " <th>3</th>\n",
  112. " <td>Calvin Johnson</td>\n",
  113. " <td>NaN</td>\n",
  114. " <td>0</td>\n",
  115. " <td>0</td>\n",
  116. " <td>1</td>\n",
  117. " <td>0</td>\n",
  118. " <td>0</td>\n",
  119. " <td>0</td>\n",
  120. " <td>9000</td>\n",
  121. " <td>17.1</td>\n",
  122. " </tr>\n",
  123. " <tr>\n",
  124. " <th>4</th>\n",
  125. " <td>Le'Veon Bell</td>\n",
  126. " <td>NaN</td>\n",
  127. " <td>0</td>\n",
  128. " <td>1</td>\n",
  129. " <td>0</td>\n",
  130. " <td>0</td>\n",
  131. " <td>0</td>\n",
  132. " <td>0</td>\n",
  133. " <td>8900</td>\n",
  134. " <td>21.5</td>\n",
  135. " </tr>\n",
  136. " </tbody>\n",
  137. "</table>\n",
  138. "</div>"
  139. ],
  140. "text/plain": [
  141. " Player Name Player on Team? Is QB? Is RB? Is WR? Is TE? Is K? Is D? \\\n",
  142. "0 Antonio Brown NaN 0 0 1 0 0 0 \n",
  143. "1 Dez Bryant NaN 0 0 1 0 0 0 \n",
  144. "2 DeMarco Murray NaN 0 1 0 0 0 0 \n",
  145. "3 Calvin Johnson NaN 0 0 1 0 0 0 \n",
  146. "4 Le'Veon Bell NaN 0 1 0 0 0 0 \n",
  147. "\n",
  148. " Cost Point Projection \n",
  149. "0 9200 18.7 \n",
  150. "1 9100 18.1 \n",
  151. "2 9000 20.6 \n",
  152. "3 9000 17.1 \n",
  153. "4 8900 21.5 "
  154. ]
  155. },
  156. "execution_count": 3,
  157. "metadata": {},
  158. "output_type": "execute_result"
  159. }
  160. ],
  161. "source": [
  162. "data.head()"
  163. ]
  164. },
  165. {
  166. "cell_type": "code",
  167. "execution_count": 80,
  168. "metadata": {
  169. "collapsed": true
  170. },
  171. "outputs": [],
  172. "source": [
  173. "nplayers = 142"
  174. ]
  175. },
  176. {
  177. "cell_type": "code",
  178. "execution_count": 211,
  179. "metadata": {
  180. "collapsed": true
  181. },
  182. "outputs": [],
  183. "source": [
  184. "#Function to Optimize\n",
  185. "p = -1.0*data.iloc[0:nplayers]['Point Projection']\n",
  186. "cc = matrix(p.values.tolist())"
  187. ]
  188. },
  189. {
  190. "cell_type": "code",
  191. "execution_count": 263,
  192. "metadata": {
  193. "collapsed": false
  194. },
  195. "outputs": [],
  196. "source": [
  197. "# Salary = 60000, QB = 1, RB =2, WR = 3, K = 1, TE = 1, D/ST = 1\n",
  198. "# Append x >= 0, x<= 1 as list of zeros and ones\n",
  199. "\n",
  200. "max_qb = 1\n",
  201. "max_wr = 3\n",
  202. "max_rb = 2\n",
  203. "max_te = 1\n",
  204. "max_k = 1\n",
  205. "max_dst = 1\n",
  206. "max_salary = 60000\n",
  207. "\n",
  208. "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))))"
  209. ]
  210. },
  211. {
  212. "cell_type": "code",
  213. "execution_count": 264,
  214. "metadata": {
  215. "collapsed": false
  216. },
  217. "outputs": [],
  218. "source": [
  219. "#Constraints\n",
  220. "\n",
  221. "constraints = data.iloc[0:nplayers][['Cost',u'Is QB?', u'Is RB?', u'Is WR?',\n",
  222. " u'Is TE?', u'Is K?', u'Is D?']]\n",
  223. "\n",
  224. "# -1 Maximizes function\n",
  225. "# Append x >= 0, x<= 1 as list of zeros and ones\n",
  226. "\n",
  227. "G = constraints.T.append(-1*pd.DataFrame(np.eye(len(p)))).append(pd.DataFrame(np.eye(len(p)))).values.astype(float)\n",
  228. "G = cvxopt.sparse(matrix(G))"
  229. ]
  230. },
  231. {
  232. "cell_type": "markdown",
  233. "metadata": {},
  234. "source": [
  235. "Integer Linear Programming"
  236. ]
  237. },
  238. {
  239. "cell_type": "code",
  240. "execution_count": 288,
  241. "metadata": {
  242. "collapsed": true
  243. },
  244. "outputs": [],
  245. "source": [
  246. "# 9 Players on Team\n",
  247. "included_players = np.ones(len(p))\n",
  248. "\n",
  249. "#Setting A[i] = 0 will remove specific player from consideration\n",
  250. "included_players[7] = 0.0\n",
  251. "\n",
  252. "A = matrix(list(included_players)).T\n",
  253. "b = matrix([9],tc='d')"
  254. ]
  255. },
  256. {
  257. "cell_type": "code",
  258. "execution_count": 289,
  259. "metadata": {
  260. "collapsed": false
  261. },
  262. "outputs": [],
  263. "source": [
  264. "(status, x)=g.ilp(cc,G,h,A,b,I=set(range(nplayers))) #I = sets only integer values"
  265. ]
  266. },
  267. {
  268. "cell_type": "code",
  269. "execution_count": 290,
  270. "metadata": {
  271. "collapsed": false
  272. },
  273. "outputs": [
  274. {
  275. "data": {
  276. "text/html": [
  277. "<div>\n",
  278. "<table border=\"1\" class=\"dataframe\">\n",
  279. " <thead>\n",
  280. " <tr style=\"text-align: right;\">\n",
  281. " <th></th>\n",
  282. " <th>Player Name</th>\n",
  283. " <th>Player on Team?</th>\n",
  284. " <th>Is QB?</th>\n",
  285. " <th>Is RB?</th>\n",
  286. " <th>Is WR?</th>\n",
  287. " <th>Is TE?</th>\n",
  288. " <th>Is K?</th>\n",
  289. " <th>Is D?</th>\n",
  290. " <th>Cost</th>\n",
  291. " <th>Point Projection</th>\n",
  292. " </tr>\n",
  293. " </thead>\n",
  294. " <tbody>\n",
  295. " <tr>\n",
  296. " <th>58</th>\n",
  297. " <td>Dwayne Allen</td>\n",
  298. " <td>1.0</td>\n",
  299. " <td>0</td>\n",
  300. " <td>0</td>\n",
  301. " <td>0</td>\n",
  302. " <td>1</td>\n",
  303. " <td>0</td>\n",
  304. " <td>0</td>\n",
  305. " <td>5000</td>\n",
  306. " <td>6.7</td>\n",
  307. " </tr>\n",
  308. " <tr>\n",
  309. " <th>14</th>\n",
  310. " <td>Torrey Smith</td>\n",
  311. " <td>1.0</td>\n",
  312. " <td>0</td>\n",
  313. " <td>0</td>\n",
  314. " <td>1</td>\n",
  315. " <td>0</td>\n",
  316. " <td>0</td>\n",
  317. " <td>0</td>\n",
  318. " <td>7100</td>\n",
  319. " <td>16.5</td>\n",
  320. " </tr>\n",
  321. " <tr>\n",
  322. " <th>41</th>\n",
  323. " <td>Baltimore Ravens</td>\n",
  324. " <td>1.0</td>\n",
  325. " <td>0</td>\n",
  326. " <td>0</td>\n",
  327. " <td>0</td>\n",
  328. " <td>0</td>\n",
  329. " <td>0</td>\n",
  330. " <td>1</td>\n",
  331. " <td>5100</td>\n",
  332. " <td>7.8</td>\n",
  333. " </tr>\n",
  334. " <tr>\n",
  335. " <th>5</th>\n",
  336. " <td>Tony Romo</td>\n",
  337. " <td>1.0</td>\n",
  338. " <td>1</td>\n",
  339. " <td>0</td>\n",
  340. " <td>0</td>\n",
  341. " <td>0</td>\n",
  342. " <td>0</td>\n",
  343. " <td>0</td>\n",
  344. " <td>8800</td>\n",
  345. " <td>19.2</td>\n",
  346. " </tr>\n",
  347. " <tr>\n",
  348. " <th>8</th>\n",
  349. " <td>A.J. Green</td>\n",
  350. " <td>1.0</td>\n",
  351. " <td>0</td>\n",
  352. " <td>0</td>\n",
  353. " <td>1</td>\n",
  354. " <td>0</td>\n",
  355. " <td>0</td>\n",
  356. " <td>0</td>\n",
  357. " <td>8500</td>\n",
  358. " <td>17.5</td>\n",
  359. " </tr>\n",
  360. " <tr>\n",
  361. " <th>17</th>\n",
  362. " <td>Giovani Bernard</td>\n",
  363. " <td>1.0</td>\n",
  364. " <td>0</td>\n",
  365. " <td>1</td>\n",
  366. " <td>0</td>\n",
  367. " <td>0</td>\n",
  368. " <td>0</td>\n",
  369. " <td>0</td>\n",
  370. " <td>6900</td>\n",
  371. " <td>18.3</td>\n",
  372. " </tr>\n",
  373. " <tr>\n",
  374. " <th>16</th>\n",
  375. " <td>Kelvin Benjamin</td>\n",
  376. " <td>1.0</td>\n",
  377. " <td>0</td>\n",
  378. " <td>0</td>\n",
  379. " <td>1</td>\n",
  380. " <td>0</td>\n",
  381. " <td>0</td>\n",
  382. " <td>0</td>\n",
  383. " <td>6900</td>\n",
  384. " <td>15.8</td>\n",
  385. " </tr>\n",
  386. " <tr>\n",
  387. " <th>84</th>\n",
  388. " <td>Justin Tucker</td>\n",
  389. " <td>1.0</td>\n",
  390. " <td>0</td>\n",
  391. " <td>0</td>\n",
  392. " <td>0</td>\n",
  393. " <td>0</td>\n",
  394. " <td>1</td>\n",
  395. " <td>0</td>\n",
  396. " <td>4700</td>\n",
  397. " <td>8.9</td>\n",
  398. " </tr>\n",
  399. " <tr>\n",
  400. " <th>15</th>\n",
  401. " <td>Justin Forsett</td>\n",
  402. " <td>1.0</td>\n",
  403. " <td>0</td>\n",
  404. " <td>1</td>\n",
  405. " <td>0</td>\n",
  406. " <td>0</td>\n",
  407. " <td>0</td>\n",
  408. " <td>0</td>\n",
  409. " <td>7000</td>\n",
  410. " <td>19.1</td>\n",
  411. " </tr>\n",
  412. " </tbody>\n",
  413. "</table>\n",
  414. "</div>"
  415. ],
  416. "text/plain": [
  417. " Player Name Player on Team? Is QB? Is RB? Is WR? Is TE? Is K? Is D? \\\n",
  418. "58 Dwayne Allen 1.0 0 0 0 1 0 0 \n",
  419. "14 Torrey Smith 1.0 0 0 1 0 0 0 \n",
  420. "41 Baltimore Ravens 1.0 0 0 0 0 0 1 \n",
  421. "5 Tony Romo 1.0 1 0 0 0 0 0 \n",
  422. "8 A.J. Green 1.0 0 0 1 0 0 0 \n",
  423. "17 Giovani Bernard 1.0 0 1 0 0 0 0 \n",
  424. "16 Kelvin Benjamin 1.0 0 0 1 0 0 0 \n",
  425. "84 Justin Tucker 1.0 0 0 0 0 1 0 \n",
  426. "15 Justin Forsett 1.0 0 1 0 0 0 0 \n",
  427. "\n",
  428. " Cost Point Projection \n",
  429. "58 5000 6.7 \n",
  430. "14 7100 16.5 \n",
  431. "41 5100 7.8 \n",
  432. "5 8800 19.2 \n",
  433. "8 8500 17.5 \n",
  434. "17 6900 18.3 \n",
  435. "16 6900 15.8 \n",
  436. "84 4700 8.9 \n",
  437. "15 7000 19.1 "
  438. ]
  439. },
  440. "execution_count": 290,
  441. "metadata": {},
  442. "output_type": "execute_result"
  443. }
  444. ],
  445. "source": [
  446. "data = data.iloc[0:nplayers]\n",
  447. "data['Player on Team?'] = np.concatenate(np.array(x))\n",
  448. "\n",
  449. "team = data.iloc[:nplayers].sort_values('Player on Team?',ascending=False)\n",
  450. "team[team['Player on Team?'] > 0]"
  451. ]
  452. },
  453. {
  454. "cell_type": "code",
  455. "execution_count": 285,
  456. "metadata": {
  457. "collapsed": false
  458. },
  459. "outputs": [
  460. {
  461. "data": {
  462. "text/plain": [
  463. "59900"
  464. ]
  465. },
  466. "execution_count": 285,
  467. "metadata": {},
  468. "output_type": "execute_result"
  469. }
  470. ],
  471. "source": [
  472. "team[team['Player on Team?'] > 0]['Cost'].sum()"
  473. ]
  474. },
  475. {
  476. "cell_type": "code",
  477. "execution_count": null,
  478. "metadata": {
  479. "collapsed": true
  480. },
  481. "outputs": [],
  482. "source": []
  483. }
  484. ],
  485. "metadata": {
  486. "kernelspec": {
  487. "display_name": "Python 2",
  488. "language": "python",
  489. "name": "python2"
  490. },
  491. "language_info": {
  492. "codemirror_mode": {
  493. "name": "ipython",
  494. "version": 2
  495. },
  496. "file_extension": ".py",
  497. "mimetype": "text/x-python",
  498. "name": "python",
  499. "nbconvert_exporter": "python",
  500. "pygments_lexer": "ipython2",
  501. "version": "2.7.12"
  502. }
  503. },
  504. "nbformat": 4,
  505. "nbformat_minor": 0
  506. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement