847 lines
25 KiB
Plaintext
847 lines
25 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fd8a6cb9",
|
||
"metadata": {},
|
||
"source": [
|
||
"Scraping for playing probability for the current Serie A matchday.\n",
|
||
"\n",
|
||
"Data from http://fantacalcio.it"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"id": "4c7b7d26",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import requests\n",
|
||
"from bs4 import BeautifulSoup\n",
|
||
"import pandas as pd\n",
|
||
"import numpy as np\n",
|
||
"import re\n",
|
||
"import sys, getopt\n",
|
||
"import csv\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"id": "91897dbb",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"res = requests.get('https://www.fantacalcio.it/probabili-formazioni-serie-a')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "7ba89027",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>player</th>\n",
|
||
" <th>starter</th>\n",
|
||
" <th>percentage</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Falcone</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Gendrey</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>Baschirotto</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>Pongracic</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>80.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>Gallo</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>462</th>\n",
|
||
" <td>Oristanio</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>463</th>\n",
|
||
" <td>Jankto</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>15.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>464</th>\n",
|
||
" <td>Mancosu</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>10.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>465</th>\n",
|
||
" <td>Pavoletti</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>466</th>\n",
|
||
" <td>Shomurodov</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>467 rows × 3 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" player starter percentage\n",
|
||
"0 Falcone 1 90.0\n",
|
||
"1 Gendrey 1 90.0\n",
|
||
"2 Baschirotto 1 90.0\n",
|
||
"3 Pongracic 1 80.0\n",
|
||
"4 Gallo 1 60.0\n",
|
||
".. ... ... ...\n",
|
||
"462 Oristanio 0 50.0\n",
|
||
"463 Jankto 0 15.0\n",
|
||
"464 Mancosu 0 10.0\n",
|
||
"465 Pavoletti 0 55.0\n",
|
||
"466 Shomurodov 0 60.0\n",
|
||
"\n",
|
||
"[467 rows x 3 columns]"
|
||
]
|
||
},
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"soup = BeautifulSoup(res.text)\n",
|
||
"\n",
|
||
"groups = soup.findAll('ul', attrs = {'class' : 'player-list'})\n",
|
||
"\n",
|
||
"probables = pd.DataFrame(columns = ['player', 'starter', 'percentage'])\n",
|
||
"\n",
|
||
"for i in range (len(groups)):\n",
|
||
" players = groups[i].findAll('a', attrs = {'class' : 'player-name'})\n",
|
||
" bars = groups[i].findAll('div', attrs = {'class' : 'progress-bar'})\n",
|
||
" \n",
|
||
" starter_string = groups[i]['class'][1]\n",
|
||
" if(starter_string == 'starters'):\n",
|
||
" starter = 1\n",
|
||
" else:\n",
|
||
" starter = 0\n",
|
||
" \n",
|
||
" for j in range(len(players)):\n",
|
||
" player = players[j].contents[1].contents[0]\n",
|
||
" perc = float(bars[j]['aria-valuenow'])\n",
|
||
" \n",
|
||
" row_df = pd.DataFrame([[player, starter, perc]], columns = probables.columns)\n",
|
||
" \n",
|
||
" probables = pd.concat([probables, row_df], ignore_index = True)\n",
|
||
" \n",
|
||
"probables "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "29e5b389",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"probables = probables.set_index('player')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"id": "d711726e",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>player1</th>\n",
|
||
" <th>player2</th>\n",
|
||
" <th>percentage</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Gallo</td>\n",
|
||
" <td>Dorgu</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Blin</td>\n",
|
||
" <td>Gonzalez J.</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>Politano</td>\n",
|
||
" <td>Lindstrom</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>Zambo Anguissa</td>\n",
|
||
" <td>Cajuste</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>Zielinski</td>\n",
|
||
" <td>Raspadori</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>Kvaratskhelia</td>\n",
|
||
" <td>Elmas</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>6</th>\n",
|
||
" <td>Mario Rui</td>\n",
|
||
" <td>Olivera</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7</th>\n",
|
||
" <td>Calabria</td>\n",
|
||
" <td>Florenzi</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>8</th>\n",
|
||
" <td>Pulisic</td>\n",
|
||
" <td>Chukwueze</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>9</th>\n",
|
||
" <td>Reijnders</td>\n",
|
||
" <td>Musah</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>10</th>\n",
|
||
" <td>Romagnoli</td>\n",
|
||
" <td>Patric</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>11</th>\n",
|
||
" <td>Pellegrini Lu.</td>\n",
|
||
" <td>Marusic</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>12</th>\n",
|
||
" <td>Immobile</td>\n",
|
||
" <td>Castellanos</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>13</th>\n",
|
||
" <td>Luis Alberto</td>\n",
|
||
" <td>Guendouzi</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>14</th>\n",
|
||
" <td>Daniliuc</td>\n",
|
||
" <td>Lovato</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>15</th>\n",
|
||
" <td>Legowski</td>\n",
|
||
" <td>Bohinen</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>16</th>\n",
|
||
" <td>Martegani</td>\n",
|
||
" <td>Dia</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>17</th>\n",
|
||
" <td>Mkhitaryan</td>\n",
|
||
" <td>Klaassen</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>18</th>\n",
|
||
" <td>Sanchez</td>\n",
|
||
" <td>Martinez L.</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>19</th>\n",
|
||
" <td>Acerbi</td>\n",
|
||
" <td>Bastoni</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>20</th>\n",
|
||
" <td>Moro N.</td>\n",
|
||
" <td>Fabbian</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>21</th>\n",
|
||
" <td>Ferguson</td>\n",
|
||
" <td>Aebischer</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>22</th>\n",
|
||
" <td>Ndoye</td>\n",
|
||
" <td>Orsolini</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>23</th>\n",
|
||
" <td>Cancellieri</td>\n",
|
||
" <td>Shpendi S.</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>24</th>\n",
|
||
" <td>Fazzini</td>\n",
|
||
" <td>Ranocchia F.</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>25</th>\n",
|
||
" <td>Grassi</td>\n",
|
||
" <td>Marin</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>26</th>\n",
|
||
" <td>Success</td>\n",
|
||
" <td>Lucca</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>27</th>\n",
|
||
" <td>Ebosele</td>\n",
|
||
" <td>Ferreira J.</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>28</th>\n",
|
||
" <td>Kamara H.</td>\n",
|
||
" <td>Zemura</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>29</th>\n",
|
||
" <td>Martin</td>\n",
|
||
" <td>Matturro</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>30</th>\n",
|
||
" <td>Pasalic</td>\n",
|
||
" <td>Muriel</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>31</th>\n",
|
||
" <td>Ruggeri</td>\n",
|
||
" <td>Holm</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>32</th>\n",
|
||
" <td>Mckennie</td>\n",
|
||
" <td>Weah</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>33</th>\n",
|
||
" <td>Fagioli</td>\n",
|
||
" <td>Miretti</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>34</th>\n",
|
||
" <td>Chiesa</td>\n",
|
||
" <td>Milik</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>35</th>\n",
|
||
" <td>Dybala</td>\n",
|
||
" <td>El Shaarawy</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>36</th>\n",
|
||
" <td>Zalewski</td>\n",
|
||
" <td>Spinazzola</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>37</th>\n",
|
||
" <td>Paredes</td>\n",
|
||
" <td>Celik</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>38</th>\n",
|
||
" <td>Caso</td>\n",
|
||
" <td>Baez</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>39</th>\n",
|
||
" <td>Brescianini</td>\n",
|
||
" <td>Garritano</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>40</th>\n",
|
||
" <td>Romagnoli S.</td>\n",
|
||
" <td>Monterisi</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>41</th>\n",
|
||
" <td>Vina</td>\n",
|
||
" <td>Pedersen</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>42</th>\n",
|
||
" <td>Erlic</td>\n",
|
||
" <td>Viti</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>43</th>\n",
|
||
" <td>Bajrami</td>\n",
|
||
" <td>Castillejo</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>44</th>\n",
|
||
" <td>Colombo</td>\n",
|
||
" <td>Maric</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>45</th>\n",
|
||
" <td>Izzo</td>\n",
|
||
" <td>D'ambrosio</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>46</th>\n",
|
||
" <td>Birindelli</td>\n",
|
||
" <td>Kyriakopoulos</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>47</th>\n",
|
||
" <td>Bellanova</td>\n",
|
||
" <td>Soppy</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>48</th>\n",
|
||
" <td>Lazaro</td>\n",
|
||
" <td>Vojvoda</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>49</th>\n",
|
||
" <td>Zapata D.</td>\n",
|
||
" <td>Sanabria</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>50</th>\n",
|
||
" <td>Bonazzoli</td>\n",
|
||
" <td>Henry</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>51</th>\n",
|
||
" <td>Magnani</td>\n",
|
||
" <td>Coppola D.</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>52</th>\n",
|
||
" <td>Folorunsho</td>\n",
|
||
" <td>Saponara</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>53</th>\n",
|
||
" <td>Bonaventura</td>\n",
|
||
" <td>Barak</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>54</th>\n",
|
||
" <td>Lopez M.</td>\n",
|
||
" <td>Arthur Melo</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>55</th>\n",
|
||
" <td>Nzola</td>\n",
|
||
" <td>Beltran L.</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>56</th>\n",
|
||
" <td>Nandez</td>\n",
|
||
" <td>Deiola</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>57</th>\n",
|
||
" <td>Petagna</td>\n",
|
||
" <td>Shomurodov</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>58</th>\n",
|
||
" <td>Hatzidiakos</td>\n",
|
||
" <td>Obert</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" player1 player2 percentage\n",
|
||
"0 Gallo Dorgu 60.0\n",
|
||
"1 Blin Gonzalez J. 60.0\n",
|
||
"2 Politano Lindstrom 60.0\n",
|
||
"3 Zambo Anguissa Cajuste 60.0\n",
|
||
"4 Zielinski Raspadori 55.0\n",
|
||
"5 Kvaratskhelia Elmas 65.0\n",
|
||
"6 Mario Rui Olivera 55.0\n",
|
||
"7 Calabria Florenzi 55.0\n",
|
||
"8 Pulisic Chukwueze 55.0\n",
|
||
"9 Reijnders Musah 65.0\n",
|
||
"10 Romagnoli Patric 65.0\n",
|
||
"11 Pellegrini Lu. Marusic 65.0\n",
|
||
"12 Immobile Castellanos 60.0\n",
|
||
"13 Luis Alberto Guendouzi 60.0\n",
|
||
"14 Daniliuc Lovato 60.0\n",
|
||
"15 Legowski Bohinen 60.0\n",
|
||
"16 Martegani Dia 60.0\n",
|
||
"17 Mkhitaryan Klaassen 55.0\n",
|
||
"18 Sanchez Martinez L. 55.0\n",
|
||
"19 Acerbi Bastoni 55.0\n",
|
||
"20 Moro N. Fabbian 55.0\n",
|
||
"21 Ferguson Aebischer 60.0\n",
|
||
"22 Ndoye Orsolini 60.0\n",
|
||
"23 Cancellieri Shpendi S. 60.0\n",
|
||
"24 Fazzini Ranocchia F. 60.0\n",
|
||
"25 Grassi Marin 60.0\n",
|
||
"26 Success Lucca 55.0\n",
|
||
"27 Ebosele Ferreira J. 60.0\n",
|
||
"28 Kamara H. Zemura 60.0\n",
|
||
"29 Martin Matturro 55.0\n",
|
||
"30 Pasalic Muriel 60.0\n",
|
||
"31 Ruggeri Holm 55.0\n",
|
||
"32 Mckennie Weah 60.0\n",
|
||
"33 Fagioli Miretti 60.0\n",
|
||
"34 Chiesa Milik 55.0\n",
|
||
"35 Dybala El Shaarawy 65.0\n",
|
||
"36 Zalewski Spinazzola 55.0\n",
|
||
"37 Paredes Celik 60.0\n",
|
||
"38 Caso Baez 60.0\n",
|
||
"39 Brescianini Garritano 60.0\n",
|
||
"40 Romagnoli S. Monterisi 60.0\n",
|
||
"41 Vina Pedersen 55.0\n",
|
||
"42 Erlic Viti 60.0\n",
|
||
"43 Bajrami Castillejo 60.0\n",
|
||
"44 Colombo Maric 65.0\n",
|
||
"45 Izzo D'ambrosio 60.0\n",
|
||
"46 Birindelli Kyriakopoulos 60.0\n",
|
||
"47 Bellanova Soppy 60.0\n",
|
||
"48 Lazaro Vojvoda 60.0\n",
|
||
"49 Zapata D. Sanabria 55.0\n",
|
||
"50 Bonazzoli Henry 60.0\n",
|
||
"51 Magnani Coppola D. 60.0\n",
|
||
"52 Folorunsho Saponara 55.0\n",
|
||
"53 Bonaventura Barak 60.0\n",
|
||
"54 Lopez M. Arthur Melo 55.0\n",
|
||
"55 Nzola Beltran L. 55.0\n",
|
||
"56 Nandez Deiola 60.0\n",
|
||
"57 Petagna Shomurodov 60.0\n",
|
||
"58 Hatzidiakos Obert 60.0"
|
||
]
|
||
},
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"groups = soup.findAll('ul', attrs = {'class' : 'ballot-list'})\n",
|
||
"\n",
|
||
"ballots = pd.DataFrame(columns = ['player1', 'player2', 'percentage'])\n",
|
||
"for i in range (len(groups)):\n",
|
||
" players = groups[i].findAll('a', attrs = {'class' : 'player-name'})\n",
|
||
" percs = groups[i].findAll('strong', attrs = {'class' : 'percentage'})\n",
|
||
" \n",
|
||
" player1 = players[0].contents[1].contents[0]\n",
|
||
" player2 = players[1].contents[1].contents[0]\n",
|
||
" perc = float(percs[0].contents[0].replace('%', ''))\n",
|
||
" \n",
|
||
" row_df = pd.DataFrame([[player1, player2, perc]], columns = ballots.columns)\n",
|
||
" \n",
|
||
" ballots = pd.concat([ballots, row_df], ignore_index = True)\n",
|
||
" \n",
|
||
"ballots"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"id": "0171c61d",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>starter</th>\n",
|
||
" <th>percentage</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>player</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>Falcone</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Gendrey</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Baschirotto</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>90.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Pongracic</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>80.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Gallo</th>\n",
|
||
" <td>0.6</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Oristanio</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Jankto</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>15.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Mancosu</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>10.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Pavoletti</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>Shomurodov</th>\n",
|
||
" <td>0.4</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>467 rows × 2 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" starter percentage\n",
|
||
"player \n",
|
||
"Falcone 1 90.0\n",
|
||
"Gendrey 1 90.0\n",
|
||
"Baschirotto 1 90.0\n",
|
||
"Pongracic 1 80.0\n",
|
||
"Gallo 0.6 60.0\n",
|
||
"... ... ...\n",
|
||
"Oristanio 0 50.0\n",
|
||
"Jankto 0 15.0\n",
|
||
"Mancosu 0 10.0\n",
|
||
"Pavoletti 0 55.0\n",
|
||
"Shomurodov 0.4 60.0\n",
|
||
"\n",
|
||
"[467 rows x 2 columns]"
|
||
]
|
||
},
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"for i in range(ballots.shape[0]):\n",
|
||
" p1 = ballots['player1'][i]\n",
|
||
" p2 = ballots['player2'][i]\n",
|
||
" \n",
|
||
" perc = float(ballots['percentage'][i])\n",
|
||
" \n",
|
||
" probables.at[p1, 'starter'] = perc/100\n",
|
||
" probables.at[p2, 'starter'] = 1 - perc/100\n",
|
||
" \n",
|
||
"probables"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"id": "8b5468aa",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"probables.to_excel('mid_outputs/match_probable_players.xlsx') "
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3 (ipykernel)",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.9.13"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|