Spaces:
Runtime error
Runtime error
import gradio as gr | |
import hopsworks | |
import joblib | |
import pandas as pd | |
features = ['work_year', | |
'experience_level', | |
'company_size', | |
'eur', | |
'gbp', | |
'usd', | |
'engineer', | |
'scientist', | |
'research', | |
'analyst', | |
'analytics_engineer', | |
'applied_scientist', | |
'bi_developer', | |
'business_intelligence_analyst', | |
'business_intelligence_engineer', | |
'data_analyst', | |
'data_architect', | |
'data_engineer', | |
'data_manager', | |
'data_science_consultant', | |
'data_science_manager', | |
'data_scientist', | |
'ml_engineer', | |
'machine_learning_engineer', | |
'machine_learning_scientist', | |
'research_analyst', | |
'research_engineer', | |
'research_scientist', | |
'gdp', | |
'cpi'] | |
labels = ['(16454.999, 122000.0]', '(122000.0, 170000.0]', '(170000.0, 329700.0]'] | |
project = hopsworks.login() | |
fs = project.get_feature_store() | |
mr = project.get_model_registry() | |
model = mr.get_model("salary_model", version=5) | |
model_dir = model.download() | |
model = joblib.load(model_dir + "/model.pkl") | |
print("Model downloaded") | |
import requests | |
def get_gdp_by_country_code(country_code, year=2023, index='FP.CPI.TOTL'): | |
# World Bank API endpoint for GDP data | |
api_url = f'http://api.worldbank.org/v2/country/{country_code}/indicator/{index}?data={year}&format=json' | |
# Make a GET request to the API | |
response = requests.get(api_url) | |
# Check if the request was successful (status code 200) | |
if response.status_code == 200: | |
# Parse the JSON response | |
data = response.json() | |
# Extract the GDP value from the response | |
gdp_value = data[1][0]['value'] if data[1] else None | |
return gdp_value | |
else: | |
# If the request was not successful, print an error message | |
print(f"Error: Unable to fetch data. Status code: {response.status_code}") | |
return None | |
def salary(work_year, | |
experience_level, | |
company_size, | |
currency, | |
job_title, | |
country)-> str: | |
jobs = ['analytics_engineer', | |
'applied_scientist', | |
'bi_developer', | |
'business_intelligence_analyst', | |
'business_intelligence_engineer', | |
'data_analyst', | |
'data_architect', | |
'data_engineer', | |
'data_manager', | |
'data_science_consultant', | |
'data_science_manager', | |
'data_scientist', | |
'ml_engineer', | |
'machine_learning_engineer', | |
'machine_learning_scientist', | |
'research_analyst', | |
'research_engineer', | |
'research_scientist'] | |
jobs_flag ={} | |
for name in jobs: | |
if name == job_title.lower().replace(' ', '_'): | |
jobs_flag[name] = True | |
else: | |
jobs_flag[name] = False | |
role = [ | |
'engineer', | |
'scientist', | |
'research', | |
'analyst' | |
] | |
role_flag = {} | |
for name in role: | |
if name in job_title.lower(): | |
role_flag[name]= True | |
else: | |
role_flag[name] = False | |
currency_flag = { | |
'eur': False, | |
'gbp': False, | |
'usd': False | |
} | |
currency_flag[currency.lower()] = True | |
company_size_dic = { | |
'S': 0, | |
'M': 1, | |
'L': 2, | |
} | |
experience_level_map = { | |
'EN': 0, | |
'MI': 1, | |
'SE': 2, | |
'EX': 3 | |
} | |
params = {} | |
params['work_year'] = work_year | |
params['experience_level'] = experience_level_map[experience_level] | |
params['company_size'] = company_size_dic[company_size] | |
params.update(currency_flag) | |
params.update(role_flag) | |
params.update(jobs_flag) | |
params['gdp'] = get_gdp_by_country_code(country, work_year, 'NY.GDP.MKTP.CD') | |
params['cpi'] = get_gdp_by_country_code(country, work_year, 'FP.CPI.TOTL') | |
df = pd.DataFrame([params]) | |
print("Predicting") | |
print(df) | |
print(df.columns) | |
res = model.predict(df) | |
print(f"{labels[res[0]]} $") | |
return f"{labels[res[0]]} $" | |
job_title_options = ['analytics_engineer', | |
'applied_scientist', | |
'bi_developer', | |
'business_intelligence_analyst', | |
'business_intelligence_engineer', | |
'data_analyst', | |
'data_architect', | |
'data_engineer', | |
'data_manager', | |
'data_science_consultant', | |
'data_science_manager', | |
'data_scientist', | |
'ml_engineer', | |
'machine_learning_engineer', | |
'machine_learning_scientist', | |
'research_analyst', | |
'research_engineer', | |
'research_scientist'] | |
demo = gr.Interface( | |
fn=salary, | |
title="Salary prediction", | |
description="Prediction of the salary in USD", | |
allow_flagging="never", | |
inputs=[ | |
gr.components.Number(label='work_year'), | |
gr.components.Radio(label='experience_level', choices=['EN', 'MI', 'SE', 'EX']), | |
gr.components.Radio(label='company_size', choices=['S', 'M', 'L']), | |
gr.components.Radio(label='currency', choices=['EUR', 'GBP', 'USD']), | |
gr.components.Dropdown(label='job_title', choices=job_title_options), | |
gr.components.Textbox(label='country', info='2 letter code', value='US') | |
], | |
outputs=gr.Text()) | |
demo.launch(debug=True, share=True) | |