Skip to content

Instantly share code, notes, and snippets.

@shahril96
Last active December 12, 2017 01:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shahril96/4736a8e3020ed2e3ba6d7cd1339b88ea to your computer and use it in GitHub Desktop.
Save shahril96/4736a8e3020ed2e3ba6d7cd1339b88ea to your computer and use it in GitHub Desktop.
FIFA'17 dataset analysis
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Load all important modules"
]
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br>\n",
"# Load data from CSV file"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Name</th>\n",
" <th>Nationality</th>\n",
" <th>National_Position</th>\n",
" <th>National_Kit</th>\n",
" <th>Club</th>\n",
" <th>Club_Position</th>\n",
" <th>Club_Kit</th>\n",
" <th>Club_Joining</th>\n",
" <th>Contract_Expiry</th>\n",
" <th>Rating</th>\n",
" <th>...</th>\n",
" <th>Long_Shots</th>\n",
" <th>Curve</th>\n",
" <th>Freekick_Accuracy</th>\n",
" <th>Penalties</th>\n",
" <th>Volleys</th>\n",
" <th>GK_Positioning</th>\n",
" <th>GK_Diving</th>\n",
" <th>GK_Kicking</th>\n",
" <th>GK_Handling</th>\n",
" <th>GK_Reflexes</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Cristiano Ronaldo</td>\n",
" <td>Portugal</td>\n",
" <td>LS</td>\n",
" <td>7.0</td>\n",
" <td>Real Madrid</td>\n",
" <td>LW</td>\n",
" <td>7.0</td>\n",
" <td>7/1/2009</td>\n",
" <td>2021.0</td>\n",
" <td>94</td>\n",
" <td>...</td>\n",
" <td>90</td>\n",
" <td>81</td>\n",
" <td>76</td>\n",
" <td>85</td>\n",
" <td>88</td>\n",
" <td>14</td>\n",
" <td>7</td>\n",
" <td>15</td>\n",
" <td>11</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Lionel Messi</td>\n",
" <td>Argentina</td>\n",
" <td>RW</td>\n",
" <td>10.0</td>\n",
" <td>FC Barcelona</td>\n",
" <td>RW</td>\n",
" <td>10.0</td>\n",
" <td>7/1/2004</td>\n",
" <td>2018.0</td>\n",
" <td>93</td>\n",
" <td>...</td>\n",
" <td>88</td>\n",
" <td>89</td>\n",
" <td>90</td>\n",
" <td>74</td>\n",
" <td>85</td>\n",
" <td>14</td>\n",
" <td>6</td>\n",
" <td>15</td>\n",
" <td>11</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Neymar</td>\n",
" <td>Brazil</td>\n",
" <td>LW</td>\n",
" <td>10.0</td>\n",
" <td>FC Barcelona</td>\n",
" <td>LW</td>\n",
" <td>11.0</td>\n",
" <td>7/1/2013</td>\n",
" <td>2021.0</td>\n",
" <td>92</td>\n",
" <td>...</td>\n",
" <td>77</td>\n",
" <td>79</td>\n",
" <td>84</td>\n",
" <td>81</td>\n",
" <td>83</td>\n",
" <td>15</td>\n",
" <td>9</td>\n",
" <td>15</td>\n",
" <td>9</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Luis Suárez</td>\n",
" <td>Uruguay</td>\n",
" <td>LS</td>\n",
" <td>9.0</td>\n",
" <td>FC Barcelona</td>\n",
" <td>ST</td>\n",
" <td>9.0</td>\n",
" <td>7/11/2014</td>\n",
" <td>2021.0</td>\n",
" <td>92</td>\n",
" <td>...</td>\n",
" <td>86</td>\n",
" <td>86</td>\n",
" <td>84</td>\n",
" <td>85</td>\n",
" <td>88</td>\n",
" <td>33</td>\n",
" <td>27</td>\n",
" <td>31</td>\n",
" <td>25</td>\n",
" <td>37</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Manuel Neuer</td>\n",
" <td>Germany</td>\n",
" <td>GK</td>\n",
" <td>1.0</td>\n",
" <td>FC Bayern</td>\n",
" <td>GK</td>\n",
" <td>1.0</td>\n",
" <td>7/1/2011</td>\n",
" <td>2021.0</td>\n",
" <td>92</td>\n",
" <td>...</td>\n",
" <td>16</td>\n",
" <td>14</td>\n",
" <td>11</td>\n",
" <td>47</td>\n",
" <td>11</td>\n",
" <td>91</td>\n",
" <td>89</td>\n",
" <td>95</td>\n",
" <td>90</td>\n",
" <td>89</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 53 columns</p>\n",
"</div>"
],
"text/plain": [
" Name Nationality National_Position National_Kit \\\n",
"0 Cristiano Ronaldo Portugal LS 7.0 \n",
"1 Lionel Messi Argentina RW 10.0 \n",
"2 Neymar Brazil LW 10.0 \n",
"3 Luis Suárez Uruguay LS 9.0 \n",
"4 Manuel Neuer Germany GK 1.0 \n",
"\n",
" Club Club_Position Club_Kit Club_Joining Contract_Expiry Rating \\\n",
"0 Real Madrid LW 7.0 7/1/2009 2021.0 94 \n",
"1 FC Barcelona RW 10.0 7/1/2004 2018.0 93 \n",
"2 FC Barcelona LW 11.0 7/1/2013 2021.0 92 \n",
"3 FC Barcelona ST 9.0 7/11/2014 2021.0 92 \n",
"4 FC Bayern GK 1.0 7/1/2011 2021.0 92 \n",
"\n",
" ... Long_Shots Curve Freekick_Accuracy Penalties Volleys \\\n",
"0 ... 90 81 76 85 88 \n",
"1 ... 88 89 90 74 85 \n",
"2 ... 77 79 84 81 83 \n",
"3 ... 86 86 84 85 88 \n",
"4 ... 16 14 11 47 11 \n",
"\n",
" GK_Positioning GK_Diving GK_Kicking GK_Handling GK_Reflexes \n",
"0 14 7 15 11 11 \n",
"1 14 6 15 11 8 \n",
"2 15 9 15 9 11 \n",
"3 33 27 31 25 37 \n",
"4 91 89 95 90 89 \n",
"\n",
"[5 rows x 53 columns]"
]
},
"execution_count": 159,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv(\"dataset.csv\")\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br>\n",
"# Basic statistical measure to all attributes"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>National_Kit</th>\n",
" <th>Club_Kit</th>\n",
" <th>Contract_Expiry</th>\n",
" <th>Rating</th>\n",
" <th>Age</th>\n",
" <th>Weak_foot</th>\n",
" <th>Skill_Moves</th>\n",
" <th>Ball_Control</th>\n",
" <th>Dribbling</th>\n",
" <th>Marking</th>\n",
" <th>...</th>\n",
" <th>Long_Shots</th>\n",
" <th>Curve</th>\n",
" <th>Freekick_Accuracy</th>\n",
" <th>Penalties</th>\n",
" <th>Volleys</th>\n",
" <th>GK_Positioning</th>\n",
" <th>GK_Diving</th>\n",
" <th>GK_Kicking</th>\n",
" <th>GK_Handling</th>\n",
" <th>GK_Reflexes</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>1075.000000</td>\n",
" <td>17587.000000</td>\n",
" <td>17587.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>...</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" <td>17588.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>12.219535</td>\n",
" <td>21.294536</td>\n",
" <td>2018.899414</td>\n",
" <td>66.166193</td>\n",
" <td>25.460314</td>\n",
" <td>2.934103</td>\n",
" <td>2.303161</td>\n",
" <td>57.972766</td>\n",
" <td>54.802877</td>\n",
" <td>44.230327</td>\n",
" <td>...</td>\n",
" <td>47.403173</td>\n",
" <td>47.181146</td>\n",
" <td>43.383443</td>\n",
" <td>49.165738</td>\n",
" <td>43.275586</td>\n",
" <td>16.609620</td>\n",
" <td>16.823061</td>\n",
" <td>16.458324</td>\n",
" <td>16.559814</td>\n",
" <td>16.901183</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>6.933187</td>\n",
" <td>19.163741</td>\n",
" <td>1.698787</td>\n",
" <td>7.083012</td>\n",
" <td>4.680217</td>\n",
" <td>0.655927</td>\n",
" <td>0.746156</td>\n",
" <td>16.834779</td>\n",
" <td>18.913857</td>\n",
" <td>21.561703</td>\n",
" <td>...</td>\n",
" <td>19.211887</td>\n",
" <td>18.464396</td>\n",
" <td>17.701903</td>\n",
" <td>15.871735</td>\n",
" <td>17.710839</td>\n",
" <td>17.139904</td>\n",
" <td>17.798052</td>\n",
" <td>16.600741</td>\n",
" <td>16.967256</td>\n",
" <td>18.034485</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>2017.000000</td>\n",
" <td>45.000000</td>\n",
" <td>17.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>5.000000</td>\n",
" <td>4.000000</td>\n",
" <td>3.000000</td>\n",
" <td>...</td>\n",
" <td>4.000000</td>\n",
" <td>6.000000</td>\n",
" <td>4.000000</td>\n",
" <td>7.000000</td>\n",
" <td>3.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>6.000000</td>\n",
" <td>9.000000</td>\n",
" <td>2017.000000</td>\n",
" <td>62.000000</td>\n",
" <td>22.000000</td>\n",
" <td>3.000000</td>\n",
" <td>2.000000</td>\n",
" <td>53.000000</td>\n",
" <td>47.000000</td>\n",
" <td>22.000000</td>\n",
" <td>...</td>\n",
" <td>32.000000</td>\n",
" <td>34.000000</td>\n",
" <td>31.000000</td>\n",
" <td>39.000000</td>\n",
" <td>30.000000</td>\n",
" <td>8.000000</td>\n",
" <td>8.000000</td>\n",
" <td>8.000000</td>\n",
" <td>8.000000</td>\n",
" <td>8.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>12.000000</td>\n",
" <td>18.000000</td>\n",
" <td>2019.000000</td>\n",
" <td>66.000000</td>\n",
" <td>25.000000</td>\n",
" <td>3.000000</td>\n",
" <td>2.000000</td>\n",
" <td>63.000000</td>\n",
" <td>60.000000</td>\n",
" <td>48.000000</td>\n",
" <td>...</td>\n",
" <td>52.000000</td>\n",
" <td>48.000000</td>\n",
" <td>42.000000</td>\n",
" <td>50.000000</td>\n",
" <td>44.000000</td>\n",
" <td>11.000000</td>\n",
" <td>11.000000</td>\n",
" <td>11.000000</td>\n",
" <td>11.000000</td>\n",
" <td>11.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>18.000000</td>\n",
" <td>27.000000</td>\n",
" <td>2020.000000</td>\n",
" <td>71.000000</td>\n",
" <td>29.000000</td>\n",
" <td>3.000000</td>\n",
" <td>3.000000</td>\n",
" <td>69.000000</td>\n",
" <td>68.000000</td>\n",
" <td>64.000000</td>\n",
" <td>...</td>\n",
" <td>63.000000</td>\n",
" <td>62.000000</td>\n",
" <td>57.000000</td>\n",
" <td>61.000000</td>\n",
" <td>57.000000</td>\n",
" <td>14.000000</td>\n",
" <td>14.000000</td>\n",
" <td>14.000000</td>\n",
" <td>14.000000</td>\n",
" <td>14.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>36.000000</td>\n",
" <td>99.000000</td>\n",
" <td>2023.000000</td>\n",
" <td>94.000000</td>\n",
" <td>47.000000</td>\n",
" <td>5.000000</td>\n",
" <td>5.000000</td>\n",
" <td>95.000000</td>\n",
" <td>97.000000</td>\n",
" <td>92.000000</td>\n",
" <td>...</td>\n",
" <td>91.000000</td>\n",
" <td>92.000000</td>\n",
" <td>93.000000</td>\n",
" <td>96.000000</td>\n",
" <td>93.000000</td>\n",
" <td>91.000000</td>\n",
" <td>89.000000</td>\n",
" <td>95.000000</td>\n",
" <td>91.000000</td>\n",
" <td>90.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8 rows × 41 columns</p>\n",
"</div>"
],
"text/plain": [
" National_Kit Club_Kit Contract_Expiry Rating \\\n",
"count 1075.000000 17587.000000 17587.000000 17588.000000 \n",
"mean 12.219535 21.294536 2018.899414 66.166193 \n",
"std 6.933187 19.163741 1.698787 7.083012 \n",
"min 1.000000 1.000000 2017.000000 45.000000 \n",
"25% 6.000000 9.000000 2017.000000 62.000000 \n",
"50% 12.000000 18.000000 2019.000000 66.000000 \n",
"75% 18.000000 27.000000 2020.000000 71.000000 \n",
"max 36.000000 99.000000 2023.000000 94.000000 \n",
"\n",
" Age Weak_foot Skill_Moves Ball_Control Dribbling \\\n",
"count 17588.000000 17588.000000 17588.000000 17588.000000 17588.000000 \n",
"mean 25.460314 2.934103 2.303161 57.972766 54.802877 \n",
"std 4.680217 0.655927 0.746156 16.834779 18.913857 \n",
"min 17.000000 1.000000 1.000000 5.000000 4.000000 \n",
"25% 22.000000 3.000000 2.000000 53.000000 47.000000 \n",
"50% 25.000000 3.000000 2.000000 63.000000 60.000000 \n",
"75% 29.000000 3.000000 3.000000 69.000000 68.000000 \n",
"max 47.000000 5.000000 5.000000 95.000000 97.000000 \n",
"\n",
" Marking ... Long_Shots Curve \\\n",
"count 17588.000000 ... 17588.000000 17588.000000 \n",
"mean 44.230327 ... 47.403173 47.181146 \n",
"std 21.561703 ... 19.211887 18.464396 \n",
"min 3.000000 ... 4.000000 6.000000 \n",
"25% 22.000000 ... 32.000000 34.000000 \n",
"50% 48.000000 ... 52.000000 48.000000 \n",
"75% 64.000000 ... 63.000000 62.000000 \n",
"max 92.000000 ... 91.000000 92.000000 \n",
"\n",
" Freekick_Accuracy Penalties Volleys GK_Positioning \\\n",
"count 17588.000000 17588.000000 17588.000000 17588.000000 \n",
"mean 43.383443 49.165738 43.275586 16.609620 \n",
"std 17.701903 15.871735 17.710839 17.139904 \n",
"min 4.000000 7.000000 3.000000 1.000000 \n",
"25% 31.000000 39.000000 30.000000 8.000000 \n",
"50% 42.000000 50.000000 44.000000 11.000000 \n",
"75% 57.000000 61.000000 57.000000 14.000000 \n",
"max 93.000000 96.000000 93.000000 91.000000 \n",
"\n",
" GK_Diving GK_Kicking GK_Handling GK_Reflexes \n",
"count 17588.000000 17588.000000 17588.000000 17588.000000 \n",
"mean 16.823061 16.458324 16.559814 16.901183 \n",
"std 17.798052 16.600741 16.967256 18.034485 \n",
"min 1.000000 1.000000 1.000000 1.000000 \n",
"25% 8.000000 8.000000 8.000000 8.000000 \n",
"50% 11.000000 11.000000 11.000000 11.000000 \n",
"75% 14.000000 14.000000 14.000000 14.000000 \n",
"max 89.000000 95.000000 91.000000 90.000000 \n",
"\n",
"[8 rows x 41 columns]"
]
},
"execution_count": 160,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br>\n",
"# Add a new attribute `rating_class`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Let's try to see the distribution of player's rating"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f94c694ceb8>"
]
},
"execution_count": 161,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAD8CAYAAACGsIhGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8XHd57/HPo5Es2bIWW1K8Sd632I6XxDgrgRLIwhJD\nSV44QBNK2pQLuRRo4QZ6LxdyubdQWlJaQtuUpISUkEBoUjcYQkgCZMOJE2+x40W2YkuOFy22rMXa\nn/vHnAmKInvGjs6cGc33/XrppZlzfjPnOR5Zj87v+Z3fz9wdERGRU8mLOgAREcl8ShYiIpKUkoWI\niCSlZCEiIkkpWYiISFJKFiIikpSShYiIJKVkISIiSSlZiIhIUvlRBzBSKisrfebMmVGHISKSVV54\n4YUmd69K1m7UJIuZM2eyYcOGqMMQEckqZrYvlXbqhhIRkaSULEREJCklCxERSSrUZGFmV5rZTjOr\nNbNbhtlfaGb3B/vXm9nMQfuWmtmzZrbNzLaaWVGYsYqIyMmFlizMLAbcDlwFLAKuM7NFQ5rdCBx1\n97nAbcA3gtfmA/8OfMLdFwNvB3rDilVERE4tzCuLVUCtu+919x7gPmD1kDargbuDxw8Al5mZAZcD\nW9x9M4C7N7t7f4ixiojIKYSZLKYB9YOeNwTbhm3j7n1AK1ABzAfczB4xsxfN7AshxikiIklk6n0W\n+cAlwFuATuAxM3vB3R8b3MjMbgJuApg+fXrag5Tc1dHdx39tfpXmjh4unVfFOdVlUYckEqowk8UB\noGbQ8+pg23BtGoI6RRnQTPwq5Lfu3gRgZuuAc4HXJQt3vwO4A2DlypVaTFzSYkvDMW68ewONbd0A\nfPORnXzy7XP4/BULiPeiiow+YXZDPQ/MM7NZZjYGWAOsHdJmLXBD8Pga4HF3d+AR4BwzGxckkbcB\n20OMVSQl9S2dfOR76ynMz+OBT1zI5i9fzpq31PDdX+/hzqfqog5PJDShXVm4e5+Z3Uz8F38MuMvd\nt5nZrcAGd18L3AncY2a1QAvxhIK7HzWzbxFPOA6sc/efhRWrSCrcnS88sAV3uPdPLmB6xTgA/t8H\nzqG5o4dvPrKTd549iZmVxRFHKjLyLP6HfPZbuXKla24oCdNvdzVy/V3PcevqxVx/4czX7Tt8vIvL\n/u43vG1+Fbd/5NxoAhQ5A0E9eGWydrqDWyRF33milillRXzoLTVv2DeptIjrL5zBupcOsqexPYLo\nRMKlZCGSgr2N7TxX18INF82kMD82bJuPXzKLglge9zyb0iSeIllFyUIkBQ9tPIAZvH/50FuFfq9y\nfCHvWjSJ/9x0gJ6+gTRGJxI+JQuRFDy89SAXzalgctmppyi75rxqjnb28viOI2mKTCQ9lCxEkqhv\n6WRvYweXLZyUtO1b51ZyVkkhD25sSENkIumjZCGSxG92NQLw9gVJV54kP5bHFYsn89tdTXT1ajoz\nGT2ULESS+O2uRqonjGVWivdPvHPRJE709vPMnqaQIxNJHyULkVNwd17cf5TzZ1WkPJXHBbMnMr4w\nn0e3q24ho4eShcgpNBw9QVN7D+fOKE/5NYX5MS6dX8njOw4zWm56FVGyEDmFF/cfBWBFzYTTet1b\n51Vx+Hi3btCTUUPJQuQUNu4/xrgxMeZPGn9ar7t4TiUAz+xpDiMskbRTshA5hY37j7Ksupz82On9\nV5leMY7qCWN5ulZFbhkdlCxETqK3f4DtB4+ztObMFja6eE4lz+5ppn9AdQvJfkoWIiext7GD3n5n\n0ZTSM3r9hXMqON7Vx45Dx0c4MpH0U7IQOYnEL/mFk88sWZw3I14Uf3H/sRGLSSQqShYiJ7HjUBsF\nMWN21ZktZlQ9YSxVJYW8uO/oCEcmkn5KFiInsePgceZUjafgNIvbCWbGedMn8IKShYwCShYiJ7Hj\nUBsLJ5e8qfc4b8YE9rd0cqSta4SiEomGkoXIMFo7eznY2sXCMyxuJyTu/N6ouoVkOSULkWHUNrYB\nnPbNeEMtmlJGnsG2A60jEZZIZJQsRIaxt7EDgNmVby5ZjB0TY+5Z43npVQ2fleymZCEyjLqmDvLz\njOoJY9/0ey2eWsa2V3VlIdlNyUJkGHsbO5heMe60p/kYzuKppRw+3k1jW/cIRCYSDSULkWHUNXUw\nO8XFjpJZMi0+XYiuLiSbhZoszOxKM9tpZrVmdssw+wvN7P5g/3ozmxlsn2lmJ8xsU/D1z2HGKTLY\nwIBT19zB7Ko3V69IWDQ1PqJqm+oWksXyw3pjM4sBtwPvAhqA581srbtvH9TsRuCou881szXAN4AP\nBfv2uPvysOITOZkDx07Q0zeQ8jKqyZQWFTCjYpyuLCSrhXllsQqodfe97t4D3AesHtJmNXB38PgB\n4DJLde1KkZDUNcVHQo1UsoB43UJXFpLNwkwW04D6Qc8bgm3DtnH3PqAVqAj2zTKzjWb2GzN7a4hx\nirxOIlmMVM0CYP6kEva3dHKip3/E3lMknTK1wH0QmO7uK4DPAfea2RtupTWzm8xsg5ltaGxsTHuQ\nMjrVNXUwvjCfqpLCEXvP+ZNKcEfLrErWCjNZHABqBj2vDrYN28bM8oEyoNndu929GcDdXwD2APOH\nHsDd73D3le6+sqqqKoRTkFy0p7GdWZXFjGSPaOJO8F2H20bsPUXSKcxk8Twwz8xmmdkYYA2wdkib\ntcANweNrgMfd3c2sKiiQY2azgXnA3hBjFXlNXVPHiNYrAGZUFFMQM3YqWUiWCi1ZBDWIm4FHgJeB\nH7v7NjO71cyuDprdCVSYWS3x7qbE8NpLgS1mtol44fsT7t4SVqwiCV29/Rw4duKM17A4mYJYHrMr\nx7P7sLqhJDuFNnQWwN3XAeuGbPvyoMddwLXDvO6nwE/DjE1kOPuaO3Ef2ZFQCfMmjWdTvWafleyU\nqQVukUjUNcX/8n+zEwgOZ/6kEhqOnqCju2/E31skbEoWIoPsDYbNzqwcN+LvnShy1x5RV5RkHyUL\nkUHqGjs4q6SQkqKCEX/veZPiq+5pRJRkIyULkUH2hjASKmHGxHGMyc9jt64sJAspWYgMUtfUMeIj\noRLyY3nMqRqvKwvJSkoWIoFjnT20dPSEUtxOmD9Jw2clOylZiAT2JJZSDenKAuIjog4cO0FbV29o\nxxAJg5KFSGBvMG/TSK1jMZz5QZFbdQvJNkoWIoG9TR0UxIyaEVh3+2QSw2d3q24hWUbJQiSwt7Gd\n6RNHZt3tk6mZMI6igjx2HtKVhWQXJQuRwN7GkVtK9WTy8ox5Z5Ww+4iuLCS7KFmIAP0Dzr7mzlCL\n2wnzJo1n5yElC8kuShYiQMPRTnr6B5gT4rDZhAWTSjjS1k1rp0ZESfZQshAh3gUF4Q6bTUiMiNql\nrijJIkoWIvx+udOwaxYA8yfHk4W6oiSbKFmIEB82Wz6ugInFY0I/1tSyIsYX5mv4rGQVJQsRYM+R\ndmaHNIHgUGYWL3IrWUgWUbKQnOfu7DzcxoKgeygd5p9VojmiJKsoWUjOa2zr5lhnLwsmpTFZTC6h\nuaOHpvbutB1T5M1QspCctyMoNM9P55VFMO2HpiuXbKFkITkvMSpp4eTStB0zcRWjrijJFkoWkvN2\nHGqjqqQwLSOhEqpKCikbW6Ait2QNJQvJebsOt6W1XgHxEVELJpew4+DxtB5X5EwpWUhO6+0fiCeL\nNNYrEhZPLeXlg230D3jajy1yukJNFmZ2pZntNLNaM7tlmP2FZnZ/sH+9mc0csn+6mbWb2V+GGafk\nrl2H2+juG2BpdVnaj714ahknevupa+pI+7FFTldoycLMYsDtwFXAIuA6M1s0pNmNwFF3nwvcBnxj\nyP5vAT8PK0aRLQ2tACytLk/7sRdPjRfUt73amvZji5yuMK8sVgG17r7X3XuA+4DVQ9qsBu4OHj8A\nXGZmBmBm7wfqgG0hxig5bkvDMUqL8plZMS7tx5571njG5Oex7VXVLSTzhZkspgH1g543BNuGbePu\nfUArUGFm44H/AXw1xPhE2FzfytLqcoK/UdKqIJbHwsklvHRAVxaS+TK1wP0V4DZ3P+UgdDO7ycw2\nmNmGxsbG9EQmo0ZXbz+7DrdFUq9IWDy1jG2vHsddRW7JbGEmiwNAzaDn1cG2YduYWT5QBjQD5wN/\nY2avAJ8BvmRmNw89gLvf4e4r3X1lVVXVyJ+BjGqb64/RN+Asr0l/vSJh8dRSWk/00nD0RGQxiKQi\nP8T3fh6YZ2aziCeFNcCHh7RZC9wAPAtcAzzu8T+x3ppoYGZfAdrd/Tshxio56Ok9zeQZnD+7IrIY\nlkyLX9Vse/U4NRPTXzcRSVVoVxZBDeJm4BHgZeDH7r7NzG41s6uDZncSr1HUAp8D3jC8ViQsT9c2\nsbS6nLKxBZHFsHByCbE804goyXhhXlng7uuAdUO2fXnQ4y7g2iTv8ZVQgpOc1tbVy6b6Y/y3t82J\nNI6ighhzqoo1IkoyXqYWuEVCtX5vC/0DzsVzK6MOhSVTy9jS0Koit2Q0JQvJSU/VNlFUkMe5M6Ir\nbicsrS6jqb2bg61dUYciclJKFpKTnq5tYtWsCgrzY1GHwrJgNNaWhmMRRyJyckoWknMOH+9i95F2\nLpkb3Siowc6eUkpBzNhUryK3ZC4lC8k5T9c2AWREvQLiRe6Fk0t1ZSEZTclCcs5TtU1MLB7D2Wlc\nGS+ZZTXxIveApiuXDKVkITnF3Xm6tokL51SQl5f++aBOZml1Oe3dfext0jKrkpmULCSn7Gls5/Dx\nbi7JkC6ohMSUI5tVt5AMpWQhOeWp3fF6RaYlizlV4ykeE2Oz6haSoZQsJKf8bm8L1RPGZtw8TLE8\nY8m0MjY36MpCMpOSheSMgQHnuVdaOH9WZgyZHWp5TTkvv3qcnr6BqEMReQMlC8kZu4+009LRwwWz\nJ0YdyrCWVpfT0z/AjkOaJ0oyT0rJwsz+w8zeY2ZKLpK11tc1A3BBhFOSn8qymvh05ZvrVbeQzJPq\nL//vEl+LYreZfd3MFoQYk0go1u9tYWpZEdUTxkYdyrCmlY+loniM7uSWjJRSsnD3X7n7R4BzgVeA\nX5nZM2b2x2YW3WIAIilyd9bXNXP+7IpI1ttOhZmxrKZcd3JLRkq5W8nMKoCPAX8CbAS+TTx5PBpK\nZCIjaH9LJ03tPaycOSHqUE5pWXU5tY3ttHf3RR2KyOukWrN4EHgSGAe8z92vdvf73f2/A+PDDFBk\nJCSGpC6rjn5K8lNZWlOGO2zVEFrJMKleWfyruy9y979294MAZlYI4O4rQ4tOZIRsqT9GYX4eCyaX\nRB3KKSWSmW7Ok0yTarL42jDbnh3JQETCtKWhlcVTSymIZfaAvonFY6iZOFZ1C8k4p1yD28wmA9OA\nsWa2AkhUBkuJd0mJZLy+/gG2HmjlQ2+piTqUlCyrLmfjfiULySynTBbAFcSL2tXAtwZtbwO+FFJM\nIiOqtrGdE739r93HkOmWVZfz8JaDNLZ1U1VSGHU4IkCSZOHudwN3m9kH3f2naYpJZERtCe5bWJrh\nxe2EwcusXnb2pIijEYlL1g31UXf/d2CmmX1u6H53/9YwLxPJKJsbjlFSmM+siuKoQ0nJkmml5Fn8\nTm4lC8kUybqhEv+7NDxWstaWhlbOqS7LqMWOTmXcmHzmTyphk4bPSgZJ1g31L8H3r6YnHJGR1d3X\nz45Dx7nxktlRh3JallWX88j2Q7h7xt5xLrkl1Zvy/sbMSs2swMweM7NGM/toCq+70sx2mlmtmd0y\nzP5CM7s/2L/ezGYG21eZ2abga7OZfeB0T0wE4OWDbfT2O8uqs6O4nbC0poxjnb3Ut5yIOhQRIPX7\nLC539+PAe4nPDTUX+PypXmBmMeB24CpgEXCdmS0a0uxG4Ki7zwVuA74RbH8JWOnuy4ErgX8xs2Rd\nZiJvsDW4X2FpTXYUtxMSN+dt0v0WkiFSTRaJX9TvAX7i7ql0pq4Cat19r7v3APcBq4e0WQ3cHTx+\nALjMzMzdO909MTlOEeApxinyOlsPtFJRPIapZUVRh3JaFkwuoTA/T9OVS8ZINVk8bGY7gPOAx8ys\nCuhK8pppQP2g5w3BtmHbBMmhFagAMLPzzWwbsBX4xKDk8Rozu8nMNpjZhsbGxhRPRXLJloZWlkwr\ny7p+/4JYHounlupObskYqU5RfgtwEfGuoV6ggzdeJYwod1/v7ouBtwBfNLM3/Gno7ne4+0p3X1lV\nVRVmOJKFTvT0s/tIO0uzrF6RsKymnK0HWunr1zKrEr3TmShnIfAhM7seuAa4PEn7A8Dg+RWqg23D\ntglqEmVA8+AG7v4y0A4sOY1YRdh+8Dj9A84507I0WVSX09U7wO4j7VGHIpLyaKh7gL8FLiH+l/5b\ngGSzzT4PzDOzWWY2BlgDrB3SZi1wQ/D4GuBxd/fgNfnBsWcQT1SvpBKrSMJrxe0suXN7qMSd3Kpb\nSCZIdYTRSmCRu6dcaHb3PjO7GXgEiAF3ufs2M7sV2ODua4E7gXvMrBZoIZ5QIJ6UbjGzXmAA+KS7\nN6V6bBGALQdaqRxfyKTS7JxfaWbFOEqL8tnc0MqaVVFHI7ku1WTxEjAZOHg6b+7u64B1Q7Z9edDj\nLuDaYV53D3DP6RxLZKitDa0src6+4nZCYplVXVlIJki1ZlEJbDezR8xsbeIrzMBE3oyO7j5qG9uz\ntl6RsKy6nJ2H2zjR0x91KJLjUr2y+EqYQYiMtG2vHsedrB0JlbC0uoz+AWf7wVbOmzEx6nAkh6U6\ndPY3xAvMBcHj54EXQ4xL5E3ZuP8okL3F7YTlQZF7U70mFZRopToa6k+J32H9L8GmacBDYQUl8ma9\nsO8oMyvGZf3iQWeVFjGlrEg350nkUq1ZfAq4GDgO4O67gbPCCkrkzXB3Xth3lHNnTIg6lBGxtLpM\nRW6JXKrJojuY3wl47QY6zdckGWlfcyfNHT2cN0qSxbKacl5p7uRYZ0/yxiIhSTVZ/MbMvgSMNbN3\nAT8B/iu8sETO3Av74vWKlaOkIJyYgXaLFkOSCKWaLG4BGolP6vdnxO+d+J9hBSXyZryw/yglRfnM\nO2t0LPB4TjCiS11REqWUhs66+4CZPQQ85O6a3lUy2oZXWlgxfULWLKOaTGlRAbOritmsKwuJ0Cmv\nLCzuK2bWBOwEdgar5H35VK8TiUpjWze7Drdz4eyKqEMZUcury9lUf4zTmHFHZEQl64b6LPFRUG9x\n94nuPhE4H7jYzD4benQip+mZPfEpxC6aM7qSxbKacprauznYmmwZGZFwJEsWfwRc5+51iQ3uvhf4\nKHB9mIGJnIln9zRTWpTPkiyf5mOoxJ3out9CopIsWRQMN9trULcoCCckkTP39J4mLphdQWyU1CsS\nzp5SSkHMdCe3RCZZsjjVwG4N+paMUt/SSX3LiVHXBQVQVBBj4WQtsyrRSTYaapmZHR9muwFvWOZU\nJEpP7o5fBF88tzLiSMKxrKaMhza+ysCAj5qRXpI9Tnll4e4xdy8d5qvE3dUNJRnl8R1HmFY+lrmj\n5P6KoZZVl9Pe3cfeJi2zKul3Omtwi2Ssrt5+nq5t4h0Lz8raxY6S+f0yq6pbSPopWciosL6uhRO9\n/bxj4eid33JO1XiKx8TYrLqFREDJQkaFJ3YcoaggjwtHYXE7IZZnLJlWpju5JRJKFpL13J3Hdxzh\nojmVFBXEog4nVMtrynn51eN092mZVUkvJQvJensaO9jf0skfjOIuqIRlNeX09A+w42Bb1KFIjlGy\nkKz3xI4jAKO6XpGQuJNbdQtJNyULyXqP7TjMgkklTCsfG3UooZtWPpbK8YVs2q9kIemlZCFZrbm9\nm+fqWrh88aSoQ0kLM2N5TXwGWpF0CjVZmNmVZrbTzGrN7JZh9hea2f3B/vVmNjPY/i4ze8HMtgbf\n3xFmnJK9Ht1+mAGHKxZPjjqUtFkxvZy9TR20dvZGHYrkkNCShZnFgNuBq4BFwHVmtmhIsxuBo+4+\nF7gN+EawvQl4n7ufA9wA3BNWnJLdfrHtEDUTx7J4amnUoaTN8uDmvE2qW0gahXllsQqodfe97t4D\n3AesHtJmNXB38PgB4DIzM3ff6O6vBtu3EV/7uzDEWCULtZ7o5enaJq5aMmXU3rU9nKXVZZihuoWk\nVZjJYhpQP+h5Q7Bt2Dbu3ge0AkPvqvog8KK7dw89gJndZGYbzGxDY6NWe801T+w4Qm+/51QXFEBJ\nUQFzq8azqf5o1KFIDsnoAreZLSbeNfVnw+139zvcfaW7r6yqqkpvcBK5n790kEmlhawIumVyyYrp\nWmZV0ivMZHEAqBn0vDrYNmwbM8sHyoDm4Hk18CBwvbvvCTFOyULHu3r59c5Grlw8OSen615eM4Gj\nnb3sb+mMOhTJEWEmi+eBeWY2y8zGAGuAtUParCVewAa4Bnjc3d3MyoGfAbe4+9MhxihZ6udbD9Ld\nN8D7Vwzt2cwNiSL3RtUtJE1CSxZBDeJm4BHgZeDH7r7NzG41s6uDZncCFWZWC3wOSAyvvRmYC3zZ\nzDYFX6P/9lxJ2U9fPMDsyuLXfmnmmvmTxjO2IKb7LSRtkq2U96a4+zpg3ZBtXx70uAu4dpjXfQ34\nWpixSfaqb+nkuboW/vLy+Tk1Cmqw/Fge51SXsVHJQtIkowvcIsP5yQsNAKxenptdUAkrNAOtpJGS\nhWSV7r5+7l2/j3csPIuaieOiDidSy4MZaLe/ejzqUCQHKFlIVvnZloM0tffwsYtmRh1K5FZMnwCg\nuoWkhZKFZI3+Aeeffr2HeWeN563zKqMOJ3KTy4qYXFqkZCFpoWQhWePBjQfYfaSdz74rdwvbQy2v\nKdfwWUkLJQvJCt19/dz26C7OmVbGVUtya3qPU1k+vZz9LZ00t79hNhyREaVkIVnhh7/bz4FjJ/jC\nlQt0VTFI4j4TrZwnYVOykIzX3t3H7U/UctGcCi6Zq1rFYOdMKyNPM9BKGihZSMb7t6fqaO7o4fNX\n6KpiqOLCfOZPKtHNeRI6JQvJaK0nevnXJ/fyzrMnvTZUVF5vxfQJbK4/xsCAZqCV8ChZSEa766k6\njnf18dl3zYs6lIy1oqac41191DV3RB2KjGJKFpKxWjt7ueupOq5aMpnFU8uiDidjLZ+uGWglfEoW\nkrF++Nw+2rr7+PRluqo4lTlV4xlfmK+V8yRUShaSkXr7B/jBM/u4ZG4lZ08pjTqcjBbLM5ZWl+lO\nbgmVkoVkpHVbD3LoeBcfv2Rm1KFkheU15ew42EZXr2aglXAoWUjGcXfueqqOWZXFvH2+1rxKxfKa\ncvoGnJcOtEYdioxSShaScV7cf4zNDa388cUzc3J97TOhIreETclCMs5dT9dRUpTPB8+tjjqUrHFW\nSRGzK4t5ek9T1KHIKKVkIRnl8PEufvHSIda8pYbiwlBX/R11Lp1fxbN7mlW3kFAoWUhG+cmGevoH\nnA+fPyPqULLO2xZU0d03wPq6lqhDkVFIyUIyxsCA86Pn6rloTgWzKoujDifrXDi7gsL8PH6980jU\nocgopGQhGePJ2iYOHDvBdaumRx1KVioqiHHhnAp+9fJh3DVPlIwsJQvJGD9av5+JxWO4fPGkqEPJ\nWu8+Zwr1LSfYqiG0MsKULCQjNLd386uXD/PBc6dRmB+LOpysdcWiyRTEjJ9tORh1KDLKhJoszOxK\nM9tpZrVmdssw+wvN7P5g/3ozmxlsrzCzJ8ys3cy+E2aMkhl+se0QfQPOH2q47JtSNq6AS+ZW8vCW\ng5qyXEZUaMnCzGLA7cBVwCLgOjNbNKTZjcBRd58L3AZ8I9jeBfwv4C/Dik8yy8+2HGR2ZTELJ5dE\nHUrW+8C51Rw4dkL3XMiICvPKYhVQ6+573b0HuA9YPaTNauDu4PEDwGVmZu7e4e5PEU8aMso1tXfz\nu73NvPucKVoJbwRcsXgSE8YVcO/6/VGHIqNImMliGlA/6HlDsG3YNu7eB7QCFSHGJBnokW2HGHB4\nz9IpUYcyKhTmx7jmvGoe3X6YI236e0tGRlYXuM3sJjPbYGYbGhsbow5HzpC6oEbemlXT6Rtw7n+u\nPnljkRSEmSwOADWDnlcH24ZtY2b5QBnQnOoB3P0Od1/p7iurqqreZLgSBXVBhWNO1XgunV/F3c/u\n0/QfMiLCTBbPA/PMbJaZjQHWAGuHtFkL3BA8vgZ43HU3UU5RF1R4/uzS2TS1d/PgxqF/o4mcvtCS\nRVCDuBl4BHgZ+LG7bzOzW83s6qDZnUCFmdUCnwNeG15rZq8A3wI+ZmYNw4ykklFg3VZ1QYXlojkV\nLJ5ayr8+uVfDaOVNC3VaT3dfB6wbsu3Lgx53Adee5LUzw4xNotfU3s2ze5r55NvnqgsqBGbGTZfO\n5s/v28SvXj7M5YsnRx2SZLGsLnBLdlMXVPjec84UqieM5R8fr9V8UfKmKFlIZNQFFb78WB6fvmwe\nWw+08svth6MOR7KYkoVEItEFpVFQ4fvDFdOYXVnMt365i37VLuQMKVlIJNQFlT75sTw+86757Dzc\nxtrNGhklZ0bJQiKhG/HS673nTGFpdRl/vW4HbV29UYcjWUjJQtLu8PEunt3bzPuWTVUXVJrk5Rn/\nZ/USGtu7ue3R3VGHI1lIyULS7uEtB3GHq5dPjTqUnLKsppwPr5rO95+p4zmt0y2nSclC0m7tpgMs\nmVbKnKrxUYeSc7747rOZPnEcn7lvI62d6o6S1ClZSFq90tTB5oZWrl6mq4oojC/M5x+uW8GRtm4+\n/8Bm3XshKVOykLR6aFN8NM57lypZRGVpdTlffPfZ/HL7Ye58qi7qcCRLKFlI2vT1D3Dfc/W8dV4l\nU8vHRh1OTvv4xTO5cvFkvv7zHbywT/ULSU7JQtLm8R1HOHS8i49eMCPqUHKemfE31y5l2oSxfOqH\nG2lu7446JMlwShaSNv++fj+TS4u4bOFZUYciQGlRAbd/+FxaOnv4zP2bNDOtnJKShaTFrsNt/HZX\nI9etmk5+TD92mWLJtDK+8r7FPLm7idufqI06HMlg+l8rafGPj9dSPCbG9ReqCyrTXLeqhtXLp/L3\nj+1ma0Nr1OFIhlKykNDtPtzGw1te5aMXzmBC8Ziow5EhzIxbr15C1fhCPvfjTVqGVYalZCGhcndu\nfXg74wuDXrpHAAAJjUlEQVTzuemts6MOR06ibFwB37hmKbuPtHPbo7uiDkcykJKFhOqRbYd4cncT\nn33nfCrGF0YdjpzC2+ZX8eHzp3PHk3vZ8IqG08rrKVlIaI60dfGlB19i0ZRS/ki1iqzwpXefTfWE\nsfzFTzbT2dMXdTiSQZQsJBS9/QN89v5NdHT38e01yynQCKisML4wn29es4z9LZ18/ec7og5HMoj+\nB8uIc3f+99ptPF3bzNfev4R5k7RmRTa5YHYFH794Fj94dh/rth6MOhzJEEoWMqLcnW8+spN71+/n\nE2+bw7Ura6IOSc7A569YwLnTy/n0jzaydvOrUYcjGUDJQkZMX/8AX/2v7Xz313v48PnT+cIVC6IO\nSc5QUUGM7398Fctr4gnjCw9s5vDxrqjDkgjlRx2AjA77mzv5ywc281xdCzdeMov/+Z6ztQpelist\nKuDeP72Av3t0J3c9VceDGw/wzrMnsXr5VC6aW0lpUUHUIUoaWZjz2ZvZlcC3gRjwPXf/+pD9hcAP\ngPOAZuBD7v5KsO+LwI1AP/Bpd3/kVMdauXKlb9iwYcTPQU7O3dl5uI171+/nvufryc8z/u8HlvCB\nFdVRhyYjbF9zBz94dh8PbTxAc0cPsTxjeU0550wrY+HkEhZOKWXeWeMpLtTfn9nGzF5w95VJ24WV\nLMwsBuwC3gU0AM8D17n79kFtPgksdfdPmNka4APu/iEzWwT8CFgFTAV+Bcx395PeWqpkkR5dvf38\nbm8zT+w4wuM7j1DfcoIxsTxWL5/KX1y+gMllRVGHKCHq7R/gxX1HeXJ3E8/saWLHoTY6e37/37Jm\n4lgWTCphaXU5y2vKWVZTTtlYXYFkslSTRZh/BqwCat19bxDQfcBqYPugNquBrwSPHwC+Y/G+i9XA\nfe7eDdSZWW3wfs+GGK8M4e40tffwSnMHL+47ynN1LTyzp5kTvf0UFeRx0ZxKbrp0Du9eMlk33OWI\nglge58+u4PzZFcACBgac+qOd7DzUxq7Dbew4FP96bMcREn+HzqkqZnnNBJbXlDGlbCxl4wooHpNP\nfszIzzMKYnnE8oz8mFGQl0cs+J7Yr+7MzBBmspgG1A963gCcf7I27t5nZq1ARbD9d0NeOy2MIHcc\nOs7N924kiOG17f6GB79/OGw7eO0/hw/a+tq2k1zAJd4r1fd5fRyve6eTtkt2nJPt7+4boKdv4LXn\nsyqLuXZlNX+w8CwunF1BUUFs+JOSnJGXZ8yoKGZGRTGXL5782vbjXb1sbWhl4/6jbKo/xm92HeGn\nLzac0TFiea9PKgUxIz9v0ONYHrmeTt6+oIq/es+iUI+R1R2MZnYTcBPA9OnTz+g9ivJjLBh8H4C9\n8eHgv2x+v23Yl7zW9nU/vJb4Nuh9hj3O4G32xm3DvOnJ4zj5MYeL93XvHGwaE8tjavlYqieMZVlN\nOZW6epAUlRYVcPHcSi6eWwnE/xg52NpFU3s3rSd66ejup29ggP4Bp7ff6esfoG9g0PfgcW+/0zeQ\n2De4ndM7MBDfNjCQJJrRb1Jp+N2/YSaLA8DgQfbVwbbh2jSYWT5QRrzQncprcfc7gDsgXrM4kyBn\nVhZz+0fOPZOXikiKzIyp5WO1nG4WC/M+i+eBeWY2y8zGAGuAtUParAVuCB5fAzzu8f6QtcAaMys0\ns1nAPOC5EGMVEZFTCO3KIqhB3Aw8Qnzo7F3uvs3MbgU2uPta4E7gnqCA3UI8oRC0+zHxYngf8KlT\njYQSEZFwhXqfRTpp6KyIyOlLdeispvsQEZGklCxERCQpJQsREUlKyUJERJJSshARkaRGzWgoM2sE\n9p3BSyuBphEOJxvovHOLzjv3pHruM9y9KlmjUZMszpSZbUhl2Nhoo/POLTrv3DPS565uKBERSUrJ\nQkREklKyCCYizEE679yi8849I3ruOV+zEBGR5HRlISIiSeVMsjCzGjN7wsy2m9k2M/vzYPtEM3vU\nzHYH3ydEHWsYzCxmZhvN7OHg+SwzW29mtWZ2fzCN/KhjZuVm9oCZ7TCzl83swlz4zM3ss8HP+Utm\n9iMzKxqNn7mZ3WVmR8zspUHbhv18Le4fgvPfYmZZu5DNSc77m8HP+RYze9DMygft+2Jw3jvN7Ioz\nOWbOJAviU53/hbsvAi4APmVmi4BbgMfcfR7wWPB8NPpz4OVBz78B3Obuc4GjwI2RRBW+bwO/cPeF\nwDLi/waj+jM3s2nAp4GV7r6E+BIBaxidn/n3gSuHbDvZ53sV8bVx5hFfYfOf0hRjGL7PG8/7UWCJ\nuy8FdgFfBAh+z60BFgev+a6ZnfaayDmTLNz9oLu/GDxuI/5LYxqwGrg7aHY38P5oIgyPmVUD7wG+\nFzw34B3AA0GT0XreZcClxNdNwd173P0YOfCZE1+rZmywAuU44CCj8DN3998SXwtnsJN9vquBH3jc\n74ByM5uSnkhH1nDn7e6/dPe+4OnviK8wCvHzvs/du929DqgFVp3uMXMmWQxmZjOBFcB6YJK7Hwx2\nHQImRRRWmP4e+AKQWKy4Ajg26AergXjiHG1mAY3AvwVdcN8zs2JG+Wfu7geAvwX2E08SrcAL5MZn\nDif/fKcB9YPajeZ/g48DPw8ej8h551yyMLPxwE+Bz7j78cH7giVdR9XwMDN7L3DE3V+IOpYI5APn\nAv/k7iuADoZ0OY3Sz3wC8b8mZwFTgWLe2GWRE0bj55uMmf0V8W73H47k++ZUsjCzAuKJ4ofu/h/B\n5sOJS9Hg+5Go4gvJxcDVZvYKcB/xrohvE78ETyyrWw0ciCa8UDUADe6+Pnj+APHkMdo/83cCde7e\n6O69wH8Q/znIhc8cTv75HgBqBrUbdf8GZvYx4L3AR/z390WMyHnnTLII+unvBF52928N2rUWuCF4\nfAPwn+mOLUzu/kV3r3b3mcSLXI+7+0eAJ4Brgmaj7rwB3P0QUG9mC4JNlxFf131Uf+bEu58uMLNx\nwc994rxH/WceONnnuxa4PhgVdQHQOqi7KuuZ2ZXEu5uvdvfOQbvWAmvMrNDMZhEv8D932gdw95z4\nAi4hfjm6BdgUfL2beP/9Y8Bu4FfAxKhjDfHf4O3Aw8Hj2cEPTC3wE6Aw6vhCOuflwIbgc38ImJAL\nnznwVWAH8BJwD1A4Gj9z4EfE6zK9xK8kbzzZ5wsYcDuwB9hKfLRY5OcwguddS7w2kfj99s+D2v9V\ncN47gavO5Ji6g1tERJLKmW4oERE5c0oWIiKSlJKFiIgkpWQhIiJJKVmIiEhSShYiIpKUkoWIiCSl\nZCEiIkn9f6HSwl0EdjqUAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f94c72e4f28>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df['Rating'].plot(kind='kde')"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Minimum Rating : 45\n",
"Maximum Rating : 94\n"
]
}
],
"source": [
"print(\"Minimum Rating : {}\".format(df['Rating'].min()))\n",
"print(\"Maximum Rating : {}\".format(df['Rating'].max()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br>\n",
"In order to let us to do the classification problem, the range of number is just large.<br>\n",
"So we decided to split the data, and range it into three categorical bins, A, B, C."
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [],
"source": [
"# add new rating class attribute\n",
"df['rating_class'] = ['0']*df.shape[0]"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [],
"source": [
"categories = [[80,100,'A'], [60,80,'B'], [40,60,'C']]\n",
"\n",
"for i in range(df.shape[0]):\n",
" rating = df.loc[i]['Rating']\n",
" for each in categories:\n",
" if rating > each[0] and rating <= each[1]:\n",
" df.set_value(i, 'rating_class', each[2])"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Name</th>\n",
" <th>rating_class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>6593</th>\n",
" <td>Adão Salvadaldo</td>\n",
" <td>B</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9970</th>\n",
" <td>Lewie Coyle</td>\n",
" <td>B</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11592</th>\n",
" <td>Isaiah Osbourne</td>\n",
" <td>B</td>\n",
" </tr>\n",
" <tr>\n",
" <th>373</th>\n",
" <td>Cédric Carrasso</td>\n",
" <td>A</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7605</th>\n",
" <td>Naoki Wako</td>\n",
" <td>B</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14632</th>\n",
" <td>Nils Rütten</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7644</th>\n",
" <td>Oswaldinato</td>\n",
" <td>B</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10550</th>\n",
" <td>Reuben Reid</td>\n",
" <td>B</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11555</th>\n",
" <td>Mario de Luna</td>\n",
" <td>B</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6375</th>\n",
" <td>Ángel Reyna</td>\n",
" <td>B</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Name rating_class\n",
"6593 Adão Salvadaldo B\n",
"9970 Lewie Coyle B\n",
"11592 Isaiah Osbourne B\n",
"373 Cédric Carrasso A\n",
"7605 Naoki Wako B\n",
"14632 Nils Rütten C\n",
"7644 Oswaldinato B\n",
"10550 Reuben Reid B\n",
"11555 Mario de Luna B\n",
"6375 Ángel Reyna B"
]
},
"execution_count": 165,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sample(10)[['Name', 'rating_class']]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Limit player to central back only (CB, RCB, LCB)"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1347, 54)\n"
]
}
],
"source": [
"CB_data = df[df['Club_Position'] == 'CB']\n",
"RCB_data = df[df['Club_Position'] == 'RCB']\n",
"LCB_data = df[df['Club_Position'] == 'LCB']\n",
"\n",
"df = pd.concat([CB_data, RCB_data, LCB_data])\n",
"print(df.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br>\n",
"# Remove all attributes that seem unimportant to our cause"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Remaining:\n"
]
},
{
"data": {
"text/plain": [
"array(['Ball_Control', 'Marking', 'Sliding_Tackle', 'Standing_Tackle',\n",
" 'Aggression', 'Reactions', 'Interceptions', 'Composure',\n",
" 'Short_Pass', 'Long_Pass', 'Acceleration', 'Speed', 'Stamina',\n",
" 'Strength', 'Balance', 'Agility', 'Jumping', 'Heading',\n",
" 'rating_class'], dtype=object)"
]
},
"execution_count": 167,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# unimportant attributes\n",
"uattr = ['Nationality', 'National_Position', 'National_Kit', 'Club_Position', 'Club_Kit', 'Club_Joining']\n",
"uattr += ['Contract_Expiry', 'Height', 'Weight', 'Preffered_Foot', 'Birth_Date', 'Preffered_Position']\n",
"uattr += ['Work_Rate', 'Rating', 'Club', 'Name', 'Age']\n",
"\n",
"# remaining attributes that are not important to Central Back position\n",
"uattr += ['Weak_foot', 'Skill_Moves', 'Dribbling', 'Attacking_Position', 'Vision']\n",
"uattr += ['Crossing', 'Shot_Power', 'Finishing', 'Long_Shots', 'Curve']\n",
"uattr += ['Freekick_Accuracy', 'Penalties', 'Volleys', 'GK_Positioning']\n",
"uattr += ['GK_Diving', 'GK_Kicking', 'GK_Handling', 'GK_Reflexes']\n",
"\n",
"\n",
"for each in uattr:\n",
" df = df.drop(each, axis=1)\n",
" \n",
"print(\"Remaining:\")\n",
"df.columns.values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br>\n",
"# Take sample (maximum 500) from the data\n",
"To let the distribution to be fair, we will choose data percentage % from each `rating_class`."
]
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Amounts to take from class 'A' : 43\n",
"Amounts to take from class 'B' : 897\n",
"Amounts to take from class 'C' : 59\n"
]
}
],
"source": [
"max_size = 1000\n",
"\n",
"total_row = df.shape[0]\n",
"new_data = []\n",
"\n",
"for i, c in enumerate(['A', 'B', 'C']):\n",
" df_class = df[df['rating_class'] == c]\n",
" amount = int(df_class.shape[0]/total_row*max_size)\n",
" print(\"Amounts to take from class '{}' : {}\".format(c, amount))\n",
" sample = df_class.sample(amount)\n",
" new_data += sample.values.tolist()\n",
" \n",
"sampling_data = pd.DataFrame(new_data, columns=df.columns)\n",
"sampling_data = sampling_data.apply(np.random.permutation) # apply some permutation to the data"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of sampling : 999\n"
]
}
],
"source": [
"print(\"Number of sampling : {}\".format(sampling_data.shape[0]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br>\n",
"# Saving the pre-processed data to new CSV file."
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {},
"outputs": [],
"source": [
"sampling_data.to_csv(\"dataset-preprocessed.csv\", encoding='utf-8', index=False)"
]
}
],
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment