• Login
  • Register
Total Football Analysis
Once.Sport
  • Subscribe To TFA
  • TFA Magazine
  • Analysis
    • Data Analysis
    • Formations
      • 2-2-4 Formation
      • 2-3-5 Formation
      • 3-1-4-2 Formation
      • 3-2-2-3 Formation
      • 3-2-4-1 Formation
      • 3-1-6 Formation
      • 3-3-4 Formation
      • 3-4-1-2 Formation
      • 3-4-2-1 Formation
      • 3-4-3 Formation
      • 3-5-1-1 Formation
      • 3-5-2 Formation
      • 4-1-4-1 Formation
      • 4-2-2-2 Formation
      • 4-2-3-1 Formation
      • 4-2-4 Formation
      • 4-3-1-2 Formation
      • 4-3-3 Formation
      • 4-4-2 Formation
      • 4-5-1 Formation
      • 5-3-2 Formation
      • 5-4-1 Formation
      • 6-3-1 Formation
    • Head Coach Analysis
    • Match Analysis
    • Player Analysis
    • Recruitment Analysis
    • Set Piece Analysis
    • Tactical Theory
    • Tactical Preview
    • Team Analysis
    • Training Analysis
    • Tactical Analysis
    • Scouting Report
  • Competition
    • ALL Competitions
    • English Premier League
    • Champions League
    • La Liga
    • Bundesliga
    • Serie A
    • Ligue 1
    • Eredivisie
    • EFL Championship
    • FIFA World Cup 2022
    • WEURO 2022
    • Women’s Super League
    • NWSL
    • Belgian First Division A
    • A-League
    • Liga Profesional de Argentina
    • Austrian Bundesliga
    • Campeonato Brasileiro Série A
    • DFB Pokal
    • 1. HNL
    • Danish Superliga
    • EFL League One
    • EFL League Two
    • FA Cup
    • EFL Cup
    • Indian Super League
    • K-League
    • J1 League
    • Liga MX
    • Copa América 2021
    • Copa del Rey
    • MLS
    • Eliteserien
    • Euro 2020
    • Primeira Liga
    • Scottish Premiership
    • Allsvenskan
    • Europa League
    • UEFA Nations League
    • Liga AUF Uruguaya
  • Coaches
    • All Coaches
    • Alfred Schreuder
    • Ange Postecoglou
    • Antonio Conte
    • Arne Slot
    • Bo Svensson
    • Brendan Rodgers
    • Bruno Lage
    • Carlo Ancelotti
    • Christophe Galtier
    • Claude Puel
    • Claudio Ranieri
    • David Moyes
    • Dean Smith
    • Diego Simeone
    • Domenico Tedesco
    • Frank Lampard
    • Eddie Howe
    • Edin Terzić
    • Emma Hayes
    • Erik ten Hag
    • Ernesto Valverde
    • Gennaro Gattuso
    • Gerardo Seoane
    • Gian Piero Gasperini
    • Giovanni van Bronckhorst
    • Graham Potter
    • Igor Tudor
    • Imanol Alguacil
    • Jesse Marsch
    • Jonas Eidevall
    • Jorge Sampaoli
    • José Bordalás
    • José Mourinho
    • Julen Lopetegui
    • Julian Nagelsmann
    • Julien Stéphan
    • Jürgen Klopp
    • Luciano Spalletti
    • Lucien Favre
    • Manuel Pellegrini
    • Marcelo Bielsa
    • Marco Rose
    • Marco Silva
    • Massimiliano Allegri
    • Mauricio Pochettino
    • Maurizio Sarri
    • Mikel Arteta
    • Niko Kovač
    • Nuno Espírito Santo
    • Oliver Glasner
    • Patrick Vieira
    • Paulo Fonseca
    • Pep Guardiola
    • Peter Bosz
    • Rafa Benítez
    • Ralf Rangnick
    • Ralph Hasenhüttl
    • Roger Schmidt
    • Roy Hodgson
    • Sean Dyche
    • Sérgio Conceição
    • Simone Inzaghi
    • Sonia Bompastor
    • Stefano Pioli
    • Steffen Baumgart
    • Steven Gerrard
    • Thiago Motta
    • Thomas Frank
    • Thomas Tuchel
    • Unai Emery
    • Vincenzo Italiano
    • Xavi
  • Teams
    • ALL Teams
    • AC Milan
    • Ajax Amsterdam
    • Arsenal
    • AS Monaco FC
    • Atalanta
    • Atlético Madrid
    • FC Barcelona
    • FC Bayern Munich
    • Borussia Dortmund
    • Celtic FC
    • Chelsea FC
    • Everton F.C.
    • Inter Milan
    • Juventus F.C.
    • Leeds United F.C.
    • Liverpool FC
    • Manchester City
    • Manchester United FC
    • Paris Saint-Germain
    • Rangers FC
    • RB Leipzig
    • Real Madrid CF
    • Tottenham Hotspur
    • West Ham United
  • Players
    • ALL Players
    • Alisson Becker
    • Bukayo Saka
    • Erling Haaland
    • Harry Kane
    • Jack Grealish
    • John Stones
    • Julián Alvarez
    • Kalvin Phillips
    • Kevin De Bruyne
    • Kyle Walker
    • Kylian Mbappé
    • Lamine Yamal
    • Lionel Messi
    • Luis Díaz
    • Mohamed Salah
    • Phil Foden
    • Virgil Van Dijk
  • Contact
  • Write For TFA
No Result
View All Result
No Result
View All Result
Total Football Analysis
No Result
View All Result
Home Data Analysis

FIFA Women’s World Cup 2019: Ball Progressors – tactical analysis

Abhishek Sharma by Abhishek Sharma
July 1, 2019
in Data Analysis, FIFA Women's World Cup 2019
0
FIFA Women's World Cup 2019: Ball Progressors - tactical analysis tactics

A total of 24 teams came to France, with each team believing in their own philosophy, personnel, and tactics for the FIFA Womens World Cup 2019. Although the Mens World Cup in 2018 showed that possession-based football is not the surest possible road to a successful campaign in a knock-out competition, there are still more teams than not who believe that keeping the ball for an extended period of time is the best possible way to create chances and ultimately control matches. This philosophy requires a lot of things, foremost of which is the personality of the eleven players themselves to stay comfortable on the ball and look for.

Ball progression is essentially just that. It is the process of moving the ball through the thirds and getting the ball closer to the opponent’s goal such that it is easier for the teams to create chances. Although football is a very complex game, yet if you’re keeping the ball in the opponent’s half for a sustained period of time, it’s easier to put pressure on them while increasing your own chances of creating high-quality shots. In this data analysis piece, we’ll take a simple look at the best ball progressing midfielders from this Women’s World Cup using the Statsbomb data. As well as using data analysis we will use tactical analysis to find which players are important to their respective teams.

Objective

My objective is not to build a model in this piece. What we’ll instead do is take a simpler look at the data, play around with the passing data, and try to look at which players ultimately have the highest responsibility of progressing the play for their team.

Pre-requisites

You’ll need access to the Statsbomb data. Furthermore, I’ll be using Python and its various libraries such as Pandas, Matplotlib, and the json library (which comes built-in with Python).

Let’s get started

We’ll import the libraries first. I’m using Jupyter Lab, although you may use any IDE of your choice. Nothing is really different in that regard (except for some very minor changes).

import pandas as pd

import matplotlib.pyplot as plt

import json

from pandas.io.json import json_normalize

import matplotlib

matplotlib.style.use("ggplot")

Now we’ll go ahead and try to read in the data from the Statsbomb repository. The way it works is that they’ve got all their event data in a single file – the events file. It contains data from the FIFA 2018 World Cup, the FA WNL, and the ongoing WWC 2019. This makes it impossible to iterate through the whole folder and get only the matches from WWC 2019. Hence, we’ll have to go to the matches folder – which contains the match ids of all the matches for specific competitions and then get the ids from there. Then we use those ids to go to then get into the events folder and get only the matches we are interested in.

with open (r"C:\Users\ADMIN\Desktop\Abhishek\open-data\data\matches\72.json", "r") as f:

                obj = json.load(f)




mlist = []

objlist = []

dflist = []

for match in obj:

                mid = match["match_id"]

                mlist.append(mid)




mlist = [str(m) for m in mlist]

mlist = [m+".json" for m in mlist]




for n in mlist:

                file = "C://Users/ADMIN/Desktop/Abhishek/open-data/data/events" + "/" + n

                with open (file, "r") as f:

                                obj = json.load(f)

                                objlist.append(obj)

Now, we’ve got a list of Pandas dataframes for all the separate matches. We’ll now proceed to merge the dataframes into one master dataframe containing all the events from the World Cup till date. Here’s how we do that

for obj in objlist:

    df = json_normalize(obj)

    dflist.append(df)

result = pd.concat(dflist, sort=True)

Now we have our result dataframe ready.

Note: I’ll call the result dataframe df for the rest of the post

The first thing we do now is to filter only the passes from the dataframe. Next, we’ll notice that the location for the starting and ending of the passes are in a list under the columns – “location”, “pass.end_location”. Great. We can now create four more columns from these two columns, namely – Start X, Start Y, End X, and End Y.

We’ll do that as follows

df = result[result["type.name"]=="Pass"]

df[['Start X','Start Y',’End X’,’End Y’]] = pd.DataFrame(df[[“location”,”pass.end_location”]].values.tolist(), index= df.index)

To understand ball progression, we need to understand the pitch dimensions first. Since a pitch is measured in terms of x, y-axes, where x is the length and y is the width, most of our data crunching will be focused on the x-axis.

The first thing to do is to create a difference column which measures the difference between the ending and starting x coordinates of every pass. Well also set the negative values to zero  that is a back pass has no effect on the total score since were only considering passes that move the team up the pitch.

df["X-difference"] = (df["End X"] - df["Start X"]).clip(lower=0)

Next, we’ll filter the dataframe some more. We only have passes now but we’ll go ahead and drop all the set-pieces, kick-offs, throw-ins. This is so that only regular play is considered.

This is also where we’ll consider only successful passes. Here’s where I am making a big assumption – I’m working under the premise that if the pass.outcome.name was nan, it was a successful pass. The Statsbomb docs weren’t entirely clear on this area and that might be worth keeping in mind.

df.drop(df[(df["play_pattern.name"]=="From Kick Off")|(df["play_pattern.name"]=="From Free Kick")|(df["play_pattern.name"]=="From Throw In")|(df["play_pattern.name"]=="From Corner")].index, inplace=True)

df = df[df["pass.outcome.name"].isna()]

Now, we’ll aggregate the sum of all the difference in x we calculated earlier for every player. We’ll use Pandas’s life-saver function groupby for that. Then we set a filter for the minimum duration played by the player. This is akin to setting a lower filter for the number of minutes played by a player, to weed out inflated stats, if any. We’ll also need the sum of duration later, which we’ll get to in just a second.

gdf = df.groupby(["player.name"])[["X-difference", "duration"]].agg("sum")

gdf = gdf[gdf["duration"]>120]

gdf["Progression per 90"] = (gdf["X-difference"]/gdf["duration"])*90

We then multiply that value with 60 because the duration value is in seconds and it might be easier to understand if the data we get is in minutes. So essentially, were talking about how much pitch an individual player gains via a pass per minute of possession.

Capture

As expected, the top players are almost exclusively goalkeepers. This is because they usually are expected to clear their lines and those contribute a lot to getting higher ball progression values. So we can go ahead and remove all the goalkeepers from our df to gain better insight into the lesser-known players of the team. In fact, we should remove all the defenders as well because they aren’t necessarily known for progressing the ball. More importantly, their progression score will be affected by the clearances and long balls – particularly because, Statsbomb don’t tag clearances in the pass data. Keep in mind that our initial objective was to find midfielders who are good at progressing play and so we can safely go ahead and remove them all.

FIFA Women's World Cup 2019 ball progression tactical analysis tactics

 

 

Now were finally getting somewhere. Weve got quite a few interesting new names  as well as certa

Subscribe To TFA To Unlock All Posts - Free 7 Day Trial

Login if you have a TFA subscription

Try TFA Free For 7 Days

Gain access to all of TFA's premium contents.
More than 12,000+ articles.
Subscribe Now
Previous Post

FIFA Women’s World Cup 2019: Italy vs Netherlands – tactical analysis

Next Post

Ozan Tufan 2018/19 – scout report

Next Post
Ozar Tufan 2018/19 - scout report - tactical analysis tactics

Ozan Tufan 2018/19 - scout report

Your browser does not support the video tag.
  • Subscribe To TFA
  • About Total Football Analysis
  • Contact Total Football Analysis
  • Write For Total Football Analysis
  • Advertise
  • Privacy Policy
  • Cancellation / Refund Policy
  • Resources
  • Terms Of Service

© 2026 PlanMoreTrips LLC

Welcome Back!

Sign In with Google
OR

Login to your account below

Forgotten Password? Sign Up

Create New Account!

Sign Up with Google
OR

Fill the forms below to register

All fields are required. Log In

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Subscribe To TFA
  • TFA Magazine
  • Analysis
    • Data Analysis
    • Formations
      • 2-2-4 Formation
      • 2-3-5 Formation
      • 3-1-4-2 Formation
      • 3-2-2-3 Formation
      • 3-2-4-1 Formation
      • 3-1-6 Formation
      • 3-3-4 Formation
      • 3-4-1-2 Formation
      • 3-4-2-1 Formation
      • 3-4-3 Formation
      • 3-5-1-1 Formation
      • 3-5-2 Formation
      • 4-1-4-1 Formation
      • 4-2-2-2 Formation
      • 4-2-3-1 Formation
      • 4-2-4 Formation
      • 4-3-1-2 Formation
      • 4-3-3 Formation
      • 4-4-2 Formation
      • 4-5-1 Formation
      • 5-3-2 Formation
      • 5-4-1 Formation
      • 6-3-1 Formation
    • Head Coach Analysis
    • Match Analysis
    • Player Analysis
    • Recruitment Analysis
    • Set Piece Analysis
    • Tactical Theory
    • Tactical Preview
    • Team Analysis
    • Training Analysis
    • Tactical Analysis
    • Scouting Report
  • Competition
    • ALL Competitions
    • English Premier League
    • Champions League
    • La Liga
    • Bundesliga
    • Serie A
    • Ligue 1
    • Eredivisie
    • EFL Championship
    • FIFA World Cup 2022
    • WEURO 2022
    • Women’s Super League
    • NWSL
    • Belgian First Division A
    • A-League
    • Liga Profesional de Argentina
    • Austrian Bundesliga
    • Campeonato Brasileiro Série A
    • DFB Pokal
    • 1. HNL
    • Danish Superliga
    • EFL League One
    • EFL League Two
    • FA Cup
    • EFL Cup
    • Indian Super League
    • K-League
    • J1 League
    • Liga MX
    • Copa América 2021
    • Copa del Rey
    • MLS
    • Eliteserien
    • Euro 2020
    • Primeira Liga
    • Scottish Premiership
    • Allsvenskan
    • Europa League
    • UEFA Nations League
    • Liga AUF Uruguaya
  • Coaches
    • All Coaches
    • Alfred Schreuder
    • Ange Postecoglou
    • Antonio Conte
    • Arne Slot
    • Bo Svensson
    • Brendan Rodgers
    • Bruno Lage
    • Carlo Ancelotti
    • Christophe Galtier
    • Claude Puel
    • Claudio Ranieri
    • David Moyes
    • Dean Smith
    • Diego Simeone
    • Domenico Tedesco
    • Frank Lampard
    • Eddie Howe
    • Edin Terzić
    • Emma Hayes
    • Erik ten Hag
    • Ernesto Valverde
    • Gennaro Gattuso
    • Gerardo Seoane
    • Gian Piero Gasperini
    • Giovanni van Bronckhorst
    • Graham Potter
    • Igor Tudor
    • Imanol Alguacil
    • Jesse Marsch
    • Jonas Eidevall
    • Jorge Sampaoli
    • José Bordalás
    • José Mourinho
    • Julen Lopetegui
    • Julian Nagelsmann
    • Julien Stéphan
    • Jürgen Klopp
    • Luciano Spalletti
    • Lucien Favre
    • Manuel Pellegrini
    • Marcelo Bielsa
    • Marco Rose
    • Marco Silva
    • Massimiliano Allegri
    • Mauricio Pochettino
    • Maurizio Sarri
    • Mikel Arteta
    • Niko Kovač
    • Nuno Espírito Santo
    • Oliver Glasner
    • Patrick Vieira
    • Paulo Fonseca
    • Pep Guardiola
    • Peter Bosz
    • Rafa Benítez
    • Ralf Rangnick
    • Ralph Hasenhüttl
    • Roger Schmidt
    • Roy Hodgson
    • Sean Dyche
    • Sérgio Conceição
    • Simone Inzaghi
    • Sonia Bompastor
    • Stefano Pioli
    • Steffen Baumgart
    • Steven Gerrard
    • Thiago Motta
    • Thomas Frank
    • Thomas Tuchel
    • Unai Emery
    • Vincenzo Italiano
    • Xavi
  • Teams
    • ALL Teams
    • AC Milan
    • Ajax Amsterdam
    • Arsenal
    • AS Monaco FC
    • Atalanta
    • Atlético Madrid
    • FC Barcelona
    • FC Bayern Munich
    • Borussia Dortmund
    • Celtic FC
    • Chelsea FC
    • Everton F.C.
    • Inter Milan
    • Juventus F.C.
    • Leeds United F.C.
    • Liverpool FC
    • Manchester City
    • Manchester United FC
    • Paris Saint-Germain
    • Rangers FC
    • RB Leipzig
    • Real Madrid CF
    • Tottenham Hotspur
    • West Ham United
  • Players
    • ALL Players
    • Alisson Becker
    • Bukayo Saka
    • Erling Haaland
    • Harry Kane
    • Jack Grealish
    • John Stones
    • Julián Alvarez
    • Kalvin Phillips
    • Kevin De Bruyne
    • Kyle Walker
    • Kylian Mbappé
    • Lamine Yamal
    • Lionel Messi
    • Luis Díaz
    • Mohamed Salah
    • Phil Foden
    • Virgil Van Dijk
  • Contact
  • Write For TFA

© 2026 PlanMoreTrips LLC

Are you sure want to unlock this post?
Unlock left : 0
Are you sure want to cancel subscription?