EPL 22-24 August

EPL 22-24 August 2015/2016

Weekly round-up of games in the English Premier League.

In [1]:
%matplotlib inline
import league_analysis
from IPython.display import display, HTML
epl = league_analysis.epl
In [2]:
league_analysis.display_matches(epl, '22/08/15', '24/08/15')
Home Away
Team Crystal Palace Aston Villa
Goals 2 1
Shots 16 11
SOT 6 2
Home Away
Team Leicester Tottenham
Goals 1 1
Shots 13 19
SOT 2 6
Home Away
Team Man United Newcastle
Goals 0 0
Shots 20 7
SOT 8 0
Home Away
Team Norwich Stoke
Goals 1 1
Shots 21 6
SOT 7 1
Home Away
Team Sunderland Swansea
Goals 1 1
Shots 10 20
SOT 2 9
Home Away
Team West Ham Bournemouth
Goals 3 4
Shots 10 15
SOT 4 7
Home Away
Team Everton Man City
Goals 0 2
Shots 10 16
SOT 1 9
Home Away
Team Watford Southampton
Goals 0 0
Shots 13 14
SOT 0 5
Home Away
Team West Brom Chelsea
Goals 2 3
Shots 15 15
SOT 6 5
Home Away
Team Arsenal Liverpool
Goals 0 0
Shots 19 15
SOT 5 8

This is being done on Monday before the Arsenal vs Liverpool game so I'll update this post after data for that match is available.

Manchester United vs Newcastle, Norwich vs Stoke

Two draws, and two fairly incredible shot dominations. Between them, the away sides Newcastle and Stoke managed just one shot on target whilst allowing 15. To see just how unusual it is for a team to take a lot of shots but not the three points here is a quick analysis of matches with more shots than Manchester United took, that is one (or both) of the teams took 20 or more shots 8 or more of which were on target only for the team to fail to score/win.

In [3]:
matches = list(league_analysis.get_all_matches())
def high_home_shots(match):
    return match.HS >= 20 and match.HST >= 8
def high_away_shots(match):
    return match.AS >= 20 and match.AST >= 8
def shots_without_scoring(match):
    return ((match.FTHG == 0 and high_home_shots(match)) or
            (match.FTAG == 0 and high_away_shots(match)))
def shots_without_winning(match):
    return ((match.FTR != 'H' and high_home_shots(match)) or
            (match.FTR != 'A' and high_away_shots(match)))

num_shots_without_scoring = len([m for m in matches if shots_without_scoring(m)])
num_shots_without_winning = len([m for m in matches if shots_without_winning(m)])
num_matches = len(matches)
pairs = [('Total game', num_matches),
         ('High shots without scoring', num_shots_without_scoring),
         ('.. percentage', (num_shots_without_scoring / num_matches) * 100),
         ('High shots without winning', num_shots_without_winning),
         ('.. percentage', (num_shots_without_winning / num_matches) * 100),
         ]
league_analysis.display_pairs(pairs)
Total game 11595
High shots without scoring 95
.. percentage 0.8193186718413108
High shots without winning 347
.. percentage 2.992669253988788

So in less than 1 percent of games, a team takes as many shots/shots on target as Manchester United did this week and fails to score. Similarly less than 3 percent of games in which a team takes as many shots/shots on target but fails to win.

West Brom vs Chelsea

Chelsea continue their pretty middling start to the season, they at least manage an away victory but fail to out-shoot West Brom. It is easy to start drawing conclusions too early and this is certainly too early. So, just to put a damper on anyone thinking Chelsea are looking likely to struggle for a Champions' League spot this season, remember that they already have two red cards. So far the stats on Chelsea reveal that they were pretty well out-played by Manchester City at the Etihad and that they were out-shot by Swansea and West Brom. But Manchester City are likely to out-play most teams at the Etihad, even the eventual champions if not themselves. Most teams will be out-shot when losing a player to a red-card in the 51st-53rd minute of the match.

Leicester vs Tottenham

Leicester have had a cracking start to the season, albeit against less than stellar opposition, so Tottenham at home was a good test. Spurs have out-shot them, but not by an incredible amount. I think Leicester will be pretty pleased with this result, possibly more so than their previous wins as this result kind of hints at the ability to comfortably remain in the league.

Swansea and Southampton Frustrated

Similar to Manchester United and Norwich, Swansea and Southampton appear to have out-played their opponents with only a draw to show for their efforts. They won't be quite so displeased since they were playing away from home, but that makes out-shooting your opponents a bit more of a signal. In three games so far Swansea have out-shot their hosts and drawn twice, whilst also comfortably winning at home. Most stats-watchers predicted something of a demise/regression for Swansea this season, so far they seem at the very least okay.

Southampton similarly seem not to have quite had the return they deserve for there efforts so far.

Palace and Manchester City deserved wins

Relatively straightforward victories for Palace and Manchester City.

West Ham vs Bournemouth

Slightly crazy match. I guess Bournemouth supports should be as pleased with out-shooting their established premier league opponents away from home as with the result. I think the Cherries are likely survivalists and possibly even the higher reaches of the bottom half. West Ham fans have occasion to be concerned, if not quite out-right worried yet.

Graphs

Compulsory more or less random graph at the end. This shows how a team's total number of shots relates to their shots on target.

In [4]:
teams = epl.teams
def get_tsr_match(league, team, match_index):
    def tsr_in_game(game):
        shots_for = league_analysis.shots_for_in_game(team, game)
        shots_against = league_analysis.shots_against_in_game(team, game)
        total_shots = shots_for + shots_against
        return league_analysis.clean_ratio(shots_for, total_shots, default=0.5)
    stats = league.team_stats[team]
    return tsr_in_game(stats.games[match_index])
def get_x_stat(league, team):
    stats = league.team_stats[team]
    return stats.shots_for
def get_y_stat(league, team):
    stats = league.team_stats[team]
    return stats.sot_for
    
annotate_teams = ['Bournemouth', 'Norwich', 'Watford', 'Swansea', 'Liverpool',
                  'Man City', 'Crystal Palace', 'Arsenal']
league_analysis.scatter_stats(epl, teams=teams, xlabel='All Shots', ylabel='Shots on Target',
                              title='Shots to Shots on Target',
                              annotate_teams=annotate_teams,
                              get_x_stat=get_x_stat, get_y_stat=get_y_stat)
line of best fit: 0.3824 x - 2.243

The correlation here is pretty good, there are not a large number of outliers. Norwich appear a little trigger happy in that there are taking a lot of shots and not quite getting a high enough proportion on target, the same could be said of Watford. Perhaps it lies in something to do with differences with the Championship, the 3rd promoted team, Bournemouth, seem more middle-of-the-pack here, but they are still below the line of best fit.

Note, it's non-obvious whether it is a good thing to be above or below this line, but you certainly want to be towards the top-right, and just look where Swansea are.

Pre-Monday night, don't worry too much about Liverpool, they are low on account of having played one fewer game. But Arsenal have too and are in the middle of the pack.

Comments

Comments powered by Disqus