Introduction to K-Means with Python – Clustering Shot Creators in the Premier League

Football commentary and discussion is so often based on putting players into boxes. “He’s the best defensive forward in the league”, “I’d say he’s more a 6 than a 4”, “He’s one of your Gerrards, your Lampards, your Scholses”. Understanding these roles and coming to a decision on which players are closely aligned to them is incredibly difficult.

If we wanted to take a data-led approach to grouping player performances, we could use a method called clustering – allowing us to group players based on a set of their metrics. In practice, this might allow us to overcome some biases when analysing players or uncover names that we might have previously thought of as playing in a different style.

In this tutorial, we will look at k-means clustering. We will use the algorithm to put players into different groups based on their shot creating actions. The data for this article can be found on fbref.com from Statsbomb if you would like to follow along.

And just in case you are only here to see the player groups, the clusters are listed at the end of the article!

The process will take the following steps:

  1. Check and tidy dataset
  2. Create k-means model and assign each player into a cluster of similar players
  3. Describe & visualise results

Let’s get our libraries and data imported and get started.

In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

#Allow for full tables to be shown
pd.options.display.max_columns = None
pd.options.display.max_rows = None

data = pd.read_csv('SCA.csv')
data.head()
Out[1]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA
0 Patrick van Aanholt\Patrick-van-Aanholt nl NED DF Crystal Palace 28 1990 24.9 53 2.13 27 21 1 2 2
1 Max Aarons\Max-Aarons eng ENG DF Norwich City 19 2000 31.0 51 1.65 39 2 3 3 4
2 Tammy Abraham\Tammy-Abraham eng ENG FW Chelsea 21 1997 22.8 46 2.02 32 0 6 6 2
3 Che Adams\Che-Adams eng ENG FW Southampton 23 1996 9.2 18 1.96 12 0 2 1 3
4 Adrián\Adrian es ESP GK Liverpool 32 1987 9.7 2 0.21 2 0 0 0 0

Check & Tidy Dataset

Looking at our dataset, we have some biographical player information, along with shot creation numbers and their type.

Right away, we have a few bits to tidy with our first three columns:

In [2]:
#Split the player names by the slash, and use the first one
data['Player'] = data['Player'].str.split('\\', expand=True)[0]

#Split the nation names by the space, and use the second one
data['Nation'] = data['Nation'].str.split(' ', expand=True)[1]

#Some positions have 2 (e.g. MFFW), let's just use the first two letters for now
data['Pos'] = data['Pos'].str[:2]

data.head(2)                                  
Out[2]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA
0 Patrick van Aanholt NED DF Crystal Palace 28 1990 24.9 53 2.13 27 21 1 2 2
1 Max Aarons ENG DF Norwich City 19 2000 31.0 51 1.65 39 2 3 3 4

Much nicer to read now!

One more thing to consider is the effect of playing for a stronger team. As a broad assumption, we can expect players in better teams to create more shots, and players in worse teams to produce fewer.

This might produce results that group players based on their production levels, not the styles of their productions.

As such, let’s create some new columns to look at the percentages for each action type. We’ll do this by creating a sum column, then dividing each column by the sum.

In [3]:
#Create list of columns to sum, then assign the sum to a new column
add_list = ['Pass SCA', 'Deadball SCA', 'Dribble SCA', 'Shot SCA', 'Fouled SCA']
data['Sum SCA'] = data[add_list].sum(axis=1)

#Create our first new column
data['Pass SCA Ratio'] = data['Pass SCA']/data['Sum SCA']
data.head()
Out[3]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio
0 Patrick van Aanholt NED DF Crystal Palace 28 1990 24.9 53 2.13 27 21 1 2 2 53 0.509434
1 Max Aarons ENG DF Norwich City 19 2000 31.0 51 1.65 39 2 3 3 4 51 0.764706
2 Tammy Abraham ENG FW Chelsea 21 1997 22.8 46 2.02 32 0 6 6 2 46 0.695652
3 Che Adams ENG FW Southampton 23 1996 9.2 18 1.96 12 0 2 1 3 18 0.666667
4 Adrián ESP GK Liverpool 32 1987 9.7 2 0.21 2 0 0 0 0 2 1.000000

Looking good! Scroll to the right side of the table and we can see that Tammy’s shot creations were from passes nearly 70% of the time. We could manually create the remaining four, but let’s save ourselves some time and create these in a loop.

First, we’ll create the new column names in a loop. Then we will run another loop with the code that we just used to create our remaining columns.

In [4]:
#Create new column names by adding ' ratio' to each name in our previous list
new_cols_list = [each + ' Ratio' for each in add_list]

#For each new column name, calculate the column exactly as we did a minute ago
for idx, val in enumerate(new_cols_list):
    data[val] = data[add_list[idx]]/data['Sum SCA']

#Create a sum of the percentages to check that they all add to 1
data['Sum SCA Ratio'] = data[new_cols_list].sum(axis=1)
data.head(5)
Out[4]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio Deadball SCA Ratio Dribble SCA Ratio Shot SCA Ratio Fouled SCA Ratio Sum SCA Ratio
0 Patrick van Aanholt NED DF Crystal Palace 28 1990 24.9 53 2.13 27 21 1 2 2 53 0.509434 0.396226 0.018868 0.037736 0.037736 1.0
1 Max Aarons ENG DF Norwich City 19 2000 31.0 51 1.65 39 2 3 3 4 51 0.764706 0.039216 0.058824 0.058824 0.078431 1.0
2 Tammy Abraham ENG FW Chelsea 21 1997 22.8 46 2.02 32 0 6 6 2 46 0.695652 0.000000 0.130435 0.130435 0.043478 1.0
3 Che Adams ENG FW Southampton 23 1996 9.2 18 1.96 12 0 2 1 3 18 0.666667 0.000000 0.111111 0.055556 0.166667 1.0
4 Adrián ESP GK Liverpool 32 1987 9.7 2 0.21 2 0 0 0 0 2 1.000000 0.000000 0.000000 0.000000 0.000000 1.0

Perfect! We have loads of decimals adding to 1 that we can consider as percentages for each type of action.

One final issue to tidy… we have Adrián, a GK, in the dataset. This won’t be too useful for our shot creation profiles.

We’ll create a new dataframe that will ask for only forwards or midfielders. Also, let’s set a floor for playing time & shots created to cut out anyone with low appearance/creation numbers. These numbers are arbitrary, so feel free to change them into something more useful!

In [5]:
#New dataframe where Pos == FW or MF. AND played more than 5 90s AND created more than 15 shots
data_mffw = data[((data['Pos'] == 'FW') | (data['Pos'] == 'MF')) & (data['90s'] > 5) & (data['SCA'] > 15)]

data_mffw.head()
Out[5]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio Deadball SCA Ratio Dribble SCA Ratio Shot SCA Ratio Fouled SCA Ratio Sum SCA Ratio
2 Tammy Abraham ENG FW Chelsea 21 1997 22.8 46 2.02 32 0 6 6 2 46 0.695652 0.000000 0.130435 0.130435 0.043478 1.0
3 Che Adams ENG FW Southampton 23 1996 9.2 18 1.96 12 0 2 1 3 18 0.666667 0.000000 0.111111 0.055556 0.166667 1.0
5 Sergio Agüero ARG FW Manchester City 31 1988 16.1 51 3.16 28 0 9 9 5 51 0.549020 0.000000 0.176471 0.176471 0.098039 1.0
8 Marc Albrighton ENG MF Leicester City 29 1989 8.0 23 2.87 19 2 1 1 0 23 0.826087 0.086957 0.043478 0.043478 0.000000 1.0
12 Dele Alli ENG MF Tottenham 23 1996 20.4 53 2.60 39 1 9 2 2 53 0.735849 0.018868 0.169811 0.037736 0.037736 1.0

Create k-means model and assign each player into a cluster of similar players

Now that we are happy with our dataset, we can look to get our players clustered into groups. But first, we should discuss a bit about k-means clustering.

As simply as possible, the method splits all of our players into a number of clusters that we decide.

One way that it does this is by putting the centre of the clusters somewhere at random in our data. From here, the players are assigned a cluster based on which one they are closest to.

The cluster’s location then changes to the average of its players’ datapoints and the clusters are re-assigned. This process repeats until no players change their membership after the cluster centres move to their new average. Once this process stops, we then have our final clusters!

Thankfully, we are yet again standing on the shoulders of giants, and we can implement this complexity in just a few characters.

We will use the scikit learn module that we imported at the beginning of the article. Within the module, we will use the k-means function and assign a model to the variable ‘km’ below:

In [6]:
km = KMeans(n_clusters=5, init='random', random_state=0)

A few bits to unpack. Let’s take each of the arguments that we have given the function:

  • n_clusters=5: simply how many clusters should we create? We have chosen 5 for no particular reason, but there are ways to see how many clusters you have that are for a more in-depth piece!
  • init=’random’: how should we pick where to try with our first clusters? We have selected at random and…
  • random_state=0: is here to keep my random first clusters in the same place each time. You should remove this argument entirely if you want your analysis to use a ‘random’ that will change each time.

So nothing really complicated there, we are just asking for a KMeans model that will put our data into 5 clusters.

We are now ready for our km model variable to fit clusters to our data.

We are going to do this against the data_mffw dataset that we created above, but only looking at the new columns that we created with percentages. Let’s do this below, and see what the output is:

In [7]:
y_km = km.fit_predict(data_mffw[new_cols_list])
y_km
Out[7]:
array([3, 1, 1, 2, 3, 3, 3, 3, 1, 3, 3, 1, 1, 3, 1, 3, 3, 3, 2, 3, 1, 4,
       1, 3, 3, 2, 4, 2, 3, 1, 3, 3, 3, 4, 3, 2, 2, 1, 1, 3, 4, 4, 2, 4,
       3, 4, 3, 3, 4, 3, 4, 3, 2, 2, 4, 2, 0, 3, 2, 3, 3, 2, 3, 1, 1, 0,
       3, 4, 2, 1, 1, 2, 3, 1, 3, 3, 2, 1, 3, 2, 1, 2, 1, 2, 2, 1, 4, 4,
       2, 3, 2, 4, 3, 4, 3, 3, 0, 4, 3, 4, 3, 2, 2, 3, 3, 2, 0, 4, 3, 3,
       4, 3, 0, 2, 4, 2, 4, 1, 1, 0, 2, 2, 2, 4, 1, 2, 3, 0, 1, 3, 4, 3,
       4, 3, 4, 3, 3, 3, 2, 3, 1, 3, 1, 2, 1, 2, 1, 2, 1, 1, 3, 2, 1, 4,
       0, 2, 2, 2, 0, 3, 2, 3, 3, 2, 2, 4, 3, 1, 1, 4, 1, 1, 3, 0, 0, 3,
       4, 2, 3, 3, 2, 1, 3, 2, 1], dtype=int32)

It may not look like much, but we have an array of cluster values for our dataset! Congratulations on building a clustering model! 💪😎

The array isn’t too useful on its own, so let’s assign them to their corresponding players by adding them as a new column:

In [8]:
data_mffw['Cluster'] = y_km
data_mffw.head()
Out[8]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio Deadball SCA Ratio Dribble SCA Ratio Shot SCA Ratio Fouled SCA Ratio Sum SCA Ratio Cluster
2 Tammy Abraham ENG FW Chelsea 21 1997 22.8 46 2.02 32 0 6 6 2 46 0.695652 0.000000 0.130435 0.130435 0.043478 1.0 3
3 Che Adams ENG FW Southampton 23 1996 9.2 18 1.96 12 0 2 1 3 18 0.666667 0.000000 0.111111 0.055556 0.166667 1.0 1
5 Sergio Agüero ARG FW Manchester City 31 1988 16.1 51 3.16 28 0 9 9 5 51 0.549020 0.000000 0.176471 0.176471 0.098039 1.0 1
8 Marc Albrighton ENG MF Leicester City 29 1989 8.0 23 2.87 19 2 1 1 0 23 0.826087 0.086957 0.043478 0.043478 0.000000 1.0 2
12 Dele Alli ENG MF Tottenham 23 1996 20.4 53 2.60 39 1 9 2 2 53 0.735849 0.018868 0.169811 0.037736 0.037736 1.0 3

Describe & Visualise Results

Right at the end, we can see the cluster for each player. Let’s check out our first group and see what’s going on:

In [9]:
data_mffw[data_mffw['Cluster'] == 0].head()
Out[9]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio Deadball SCA Ratio Dribble SCA Ratio Shot SCA Ratio Fouled SCA Ratio Sum SCA Ratio Cluster
173 Pascal Groß GER FW Brighton 28 1991 17.5 86 4.91 48 29 4 1 2 84 0.571429 0.345238 0.047619 0.011905 0.023810 1.0 0
195 Conor Hourihane IRL MF Aston Villa 28 1991 13.2 49 3.72 20 24 0 2 3 49 0.408163 0.489796 0.000000 0.040816 0.061224 1.0 0
270 James Maddison ENG MF Leicester City 22 1996 29.2 168 5.76 76 53 16 7 16 168 0.452381 0.315476 0.095238 0.041667 0.095238 1.0 0
293 James McCarthy IRL MF Crystal Palace 28 1990 15.1 23 1.52 13 9 0 1 0 23 0.565217 0.391304 0.000000 0.043478 0.000000 1.0 0
305 Luka Milivojević SRB MF Crystal Palace 28 1991 25.1 37 1.48 14 22 1 0 0 37 0.378378 0.594595 0.027027 0.000000 0.000000 1.0 0

Lots of set-piece takers in here, along with high pass numbers and low dribbles (except Maddison).

Compare it to the next cluster, which features fewer set piece takers and more creations from dribbles, shots and being fouled:

In [10]:
data_mffw[data_mffw['Cluster'] == 1].head()
Out[10]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio Deadball SCA Ratio Dribble SCA Ratio Shot SCA Ratio Fouled SCA Ratio Sum SCA Ratio Cluster
3 Che Adams ENG FW Southampton 23 1996 9.2 18 1.96 12 0 2 1 3 18 0.666667 0.000 0.111111 0.055556 0.166667 1.0 1
5 Sergio Agüero ARG FW Manchester City 31 1988 16.1 51 3.16 28 0 9 9 5 51 0.549020 0.000 0.176471 0.176471 0.098039 1.0 1
21 Michail Antonio ENG FW West Ham 29 1990 15.4 40 2.59 21 1 11 2 5 40 0.525000 0.025 0.275000 0.050000 0.125000 1.0 1
25 Pierre-Emerick Aubameyang GAB FW Arsenal 30 1989 30.5 51 1.67 35 0 7 4 5 51 0.686275 0.000 0.137255 0.078431 0.098039 1.0 1
27 Jordan Ayew GHA FW Crystal Palace 27 1991 30.4 54 1.78 33 0 10 1 10 54 0.611111 0.000 0.185185 0.018519 0.185185 1.0 1

The rest of these clusters and all the others can be found at the end of the article. To close this out before then, it might help our understanding to visualise them.

We can do this simply with a scatter plot featuring two columns:

In [11]:
#We'll do this a couple of times, let's make a function
def plotClusters(xAxis, yAxis):
    plt.scatter(data_mffw[data_mffw['Cluster']==0][xAxis], data_mffw[data_mffw['Cluster']==0][yAxis], s=40, c='red', label ='Cluster 1')
    plt.scatter(data_mffw[data_mffw['Cluster']==1][xAxis], data_mffw[data_mffw['Cluster']==1][yAxis], s=40, c='blue', label ='Cluster 2')
    plt.scatter(data_mffw[data_mffw['Cluster']==2][xAxis], data_mffw[data_mffw['Cluster']==2][yAxis], s=40, c='green', label ='Cluster 3')
    plt.scatter(data_mffw[data_mffw['Cluster']==3][xAxis], data_mffw[data_mffw['Cluster']==3][yAxis], s=40, c='pink', label ='Cluster 4')
    plt.scatter(data_mffw[data_mffw['Cluster']==4][xAxis], data_mffw[data_mffw['Cluster']==4][yAxis], s=40, c='gold', label ='Cluster 5')
    plt.xlabel(xAxis)
    plt.ylabel(yAxis)    
    plt.legend() 
    
plotClusters('Pass SCA Ratio', 'Dribble SCA Ratio')

It might look weird having some rogue players, but remember that our model considered 5 variables, whereas the visualisation only looks at 2. Check out principal component analysis if you want to work towards a visualisation that better fits this approach!

One final plot, let’s look at shots created per 90 against age. This kind of thing might help us to examine a player that we are replacing and look for younger players with similar contributions.

In [12]:
#Age vs number of shot creations per 90, split by cluster
plotClusters('SCA90', 'Age')

Conclusion

Congratulations on making it through a machine learning tutorial and building a model to cluster the attacking creativity of Premier League players!

There are plenty of things that would need tidying up, however. As one example in our analysis, taking set-pieces means your other actions are diminished in the percentages – we would need to solve that problem!

I hope that you have also had some ideas on how to apply this data to both football and non-football data. Whether it is scouting for transfer targets or grouping customers, kmeans can be hugely useful for you!

If you have enjoyed the tutorial, let us know on Twitter, and take a look at our other pieces on machine learning and data visualisation!

Appendix – Cluster Lists

In [13]:
#Set piece takers
data_mffw[data_mffw['Cluster'] == 0]
Out[13]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio Deadball SCA Ratio Dribble SCA Ratio Shot SCA Ratio Fouled SCA Ratio Sum SCA Ratio Cluster
173 Pascal Groß GER FW Brighton 28 1991 17.5 86 4.91 48 29 4 1 2 84 0.571429 0.345238 0.047619 0.011905 0.023810 1.0 0
195 Conor Hourihane IRL MF Aston Villa 28 1991 13.2 49 3.72 20 24 0 2 3 49 0.408163 0.489796 0.000000 0.040816 0.061224 1.0 0
270 James Maddison ENG MF Leicester City 22 1996 29.2 168 5.76 76 53 16 7 16 168 0.452381 0.315476 0.095238 0.041667 0.095238 1.0 0
293 James McCarthy IRL MF Crystal Palace 28 1990 15.1 23 1.52 13 9 0 1 0 23 0.565217 0.391304 0.000000 0.043478 0.000000 1.0 0
305 Luka Milivojević SRB MF Crystal Palace 28 1991 25.1 37 1.48 14 22 1 0 0 37 0.378378 0.594595 0.027027 0.000000 0.000000 1.0 0
322 João Moutinho POR MF Wolves 32 1986 31.0 104 3.35 56 47 1 0 0 104 0.538462 0.451923 0.009615 0.000000 0.000000 1.0 0
337 Oliver Norwood NIR MF Sheffield Utd 28 1991 30.5 74 2.43 41 27 0 3 1 72 0.569444 0.375000 0.000000 0.041667 0.013889 1.0 0
417 Gylfi Sigurðsson ISL MF Everton 29 1989 24.0 72 3.00 27 29 4 10 2 72 0.375000 0.402778 0.055556 0.138889 0.027778 1.0 0
426 Robert Snodgrass SCO MF West Ham 31 1987 16.8 51 3.04 19 24 3 1 4 51 0.372549 0.470588 0.058824 0.019608 0.078431 1.0 0
484 James Ward-Prowse ENG MF Southampton 24 1994 33.0 86 2.61 41 39 0 4 2 86 0.476744 0.453488 0.000000 0.046512 0.023256 1.0 0
487 Ashley Westwood ENG MF Burnley 29 1990 30.0 74 2.47 45 25 0 2 1 73 0.616438 0.342466 0.000000 0.027397 0.013699 1.0 0
In [14]:
#No deadballs, passes dominate but contributions from other types. Similar to group 4 who instead feature deadbslls.
data_mffw[data_mffw['Cluster'] == 1]
Out[14]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio Deadball SCA Ratio Dribble SCA Ratio Shot SCA Ratio Fouled SCA Ratio Sum SCA Ratio Cluster
3 Che Adams ENG FW Southampton 23 1996 9.2 18 1.96 12 0 2 1 3 18 0.666667 0.000000 0.111111 0.055556 0.166667 1.0 1
5 Sergio Agüero ARG FW Manchester City 31 1988 16.1 51 3.16 28 0 9 9 5 51 0.549020 0.000000 0.176471 0.176471 0.098039 1.0 1
21 Michail Antonio ENG FW West Ham 29 1990 15.4 40 2.59 21 1 11 2 5 40 0.525000 0.025000 0.275000 0.050000 0.125000 1.0 1
25 Pierre-Emerick Aubameyang GAB FW Arsenal 30 1989 30.5 51 1.67 35 0 7 4 5 51 0.686275 0.000000 0.137255 0.078431 0.098039 1.0 1
27 Jordan Ayew GHA FW Crystal Palace 27 1991 30.4 54 1.78 33 0 10 1 10 54 0.611111 0.000000 0.185185 0.018519 0.185185 1.0 1
35 Ashley Barnes AUT FW Burnley 29 1989 15.0 19 1.26 12 0 1 1 5 19 0.631579 0.000000 0.052632 0.052632 0.263158 1.0 1
57 Sofiane Boufal MAR MF Southampton 25 1993 8.5 37 4.36 22 0 8 1 6 37 0.594595 0.000000 0.216216 0.027027 0.162162 1.0 1
69 Dominic Calvert-Lewin ENG FW Everton 22 1997 24.2 51 2.11 32 0 1 5 12 50 0.640000 0.000000 0.020000 0.100000 0.240000 1.0 1
89 Aaron Connolly IRL FW Brighton 19 2000 12.1 21 1.73 7 0 2 3 9 21 0.333333 0.000000 0.095238 0.142857 0.428571 1.0 1
107 Gerard Deulofeu ESP FW Watford 25 1994 23.3 88 3.78 51 10 14 7 6 88 0.579545 0.113636 0.159091 0.079545 0.068182 1.0 1
112 Moussa Djenepo MLI MF Southampton 21 1998 10.3 39 3.78 19 0 11 1 8 39 0.487179 0.000000 0.282051 0.025641 0.205128 1.0 1
189 Onel Hernández CUB FW Norwich City 26 1993 10.9 33 3.02 22 1 8 1 1 33 0.666667 0.030303 0.242424 0.030303 0.030303 1.0 1
190 Son Heung-min KOR FW Tottenham 27 1992 22.3 81 3.63 53 5 13 9 1 81 0.654321 0.061728 0.160494 0.111111 0.012346 1.0 1
202 Kelechi Iheanacho NGA FW Leicester City 22 1996 8.5 33 3.87 20 0 7 3 3 33 0.606061 0.000000 0.212121 0.090909 0.090909 1.0 1
203 Danny Ings ENG FW Southampton 27 1992 26.2 71 2.71 46 0 11 8 6 71 0.647887 0.000000 0.154930 0.112676 0.084507 1.0 1
211 Gabriel Jesus BRA FW Manchester City 22 1997 18.3 53 2.89 35 0 11 6 1 53 0.660377 0.000000 0.207547 0.113208 0.018868 1.0 1
218 Diogo Jota POR FW Wolves 22 1996 22.0 80 3.64 47 1 13 7 12 80 0.587500 0.012500 0.162500 0.087500 0.150000 1.0 1
223 Moise Kean ITA FW Everton 19 2000 7.8 19 2.44 9 0 5 3 2 19 0.473684 0.000000 0.263158 0.157895 0.105263 1.0 1
229 Joshua King NOR FW Bournemouth 27 1992 18.8 46 2.45 30 0 9 3 4 46 0.652174 0.000000 0.195652 0.065217 0.086957 1.0 1
238 Alexandre Lacazette FRA FW Arsenal 28 1991 16.8 49 2.92 31 0 4 9 5 49 0.632653 0.000000 0.081633 0.183673 0.102041 1.0 1
320 Lucas Moura BRA FW Tottenham 26 1992 20.5 73 3.56 50 0 11 3 9 73 0.684932 0.000000 0.150685 0.041096 0.123288 1.0 1
321 Lys Mousset FRA FW Sheffield Utd 23 1996 12.5 25 2.00 15 0 8 1 1 25 0.600000 0.000000 0.320000 0.040000 0.040000 1.0 1
331 Pedro Neto POR FW Wolves 19 2000 9.1 27 2.98 16 2 6 0 3 27 0.592593 0.074074 0.222222 0.000000 0.111111 1.0 1
342 Divock Origi BEL FW Liverpool 24 1995 7.1 21 2.94 10 0 6 2 2 20 0.500000 0.000000 0.300000 0.100000 0.100000 1.0 1
368 Christian Pulisic USA FW Chelsea 20 1998 15.3 63 4.11 40 0 13 3 7 63 0.634921 0.000000 0.206349 0.047619 0.111111 1.0 1
374 Nathan Redmond ENG MF Southampton 25 1994 25.7 76 2.96 52 0 11 4 9 76 0.684211 0.000000 0.144737 0.052632 0.118421 1.0 1
377 Richarlison BRA FW Everton 22 1997 28.6 70 2.45 43 0 9 6 11 69 0.623188 0.000000 0.130435 0.086957 0.159420 1.0 1
387 Jay Rodriguez ENG FW Burnley 30 1989 18.0 25 1.39 16 0 2 4 3 25 0.640000 0.000000 0.080000 0.160000 0.120000 1.0 1
396 Allan Saint-Maximin FRA MF Newcastle Utd 22 1997 17.4 73 4.20 43 0 19 6 5 73 0.589041 0.000000 0.260274 0.082192 0.068493 1.0 1
400 Mohamed Salah EGY FW Liverpool 27 1992 27.9 102 3.66 65 4 19 10 4 102 0.637255 0.039216 0.186275 0.098039 0.039216 1.0 1
413 Billy Sharp ENG FW Sheffield Utd 33 1986 9.4 24 2.54 16 0 2 2 4 24 0.666667 0.000000 0.083333 0.083333 0.166667 1.0 1
462 Adama Traoré ESP FW Wolves 23 1996 25.5 84 3.30 59 0 16 0 9 84 0.702381 0.000000 0.190476 0.000000 0.107143 1.0 1
464 Trézéguet EGY FW Aston Villa 24 1994 17.0 38 2.23 23 2 5 4 4 38 0.605263 0.052632 0.131579 0.105263 0.105263 1.0 1
470 Jamie Vardy ENG FW Leicester City 32 1987 28.7 49 1.71 31 0 10 3 4 48 0.645833 0.000000 0.208333 0.062500 0.083333 1.0 1
476 Matěj Vydra CZE FW Burnley 27 1992 7.5 17 2.28 9 0 4 1 3 17 0.529412 0.000000 0.235294 0.058824 0.176471 1.0 1
499 Chris Wood NZL FW Burnley 27 1991 23.1 45 1.95 29 0 5 3 8 45 0.644444 0.000000 0.111111 0.066667 0.177778 1.0 1
506 Wilfried Zaha CIV MF Crystal Palace 26 1992 31.4 90 2.86 53 0 19 5 12 89 0.595506 0.000000 0.213483 0.056180 0.134831 1.0 1
In [15]:
#Passers for the most part. So we get loads of our more defensive midfielders in here. 
#Notable exceptions being some of the City players, which is pretty interesting!
data_mffw[data_mffw['Cluster'] == 2]
Out[15]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio Deadball SCA Ratio Dribble SCA Ratio Shot SCA Ratio Fouled SCA Ratio Sum SCA Ratio Cluster
8 Marc Albrighton ENG MF Leicester City 29 1989 8.0 23 2.87 19 2 1 1 0 23 0.826087 0.086957 0.043478 0.043478 0.000000 1.0 2
49 Bernard BRA MF Everton 26 1992 12.5 44 3.53 37 0 5 1 1 44 0.840909 0.000000 0.113636 0.022727 0.022727 1.0 2
74 Andy Carroll ENG FW Newcastle Utd 30 1989 6.6 19 2.88 18 0 0 0 1 19 0.947368 0.000000 0.000000 0.000000 0.052632 1.0 2
78 Nathaniel Chalobah ENG MF Watford 24 1994 9.9 16 1.62 15 1 0 0 0 16 0.937500 0.062500 0.000000 0.000000 0.000000 1.0 2
105 Fabian Delph ENG MF Everton 29 1989 13.2 17 1.29 16 0 0 1 0 17 0.941176 0.000000 0.000000 0.058824 0.000000 1.0 2
106 Leander Dendoncker BEL MF Wolves 24 1995 27.8 18 0.65 17 0 1 0 0 18 0.944444 0.000000 0.055556 0.000000 0.000000 1.0 2
131 Fabinho BRA MF Liverpool 25 1993 19.8 28 1.42 26 0 1 0 1 28 0.928571 0.000000 0.035714 0.000000 0.035714 1.0 2
163 André Gomes POR MF Everton 26 1993 11.7 18 1.53 17 0 1 0 0 18 0.944444 0.000000 0.055556 0.000000 0.000000 1.0 2
169 Demarai Gray ENG MF Leicester City 23 1996 5.9 22 3.74 19 0 1 1 1 22 0.863636 0.000000 0.045455 0.045455 0.045455 1.0 2
171 Mason Greenwood ENG FW Manchester Utd 17 2001 10.4 25 2.41 22 0 1 0 2 25 0.880000 0.000000 0.040000 0.000000 0.080000 1.0 2
177 İlkay Gündoğan GER MF Manchester City 28 1990 20.7 70 3.38 61 2 1 3 3 70 0.871429 0.028571 0.014286 0.042857 0.042857 1.0 2
185 Jordan Henderson ENG MF Liverpool 29 1990 24.0 45 1.88 41 1 1 2 0 45 0.911111 0.022222 0.022222 0.044444 0.000000 1.0 2
198 Pierre Højbjerg DEN MF Southampton 23 1995 29.2 59 2.02 50 1 2 2 4 59 0.847458 0.016949 0.033898 0.033898 0.067797 1.0 2
204 Alex Iwobi NGA MF Everton 23 1996 15.7 42 2.68 39 0 2 1 0 42 0.928571 0.000000 0.047619 0.023810 0.000000 1.0 2
216 Jorginho ITA MF Chelsea 27 1991 22.3 57 2.55 53 0 0 1 3 57 0.929825 0.000000 0.000000 0.017544 0.052632 1.0 2
222 N’Golo Kanté FRA MF Chelsea 28 1991 19.2 51 2.65 47 0 0 1 3 51 0.921569 0.000000 0.000000 0.019608 0.058824 1.0 2
225 Naby Keïta GUI MF Liverpool 24 1995 6.2 22 3.57 19 1 1 1 0 22 0.863636 0.045455 0.045455 0.045455 0.000000 1.0 2
234 Cheikhou Kouyaté SEN MF Crystal Palace 29 1989 24.6 16 0.65 14 0 1 1 0 16 0.875000 0.000000 0.062500 0.062500 0.000000 1.0 2
235 Mateo Kovačić CRO MF Chelsea 25 1994 20.1 61 3.03 57 0 2 1 1 61 0.934426 0.000000 0.032787 0.016393 0.016393 1.0 2
248 Moritz Leitner GER MF Norwich City 26 1992 7.6 16 2.10 14 1 0 0 1 16 0.875000 0.062500 0.000000 0.000000 0.062500 1.0 2
255 Jesse Lingard ENG MF Manchester Utd 26 1992 9.9 37 3.73 32 0 2 1 2 37 0.864865 0.000000 0.054054 0.027027 0.054054 1.0 2
286 Juan Mata ESP MF Manchester Utd 31 1988 8.4 38 4.51 31 3 1 2 1 38 0.815789 0.078947 0.026316 0.052632 0.026316 1.0 2
287 Nemanja Matić SRB MF Manchester Utd 30 1988 13.5 38 2.81 35 0 2 0 1 38 0.921053 0.000000 0.052632 0.000000 0.026316 1.0 2
291 Oliver McBurnie SCO FW Sheffield Utd 23 1996 20.0 26 1.30 22 0 1 2 1 26 0.846154 0.000000 0.038462 0.076923 0.038462 1.0 2
306 James Milner ENG MF Liverpool 33 1986 9.0 20 2.22 17 0 0 1 2 20 0.850000 0.000000 0.000000 0.050000 0.100000 1.0 2
316 Wesley Moraes BRA FW Aston Villa 22 1996 19.8 26 1.31 22 0 0 3 1 26 0.846154 0.000000 0.000000 0.115385 0.038462 1.0 2
327 Marvelous Nakamba ZIM MF Aston Villa 25 1994 19.6 18 0.92 18 0 0 0 0 18 1.000000 0.000000 0.000000 0.000000 0.000000 1.0 2
328 Wilfred Ndidi NGA MF Leicester City 22 1996 25.0 29 1.16 26 0 1 1 1 29 0.896552 0.000000 0.034483 0.034483 0.034483 1.0 2
329 Tanguy Ndombele FRA MF Tottenham 22 1996 10.7 28 2.61 25 1 0 2 0 28 0.892857 0.035714 0.000000 0.071429 0.000000 1.0 2
332 Rúben Neves POR MF Wolves 22 1997 29.3 49 1.67 41 1 2 4 1 49 0.836735 0.020408 0.040816 0.081633 0.020408 1.0 2
366 Davy Pröpper NED MF Brighton 27 1991 28.9 59 2.04 54 0 1 2 2 59 0.915254 0.000000 0.016949 0.033898 0.033898 1.0 2
376 Declan Rice ENG MF West Ham 20 1999 33.0 35 1.06 33 0 1 1 0 35 0.942857 0.000000 0.028571 0.028571 0.000000 1.0 2
386 Rodri ESP MF Manchester City 23 1996 24.6 55 2.24 49 0 2 1 3 55 0.890909 0.000000 0.036364 0.018182 0.054545 1.0 2
390 Oriol Romeu ESP MF Southampton 27 1991 16.6 21 1.26 19 1 1 0 0 21 0.904762 0.047619 0.047619 0.000000 0.000000 1.0 2
410 Morgan Schneiderlin FRA MF Everton 29 1989 11.1 17 1.53 15 0 1 1 0 17 0.882353 0.000000 0.058824 0.058824 0.000000 1.0 2
418 Bernardo Silva POR FW Manchester City 24 1994 19.7 80 4.07 69 2 6 2 1 80 0.862500 0.025000 0.075000 0.025000 0.012500 1.0 2
419 David Silva ESP MF Manchester City 33 1986 17.1 87 5.10 74 1 5 4 3 87 0.850575 0.011494 0.057471 0.045977 0.034483 1.0 2
421 Moussa Sissoko FRA MF Tottenham 29 1989 21.5 24 1.11 23 0 1 0 0 24 0.958333 0.000000 0.041667 0.000000 0.000000 1.0 2
436 Dale Stephens ENG MF Brighton 30 1989 23.8 36 1.52 34 0 0 2 0 36 0.944444 0.000000 0.000000 0.055556 0.000000 1.0 2
452 Alexander Tettey NOR MF Norwich City 33 1986 22.5 16 0.71 14 0 0 2 0 16 0.875000 0.000000 0.000000 0.125000 0.000000 1.0 2
454 Youri Tielemans BEL MF Leicester City 22 1997 26.9 71 2.64 64 1 0 2 4 71 0.901408 0.014085 0.000000 0.028169 0.056338 1.0 2
494 Joe Willock ENG MF Arsenal 19 1999 8.1 31 3.83 26 0 3 1 1 31 0.838710 0.000000 0.096774 0.032258 0.032258 1.0 2
498 Harry Winks ENG MF Tottenham 23 1996 18.7 31 1.66 28 3 0 0 0 31 0.903226 0.096774 0.000000 0.000000 0.000000 1.0 2
501 Andriy Yarmolenko UKR MF West Ham 29 1989 9.6 31 3.22 26 0 3 1 1 31 0.838710 0.000000 0.096774 0.032258 0.032258 1.0 2
In [16]:
#Mostly passes, but high on dribbles & shots too
data_mffw[data_mffw['Cluster'] == 3]
Out[16]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio Deadball SCA Ratio Dribble SCA Ratio Shot SCA Ratio Fouled SCA Ratio Sum SCA Ratio Cluster
2 Tammy Abraham ENG FW Chelsea 21 1997 22.8 46 2.02 32 0 6 6 2 46 0.695652 0.000000 0.130435 0.130435 0.043478 1.0 3
12 Dele Alli ENG MF Tottenham 23 1996 20.4 53 2.60 39 1 9 2 2 53 0.735849 0.018868 0.169811 0.037736 0.037736 1.0 3
13 Miguel Almirón PAR FW Newcastle Utd 25 1994 29.9 67 2.24 49 0 7 4 7 67 0.731343 0.000000 0.104478 0.059701 0.104478 1.0 3
15 Steven Alzate COL MF Brighton 20 1998 13.2 30 2.27 22 0 5 2 1 30 0.733333 0.000000 0.166667 0.066667 0.033333 1.0 3
17 Felipe Anderson BRA MF West Ham 26 1993 16.6 57 3.44 44 2 5 3 3 57 0.771930 0.035088 0.087719 0.052632 0.052632 1.0 3
22 Stuart Armstrong SCO MF Southampton 27 1992 15.9 33 2.08 26 0 3 2 2 33 0.787879 0.000000 0.090909 0.060606 0.060606 1.0 3
24 Christian Atsu GHA FW Newcastle Utd 27 1992 8.2 22 2.67 17 2 2 0 1 22 0.772727 0.090909 0.090909 0.000000 0.045455 1.0 3
34 Ross Barkley ENG MF Chelsea 25 1993 10.4 41 3.95 28 1 5 5 2 41 0.682927 0.024390 0.121951 0.121951 0.048780 1.0 3
36 Harvey Barnes ENG MF Leicester City 21 1997 20.6 71 3.44 53 0 8 5 5 71 0.746479 0.000000 0.112676 0.070423 0.070423 1.0 3
45 Christian Benteke BEL FW Crystal Palace 28 1990 12.0 33 2.74 24 0 5 2 2 33 0.727273 0.000000 0.151515 0.060606 0.060606 1.0 3
48 Steven Bergwijn NED FW Tottenham 21 1997 6.2 22 3.55 18 0 2 0 2 22 0.818182 0.000000 0.090909 0.000000 0.090909 1.0 3
53 Philip Billing DEN MF Bournemouth 23 1996 25.4 38 1.50 30 2 2 3 1 38 0.789474 0.052632 0.052632 0.078947 0.026316 1.0 3
72 Todd Cantwell ENG FW Norwich City 21 1998 24.8 72 2.90 57 0 6 3 6 72 0.791667 0.000000 0.083333 0.041667 0.083333 1.0 3
73 Étienne Capoue FRA MF Watford 31 1988 27.2 37 1.36 29 3 2 0 3 37 0.783784 0.081081 0.054054 0.000000 0.081081 1.0 3
86 Tom Cleverley ENG MF Watford 29 1989 8.3 29 3.51 23 2 0 2 2 29 0.793103 0.068966 0.000000 0.068966 0.068966 1.0 3
90 Lewis Cook ENG MF Bournemouth 22 1997 14.4 30 2.08 22 2 1 3 2 30 0.733333 0.066667 0.033333 0.100000 0.066667 1.0 3
92 Jack Cork ENG MF Burnley 30 1989 29.0 24 0.83 20 0 2 0 2 24 0.833333 0.000000 0.083333 0.000000 0.083333 1.0 3
100 Tom Davies ENG MF Everton 21 1998 17.1 20 1.17 15 0 1 3 1 20 0.750000 0.000000 0.050000 0.150000 0.050000 1.0 3
104 Troy Deeney ENG FW Watford 31 1988 20.3 38 1.87 31 0 0 3 4 38 0.815789 0.000000 0.000000 0.078947 0.105263 1.0 3
114 Abdoulaye Doucouré FRA MF Watford 26 1993 30.5 71 2.33 55 0 7 6 3 71 0.774648 0.000000 0.098592 0.084507 0.042254 1.0 3
138 Roberto Firmino BRA FW Liverpool 27 1991 29.3 78 2.66 57 0 15 4 2 78 0.730769 0.000000 0.192308 0.051282 0.025641 1.0 3
140 Phil Foden ENG FW Manchester City 19 2000 6.5 33 5.04 25 1 3 1 3 33 0.757576 0.030303 0.090909 0.030303 0.090909 1.0 3
141 Pablo Fornals ESP MF West Ham 23 1996 19.8 40 2.02 32 4 1 2 1 40 0.800000 0.100000 0.025000 0.050000 0.025000 1.0 3
147 Fred BRA MF Manchester Utd 26 1993 23.5 81 3.45 63 8 3 2 5 81 0.777778 0.098765 0.037037 0.024691 0.061728 1.0 3
161 Olivier Giroud FRA FW Chelsea 32 1986 7.6 16 2.11 11 0 0 3 2 16 0.687500 0.000000 0.000000 0.187500 0.125000 1.0 3
175 Mattéo Guendouzi FRA MF Arsenal 20 1999 19.4 34 1.75 26 0 3 2 3 34 0.764706 0.000000 0.088235 0.058824 0.088235 1.0 3
179 Sébastien Haller FRA FW West Ham 25 1994 23.9 48 2.01 39 1 1 4 3 48 0.812500 0.020833 0.020833 0.083333 0.062500 1.0 3
182 Isaac Hayden ENG MF Newcastle Utd 24 1995 24.5 26 1.06 21 0 0 2 3 26 0.807692 0.000000 0.000000 0.076923 0.115385 1.0 3
186 Jeff Hendrick IRL MF Burnley 27 1992 21.5 27 1.26 21 3 1 2 0 27 0.777778 0.111111 0.037037 0.074074 0.000000 1.0 3
196 Callum Hudson-Odoi ENG FW Chelsea 18 2000 8.8 42 4.77 33 1 4 3 1 42 0.785714 0.023810 0.095238 0.071429 0.023810 1.0 3
207 Daniel James WAL FW Manchester Utd 21 1997 25.2 63 2.50 44 0 4 5 10 63 0.698413 0.000000 0.063492 0.079365 0.158730 1.0 3
212 Raúl Jiménez MEX FW Wolves 28 1991 31.2 78 2.50 55 0 11 7 5 78 0.705128 0.000000 0.141026 0.089744 0.064103 1.0 3
213 Joelinton BRA FW Newcastle Utd 22 1996 27.9 54 1.93 44 1 2 4 3 54 0.814815 0.018519 0.037037 0.074074 0.055556 1.0 3
221 Harry Kane ENG FW Tottenham 26 1993 22.8 39 1.71 29 0 4 1 5 39 0.743590 0.000000 0.102564 0.025641 0.128205 1.0 3
252 Jefferson Lerma COL MF Bournemouth 24 1994 25.1 28 1.11 22 0 2 0 4 28 0.785714 0.000000 0.071429 0.000000 0.142857 1.0 3
261 Shane Long IRL FW Southampton 32 1987 14.2 30 2.12 24 0 1 4 1 30 0.800000 0.000000 0.033333 0.133333 0.033333 1.0 3
267 Douglas Luiz BRA MF Aston Villa 21 1998 24.1 28 1.16 22 1 3 0 2 28 0.785714 0.035714 0.107143 0.000000 0.071429 1.0 3
268 John Lundstram ENG MF Sheffield Utd 25 1994 25.3 43 1.70 35 1 0 5 2 43 0.813953 0.023256 0.000000 0.116279 0.046512 1.0 3
274 Sadio Mané SEN FW Liverpool 27 1992 26.9 88 3.27 70 0 4 3 11 88 0.795455 0.000000 0.045455 0.034091 0.125000 1.0 3
279 Anthony Martial FRA FW Manchester Utd 23 1995 24.3 73 3.00 57 0 9 3 4 73 0.780822 0.000000 0.123288 0.041096 0.054795 1.0 3
289 Neal Maupay FRA FW Brighton 22 1996 26.6 58 2.18 41 0 7 7 3 58 0.706897 0.000000 0.120690 0.120690 0.051724 1.0 3
290 James McArthur SCO MF Crystal Palace 31 1987 30.4 52 1.71 43 0 3 2 4 52 0.826923 0.000000 0.057692 0.038462 0.076923 1.0 3
295 David McGoldrick IRL FW Sheffield Utd 31 1987 17.7 33 1.87 25 1 5 1 1 33 0.757576 0.030303 0.151515 0.030303 0.030303 1.0 3
297 Kenny McLean SCO MF Norwich City 27 1992 29.4 55 1.87 44 5 2 2 2 55 0.800000 0.090909 0.036364 0.036364 0.036364 1.0 3
299 Scott McTominay SCO MF Manchester Utd 22 1996 18.6 34 1.83 24 0 1 3 5 33 0.727273 0.000000 0.030303 0.090909 0.151515 1.0 3
336 Mark Noble ENG MF West Ham 32 1987 25.9 50 1.93 38 5 2 0 5 50 0.760000 0.100000 0.040000 0.000000 0.100000 1.0 3
345 Alex Oxlade-Chamberlain ENG MF Liverpool 25 1993 14.2 36 2.53 27 0 2 3 4 36 0.750000 0.000000 0.055556 0.083333 0.111111 1.0 3
351 Pedro ESP FW Chelsea 32 1987 7.3 34 4.67 23 1 4 4 2 34 0.676471 0.029412 0.117647 0.117647 0.058824 1.0 3
354 Andreas Pereira BRA MF Manchester Utd 23 1996 16.5 57 3.46 44 6 3 2 2 57 0.771930 0.105263 0.052632 0.035088 0.035088 1.0 3
357 Ayoze Pérez ESP MF Leicester City 26 1993 18.7 54 2.89 42 1 5 2 4 54 0.777778 0.018519 0.092593 0.037037 0.074074 1.0 3
362 Paul Pogba FRA MF Manchester Utd 26 1993 8.7 47 5.41 39 0 4 0 4 47 0.829787 0.000000 0.085106 0.000000 0.085106 1.0 3
364 Dennis Praet BEL MF Leicester City 25 1994 11.6 18 1.56 11 1 1 3 1 17 0.647059 0.058824 0.058824 0.176471 0.058824 1.0 3
367 Teemu Pukki FIN FW Norwich City 29 1990 29.4 51 1.73 40 0 5 3 2 50 0.800000 0.000000 0.100000 0.060000 0.040000 1.0 3
373 Marcus Rashford ENG FW Manchester Utd 21 1997 24.4 80 3.27 55 2 10 3 9 79 0.696203 0.025316 0.126582 0.037975 0.113924 1.0 3
405 Ismaila Sarr SEN FW Watford 21 1998 17.5 52 2.97 39 1 3 3 6 52 0.750000 0.019231 0.057692 0.057692 0.115385 1.0 3
429 Dominic Solanke ENG FW Bournemouth 21 1997 15.7 33 2.11 26 0 1 3 3 33 0.787879 0.000000 0.030303 0.090909 0.090909 1.0 3
438 Raheem Sterling ENG FW Manchester City 24 1994 25.9 100 3.86 72 1 9 9 9 100 0.720000 0.010000 0.090000 0.090000 0.090000 1.0 3
440 Marco Stiepermann GER MF Norwich City 28 1991 10.5 28 2.66 22 0 5 1 0 28 0.785714 0.000000 0.178571 0.035714 0.000000 1.0 3
461 Andros Townsend ENG MF Crystal Palace 28 1991 11.0 16 1.46 13 0 0 2 1 16 0.812500 0.000000 0.000000 0.125000 0.062500 1.0 3
477 Theo Walcott ENG MF Everton 30 1989 11.8 24 2.03 17 0 2 3 2 24 0.708333 0.000000 0.083333 0.125000 0.083333 1.0 3
489 Georginio Wijnaldum NED MF Liverpool 28 1990 28.1 37 1.32 30 0 5 0 2 37 0.810811 0.000000 0.135135 0.000000 0.054054 1.0 3
496 Callum Wilson ENG FW Bournemouth 27 1992 28.1 53 1.89 39 0 3 5 6 53 0.735849 0.000000 0.056604 0.094340 0.113208 1.0 3
497 Harry Wilson WAL MF Bournemouth 22 1997 17.3 41 2.37 29 3 1 1 7 41 0.707317 0.073171 0.024390 0.024390 0.170732 1.0 3
500 Granit Xhaka SUI MF Arsenal 26 1992 24.2 33 1.36 27 1 2 1 2 33 0.818182 0.030303 0.060606 0.030303 0.060606 1.0 3
In [17]:
#As with others, mostly passes, but the most evenly spread outside of that
#Essentially group 2 with some set pieces
data_mffw[data_mffw['Cluster'] == 4]
Out[17]:
Player Nation Pos Squad Age Born 90s SCA SCA90 Pass SCA Deadball SCA Dribble SCA Shot SCA Fouled SCA Sum SCA Pass SCA Ratio Deadball SCA Ratio Dribble SCA Ratio Shot SCA Ratio Fouled SCA Ratio Sum SCA Ratio Cluster
64 Emi Buendía ARG FW Norwich City 22 1996 25.0 126 5.04 77 27 10 3 9 126 0.611111 0.214286 0.079365 0.023810 0.071429 1.0 4
77 Dani Ceballos ESP MF Arsenal 22 1996 14.8 37 2.51 27 8 0 0 2 37 0.729730 0.216216 0.000000 0.000000 0.054054 1.0 4
103 Kevin De Bruyne BEL MF Manchester City 28 1991 27.3 181 6.63 131 32 9 3 6 181 0.723757 0.176796 0.049724 0.016575 0.033149 1.0 4
119 Ondrej Duda SVK MF Norwich City 24 1994 8.0 25 3.11 15 6 1 2 1 25 0.600000 0.240000 0.040000 0.080000 0.040000 1.0 4
128 Christian Eriksen DEN MF Tottenham 27 1992 12.2 40 3.28 31 8 1 0 0 40 0.775000 0.200000 0.025000 0.000000 0.000000 1.0 4
134 Bruno Fernandes POR MF Manchester Utd 24 1994 8.5 38 4.45 26 8 0 2 2 38 0.684211 0.210526 0.000000 0.052632 0.052632 1.0 4
139 John Fleck SCO MF Sheffield Utd 27 1991 26.1 66 2.53 44 16 4 2 0 66 0.666667 0.242424 0.060606 0.030303 0.000000 1.0 4
146 Ryan Fraser SCO MF Bournemouth 25 1994 23.0 66 2.87 44 17 2 1 2 66 0.666667 0.257576 0.030303 0.015152 0.030303 1.0 4
158 Anwar El Ghazi NED FW Aston Villa 24 1995 21.8 55 2.52 37 6 6 3 3 55 0.672727 0.109091 0.109091 0.054545 0.054545 1.0 4
170 Jack Grealish ENG FW Aston Villa 23 1995 30.9 164 5.30 115 21 10 1 17 164 0.701220 0.128049 0.060976 0.006098 0.103659 1.0 4
197 Will Hughes ENG MF Watford 24 1995 20.5 34 1.66 23 6 1 0 4 34 0.676471 0.176471 0.029412 0.000000 0.117647 1.0 4
240 Érik Lamela ARG MF Tottenham 27 1992 11.9 43 3.61 27 4 2 3 6 42 0.642857 0.095238 0.047619 0.071429 0.142857 1.0 4
244 Manuel Lanzini ARG MF West Ham 26 1993 15.1 55 3.65 38 11 1 1 4 55 0.690909 0.200000 0.018182 0.018182 0.072727 1.0 4
257 Giovani Lo Celso ARG MF Tottenham 23 1996 12.0 44 3.67 34 7 1 0 2 44 0.772727 0.159091 0.022727 0.000000 0.045455 1.0 4
263 Sean Longstaff ENG MF Newcastle Utd 21 1997 14.8 31 2.09 19 7 1 2 2 31 0.612903 0.225806 0.032258 0.064516 0.064516 1.0 4
272 Riyad Mahrez ALG FW Manchester City 28 1991 18.8 119 6.32 78 12 16 3 10 119 0.655462 0.100840 0.134454 0.025210 0.084034 1.0 4
276 Solly March ENG FW Brighton 25 1994 10.7 27 2.52 19 3 3 0 2 27 0.703704 0.111111 0.111111 0.000000 0.074074 1.0 4
294 John McGinn SCO MF Aston Villa 24 1994 21.1 81 3.85 58 9 7 2 5 81 0.716049 0.111111 0.086420 0.024691 0.061728 1.0 4
298 Dwight McNeil ENG MF Burnley 19 1999 32.1 84 2.62 48 20 6 5 5 84 0.571429 0.238095 0.071429 0.059524 0.059524 1.0 4
315 Aaron Mooy AUS MF Brighton 28 1990 20.8 66 3.18 48 11 3 2 2 66 0.727273 0.166667 0.045455 0.030303 0.030303 1.0 4
319 Mason Mount ENG MF Chelsea 20 1999 28.8 107 3.72 62 28 3 5 9 107 0.579439 0.261682 0.028037 0.046729 0.084112 1.0 4
330 Reiss Nelson ENG FW Arsenal 19 1999 6.1 18 2.96 11 4 1 2 0 18 0.611111 0.222222 0.055556 0.111111 0.000000 1.0 4
346 Mesut Özil GER MF Arsenal 30 1988 16.0 63 3.94 42 17 2 0 2 63 0.666667 0.269841 0.031746 0.000000 0.031746 1.0 4
353 Nicolas Pépé CIV FW Arsenal 24 1995 19.4 55 2.83 33 11 7 3 1 55 0.600000 0.200000 0.127273 0.054545 0.018182 1.0 4
356 Roberto Pereyra ARG FW Watford 28 1991 16.4 40 2.44 26 5 4 1 4 40 0.650000 0.125000 0.100000 0.025000 0.100000 1.0 4
415 Jonjo Shelvey ENG MF Newcastle Utd 27 1992 18.8 52 2.76 38 10 3 1 0 52 0.730769 0.192308 0.057692 0.019231 0.000000 1.0 4
458 Lucas Torreira URU MF Arsenal 23 1996 15.3 28 1.82 19 3 2 2 2 28 0.678571 0.107143 0.071429 0.071429 0.071429 1.0 4
465 Leandro Trossard BEL FW Brighton 24 1994 18.7 70 3.73 50 9 4 3 3 69 0.724638 0.130435 0.057971 0.043478 0.043478 1.0 4
493 Willian BRA FW Chelsea 30 1988 25.2 119 4.71 83 22 6 2 6 119 0.697479 0.184874 0.050420 0.016807 0.050420 1.0 4