EPL 12-13th March 2016

EPL 12-14th March 2016

Fewer games this weekend as some matches had to take a back seat for the FA Cup. Which once again means that we are in the position that some teams have played a different number of games to other teams. Leicester meanwhile add another three points to their tally taking them closer to an astonishing title.

In [1]:
%matplotlib inline
import league_analysis
from IPython.display import display, HTML
epl = league_analysis.epl
display(HTML(league_analysis.blog_weekly_header(epl, '12/03/2016', '14/03/2016')))
Home Away
Team Bournemouth Swansea
Goals 3 2
Shots 12 12
SOT 4 4
Home Away
Team Norwich Man City
Goals 0 0
Shots 5 15
SOT 0 3
Home Away
Team Stoke Southampton
Goals 1 2
Shots 13 11
SOT 2 4
Home Away
Team Aston Villa Tottenham
Goals 0 2
Shots 11 19
SOT 2 8
Home Away
Team Leicester Newcastle
Goals 1 0
Shots 10 13
SOT 1 2
Position Team Points
1 Leicester 63
2 Tottenham 58
3 Arsenal 52
4 Man City 51
5 West Ham 49
6 Man United 47
7 Southampton 44
- Liverpool 44
9 Stoke 43
10 Chelsea 40
11 West Brom 39
12 Everton 38
- Bournemouth 38
14 Watford 37
15 Swansea 33
- Crystal Palace 33
17 Norwich 25
- Sunderland 25
19 Newcastle 24
20 Aston Villa 16
Position Team Team Rating
1 Man City 0.23660884120853484
2 Tottenham 0.23328915761161972
3 Liverpool 0.15405182682694996
4 Arsenal 0.10528295471992956
5 Leicester 0.068112982703401
6 Man United 0.06449431554152744
7 Southampton 0.05815324484103421
8 Chelsea 0.05672522787653218
9 Everton 0.05032448685887768
10 West Ham 0.023473784891819095
11 Bournemouth 0.0035773300853972137
12 Watford -0.0416931784440219
13 Swansea -0.07613499334019372
14 Stoke -0.08028182545517831
15 Crystal Palace -0.08336182485470581
16 Norwich -0.13582598943362723
17 West Brom -0.14441133703985323
18 Sunderland -0.1469299356435429
19 Newcastle -0.18954504516143245
20 Aston Villa -0.20278293793754384
Position Team PDO
1 Leicester 0.11133004926108375
2 West Ham 0.09033989266547404
3 Everton 0.08514246947082765
4 Man United 0.0725925925925926
5 West Brom 0.05851462865716428
6 Watford 0.05732927359721618
7 Arsenal 0.05677315813230352
8 Stoke 0.04901960784313725
9 Chelsea 0.03658234126984128
10 Sunderland 0.013185168125287916
11 Man City 0.0020202020202019777
12 Tottenham -0.005199678370410077
13 Southampton -0.00992366412213741
14 Swansea -0.03229974160206717
15 Crystal Palace -0.038337368845843434
16 Norwich -0.06838768115942029
17 Liverpool -0.09057971014492755
18 Bournemouth -0.10582908885116016
19 Newcastle -0.11084905660377359
20 Aston Villa -0.1358695652173913

Bournemouth 3-2 Swansea

What a great game. When we get a 3-2, there are often 2 reasons for it. Either one team, generally the team that has won, has dominated and somehow the dominated team have flattered themselves to score twice. Alternatively, it is a pretty close game that either team could have won. This game appears to have been in the latter category.

It is fairly remarkable that 5 goals have been scored from 8 shots on target. So far in the league there have only been 3 other similar games, two involving West Brom and two involving Everton (and both teams have won one and lost one). Two of these two games have been split-ticket games (in which one team has more total shots but their opponents have more shots on target).

In [2]:
def qualifying_game(game):
    goals = game.FTHG + game.FTAG
    sots = game.HST + game.AST
    return goals >= 5 and sots <= 8
games = [g for g in epl.matches if qualifying_game(g)]
display(HTML(league_analysis.html_games(games)))
Home Away
Team West Brom Everton
Goals 2 3
Shots 9 12
SOT 4 4
Home Away
Team Everton Stoke
Goals 3 4
Shots 15 8
SOT 3 5
Home Away
Team West Brom Crystal Palace
Goals 3 2
Shots 11 15
SOT 5 2
Home Away
Team Bournemouth Swansea
Goals 3 2
Shots 12 12
SOT 4 4

That is now Bournemouth on a run of three victories, equalled by Liverpool and West Ham neither of which played this weekend.

In [3]:
league_analysis.display_current_runs(epl)
Position Team Winning Run
1 Bournemouth 3
- Liverpool 3
- West Ham 3
4 Leicester 2
5 West Brom 1
- Southampton 1
- Tottenham 1
8 Everton 0
- Norwich 0
- Chelsea 0
- Swansea 0
- Arsenal 0
- Stoke 0
- Man City 0
- Watford 0
- Man United 0
- Sunderland 0
- Crystal Palace 0
- Newcastle 0
- Aston Villa 0
Position Team Unbeaten Run
1 Chelsea 13
2 Bournemouth 4
- West Brom 4
- Leicester 4
- Liverpool 4
- West Ham 4
7 Southampton 2
- Man City 2
- Tottenham 2
- Sunderland 2
11 Norwich 1
- Arsenal 1
13 Everton 0
- Swansea 0
- Stoke 0
- Watford 0
- Man United 0
- Crystal Palace 0
- Newcastle 0
- Aston Villa 0
Position Team Winless
1 Crystal Palace 12
2 Norwich 10
3 Aston Villa 5
4 Newcastle 4
5 Arsenal 3
- Watford 3
- Sunderland 3
8 Stoke 2
9 Everton 1
- Chelsea 1
- Swansea 1
- Man City 1
- Man United 1
14 Bournemouth 0
- West Brom 0
- Southampton 0
- Leicester 0
- Tottenham 0
- Liverpool 0
- West Ham 0
Position Team Losing
1 Aston Villa 5
2 Newcastle 4
3 Watford 2
4 Everton 1
- Swansea 1
- Stoke 1
- Man United 1
- Crystal Palace 1
9 Norwich 0
- Bournemouth 0
- West Brom 0
- Southampton 0
- Chelsea 0
- Arsenal 0
- Man City 0
- Leicester 0
- Tottenham 0
- Liverpool 0
- Sunderland 0
- West Ham 0

Norwich 0-0 Manchester City

Last weekend I was stating how I still thought Manchester City were in with a shout of the title. This was definitely a game that would have helped that cause. City certainly should have won it, with 15 shots, given that they only faced 5 none of which were on target. However, City will be pretty disappointed that only 3 of their 15 shots were on target.

On only 10 occassions this season has the away team had at least 10 more shots than their hosts but failed to win. In four of those games that away team has been Manchester City. No other team has managed this more than once.

In [4]:
def qualifying_game(game):
    shots_diff = game.AS - game.HS
    goals_diff = game.FTHG - game.FTAG
    return goals_diff >= 0 and shots_diff >= 10
games = [g for g in epl.matches if qualifying_game(g)]
display(HTML(league_analysis.html_games(games)))
Home Away
Team Sunderland Swansea
Goals 1 1
Shots 10 20
SOT 2 9
Home Away
Team Southampton Leicester
Goals 2 2
Shots 14 26
SOT 6 7
Home Away
Team Sunderland Newcastle
Goals 3 0
Shots 9 21
SOT 3 8
Home Away
Team Stoke Chelsea
Goals 1 0
Shots 8 19
SOT 2 4
Home Away
Team Aston Villa Man City
Goals 0 0
Shots 3 13
SOT 0 3
Home Away
Team Arsenal Man City
Goals 2 1
Shots 8 20
SOT 5 6
Home Away
Team Leicester Man City
Goals 0 0
Shots 11 21
SOT 4 5
Home Away
Team West Brom Aston Villa
Goals 0 0
Shots 4 15
SOT 0 4
Home Away
Team Southampton West Ham
Goals 1 0
Shots 8 18
SOT 2 2
Home Away
Team Norwich Man City
Goals 0 0
Shots 5 15
SOT 0 3

However, it's not that uncommon for a team to take 15 shots without scoring, Arsenal and Liverpool both managed this feat in the same game.

In [5]:
def qualifying_game(game):
    return (game.HS >= 15 and game.FTHG == 0) or (game.AS >= 15 and game.FTAG == 0)
games = [g for g in epl.matches if qualifying_game(g)]
display(HTML(league_analysis.html_games(games)))
Home Away
Team Arsenal West Ham
Goals 0 2
Shots 22 8
SOT 6 4
Home Away
Team Southampton Everton
Goals 0 3
Shots 17 10
SOT 4 4
Home Away
Team Watford West Brom
Goals 0 0
Shots 16 6
SOT 5 0
Home Away
Team Man United Newcastle
Goals 0 0
Shots 20 7
SOT 8 0
Home Away
Team Arsenal Liverpool
Goals 0 0
Shots 19 15
SOT 5 8
Home Away
Team Tottenham Everton
Goals 0 0
Shots 20 8
SOT 6 3
Home Away
Team Swansea Everton
Goals 0 0
Shots 12 17
SOT 3 2
Home Away
Team Watford Crystal Palace
Goals 0 1
Shots 15 16
SOT 2 3
Home Away
Team Norwich West Brom
Goals 0 1
Shots 16 7
SOT 3 4
Home Away
Team Sunderland Newcastle
Goals 3 0
Shots 9 21
SOT 3 8
Home Away
Team Newcastle Stoke
Goals 0 0
Shots 15 9
SOT 6 2
Home Away
Team Southampton Bournemouth
Goals 2 0
Shots 11 16
SOT 2 2
Home Away
Team Bournemouth Newcastle
Goals 0 1
Shots 20 2
SOT 5 1
Home Away
Team Stoke Chelsea
Goals 1 0
Shots 8 19
SOT 2 4
Home Away
Team Southampton Stoke
Goals 0 1
Shots 16 16
SOT 1 4
Home Away
Team Crystal Palace Sunderland
Goals 0 1
Shots 19 12
SOT 7 4
Home Away
Team Chelsea Bournemouth
Goals 0 1
Shots 19 15
SOT 6 5
Home Away
Team Man United West Ham
Goals 0 0
Shots 21 9
SOT 1 2
Home Away
Team Crystal Palace Southampton
Goals 1 0
Shots 12 15
SOT 5 3
Home Away
Team West Ham Stoke
Goals 0 0
Shots 22 12
SOT 9 3
Home Away
Team Aston Villa Arsenal
Goals 0 2
Shots 18 8
SOT 2 4
Home Away
Team Swansea West Ham
Goals 0 0
Shots 21 11
SOT 2 2
Home Away
Team Leicester Man City
Goals 0 0
Shots 11 21
SOT 4 5
Home Away
Team Arsenal Newcastle
Goals 1 0
Shots 16 15
SOT 3 6
Home Away
Team Leicester Bournemouth
Goals 0 0
Shots 16 9
SOT 2 0
Home Away
Team West Ham Liverpool
Goals 2 0
Shots 18 23
SOT 10 2
Home Away
Team Man City Everton
Goals 0 0
Shots 22 7
SOT 5 2
Home Away
Team Tottenham Leicester
Goals 0 1
Shots 21 10
SOT 5 2
Home Away
Team Liverpool Man United
Goals 0 1
Shots 19 7
SOT 4 1
Home Away
Team West Brom Aston Villa
Goals 0 0
Shots 4 15
SOT 0 4
Home Away
Team Arsenal Southampton
Goals 0 0
Shots 21 14
SOT 11 3
Home Away
Team Southampton West Ham
Goals 1 0
Shots 8 18
SOT 2 2
Home Away
Team Bournemouth Arsenal
Goals 0 2
Shots 17 10
SOT 4 5
Home Away
Team Everton West Brom
Goals 0 1
Shots 34 5
SOT 6 1
Home Away
Team Norwich Man City
Goals 0 0
Shots 5 15
SOT 0 3

Stoke 1-2 Southampton

A split ticket game. Again this likely reflects the fact that Stoke were behind for 80 minutes of this game. Based on the first half this probably could have been a more comfortable victory for Southampton.

I thought Mark Hughes' post-match interview was a pretty good one, an example of a manager being pretty fair and objective even after a defeat. I don't have any data to back this up, but generally I'm concerned for a team when a manager constantly makes excuses. I think Mark Hughes could be coming into his own as a really top-notch manager.

Generally speaking quite a lot of positives for both sides here. Though Stoke fans will be pretty concerned about a team rating that is ranked only 14th. Still, it's getting pretty crowded at the top, but I'm going to make a bold prediction for next season. Both of these two teams finish higher than both West Ham and Leicester.

Aston Villa 0-2 Tottenham

Another good win for Tottenham. Still think they are favourites for the title, they are at the very least keeping Leicester very honest.

Leicester 1-0 Newcastle

Well another good win for Leicester. They are either riding a lot of luck or found a way to make particularly effective chances. They have been out-shot here 10-13, and not only that but shots on target was 1-2, which means that Leicester scored with their only shot on target, an overhead kick at that (hardly what you might call a particularly effective chance).

Leicester scored in the 25th minute and hence played over 2/3rds of the match in the lead, which might explain their lack of ambition. Still this feels unusual for the table-toppers against a team battling relegation.

Here are just some graphs plotting the three metrics, points, team rating and PDO. It's interesting that despite Leicester having the highest PDO, they are still above the trend-line for points-vs-pdo. This somehow means that their high points total cannot be entirely explained by their high PDO.

In [6]:
def get_team_rating(league, team):
    return league.team_stats[team].team_rating
def get_points(league, team):
    return league.team_stats[team].points
def get_pdo(league, team):
    return league.team_stats[team].pdo

league_analysis.scatter_stats(epl, get_x_stat=get_team_rating, get_y_stat=get_points,
                              title='Points/Team Rating', ylabel='Points', xlabel='Team Rating')
league_analysis.scatter_stats(epl, get_x_stat=get_pdo, get_y_stat=get_points,
                              title='Points/PDO', ylabel='Points', xlabel='PDO')
league_analysis.scatter_stats(epl, get_x_stat=get_pdo, get_y_stat=get_team_rating,
                              title='Team Rating / PDO', ylabel='Team Rating', xlabel='PDO')
line of best fit: 75.41 x + 40.13
line of best fit: 99.74 x + 39.77
line of best fit: 0.5555 x - 0.003331

Plotting team rating against PDO does not really mean much, so don't look at the trend line. It's just interesting to see where a team lies on here. For example Aston Villa are both poor and kind of unfortunate, a pretty desparate combination. Bournemouth are an average team that have been unlucky.

Back to Leicester

One argument is that Leicester are playing a lot on the break, and hence when counter-attacking they either coming up with a very good chance (or even multiple good chances) or no chance at all. Which means they do not have many low quality chances/shots.

Indeed Leicester are second only to Everton for shot percentage, and this is backed up by a good save percentage as well.

However, if this were the case, one would expect Leicester to conjure up more good chances against Newcastle in game-chasing mode. Playing over an hour behind, you would have expected Newcastle to force the issue at least some, which, you would think, would make them vulnerable to a counter-attack. It seems strange then that Leicester never managed another shot on target.

In [10]:
def get_save_percentage(league, team):
    return 100.0 * (1 - league.team_stats[team].goals_sot_against_ratio)
def get_shot_percentage(league, team):
    return 100.0 * league.team_stats[team].goals_sot_for_ratio

league_analysis.scatter_stats(epl, get_x_stat=get_shot_percentage, get_y_stat=get_save_percentage,
                              title='save % / shot %', ylabel='save %', xlabel='shot %')
line of best fit: 0.3724 x + 57.34

So in a week of limited action we still have our fair share of mysteries to ponder.

Thanks for reading.

Comments

Comments powered by Disqus