{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# EPL 19-20th March 2016\n", "\n", "Another week another win for Leicester and another step taken towards the premier league title. Here is the usual look at the underlying shot statistics for the weekend's matches." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamChelseaWest Ham
Goals22
Shots2213
SOT56
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamCrystal PalaceLeicester
Goals01
Shots128
SOT43
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamEvertonArsenal
Goals02
Shots811
SOT23
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamSwanseaAston Villa
Goals10
Shots1012
SOT12
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamWatfordStoke
Goals12
Shots99
SOT46
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamWest BromNorwich
Goals01
Shots107
SOT01
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamMan CityMan United
Goals01
Shots265
SOT23
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamNewcastleSunderland
Goals11
Shots1714
SOT84
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamSouthamptonLiverpool
Goals32
Shots1618
SOT59
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamTottenhamBournemouth
Goals30
Shots172
SOT80
\n", "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Position Team Points
1 Leicester 66
2 Tottenham 61
3 Arsenal 55
4 Man City 51
5 West Ham 50
- Man United 50
7 Southampton 47
8 Stoke 46
9 Liverpool 44
10 Chelsea 41
11 West Brom 39
12 Bournemouth 38
- Everton 38
14 Watford 37
15 Swansea 36
16 Crystal Palace 33
17 Norwich 28
18 Sunderland 26
19 Newcastle 25
20 Aston Villa 16
\n", "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Position Team Team Rating
1 Tottenham 0.24710791087088907
2 Man City 0.2389774252864094
3 Liverpool 0.14474279925123518
4 Arsenal 0.11075857211421597
5 Leicester 0.06704884032040781
6 Chelsea 0.06000709018853358
7 Southampton 0.0564910678235171
8 Man United 0.04970145468954883
9 Everton 0.04134731500654405
10 West Ham 0.01702386906932641
11 Bournemouth -0.017487104921353552
12 Watford -0.044764865254164565
13 Swansea -0.07266532147459098
14 Stoke -0.07437775266011082
15 Crystal Palace -0.08166059447588073
16 Norwich -0.1320042244399923
17 West Brom -0.14293860336833414
18 Sunderland -0.144966402635897
19 Newcastle -0.1792828769890239
20 Aston Villa -0.19994132690032004
\n", "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Position Team PDO
1 Leicester 0.11928904428904424
2 West Ham 0.0843942054433714
3 Man United 0.07763645998940116
4 Everton 0.0712962962962963
5 Arsenal 0.06744186046511627
6 West Brom 0.052837209302325605
7 Watford 0.05106179909329517
8 Stoke 0.050529100529100535
9 Chelsea 0.03754130112794807
10 Sunderland 0.019047619047619035
11 Southampton 0.007892606583917938
12 Tottenham -0.0008254656141979955
13 Man City -0.002348244687096379
14 Swansea -0.02093984172561103
15 Crystal Palace -0.04778243741263183
16 Norwich -0.061407440609592134
17 Bournemouth -0.10338445267054469
18 Liverpool -0.10624868504102669
19 Newcastle -0.11723565670934089
20 Aston Villa -0.14504241412877206
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import league_analysis\n", "from IPython.display import display, HTML\n", "epl = league_analysis.epl\n", "display(HTML(league_analysis.blog_weekly_header(epl, '19/03/2016', '20/03/2016')))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Chelsea 2-2 West Ham\n", "\n", "Cracking game. A draw is probably about a fair result here. Chelsea had 9 more shots, but one fewer on target, this chimes well with the fact that Chelsea spent a good proportion of this match behind, including a late proportion of the game (which increases urgency). Since we're talking about Chelsea, this seems a good point to show the latest runs, with Chelsea unbeaten for 14 games.\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Position Team Winning Run
1 Leicester 3
2 Southampton 2
- Tottenham 2
4 Stoke 1
- Arsenal 1
- Norwich 1
- Swansea 1
- Man United 1
9 Aston Villa 0
- Crystal Palace 0
- Bournemouth 0
- Liverpool 0
- West Brom 0
- Everton 0
- Chelsea 0
- Newcastle 0
- West Ham 0
- Sunderland 0
- Man City 0
- Watford 0
\n", "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Position Team Unbeaten Run
1 Chelsea 14
2 Leicester 5
- West Ham 5
4 Southampton 3
- Sunderland 3
- Tottenham 3
7 Arsenal 2
- Norwich 2
9 Stoke 1
- Swansea 1
- Newcastle 1
- Man United 1
13 Aston Villa 0
- Crystal Palace 0
- Bournemouth 0
- Liverpool 0
- West Brom 0
- Everton 0
- Man City 0
- Watford 0
\n", "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Position Team Winless
1 Crystal Palace 13
2 Aston Villa 6
3 Newcastle 5
4 Sunderland 4
- Watford 4
6 Everton 2
- Chelsea 2
- Man City 2
9 Bournemouth 1
- Liverpool 1
- West Brom 1
- West Ham 1
13 Stoke 0
- Arsenal 0
- Leicester 0
- Southampton 0
- Norwich 0
- Swansea 0
- Man United 0
- Tottenham 0
\n", "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Position Team Losing
1 Aston Villa 6
2 Watford 3
3 Crystal Palace 2
- Everton 2
5 Bournemouth 1
- Liverpool 1
- West Brom 1
- Man City 1
9 Stoke 0
- Arsenal 0
- Leicester 0
- Southampton 0
- Norwich 0
- Chelsea 0
- Swansea 0
- Newcastle 0
- West Ham 0
- Man United 0
- Sunderland 0
- Tottenham 0
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "league_analysis.display_current_runs(epl)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, Chelsea's important 14 game unbeaten run, should be teppered a little with the fact that they have only won 6 of those matches, including being out-shot by Norwich and a rather flattering 3-0 away win at Selhurst Park." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamChelseaSunderland
Goals31
Shots1711
SOT73
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamCrystal PalaceChelsea
Goals03
Shots810
SOT44
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamArsenalChelsea
Goals01
Shots912
SOT16
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamChelseaNewcastle
Goals51
Shots1510
SOT54
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamSouthamptonChelsea
Goals12
Shots716
SOT24
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamNorwichChelsea
Goals12
Shots1310
SOT22
\n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def chelsea_win(game):\n", " if game.HomeTeam == 'Chelsea':\n", " return game.FTHG > game.FTAG\n", " else:\n", " assert game.AwayTeam == 'Chelsea'\n", " return game.FTAG > game.FTHG\n", "league_analysis.display_given_matches(g for g in epl.team_stats['Chelsea'].games[-14:] if chelsea_win(g))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is why if we look at the form over the past 10 games, Chelsea are good, but Tottenham are better and Leicester have scored more points." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Position Team Points
1 Tottenham 25
2 Leicester 23
3 Southampton 20
4 Chelsea 18
- West Ham 18
6 Bournemouth 17
- Swansea 17
- Man United 17
9 Stoke 14
- Liverpool 14
11 Arsenal 13
- West Brom 13
13 Everton 12
- Man City 12
15 Sunderland 11
16 Newcastle 8
- Watford 8
18 Aston Villa 5
- Norwich 5
20 Crystal Palace 2
\n", "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Position Team Team Rating
1 Tottenham 0.35769122037296497
2 Man City 0.2148074228227645
3 Liverpool 0.14934454714598783
4 Chelsea 0.12769303380864183
5 Leicester 0.1003351268960672
6 Everton 0.06779691954104167
7 West Ham 0.048957310546536896
8 Bournemouth 0.016068563393227375
9 Arsenal 0.015888066604995383
10 Southampton -0.011874072061767577
11 Man United -0.05287525405172468
12 Swansea -0.05837103536890509
13 Stoke -0.07017369579390914
14 Sunderland -0.0752421364932708
15 Newcastle -0.07841208183422443
16 West Brom -0.15962556306306305
17 Crystal Palace -0.1634253452739026
18 Watford -0.17095507433742735
19 Norwich -0.2018366677906411
20 Aston Villa -0.27905743894907975
\n", "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Position Team PDO
1 Swansea 0.1777777777777778
2 Leicester 0.17373737373737375
3 Southampton 0.1718266253869969
4 West Ham 0.1256921373200443
5 Chelsea 0.10425531914893615
6 Man United 0.09477124183006536
7 West Brom 0.09234234234234234
8 Sunderland 0.07751196172248803
9 Bournemouth 0.05128205128205132
10 Arsenal 0.0478723404255319
11 Everton 0.023352361183186288
12 Watford -0.007692307692307693
13 Man City -0.012733446519524627
14 Tottenham -0.026606425702811243
15 Liverpool -0.028310104529616742
16 Stoke -0.0892857142857143
17 Norwich -0.13008130081300817
18 Crystal Palace -0.18210262828535667
19 Aston Villa -0.21153846153846154
20 Newcastle -0.3472222222222222
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "stats = league_analysis.last_x_game_stats(epl, 10)\n", "display(HTML(league_analysis.header_stat_tables(epl, stats=stats)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Crystal Palace 0-1 Leicester City\n", "\n", "A collision of two teams, one currently out-performing their numbers the other currently under-performing their numbers and so it proved in the game. Last week we pointed out that Leicester beat Newcastle with their only shot on target of the game. This week was more even but it's hard not to feel some sympathy for Palace here. Okay so Palace spent quite a bit of this match behind, but still.\n", "\n", "I really think this will be a fascinating end to the season. On paper I don't think Leicester have enough to finish the season without dropping 5 more points than Tottenham, but I would have made the same prediction about the previous 10 matches as well. Either Leicester really have found a way to beat their numbers, or winning the title will likely require their luck to continue.\n", "\n", "To be clear, this is Newcastle and Crystal Palace we're talking about here. In the past 10 games they rate 15th and 17th for team rating." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
Leicester Tottenham
Southampton (H) Liverpool (A)
Sunderland (A) Man United (H)
West Ham (H) Stoke (A)
Swansea (H) West Brom (H)
Man United (A) Chelsea (A)
Everton (H) Southampton (H)
Chelsea (A) Newcastle (A)
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "league_analysis.compare_fixtures(epl, ['Leicester', 'Tottenham'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Southampton will be a very tough test for Leicester next week, but Liverpool then Manchester United are pretty tough asks for Tottenham. Final day of the season could be interesting, if Tottenham need to make up 3 points on Leicester, it would be tough to bet against it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Everton 0-2 Arsenal\n", "\n", "A good away win for Arsenal, far from dominating the game, but somewhat controlled it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Swansea 1-0 Aston Villa\n", "\n", "At times Villa have been abject, and at times you have had to feel a touch sorry for them. This is reflected in the fact that Villa now have the lowest PDO in the league. However, let's not forget they also have the lowest team rating. They certainly deserve to be relegated, but don't quite deserve to be 9 points adrift." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Watford 1-2 Stoke\n", "\n", "Very good game. Stoke continue to confound analysts. They certainly **seem** like a better team than their 14th ranked team rating suggests. Will be interesting to see if they can remain in the top half of the league. It's hard to see them surpassing any of the teams above them, unless perhaps West Ham crumble. But Chelsea and Liverpool are hot on their tails. That would still keep Stoke in 10th, and the others are probably just a bit too far back. So I predict 10th for Stoke." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# West Brom 0-1 Norwich\n", "\n", "Norwich certainly needed that. One of those games that neither team particularly deserved to win, with just a single shot on target all game, in total." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Manchester City 0-1 Manchester United\n", "\n", "Any hope of the title is surely gone now for Manchester City and they turn their attention more to the prospect of missing out on the Champions' League next season. They were certainly a bit unlucky to have lost this, in a similar way to failing to win at Norwich last week. In both games though, despite creating a lot of chances, they have not actually achieved many shots on target. Still, 26 shots is a fairly incredible number, here are the games this season in which a team has taken 26 or more shots and failed to win:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamChelseaCrystal Palace
Goals12
Shots2613
SOT96
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamMan CityWest Ham
Goals12
Shots276
SOT83
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamSouthamptonLeicester
Goals22
Shots1426
SOT67
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamLiverpoolWest Brom
Goals22
Shots284
SOT82
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamStokeCrystal Palace
Goals12
Shots2612
SOT53
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamEvertonWest Brom
Goals01
Shots345
SOT61
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamTottenhamArsenal
Goals22
Shots2610
SOT114
\n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HomeAway
TeamMan CityMan United
Goals01
Shots265
SOT23
\n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def high_shooting_losers(game):\n", " return (game.HS >= 26 and game.FTHG <= game.FTAG) or (game.AS >= 26 and game.FTAG <= game.FTHG)\n", "league_analysis.display_given_matches(g for g in epl.matches if high_shooting_losers(g))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just 8 games. Of those, strangely 5 of them were loses, this probably reflects the stronger team being behind and throwing more caution to the wind as the game progresses. Note, in only one of these games has the high shooting team failed to even score. Can the red Manchesters beat out the sky blue Manchesters to the 4th Champions' League spot?" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Man United Man City Arsenal
Everton (H) Bournemouth (A) Watford (H)
Tottenham (A) West Brom (H) West Ham (A)
Aston Villa (H) Chelsea (A) Crystal Palace (H)
Crystal Palace (H) Newcastle (A) West Brom (H)
Leicester (H) Stoke (H) Sunderland (A)
Norwich (A) Southampton (A) Norwich (H)
West Ham (A) Arsenal (H) Man City (A)
Bournemouth (H) Swansea (A) Aston Villa (H)
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "league_analysis.compare_fixtures(epl, ['Man United', 'Man City', 'Arsenal'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A couple of tricky games in the offing for Manchester United, but City will be wary of the Arsenal game in the penultimate match of the season. Saying that, Arsenal may well be wary of just that match themselves. Manchester City have a game in hand on Arsenal and in the last ten games Arsenal have a team rating ranked only 9th whereas City are ranked second. Fortunately for Arsenal, Manchester United are ranked even worse at 11th. My prediction, City, Arsenal, United." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Newcastle 1-1 Sunderland\n", "\n", "Newcastle probably deserved a win here and that is somewhat emblematic of their season since the January transfer window. They are quite clearly showing improved form, but not getting much return from it. Wins for both Norwich and Swansea must have increased tension in the North East. However, as we have noted before, Swansea have a quite trecherous final four games to navigate, and Stoke, and then Chelsea, next don't look overly inviting either. Swansea now have 36 points, they may well have to hope that that is enough. Can Newcastle pick up 11 points? It's certainly possible, they will be looking for 6 points in their final two matches.\n", "\n", "Can Crystal Palace survive? They have a bit of a better run-in than Swansea, but their current form is pretty bad. If I had to bet I'd say Norwich aren't looking good and one of Newcastle and Sunderland, probably seperated by a point or even goal difference." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
Newcastle Sunderland Norwich Crystal Palace Swansea
Norwich (A) West Brom (H) Newcastle (H) West Ham (A) Stoke (A)
Southampton (A) Leicester (H) Crystal Palace (A) Norwich (H) Chelsea (H)
Swansea (H) Norwich (A) Sunderland (H) Arsenal (A) Newcastle (A)
Man City (H) Arsenal (H) Arsenal (A) Man United (A) Leicester (A)
Liverpool (A) Stoke (A) Man United (H) Everton (H) Liverpool (H)
Crystal Palace (H) Chelsea (H) Watford (H) Newcastle (A) West Ham (A)
Aston Villa (A) Everton (H) Everton (A) Stoke (H) Man City (H)
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "league_analysis.compare_fixtures(epl, ['Newcastle', 'Sunderland', 'Norwich', 'Crystal Palace', 'Swansea'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Southampton 3-2 Liverpool\n", "\n", "Wow, an incredible game. Not the first time we've said that about a Liverpool game this season. Liverpool should be higher up the league, and doing so with entertaining football. Things look pretty good for Liverpool for next season, and also for Southampton, if with perhaps slightly lower expectations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Tottenham 3-0 Bournemouth\n", "\n", "Bournemouth are generally a decent team and deserve to be in the league for next season (which they almost certainly will be). But Tottenham are a *great* team. When a great team gets in front early on, it can be difficult to make things happen for their opposition, and Bournemouth just did not have that in them. A team rating of greater than 0.3 for the last ten games means Tottenham are now top overall for team rating. Both very good number for Tottenham, and they should go on and win the league. There, I said it. Tottenham should win the league and Leicester should be second." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thanks for reading." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.4.3" }, "nikola": { "category": "", "date": "2016-03-22 11:21:17 UTC", "description": "", "link": "", "slug": "epl-19-20th-march-2016", "tags": "", "title": "EPL 19-20th March 2016", "type": "text" } }, "nbformat": 4, "nbformat_minor": 0 }