Exemple #1
0
def net_v_all_png():
    global rankings, last_updated
    img = io.BytesIO()
    if rankings is None or (date.today() - last_updated).days > 0:
        rankings = collect_rankings()
        last_updated = date.today()

    tmp_rankings = prepare_rankings(rankings)

    tmp_rankings['Sagarin'] = tmp_rankings['Sagarin_RK']
    tmp_rankings['KenPom'] = tmp_rankings['Pomeroy_RK']
    tmp_rankings['BPI'] = tmp_rankings['BPI_RK']
    tmp_rankings['NET'] = tmp_rankings['NET Rank']

    fig = sns.pairplot(tmp_rankings,
                       y_vars=['NET'],
                       x_vars=['Sagarin', 'KenPom', 'BPI', 'RPI'],
                       plot_kws={'color': 'black'})
    fig.set(ylim=(0, 380), xlim=(0, 380))
    FigureCanvas(fig.fig).print_png(img)

    output = make_response(img.getvalue())
    output.headers["Content-Disposition"] = "inline"
    output.headers["Content-Type"] = "image/png"
    output.cache_control.max_age = 60 * 60 * 24

    return output
Exemple #2
0
def data_csv():
    global rankings, last_updated
    si = io.StringIO()
    if rankings is None or (date.today() - last_updated).days > 0:
        rankings = collect_rankings()
        last_updated = date.today()

    conf = request.args.get('conf', '')
    if conf == 'REPLACE_ME':
        return 'Please replace REPLACE_ME with a valid conference name'

    tmp_rankings = prepare_rankings(rankings)
    sort = request.args.get('sort', '')
    if sort == 'KPvNET':
        tmp_rankings[
            'KP - NET'] = tmp_rankings['Pomeroy_RK'] - tmp_rankings['NET Rank']
        tmp_rankings = tmp_rankings.drop('RPI - NET', axis=1)
        tmp_rankings = tmp_rankings.sort_values(by='KP - NET', ascending=True)
    tmp_rankings.to_csv(si)

    output = make_response(si.getvalue())
    output.headers[
        "Content-Disposition"] = "attachment; filename=rankings_{}.csv".format(
            request.args.get('conf', ''))
    output.headers["Content-Type"] = "text/csv"
    output.cache_control.max_age = 60 * 60 * 24
    return output
Exemple #3
0
def correlation_by_conf_png():
    global rankings, last_updated
    img = io.BytesIO()
    if rankings is None or (date.today() - last_updated).days > 0:
        rankings = collect_rankings()
        last_updated = date.today()

    tmp_rankings = prepare_rankings(rankings)

    tmp_rankings['Sagarin'] = tmp_rankings['Sagarin_RK']
    tmp_rankings['KenPom'] = tmp_rankings['Pomeroy_RK']
    tmp_rankings['BPI'] = tmp_rankings['BPI_RK']
    tmp_rankings['NET'] = tmp_rankings['NET Rank']
    tmp_rankings['Conference'] = tmp_rankings['Conf']

    n = request.args.get('n', '8')

    if n == '8':
        tmp_rankings['Conference'][tmp_rankings['Conference'].isin(
            POWER_SEVEN_CONFS) == False] = 'Other'
        fig = sns.pairplot(tmp_rankings,
                           y_vars=['KenPom', 'BPI', 'RPI', 'NET'],
                           x_vars=['Sagarin', 'KenPom', 'BPI', 'RPI'],
                           hue='Conference',
                           hue_order=[
                               'American', 'ACC', 'Big 12', 'Big East',
                               'Big Ten', 'Pac-12', 'SEC', 'Other'
                           ],
                           markers=['p', 's', 'x', 'H', 'o', 'P', 'D', '*'],
                           plot_kws=dict(alpha=0.8))
    elif n == '2':
        tmp_rankings['Conference'][tmp_rankings['Conference'].isin(
            POWER_SEVEN_CONFS) == False] = 'Other'
        tmp_rankings['Conference'][tmp_rankings['Conference'].isin(
            POWER_SEVEN_CONFS)] = 'Power 7'
        fig = sns.pairplot(tmp_rankings,
                           y_vars=['KenPom', 'BPI', 'RPI', 'NET'],
                           x_vars=['Sagarin', 'KenPom', 'BPI', 'RPI'],
                           hue='Conference',
                           hue_order=['Power 7', 'Other'],
                           markers=['s', 'o'],
                           plot_kws=dict(alpha=0.5, color='black'))
    elif n == 'all':
        fig = sns.pairplot(tmp_rankings,
                           y_vars=['KenPom', 'BPI', 'RPI', 'NET'],
                           x_vars=['Sagarin', 'KenPom', 'BPI', 'RPI'],
                           hue='Conference',
                           plot_kws=dict(alpha=0.8))
    fig.set(ylim=(0, 380), xlim=(0, 380))
    for i, j in zip(*np.triu_indices_from(fig.axes, 1)):
        fig.axes[i, j].set_visible(False)
    FigureCanvas(fig.fig).print_png(img)

    output = make_response(img.getvalue())
    output.headers["Content-Disposition"] = "inline"
    output.headers["Content-Type"] = "image/png"
    output.cache_control.max_age = 60 * 60 * 24

    return output
Exemple #4
0
def outliers_json():
    global rankings, last_updated

    analyzer = Analyzer()
    if rankings is None or (date.today() - last_updated).days > 0:
        rankings = collect_rankings()
        last_updated = date.today()

    tmp_rankings = prepare_rankings(rankings)
    tmp_rankings = tmp_rankings.drop(['RPI - NET', 'Conf'], axis=1)
    corr = tmp_rankings.corr(method='spearman')
    outliers = analyzer.get_outliers(tmp_rankings, corr)
    return jsonify(outliers)
Exemple #5
0
def data():
    global rankings, last_updated
    si = io.StringIO()
    if rankings is None or (date.today() - last_updated).days > 0:
        rankings = collect_rankings()
        last_updated = date.today()

    tmp_rankings = prepare_rankings(rankings)
    tmp_rankings.to_json(si, orient='index')

    output = make_response(si.getvalue())
    output.headers["Content-Type"] = "application/json"
    output.cache_control.max_age = 60 * 60 * 24

    return output
Exemple #6
0
def correlation_json():
    global rankings, last_updated
    si = io.StringIO()
    if rankings is None or (date.today() - last_updated).days > 0:
        rankings = collect_rankings()
        last_updated = date.today()

    tmp_rankings = prepare_rankings(rankings)
    tmp_rankings = tmp_rankings.drop(['RPI - NET', 'Conf'], axis=1)
    tmp_rankings.corr(method='spearman').round(3).to_json(si, orient='index')

    output = make_response(si.getvalue())
    output.headers["Content-Type"] = "application/json"
    output.cache_control.max_age = 60 * 60 * 24

    return output
Exemple #7
0
def correlation_txt():
    global rankings, last_updated
    with open('templates/output/as_html.txt') as f:
        template = f.read()

    if rankings is None or (date.today() - last_updated).days > 0:
        rankings = collect_rankings()
        last_updated = date.today()

    tmp_rankings = prepare_rankings(rankings)
    tmp_rankings = tmp_rankings.drop(['RPI - NET', 'Conf'], axis=1)
    corr = tmp_rankings.corr(method='spearman')

    img = io.BytesIO()

    tmp_rankings['Sagarin'] = tmp_rankings['Sagarin_RK']
    tmp_rankings['KenPom'] = tmp_rankings['Pomeroy_RK']
    tmp_rankings['BPI'] = tmp_rankings['BPI_RK']
    tmp_rankings['NET'] = tmp_rankings['NET Rank']
    fig = sns.pairplot(tmp_rankings,
                       y_vars=['NET'],
                       x_vars=['Sagarin', 'KenPom', 'BPI', 'RPI'],
                       plot_kws={'color': 'black'})
    fig.set(ylim=(0, 380), xlim=(0, 380))
    plt.savefig(img, format='png')
    img.seek(0)
    imageBase64 = base64.encodebytes(img.getvalue()).decode()

    payload = template.format(
        date=date.today().strftime('%d %B %Y'),
        sagarinVpomeroy=corr['Sagarin_RK']['Pomeroy_RK'].round(3),
        sagarinVrpi=corr['Sagarin_RK']['RPI'].round(3),
        sagarinVbpi=corr['Sagarin_RK']['BPI_RK'].round(3),
        sagarinVnet=corr['Sagarin_RK']['NET Rank'].round(3),
        pomeroyVrpi=corr['Pomeroy_RK']['RPI'].round(3),
        pomeroyVbpi=corr['Pomeroy_RK']['BPI_RK'].round(3),
        pomeroyVnet=corr['Pomeroy_RK']['NET Rank'].round(3),
        rpiVbpi=corr['RPI']['BPI_RK'].round(3),
        rpiVnet=corr['RPI']['NET Rank'].round(3),
        bpiVnet=corr['BPI_RK']['NET Rank'].round(3),
        imageBase64=imageBase64)

    output = make_response(payload)
    output.headers["Content-Disposition"] = "attachment; filename=corr.txt"
    output.headers["Content-Type"] = "text/plain; charset=utf-8"
    output.cache_control.max_age = 60 * 60 * 24
    return output
Exemple #8
0
def correlation_csv():
    global rankings, last_updated
    si = io.StringIO()
    if rankings is None or (date.today() - last_updated).days > 0:
        rankings = collect_rankings()
        last_updated = date.today()

    conf = request.args.get('conf', '')
    if conf == 'REPLACE_ME':
        return 'Please replace REPLACE_ME with a valid conference name'

    tmp_rankings = prepare_rankings(rankings)
    tmp_rankings = tmp_rankings.drop(['RPI - NET', 'Conf'], axis=1)
    tmp_rankings.corr(method='spearman').to_csv(si)

    output = make_response(si.getvalue())
    output.headers[
        "Content-Disposition"] = "attachment; filename=correlation_{}.csv".format(
            request.args.get('conf', ''))
    output.headers["Content-Type"] = "text/csv"
    output.cache_control.max_age = 60 * 60 * 24
    return output
Exemple #9
0
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from datetime import date
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from flask import render_template, Blueprint, make_response, send_file, jsonify, request
from utils.analyzer import Analyzer

plt.rcParams['figure.dpi'] = 200

hello_blueprint = Blueprint('hello', __name__)

from templates.hello.collect_data import collect_rankings

rankings = collect_rankings()
last_updated = date.today()
POWER_SEVEN_CONFS = [
    'Big Ten', 'Big 12', 'Pac-12', 'ACC', 'American', 'SEC', 'Big East'
]


def prepare_rankings(all_ranks):
    conf_ranks = all_ranks.groupby('Conf')
    conf_ranks = {conf: df for conf, df in conf_ranks}

    conf = request.args.get('conf')
    if conf is None:
        return all_ranks.copy()
    if conf == 'PowerSeven':
        teams = pd.concat([conf_ranks[team] for team in POWER_SEVEN_CONFS])