Skip to content

Instantly share code, notes, and snippets.

@sertalpbilal
Last active March 3, 2023 14:56
Show Gist options
  • Save sertalpbilal/0ae5f39f1e82657d311c4cb387c99880 to your computer and use it in GitHub Desktop.
Save sertalpbilal/0ae5f39f1e82657d311c4cb387c99880 to your computer and use it in GitHub Desktop.
Get FPLResearch Rank History
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