203 lines
40 KiB
Plaintext
203 lines
40 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import matplotlib.pyplot as plt\n",
|
||
|
"import matplotlib as mpl\n",
|
||
|
"import pandas as pd\n",
|
||
|
"import numpy as np\n",
|
||
|
"import seaborn as sns"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 2,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/html": [
|
||
|
"<div>\n",
|
||
|
"<style scoped>\n",
|
||
|
" .dataframe tbody tr th:only-of-type {\n",
|
||
|
" vertical-align: middle;\n",
|
||
|
" }\n",
|
||
|
"\n",
|
||
|
" .dataframe tbody tr th {\n",
|
||
|
" vertical-align: top;\n",
|
||
|
" }\n",
|
||
|
"\n",
|
||
|
" .dataframe thead th {\n",
|
||
|
" text-align: right;\n",
|
||
|
" }\n",
|
||
|
"</style>\n",
|
||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
||
|
" <thead>\n",
|
||
|
" <tr style=\"text-align: right;\">\n",
|
||
|
" <th></th>\n",
|
||
|
" <th>team</th>\n",
|
||
|
" <th>Win League</th>\n",
|
||
|
" </tr>\n",
|
||
|
" </thead>\n",
|
||
|
" <tbody>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>0</th>\n",
|
||
|
" <td>Alavés</td>\n",
|
||
|
" <td>[1, 1]</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>1</th>\n",
|
||
|
" <td>Athletic Bilbao</td>\n",
|
||
|
" <td>[1, 1]</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>2</th>\n",
|
||
|
" <td>Atlético Madrid</td>\n",
|
||
|
" <td>[12, 17]</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>3</th>\n",
|
||
|
" <td>Barcelona</td>\n",
|
||
|
" <td>[44, 43]</td>\n",
|
||
|
" </tr>\n",
|
||
|
" <tr>\n",
|
||
|
" <th>4</th>\n",
|
||
|
" <td>Celta Vigo</td>\n",
|
||
|
" <td>[1, 1]</td>\n",
|
||
|
" </tr>\n",
|
||
|
" </tbody>\n",
|
||
|
"</table>\n",
|
||
|
"</div>"
|
||
|
],
|
||
|
"text/plain": [
|
||
|
" team Win League\n",
|
||
|
"0 Alavés [1, 1]\n",
|
||
|
"1 Athletic Bilbao [1, 1]\n",
|
||
|
"2 Atlético Madrid [12, 17]\n",
|
||
|
"3 Barcelona [44, 43]\n",
|
||
|
"4 Celta Vigo [1, 1]"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 2,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df = pd.read_csv('la liga.csv',dtype={'team':'str','Win League':'str'})\n",
|
||
|
"df.head()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 3,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"from ast import literal_eval\n",
|
||
|
"df['Win League'] = df['Win League'].apply(literal_eval)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 4,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# get the latest prob value\n",
|
||
|
"array_length = len(list(df.iloc[0]['Win League'])) #len of all lists should be same\n",
|
||
|
"def get_latest_prob(row):\n",
|
||
|
" row['latest_prob'] = int(row['Win League'][array_length -1])\n",
|
||
|
" return row\n",
|
||
|
"\n",
|
||
|
"df = df.apply(get_latest_prob,axis=1)\n",
|
||
|
"df =df.sort_values(by=['latest_prob'],ascending = False)[:5].copy()\n",
|
||
|
"#display(df)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 7,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 576x576 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"\"\"\" Most of the code is taken from \n",
|
||
|
"https://github.com/petermckeeverPerform/friends-of-tracking-viz-lecture/blob/master/notebooks/lecture-notebook.ipynb\"\"\"\n",
|
||
|
"title_font = \"DejaVu Sans\"\n",
|
||
|
"body_font = \"Open Sans\"\n",
|
||
|
"text_color = \"w\"\n",
|
||
|
"background = \"#313332\"\n",
|
||
|
"filler = \"grey\"\n",
|
||
|
"primary = \"red\"\n",
|
||
|
"\n",
|
||
|
"mpl.rcParams['xtick.color'] = text_color\n",
|
||
|
"mpl.rcParams['ytick.color'] = text_color\n",
|
||
|
"mpl.rcParams['xtick.labelsize'] = 10\n",
|
||
|
"mpl.rcParams['ytick.labelsize'] = 10\n",
|
||
|
"array_length = len(list(df.iloc[0]['Win League'])) #len of all lists should be same\n",
|
||
|
"matchday = np.asarray(list(range(1, array_length +1)))\n",
|
||
|
"\n",
|
||
|
"fig, ax = plt.subplots(figsize=(8,8))\n",
|
||
|
"fig.set_facecolor(background)\n",
|
||
|
"ax.patch.set_alpha(0)\n",
|
||
|
"spines = [\"top\",\"right\",\"bottom\",\"left\"]\n",
|
||
|
"for s in spines:\n",
|
||
|
" if s in [\"top\",\"right\"]:\n",
|
||
|
" ax.spines[s].set_visible(False)\n",
|
||
|
" else:\n",
|
||
|
" ax.spines[s].set_color(text_color)\n",
|
||
|
"\n",
|
||
|
"ax.set_xlabel(\"Matchday\", fontfamily=title_font, fontweight=\"regular\", fontsize=16, color=text_color)\n",
|
||
|
"ax.set_ylabel(\"Percentage\", fontfamily=title_font, fontweight=\"regular\", fontsize= 16, color=text_color)\n",
|
||
|
"\n",
|
||
|
"ax.tick_params(axis=\"both\",length=0)\n",
|
||
|
"for i in range(len(df)):\n",
|
||
|
" x = np.asarray(list(df.iloc[i]['Win League']))\n",
|
||
|
" plt.annotate(df.iloc[i]['team'],(matchday[-1],np.asarray(list(df.iloc[i]['Win League']))[array_length -1]+0.5),color=text_color)\n",
|
||
|
" plt.plot(matchday,x)\n",
|
||
|
"\n",
|
||
|
"fig.text(0,1,\"538 La Liga Predictions\",fontweight=\"bold\", fontsize=18,fontfamily=title_font, color=text_color)\n",
|
||
|
"plt.tight_layout()\n",
|
||
|
"plt.show() \n",
|
||
|
"ax.grid(ls=\"dotted\",lw=\"0.5\",color=\"lightgrey\", zorder=1)"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"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.7.6"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 4
|
||
|
}
|