|
|
import pandas as pd |
|
|
import numpy as np |
|
|
import gradio as gr |
|
|
import warnings |
|
|
warnings.filterwarnings("ignore") |
|
|
|
|
|
url='https://drive.google.com/file/d/1VfCaU5vFVWsSYrvKQF2x9iS6I7KoWEVH/view?usp=share_link' |
|
|
url='https://drive.google.com/uc?id=' + url.split('/')[-2] |
|
|
df = pd.read_csv(url) |
|
|
|
|
|
df['cf_rating']=df['cf_rating'].astype(str) |
|
|
df['cc_rating']=df['cc_rating'].astype(str) |
|
|
df['cf_username']=df['cf_username'].astype(str) |
|
|
df['cc_username']=df['cc_username'].astype(str) |
|
|
df['ss_username']=df['ss_username'].astype(str) |
|
|
|
|
|
only_cc = df[(df['cf_username'] == "nan")] |
|
|
only_cf = df[(df['cc_username'] == "nan")] |
|
|
both_cc_cf = df[(df['cf_username'] != "nan") & (df['cf_rating'] != "nan") & (df['cc_username'] != "nan") & (df['cc_rating'] != "nan")] |
|
|
both_cc_cf.drop(columns=['ss_username','cf_username','cc_username'],inplace=True) |
|
|
|
|
|
|
|
|
def linear_regression(X, y): |
|
|
|
|
|
mean_x = np.mean(X) |
|
|
mean_y = np.mean(y) |
|
|
|
|
|
n = 0 |
|
|
d = 0 |
|
|
for i in range(len(X)): |
|
|
n += (X[i] - mean_x) * (y[i] - mean_y) |
|
|
d += (X[i] - mean_x) ** 2 |
|
|
|
|
|
w = n/d |
|
|
b = mean_y-(w * mean_x) |
|
|
|
|
|
return (b[0], w[0]) |
|
|
|
|
|
X=both_cc_cf['cc_rating'].values.reshape(-1,1).astype(float) |
|
|
Y=both_cc_cf['cf_rating'].values.reshape(-1,1).astype(float) |
|
|
|
|
|
b_cc, w_cc = linear_regression(X,Y) |
|
|
b_cf, w_cf = linear_regression(Y,X) |
|
|
|
|
|
def predict_rating(platform, current_rating): |
|
|
if platform == "CodeChef": |
|
|
predicted_rating = current_rating * w_cc + b_cc |
|
|
else: |
|
|
predicted_rating = current_rating * w_cf + b_cf |
|
|
return int(predicted_rating) |
|
|
|
|
|
interface = gr.Interface( |
|
|
fn=predict_rating, |
|
|
inputs=[ |
|
|
gr.Radio(choices=["CodeChef", "Codeforces"], label="Choose your CP platform"), |
|
|
gr.Number(label="Current Rating") |
|
|
], |
|
|
outputs="number", |
|
|
title="CodeChef and Codeforces Rating Predictor", |
|
|
) |
|
|
|
|
|
interface.launch() |