In [1]:
import requests
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from scipy.cluster.vq import whiten, kmeans2

In [2]:
def call_api(uri, result_key):
    json = {}
    try:
        json = requests.get(uri, headers = { 'X-Auth-Token': 'c52b7825851b4357af3e06c1888152f0' }).json()
        return json[result_key]
    except:
        print(json)
        return None

In [3]:
teams = call_api('http://api.football-data.org/v1/soccerseasons/398/teams', 'teams')
teams


Out[3]:
[{'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/66/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/66/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/66'}},
  'code': 'MUFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/d/da/Manchester_United_FC.svg',
  'name': 'Manchester United FC',
  'shortName': 'ManU',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/73/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/73/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/73'}},
  'code': 'THFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/b/b4/Tottenham_Hotspur.svg',
  'name': 'Tottenham Hotspur FC',
  'shortName': 'Spurs',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/1044/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/1044/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/1044'}},
  'code': 'AFCB',
  'crestUrl': 'https://upload.wikimedia.org/wikipedia/de/4/41/Afc_bournemouth.svg',
  'name': 'AFC Bournemouth',
  'shortName': 'Bournemouth',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/58/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/58/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/58'}},
  'code': 'AVFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/9/9f/Aston_Villa_logo.svg',
  'name': 'Aston Villa FC',
  'shortName': 'Aston Villa',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/62/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/62/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/62'}},
  'code': 'EFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/f/f9/Everton_FC.svg',
  'name': 'Everton FC',
  'shortName': 'Everton',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/346/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/346/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/346'}},
  'code': 'Watfordfc',
  'crestUrl': 'https://upload.wikimedia.org/wikipedia/en/e/e2/Watford.svg',
  'name': 'Watford FC',
  'shortName': 'Watford',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/338/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/338/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/338'}},
  'code': 'LCFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/en/6/63/Leicester02.png',
  'name': 'Leicester City FC',
  'shortName': 'Foxes',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/71/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/71/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/71'}},
  'code': 'SUN',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/6/60/AFC_Sunderland.svg',
  'name': 'Sunderland AFC',
  'shortName': 'Sunderland',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/68/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/68/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/68'}},
  'code': 'NCFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/8/8c/Norwich_City.svg',
  'name': 'Norwich City FC',
  'shortName': 'Norwich',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/354/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/354/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/354'}},
  'code': 'CRY',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/b/bf/Crystal_Palace_F.C._logo_(2013).png',
  'name': 'Crystal Palace FC',
  'shortName': 'Crystal',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/61/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/61/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/61'}},
  'code': 'CFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/5/5c/Chelsea_crest.svg',
  'name': 'Chelsea FC',
  'shortName': 'Chelsea',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/72/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/72/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/72'}},
  'code': 'SWA',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/a/ab/Swansea_City_Logo.svg',
  'name': 'Swansea City FC',
  'shortName': 'Swans',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/67/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/67/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/67'}},
  'code': 'NUFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/5/56/Newcastle_United_Logo.svg',
  'name': 'Newcastle United FC',
  'shortName': 'Newcastle',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/340/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/340/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/340'}},
  'code': 'SFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/c/c9/FC_Southampton.svg',
  'name': 'Southampton FC',
  'shortName': 'Southampton',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/57/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/57/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/57'}},
  'code': 'AFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/en/5/53/Arsenal_FC.svg',
  'name': 'Arsenal FC',
  'shortName': 'Arsenal',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/563/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/563/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/563'}},
  'code': 'WHU',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/e/e0/West_Ham_United_FC.svg',
  'name': 'West Ham United FC',
  'shortName': 'West Ham',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/70/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/70/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/70'}},
  'code': 'SCFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/a/a3/Stoke_City.svg',
  'name': 'Stoke City FC',
  'shortName': 'Stoke',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/64/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/64/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/64'}},
  'code': 'LFC',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/0/0a/FC_Liverpool.svg',
  'name': 'Liverpool FC',
  'shortName': 'Liverpool',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/74/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/74/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/74'}},
  'code': 'WBA',
  'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/8/8b/West_Bromwich_Albion.svg',
  'name': 'West Bromwich Albion FC',
  'shortName': 'West Bromwich',
  'squadMarketValue': None},
 {'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/65/fixtures'},
   'players': {'href': 'http://api.football-data.org/v1/teams/65/players'},
   'self': {'href': 'http://api.football-data.org/v1/teams/65'}},
  'code': 'MCFC',
  'crestUrl': 'https://upload.wikimedia.org/wikipedia/en/e/eb/Manchester_City_FC_badge.svg',
  'name': 'Manchester City FC',
  'shortName': 'ManCity',
  'squadMarketValue': None}]

In [4]:
team[0]


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-cdaac77cbb93> in <module>()
----> 1 team[0]

NameError: name 'team' is not defined

In [5]:
teams[0]


Out[5]:
{'_links': {'fixtures': {'href': 'http://api.football-data.org/v1/teams/66/fixtures'},
  'players': {'href': 'http://api.football-data.org/v1/teams/66/players'},
  'self': {'href': 'http://api.football-data.org/v1/teams/66'}},
 'code': 'MUFC',
 'crestUrl': 'http://upload.wikimedia.org/wikipedia/de/d/da/Manchester_United_FC.svg',
 'name': 'Manchester United FC',
 'shortName': 'ManU',
 'squadMarketValue': None}

In [6]:
teams[0]['name']


Out[6]:
'Manchester United FC'

In [7]:
for team in teams:
    print(team['name'])


Manchester United FC
Tottenham Hotspur FC
AFC Bournemouth
Aston Villa FC
Everton FC
Watford FC
Leicester City FC
Sunderland AFC
Norwich City FC
Crystal Palace FC
Chelsea FC
Swansea City FC
Newcastle United FC
Southampton FC
Arsenal FC
West Ham United FC
Stoke City FC
Liverpool FC
West Bromwich Albion FC
Manchester City FC

In [21]:
players = call_api(team['_links']['players']['href'], 'players')
players[0]


Out[21]:
{'contractUntil': '2020-06-30',
 'dateOfBirth': '1983-04-13',
 'jerseyNumber': 1,
 'marketValue': None,
 'name': 'Claudio Bravo',
 'nationality': 'Chile',
 'position': 'Keeper'}

In [22]:
for player in players:
    print(player['name'], player['marketValue'])


Claudio Bravo None
Angus Gunn None
John Stones None
Nicolás Otamendi None
Vincent Kompany None
Aleksandar Kolarov None
Gaël Clichy None
Bacary Sagna None
Fernando None
Aleix García None
Ilkay Gündogan None
Fernandinho None
Yaya Touré None
Fabian Delph None
Kevin De Bruyne None
David Silva None
Raheem Sterling None
Nolito None
Jesús Navas None
Sergio Agüero None
Gabriel Jesus None

In [35]:
league_table = call_api('http://api.football-data.org/v1/competitions/398/leagueTable', 'standing')
league_table[0]


Out[35]:
{'_links': {'team': {'href': 'http://api.football-data.org/v1/teams/338'}},
 'away': {'draws': 6,
  'goals': 33,
  'goalsAgainst': 18,
  'losses': 2,
  'wins': 11},
 'crestURI': 'http://upload.wikimedia.org/wikipedia/en/6/63/Leicester02.png',
 'draws': 12,
 'goalDifference': 32,
 'goals': 68,
 'goalsAgainst': 36,
 'home': {'draws': 6,
  'goals': 35,
  'goalsAgainst': 18,
  'losses': 1,
  'wins': 12},
 'losses': 3,
 'playedGames': 38,
 'points': 81,
 'position': 1,
 'teamName': 'Leicester City FC',
 'wins': 23}

In [41]:
for team in league_table:
    print('position {} ... {} points ... {} ... {} goals'.format(team['position'], team['points'],team['teamName'], team['goals']))


position 1 ... 81 points ... Leicester City FC ... 68 goals
position 2 ... 71 points ... Arsenal FC ... 65 goals
position 3 ... 70 points ... Tottenham Hotspur FC ... 69 goals
position 4 ... 66 points ... Manchester City FC ... 71 goals
position 5 ... 66 points ... Manchester United FC ... 49 goals
position 6 ... 63 points ... Southampton FC ... 59 goals
position 7 ... 62 points ... West Ham United FC ... 65 goals
position 8 ... 60 points ... Liverpool FC ... 63 goals
position 9 ... 51 points ... Stoke City FC ... 41 goals
position 10 ... 50 points ... Chelsea FC ... 59 goals
position 11 ... 47 points ... Everton FC ... 59 goals
position 12 ... 47 points ... Swansea City FC ... 42 goals
position 13 ... 45 points ... Watford FC ... 40 goals
position 14 ... 43 points ... West Bromwich Albion FC ... 34 goals
position 15 ... 42 points ... Crystal Palace FC ... 39 goals
position 16 ... 42 points ... AFC Bournemouth ... 45 goals
position 17 ... 39 points ... Sunderland AFC ... 48 goals
position 18 ... 37 points ... Newcastle United FC ... 44 goals
position 19 ... 34 points ... Norwich City FC ... 39 goals
position 20 ... 17 points ... Aston Villa FC ... 27 goals

In [63]:
table_for_k_means = []
for team in league_table:
    table_for_k_means.append({'name': team['teamName'], 'points': team['points'], 'goals': team['goals']})
table_for_k_means


Out[63]:
[{'goals': 68, 'name': 'Leicester City FC', 'points': 81},
 {'goals': 65, 'name': 'Arsenal FC', 'points': 71},
 {'goals': 69, 'name': 'Tottenham Hotspur FC', 'points': 70},
 {'goals': 71, 'name': 'Manchester City FC', 'points': 66},
 {'goals': 49, 'name': 'Manchester United FC', 'points': 66},
 {'goals': 59, 'name': 'Southampton FC', 'points': 63},
 {'goals': 65, 'name': 'West Ham United FC', 'points': 62},
 {'goals': 63, 'name': 'Liverpool FC', 'points': 60},
 {'goals': 41, 'name': 'Stoke City FC', 'points': 51},
 {'goals': 59, 'name': 'Chelsea FC', 'points': 50},
 {'goals': 59, 'name': 'Everton FC', 'points': 47},
 {'goals': 42, 'name': 'Swansea City FC', 'points': 47},
 {'goals': 40, 'name': 'Watford FC', 'points': 45},
 {'goals': 34, 'name': 'West Bromwich Albion FC', 'points': 43},
 {'goals': 39, 'name': 'Crystal Palace FC', 'points': 42},
 {'goals': 45, 'name': 'AFC Bournemouth', 'points': 42},
 {'goals': 48, 'name': 'Sunderland AFC', 'points': 39},
 {'goals': 44, 'name': 'Newcastle United FC', 'points': 37},
 {'goals': 39, 'name': 'Norwich City FC', 'points': 34},
 {'goals': 27, 'name': 'Aston Villa FC', 'points': 17}]

In [64]:
teams_for_k_means = pd.DataFrame(table_for_k_means)
teams_for_k_means


Out[64]:
goals name points
0 68 Leicester City FC 81
1 65 Arsenal FC 71
2 69 Tottenham Hotspur FC 70
3 71 Manchester City FC 66
4 49 Manchester United FC 66
5 59 Southampton FC 63
6 65 West Ham United FC 62
7 63 Liverpool FC 60
8 41 Stoke City FC 51
9 59 Chelsea FC 50
10 59 Everton FC 47
11 42 Swansea City FC 47
12 40 Watford FC 45
13 34 West Bromwich Albion FC 43
14 39 Crystal Palace FC 42
15 45 AFC Bournemouth 42
16 48 Sunderland AFC 39
17 44 Newcastle United FC 37
18 39 Norwich City FC 34
19 27 Aston Villa FC 17

In [65]:
del teams_for_k_means['name']
teams_for_k_means


Out[65]:
goals points
0 68 81
1 65 71
2 69 70
3 71 66
4 49 66
5 59 63
6 65 62
7 63 60
8 41 51
9 59 50
10 59 47
11 42 47
12 40 45
13 34 43
14 39 42
15 45 42
16 48 39
17 44 37
18 39 34
19 27 17

In [71]:
table_whitened = whiten(teams_for_k_means.as_matrix())
centroids, cluster_map = kmeans2(table_whitened, 3)
colors_map = {0: 'r', 1: 'g', 2: 'b', 3: 'y', 4: 'm'}
colors = [colors_map[c] for c in cluster_map]
teams_for_k_means.plot.scatter(x='goals', y='points', c=colors, s=100)


Out[71]:
<matplotlib.axes._subplots.AxesSubplot at 0xb6f14b1160>

In [72]:
table_whitened = whiten(teams_for_k_means.as_matrix())
centroids, cluster_map = kmeans2(table_whitened, 5)
colors_map = {0: 'r', 1: 'g', 2: 'b', 3: 'y', 4: 'm', 5: 'c'}
colors = [colors_map[c] for c in cluster_map]
teams_for_k_means.plot.scatter(x='goals', y='points', c=colors, s=100)


Out[72]:
<matplotlib.axes._subplots.AxesSubplot at 0xb6f15d0518>

In [ ]:


In [ ]:


In [ ]:


In [ ]: