File size: 2,390 Bytes
5788134
 
 
 
 
 
 
 
 
74b1fdc
5788134
 
 
 
74b1fdc
 
 
5788134
 
 
 
 
 
 
 
 
 
 
 
 
 
74b1fdc
5788134
 
 
 
122cd0e
 
5788134
122cd0e
 
 
 
 
 
 
 
 
5788134
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import pandas as pd
import streamlit as st
from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestRegressor

# Leer los datos y seleccionar las columnas necesarias
df = pd.read_csv('./ds_salaries.csv')
df = df[['company_location', 'salary_in_usd']]


# Codificar las ubicaciones de las empresas
le = LabelEncoder()
df['company_location'] = le.fit_transform(df['company_location'])

# Decodificar las ubicaciones de las empresas
decoded_locations = le.inverse_transform(df['company_location'].unique())

# Separar los datos de entrada y salida
X = df.iloc[:, :-1].values
y = df.iloc[:, -1].values

# Entrenar el modelo
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X, y)

# Obtener las ubicaciones de las empresas y sus salarios predichos
locations = df['company_location'].unique()
predicted_salaries = model.predict(locations.reshape(-1, 1))
results_df = pd.DataFrame({'company_location': locations, 'predicted_salary': predicted_salaries})

# Decodificar las ubicaciones de las empresas
results_df['company_location'] = le.inverse_transform(results_df['company_location'])

# Ordenar los resultados por salario predicho
results_df = results_df.sort_values('predicted_salary', ascending=False).reset_index(drop=True)



# Mostrar el título y el top 5 de países mejor pagados
st.markdown("""
    <h1>Top 5 de países mejor pagados</h1>
    """, unsafe_allow_html=True)

# Descripción
st.markdown("""
    <p>Este código utiliza un algoritmo de RandomForest para seleccionar solo algunas empresas de cada país de forma aleatoria y retornar el promedio. Utilizamos este algoritmo para obtener un promedio menos sesgado por outliers</p> 
""", unsafe_allow_html=True)

for i in range(5):
    location = results_df.loc[i, 'company_location']
    salary = results_df.loc[i, 'predicted_salary']
    st.markdown(f'### **{location}**: ${salary:,.2f}', unsafe_allow_html=True)

# Mostrar el menú desplegable para seleccionar un país
st.markdown('---')
st.title('Seleccionar un país')
selected_location = st.selectbox('Ubicación de la empresa', decoded_locations)

# Mostrar el salario predicho para el país seleccionado
predicted_salary = results_df.loc[results_df['company_location'] == selected_location, 'predicted_salary'].iloc[0]
st.markdown(f'### **{selected_location}**: ${predicted_salary:,.2f}', unsafe_allow_html=True)