salary-estimator / prediction.py
vumichien's picture
fix ui
687dc0b
import streamlit as st
import pandas as pd
import numpy as np
import pickle
import json
import joblib as jb
# load models
model = jb.load('model.pkl')
# load data
df = pd.read_csv('DataScienceSalaries.csv')
map_ex = {'SE': 'Senior-level', 'MI': 'Mid-level', 'EN': 'Entry-level', 'EX': 'Executive-level'}
map_ex_inverse = {v: k for k, v in map_ex.items()}
map_type = {'FT': 'Toàn thời gian', 'PT': 'Bán thời gian', 'CT': 'Hợp đồng', 'FL': 'Tự do'}
map_type_inverse = {v: k for k, v in map_type.items()}
map_size = {'S': 'Nhỏ', 'M': 'Vừa', 'L': 'Lớn'}
map_size_inverse = {v: k for k, v in map_size.items()}
map_job = {
"Principal Data Scientist": "Chuyên gia Khoa học Dữ liệu Cấp cao",
"ML Engineer": "Kỹ sư Máy học",
"Data Scientist": "Nhà khoa học Dữ liệu",
"Data Analyst": "Nhà phân tích Dữ liệu",
"Machine Learning Scientist": "Nhà khoa học Máy học",
"AI Scientist": "Nhà khoa học Trí tuệ Nhân tạo",
"Director of Data Science": "Giám đốc Khoa học Dữ liệu",
"Data Engineering Manager": "Quản lý Kỹ thuật Dữ liệu",
"Data Engineer": "Kỹ sư Dữ liệu",
"Machine Learning Engineer": "Kỹ sư Máy học",
"Machine Learning Developer": "Nhà phát triển Máy học",
"Big Data Engineer": "Kỹ sư Big Data",
"Business Intelligence Developer": "Nhà phát triển Trí tuệ Kinh doanh",
"BI Data Analyst": "Nhà phân tích Dữ liệu BI",
"Lead Data Analyst": "Trưởng nhóm Nhà phân tích Dữ liệu",
"Lead Data Engineer": "Trưởng nhóm Kỹ sư Dữ liệu",
"Lead Data Scientist": "Trưởng nhóm Nhà khoa học Dữ liệu",
"Research Scientist": "Nhà khoa học Nghiên cứu",
"Data Science Manager": "Quản lý Khoa học Dữ liệu",
"Product Data Analyst": "Nhà phân tích Dữ liệu Sản phẩm",
"Head of Data": "Trưởng phòng Dữ liệu",
"Analytics Engineer": "Kỹ sư Phân tích",
"Data Science Consultant": "Tư vấn Khoa học Dữ liệu",
"Machine Learning Infrastructure Engineer": "Kỹ sư Cơ sở hạ tầng Máy học",
"Applied Data Scientist": "Nhà khoa học Dữ liệu Ứng dụng",
"Data Analytics Engineer": "Kỹ sư Phân tích Dữ liệu",
"Data Architecture": "Kiến trúc Dữ liệu",
"Database Administrator": "Quản trị viên Cơ sở dữ liệu",
"Software Engineer": "Kỹ sư Phần mềm",
"Statistician": "Nhà thống kê",
"Product Manager": "Quản lý Sản phẩm",
"Marketing Data Analyst": "Nhà phân tích Dữ liệu Tiếp thị",
"Financial Data Analyst": "Nhà phân tích Dữ liệu Tài chính",
"Data Science Engineer": "Kỹ sư Khoa học Dữ liệu",
"Principal Data Engineer": "Chuyên gia Kỹ sư Dữ liệu Cấp cao",
"AI Engineer": "Kỹ sư Trí tuệ Nhân tạo",
"Data Operations Analyst": "Nhà phân tích Hoạt động Dữ liệu",
"Business Data Analyst": "Nhà phân tích Dữ liệu Kinh doanh",
"Applied Machine Learning Engineer": "Kỹ sư Máy học Ứng dụng",
"Data Product Manager": "Quản lý Sản phẩm Dữ liệu",
"Data Specialist": "Chuyên gia Dữ liệu",
"Head of Data Science": "Trưởng phòng Khoa học Dữ liệu",
"Machine Learning Operations Engineer": "Kỹ sư Hoạt động Máy học",
"Data Architect": "Kiến trúc sư Dữ liệu",
"Data Science Instructor": "Giảng viên Khoa học Dữ liệu",
"Principal Data Analyst": "Chuyên gia Phân tích Dữ liệu Cấp cao",
"Senior Data Scientist": "Nhà khoa học Dữ liệu Cấp cao",
"Senior Data Engineer": "Kỹ sư Dữ liệu Cấp cao",
}
map_job_inverse = {v: k for k, v in map_job.items()}
def run():
st.markdown("<h1 style='text-align: center;'>Mô hình dự đoán lương</h1>", unsafe_allow_html=True)
# description
st.subheader('Vui lòng kiểm tra mức lương của bạn tại đây.')
with st.form('key=form_prediction'):
year = st.selectbox('Năm làm việc', df['work_year'].unique())
experience_select = st.selectbox('Cấp độ kinh nghiệm', map_ex.values())
experience = map_ex_inverse[experience_select]
employment_select = st.selectbox('Hình thức hợp đồng', map_type.values())
employment = map_type_inverse[employment_select]
job_select = st.selectbox('Vị trí công việc', map_job.values())
job = map_job_inverse[job_select]
residence = st.selectbox('Quốc tịch', sorted(df['employee_residence'].unique()))
remote = st.selectbox('Làm việc từ xa [%]', df['remote_ratio'].unique())
location = st.selectbox('Vị trí công ty', sorted(df['company_location'].unique()))
size_select = st.selectbox('Quy mô công ty', map_size.values())
size = map_size_inverse[size_select]
submitted = st.form_submit_button('Dự đoán')
inf = {
'work_year': year,
'experience_level': experience,
'employment_type': employment,
'job_title': job,
'employee_residence': residence,
'remote_ratio': remote,
'company_location': location,
'company_size': size
}
data_inf = pd.DataFrame([inf])
st.dataframe(data_inf)
if submitted:
# Predict using bagging
y_pred_inf = model.predict(data_inf)
st.write('Với kinh nghiệm này bạn sẽ nhận được mức lương 1 năm khoảng')
st.write('# $', str(int(y_pred_inf)))
st.write(
'LƯU Ý: Hãy nhớ rằng mô hình này không chính xác 100%, vui lòng kiểm tra lại với một trang web khác về tiền lương như Glassdoor')
if __name__ == '__main__':
run()