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)