perezcatriel commited on
Commit
2c5c5bd
·
1 Parent(s): 06e063c

Modelo New

Browse files
Files changed (3) hide show
  1. ML/skill_top.py +59 -0
  2. app.py +83 -3
  3. assets/dataset_modelo_1.csv +0 -0
ML/skill_top.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import streamlit as st
3
+ from sklearn.feature_extraction.text import CountVectorizer
4
+ from sklearn.naive_bayes import MultinomialNB
5
+
6
+ # Cargar los datos
7
+ df = pd.read_csv('../assets/dataset_modelo_1.csv')
8
+
9
+ # Crear una lista con todas las skills disponibles
10
+ all_skills = set()
11
+ for skills in df.skills:
12
+ all_skills.update(skills.split(", "))
13
+
14
+ # Crear un diccionario que relaciona cada skill con su índice en el vector
15
+ skill_indices = {skill: i for i, skill in enumerate(all_skills)}
16
+
17
+ # Crear una matriz de características con la frecuencia de cada skill en cada fila
18
+ vectorizer = CountVectorizer(vocabulary=skill_indices.keys(), lowercase=False)
19
+ X = vectorizer.fit_transform(df.skills)
20
+
21
+ # Entrenar el modelo
22
+ clf = MultinomialNB()
23
+ clf.fit(X, df.Aptitude)
24
+
25
+ # Crear la interfaz de usuario con Streamlit
26
+ st.title("Predicción de aptitud para un trabajo")
27
+ st.write(
28
+ "Ingrese el título del trabajo para ver las habilidades más importantes.")
29
+
30
+ title = st.multiselect("Título del trabajo", df.job_title.unique())
31
+
32
+ # Crear una función que encuentra las habilidades más importantes para un título dado
33
+ def get_top_skills(title, limit):
34
+ # Filtrar el dataframe por el título dado
35
+ filtered_df = df[df.job_title == title]
36
+
37
+ # Crear una matriz de características con la frecuencia de cada skill en el dataframe filtrado
38
+ X_filtered = vectorizer.transform(filtered_df.skills)
39
+
40
+ # Calcular la frecuencia de cada habilidad en el dataframe filtrado
41
+ skill_frequencies = X_filtered.sum(axis=0).A1
42
+
43
+ # Obtener los nombres de las habilidades
44
+ skill_names = vectorizer.vocabulary_.keys()
45
+
46
+ # Crear un diccionario que relaciona cada habilidad con su frecuencia
47
+ skill_freq_dict = dict(zip(skill_names, skill_frequencies))
48
+
49
+ # Ordenar las habilidades por frecuencia descendente y devolver las más importantes (según el límite dado)
50
+ top_skills = sorted(skill_freq_dict, key=skill_freq_dict.get,
51
+ reverse=True)[:limit]
52
+ return top_skills
53
+
54
+ if title:
55
+ limit = st.number_input("Cantidad de habilidades a mostrar", value=5, min_value=1, max_value=len(all_skills))
56
+ top_skills = get_top_skills(title[0], limit)
57
+ st.write(f"Las {limit} habilidades más importantes para el trabajo de '{title[0]}' son:")
58
+ for skill in top_skills:
59
+ st.write(f"- {skill}")
app.py CHANGED
@@ -1,5 +1,6 @@
1
  import datetime
2
  import time
 
3
 
4
  import altair as alt
5
  import pandas as pd
@@ -159,9 +160,18 @@ En resumen, la industria de la tecnología y la analítica de datos está en con
159
  ''', unsafe_allow_html=True)
160
 
161
  st.write("Este es mi dashboard de Tableau:")
162
-
163
  st.markdown('''<iframe src="https://public.tableau.com/views/latam_brain_mvp/General?:language=es-ES&publish=yes&:display_count=n&:origin=viz_share_link" width="100%" height="800"></iframe>''', unsafe_allow_html=True)
164
-
 
 
 
 
 
 
 
 
 
165
  st.markdown('''
166
  <br>
167
  <h3>Dashboard contexto actual</h3>
@@ -396,7 +406,77 @@ if selected2 == "New":
396
  for percent_complete in range(100):
397
  time.sleep(0.05)
398
  my_bar.progress(percent_complete + 1, text=progress_text)
399
- st.write('Dale Mati!!!!')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
400
 
401
  if selected2 == "Contact US":
402
 
 
1
  import datetime
2
  import time
3
+ from streamlit import components
4
 
5
  import altair as alt
6
  import pandas as pd
 
160
  ''', unsafe_allow_html=True)
161
 
162
  st.write("Este es mi dashboard de Tableau:")
163
+ #######
164
  st.markdown('''<iframe src="https://public.tableau.com/views/latam_brain_mvp/General?:language=es-ES&publish=yes&:display_count=n&:origin=viz_share_link" width="100%" height="800"></iframe>''', unsafe_allow_html=True)
165
+
166
+ tableau_url = "https://public.tableau.com/views/latam_brain_mvp/DashboardGeneralDataJobs?:language=es-ES&:display_count=n&:origin=viz_share_link"
167
+
168
+ # Incruste el dashboard de Tableau utilizando components.html
169
+ st.components.v1.html(
170
+ f'<iframe src="{tableau_url}" width="100%" height="800"></iframe>',
171
+ height=800)
172
+
173
+
174
+ #########
175
  st.markdown('''
176
  <br>
177
  <h3>Dashboard contexto actual</h3>
 
406
  for percent_complete in range(100):
407
  time.sleep(0.05)
408
  my_bar.progress(percent_complete + 1, text=progress_text)
409
+
410
+
411
+ #####
412
+ import pandas as pd
413
+ import streamlit as st
414
+ from sklearn.feature_extraction.text import CountVectorizer
415
+ from sklearn.naive_bayes import MultinomialNB
416
+
417
+ # Cargar los datos
418
+ df = pd.read_csv('./assets/dataset_modelo_1.csv')
419
+
420
+ # Crear una lista con todas las skills disponibles
421
+ all_skills = set()
422
+ for skills in df.skills:
423
+ all_skills.update(skills.split(", "))
424
+
425
+ # Crear un diccionario que relaciona cada skill con su índice en el vector
426
+ skill_indices = {skill: i for i, skill in enumerate(all_skills)}
427
+
428
+ # Crear una matriz de características con la frecuencia de cada skill en cada fila
429
+ vectorizer = CountVectorizer(vocabulary=skill_indices.keys(),
430
+ lowercase=False)
431
+ X = vectorizer.fit_transform(df.skills)
432
+
433
+ # Entrenar el modelo
434
+ clf = MultinomialNB()
435
+ clf.fit(X, df.Aptitude)
436
+
437
+ # Crear la interfaz de usuario con Streamlit
438
+ st.title("Predicción de aptitud para un trabajo")
439
+ st.write(
440
+ "Ingrese el título del trabajo para ver las habilidades más importantes.")
441
+
442
+ title = st.multiselect("Título del trabajo", df.job_title.unique())
443
+
444
+
445
+ # Crear una función que encuentra las habilidades más importantes para un título dado
446
+ def get_top_skills(title, limit):
447
+ # Filtrar el dataframe por el título dado
448
+ filtered_df = df[df.job_title == title]
449
+
450
+ # Crear una matriz de características con la frecuencia de cada skill en el dataframe filtrado
451
+ X_filtered = vectorizer.transform(filtered_df.skills)
452
+
453
+ # Calcular la frecuencia de cada habilidad en el dataframe filtrado
454
+ skill_frequencies = X_filtered.sum(axis=0).A1
455
+
456
+ # Obtener los nombres de las habilidades
457
+ skill_names = vectorizer.vocabulary_.keys()
458
+
459
+ # Crear un diccionario que relaciona cada habilidad con su frecuencia
460
+ skill_freq_dict = dict(zip(skill_names, skill_frequencies))
461
+
462
+ # Ordenar las habilidades por frecuencia descendente y devolver las más importantes (según el límite dado)
463
+ top_skills = sorted(skill_freq_dict, key=skill_freq_dict.get,
464
+ reverse=True)[:limit]
465
+ return top_skills
466
+
467
+
468
+ if title:
469
+ limit = st.number_input("Cantidad de habilidades a mostrar", value=5,
470
+ min_value=1, max_value=len(all_skills))
471
+ top_skills = get_top_skills(title[0], limit)
472
+ st.write(
473
+ f"Las {limit} habilidades más importantes para el trabajo de '{title[0]}' son:")
474
+ for skill in top_skills:
475
+ st.write(f"- {skill}")
476
+
477
+ #####
478
+
479
+ #####
480
 
481
  if selected2 == "Contact US":
482
 
assets/dataset_modelo_1.csv ADDED
The diff for this file is too large to render. See raw diff