EPL 07-08 November 2015
EPL 07-08th of November 2015
As usual we have a quick shot-statistical look at the weekend matches in the English Premier League.
%matplotlib inline
import league_analysis
from IPython.display import display, HTML
epl = league_analysis.epl
weekend_matches = league_analysis.get_matches(epl, '07/11/2015', '08/11/2015')
league_analysis.display_given_matches(weekend_matches)
league_analysis.display_match(epl, 'Bournemouth', 'Newcastle', '07/11/15')
As I pointed out last week Bournemouth are probably the most unlucky team in the league and that is without taking in to account the misfortune of injuries. This was a typical example, Bournemouth should have won this match and probably would have on most other days. As usual to calculate how dominating a loss this was for Bournemouth we look at games with a similar difference in TSR:
bournemouth_tsr = 20.0 / (20.0 + 2.0)
def large_tsr(match):
return match.home_tsr >= bournemouth_tsr or match.away_tsr >= bournemouth_tsr
def large_tsr_lost(match):
return ((match.home_tsr >= bournemouth_tsr and match.FTR == 'A') or
(match.away_tsr >= bournemouth_tsr and match.FTR == 'H'))
(big_tsr, num_matches) = league_analysis.get_fraction_of_matches(large_tsr)
(big_tsr_lost, _) = league_analysis.get_fraction_of_matches(large_tsr_lost)
print('In {0} of {1} matches had a tsr of {2} or more'.format(big_tsr, num_matches,
bournemouth_tsr))
print('In {0} of those matches the team with the large tsr lost'.format(big_tsr_lost))
So it was only the 5th time that a team with as large a TSR has lost, here are those games:
relevant_matches = league_analysis.get_all_matches(filter_fun=large_tsr_lost)
league_analysis.display_given_matches(relevant_matches)
So in two of those matches the large TSR was due to the winning side having only a single shot. To me, 20 shots to 2 seems more dominant than 10 shots to 1. But if I count it like that I should include matches in which a team simply has 18 more shots. We also have the fairly incredible game in which Stevenage beat Burton 1-0 despite not registering a shot. Although this is fairly incredible 5 shots to 0 does not represent as large a domination. Birmingham's victory over Chelsea remains unsurpassed. Okay then, let's look at absolute shots rather than ratios.
bournemouth_shot_diff = 20 - 2
def large_shot_diff(match):
return abs(match.HS - match.AS) >= bournemouth_shot_diff
def large_shot_diff_lost(match):
return ((match.HS - match.AS >= bournemouth_shot_diff and match.FTR == 'A') or
(match.AS - match.HS >= bournemouth_shot_diff and match.FTR == 'H'))
(big_shot_diff, num_matches) = league_analysis.get_fraction_of_matches(large_shot_diff)
(big_shot_diff_lost, _) = league_analysis.get_fraction_of_matches(large_shot_diff_lost)
print('In {0} of {1} matches had a tsr of {2} or more'.format(big_shot_diff, num_matches,
bournemouth_shot_diff))
print('In {0} of those matches the team with the large tsr lost'.format(big_shot_diff_lost))
So there are certainly more matches with a shot difference of 18 or more in which the dominant team has lost. Still, 33 of 12099 is not very many. Here are the matches with the largest shot diff to have lost sorted with the largest shot diff first:
relevant_matches = league_analysis.get_all_matches(filter_fun=large_shot_diff_lost)
relevant_matches = sorted(relevant_matches, key=lambda m: abs(m.HS - m.AS), reverse=True)
league_analysis.display_given_matches(relevant_matches)
Chelsea have the top two spots. If you dominate a lot of teams, sooner or later you're going to lose despite this.
league_analysis.display_match(epl, 'Leicester', 'Watford', '07/11/15')
A more or less solid home victory for Leicester. I think everyone keeps expecting Leicester to trip up and revert to performance levels more akin to pre-season expectations. Watford on the other hand look better than they have so far been rewarded. However, the teams now have fairly similar PDO statistics:
after_game_no_dicts = league_analysis.collect_after_game_dicts(epl, '01/08/2015', '09/11/2015')
league_analysis.plot_changing_stats(epl, after_game_no_dicts, 'pdo',
rankings=True, teams=['Leicester', 'Watford'])
league_analysis.display_match(epl, 'Man United', 'West Brom', '07/11/15')
Manchester United continue to defy logic with their incredible efficiency. Definitely a much more in-depth look at Manchester United is required. If we look at goals-per-shot-on-target, surprisingly Manchester United are not leading this, but are behind West Ham, Leicester, and Everton. Chelsea also make a pretty surprisingly high appearance.
pairs = [(stats.teamname, stats.goals_sot_for_ratio)
for stats in epl.team_stats.values()]
league_analysis.display_ranked_table(['Team', 'Goals per SOT'], pairs)
teams = ['Man United', 'Leicester', 'West Ham', 'Everton', 'Chelsea', 'Liverpool', 'Swansea']
league_analysis.plot_changing_stats(epl, after_game_no_dicts, 'goals_sot_for_ratio',
rankings=True, teams=teams)
league_analysis.display_match(epl, 'Norwich', 'Swansea', '07/11/15')
Nice win for Norwich that they probably deserved, not just on the back of this performance but generally. Swansea might be a little concerned as the table above shows they are second bottom for goals per shots on target, which does not couple well with a lack of ability to create shots on target.
league_analysis.display_match(epl, 'Stoke', 'Chelsea', '07/11/15')
Interesting. Chelsea's rot continues. However, they were clearly pretty dominant. If they are looking for some hope, Chelsea fans could look to number of shots taken where Chelsea now rank a non-disastrous 7th, although they were 3rd at one point. TSR is also looking a little brighter, but far from champions' league form.
league_analysis.plot_changing_stats(epl, after_game_no_dicts, 'shots_for',
rankings=True)
league_analysis.plot_changing_stats(epl, after_game_no_dicts, 'tsr',
rankings=True)
league_analysis.display_match(epl, 'Sunderland', 'Southampton', '07/11/15')
Another home defeat, but Sunderland actually did not do too badly here. Match of the day said that Southampton were very dominant, on the basis of the shot counts alone they weren't that dominant. Sunderland can be a little pleased that they restricted Southampton to fewer than their average of 14.4 shots per game and fewer than their average shots on target per game. They also managed 3 shots on target whereas Southampton are generally restricting teams to just under 3, and for Sunderland 'about average' is much better than most of their previous games.
epl.compare_game_against_opponents('Sunderland', 'Southampton', '07/11/15')
league_analysis.display_match(epl, 'West Ham', 'Everton', '07/11/15')
Fairly straightforward draw. But West Ham fans unable to enjoy their current position in the knowledge that they have probably over-achieved somewhat will be pretty pleased with a deserved draw to a team that certainly could have taken all three points. Both these teams could do with more in-depth analysis.
league_analysis.display_match(epl, 'Arsenal', 'Tottenham', '08/11/15')
Excellent match for Tottenham. Arsenal are probably second favourites to win the league behind Manchester City, and at this point I'd suggest it is more likely Arsenal win the league than fail to be in the top three. But Tottenham are good. A deserved draw at Arsenal will be something of a rare item this season, and if Arsenal were to fail to be in the top three, I'd wager that Tottenham were one of the three pushing them out.
league_analysis.display_match(epl, 'Aston Villa', 'Man City', '08/11/15')
A draw against a very good City side will obviously be pretty welcome for a struggling Aston Villa side. Although City clearly dominanted the match and didn't allow Villa a single shot on target, City have dominated most teams they have played this season. Villa haven't managed as many shots against City has other teams have, but they have also restricted City more than other teams, given that a draw was probably the aim for Villa, I'd chaulk this up as something of an encouraging sign. Of course, it's only one match and Manchester City are probably not a good side to measure yourself against.
I'd said a few weeks ago that three teams look pretty poor, Newcastle, Sunderland and Villa. Sunderland and Villa promptly parted company with their respective managers. At the time I stated that I didn't really think a change of manager would help much at Sunderland, since no one really believes Dick Advocaat, or all of the succession of previous recent managers, were incompetent. However, it was a bit more plausible that a change of manager at Villa might have some effect. Still, Villa are not going to trouble the top half of the league this season, but they might at least be in the league next season.
epl.compare_game_against_opponents('Aston Villa', 'Man City', '08/11/15')
league_analysis.display_match(epl, 'Liverpool', 'Crystal Palace', '08/11/15')
Crystal Palace are seeming a bit strange. In particular they are doing better away from home than they are at home:
league_analysis.compare_home_away_form(epl, 'Crystal Palace')
It is interesting that Crystal Palace are doing better away from home in terms of points and goals, but not in terms of total shots ratio or shots on target ratio, it seems that their better form away from home is mostly their shooting/save percentages, in other words, PDO. The question is, will their home form catch up to their away form, or their away form drop back to their home form?
epl.compare_game_against_opponents('Liverpool', 'Crystal Palace', '08/11/15')
As for Liverpool, I don't know. They seem unlucky so far to me.
As always, thanks for reading.
Comments
Comments powered by Disqus