Last active
March 3, 2023 14:56
-
-
Save sertalpbilal/0ae5f39f1e82657d311c4cb387c99880 to your computer and use it in GitHub Desktop.
Get FPLResearch Rank History
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
URLS = [ | |
{'year': 2023, 'month': 3, 'url': 'https://docs.google.com/spreadsheets/d/1xivGiILExvw61SrDP1sar9u-V_oSfl5yDRIAHen0tAU/'}, | |
{'year': 2023, 'month': 2, 'url': 'https://docs.google.com/spreadsheets/d/1DTmJMhxKFeSZrPdrlmD4Fq93Yim6-m7lIj2CHwDJdV0/'}, | |
{'year': 2023, 'month': 1, 'url': 'https://docs.google.com/spreadsheets/d/1tu5cshTG33b416o0OroSkvnJb7Vnk-LJ-WlhXDgBPR4/'}, | |
{'year': 2022, 'month': 12, 'url': 'https://docs.google.com/spreadsheets/d/1PS7zerHg4Qis3pFG1qIC_QFIcdJ462jQS8n9s2bnJVU/'}, | |
{'year': 2022, 'month': 11, 'url': 'https://docs.google.com/spreadsheets/d/1qfpM4iiSnzsnvKFGC3eMIWXuUZmUEynNmh15K-x094M/'}, | |
{'year': 2022, 'month': 10, 'url': 'https://docs.google.com/spreadsheets/d/1aQcs5miXsnVN8iQ2mQcNoFh2eld46VkEHpkcumsRgAk/edit#gid=631818250'}, | |
{'year': 2022, 'month': 9, 'url': 'https://docs.google.com/spreadsheets/d/15l5ebzPPwM9T35cxPH01mxTGTWzdFLux7mNd5FY-aaU/edit#gid=631818250'}, | |
{'year': 2022, 'month': 5, 'url': 'https://docs.google.com/spreadsheets/d/1JXoaovC9fbrdVYVUG-v1ooIuBVp1ylmNfl0O9-ca-p4/edit#gid=678875418', 'season': '21/22'}, | |
{'year': 2022, 'month': 4, 'url': 'https://docs.google.com/spreadsheets/d/16FELRYrJC7eSmcMOoJwX7rHMXBd32-if0C58VMgQGYE/edit#gid=345710820'}, | |
{'year': 2022, 'month': 3, 'url': 'https://docs.google.com/spreadsheets/d/1i7cq5pJz5gIoiQU8rBDz8ONPwIeN5b_p7zEkJElM3mI/edit#gid=1242085995'}, | |
{'year': 2022, 'month': 2, 'url': 'https://docs.google.com/spreadsheets/d/13O15AX8r5QDSkLCdlvamC0HN88VzThYZ0yFz7VTIhlI/edit#gid=23145229'}, | |
{'year': 2022, 'month': 1, 'url': 'https://docs.google.com/spreadsheets/d/1U0CBDkM2o7AApjJXRG2oIsNE6NGqTk5mqE7KKax29_A/edit#gid=1322613907'}, | |
{'year': 2021, 'month': 12, 'url': 'https://docs.google.com/spreadsheets/d/12ssPnk9856wsgv-lns8zJOV4Q35Y1QPoybAn4g3Pbx0/edit#gid=51395267'}, | |
{'year': 2021, 'month': 11, 'url': 'https://docs.google.com/spreadsheets/d/1ndGdTC99zZw9iEEYuF9uzHL4cKfMa4FmhzK2MOmfR38/edit#gid=117738241'}, | |
{'year': 2021, 'month': 10, 'url': 'https://docs.google.com/spreadsheets/d/1VdHGs9ojs6ozfACMcO1sEXcL8IvGKbZCBJqeVqJDRWU/edit#gid=1559110273'}, | |
{'year': 2021, 'month': 9, 'url': 'https://docs.google.com/spreadsheets/d/1-CMrowcCH_MDaR_nmOOczTXeqJSyHSp0Ay90X7IRzJQ/edit#gid=644029495'}, | |
{'year': 2021, 'month': 6, 'url': 'https://docs.google.com/spreadsheets/d/1GKm5RPad7WACfyEiLcsnV1R9nrPAS-2vLH82BKCsTEs/edit#gid=1338865462', 'season': '20/21'}, | |
{'year': 2021, 'month': 5, 'url': 'https://docs.google.com/spreadsheets/d/12plROAdrHIu2DWUQPeYF7AvPivD7o6utSP5dXCuvEVk/edit'}, | |
{'year': 2021, 'month': 4, 'url': 'https://docs.google.com/spreadsheets/d/1TKvaguI2ech8q68JhBo1_tRxpq2a6LTkoJQoDDu0h1U/edit#gid=1335225452'}, | |
{'year': 2021, 'month': 3, 'url': 'https://docs.google.com/spreadsheets/d/1kEHTjpEK1oUaZ_Mxa4hJXPv0_0bxhmzhNVWaM0zsdB8/edit#gid=1733655604'}, | |
{'year': 2021, 'month': 2, 'url': 'https://docs.google.com/spreadsheets/d/1298J0kUe5B4SmsGph0ugrWxV5ZwdCYKj2ee8x4sGFn8/edit#gid=459210318'}, | |
{'year': 2021, 'month': 1, 'url': 'https://docs.google.com/spreadsheets/d/1Bc4Yjbwbr7y6ZpJMGCts7pF7VR7NXa-FS2tJwDI-dy8/edit#gid=1347655374'}, | |
{'year': 2020, 'month': 12, 'url': 'https://docs.google.com/spreadsheets/d/1qedzMWWY2DLaCrVKXq-eteEgiyUmruP6h55VBcNZRkc/edit#gid=1870678627'}, | |
{'year': 2020, 'month': 11, 'url': 'https://docs.google.com/spreadsheets/d/1hX_Y5KPryZ2OMcULbCZRmjmOjNix-HL0Rnos6tdaWYM/edit#gid=1193613808'}, | |
{'year': 2020, 'month': 7, 'url': 'https://docs.google.com/spreadsheets/d/1nV1weDw2emlNCzmMXAPBqN_9ngLaoPMm92XIKgC2cmU/edit#gid=1849871588', 'season': '19/20'}, | |
] | |
import pandas as pd | |
import os | |
from pathlib import Path | |
import datetime | |
import matplotlib.pyplot as plt | |
data_folder = Path('data') | |
data_folder.mkdir(parents=True, exist_ok=True) | |
manager_dir = Path('manager') | |
manager_dir.mkdir(parents=True, exist_ok=True) | |
def download_data(target): | |
file_name = f"{target['year']}-{target['month']}" | |
import gspread | |
from gspread_dataframe import set_with_dataframe | |
from oauth2client.service_account import ServiceAccountCredentials | |
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive'] | |
creds = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope) | |
client = gspread.authorize(creds) | |
sheet_url = target['url'] | |
sh = client.open_by_url(sheet_url) | |
worksheet = sh.get_worksheet(0) | |
data = worksheet.get_all_values() | |
# headers = data[0] # Assumes first row has header | |
first_row = next((i for (i,v) in enumerate(data) if v[1] == 'Rank')) | |
headers = data[first_row] | |
df = pd.DataFrame(data[first_row+1:], columns=headers) | |
df.to_csv(data_folder / f"{file_name}.csv") | |
print(f"Downloaded: {file_name}") | |
def get_history_for_player(name): | |
if not os.path.exists(f"manager/{name}.csv"): | |
all_data = [] | |
for target in URLS: | |
try: | |
df = pd.read_csv(data_folder / f"{target['year']}-{target['month']}.csv") | |
except: | |
df = download_data(target) | |
df = pd.read_csv(data_folder / f"{target['year']}-{target['month']}.csv") | |
try: | |
record = df[df['Manager'] == name].iloc[0].to_dict() | |
record['dt'] = datetime.datetime(target['year'], target['month'], 1) | |
record['year'] = target['year'] | |
record['month'] = target['month'] | |
if target.get('season'): | |
record['season'] = target['season'] | |
all_data.append(record) | |
print(f"Added {target['year']}-{target['month']}") | |
except Exception as e: | |
print(e) | |
continue | |
manager_df = pd.DataFrame(all_data) | |
manager_df.to_csv(manager_dir / f"{name}.csv") | |
manager_df = pd.read_csv(manager_dir / f"{name}.csv") | |
else: | |
manager_df = pd.read_csv(f"manager/{name}.csv") | |
manager_df | |
manager_df.sort_values(by=['year', 'month'], ascending=[True, True], inplace=True) | |
plt.figure(figsize=(14,6)) | |
manager_df.index = pd.to_datetime(manager_df['dt']) | |
plt.plot(manager_df['Rank'], '-o') | |
plt.xlabel('Year/Month') | |
plt.ylabel('Rank') | |
for i, row in manager_df.iterrows(): | |
# plt.text(i, val, int(val), ha='center', va='top') | |
plt.annotate(row['Rank'], (i, int(row['Rank'])), xytext=(0, 20), textcoords='offset points', ha='center', va='top', fontsize=6) | |
plt.margins(0.05) | |
ax = plt.gca() | |
ax.tick_params(axis='both', labelsize=6) | |
plt.savefig(f"{name}.jpg", dpi=300) | |
if __name__ == "__main__": | |
get_history_for_player("Sertalp Cay") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment