perezcatriel commited on
Commit
643da87
1 Parent(s): 122cd0e

modulos y copywriting

Browse files
__pycache__/app.cpython-310.pyc ADDED
Binary file (31.6 kB). View file
 
app.py CHANGED
@@ -1,23 +1,15 @@
1
- import datetime
2
- import time
3
-
4
- import altair as alt
5
- import pandas as pd
6
  import streamlit as st
7
- from PIL import Image
8
- from sklearn.linear_model import LinearRegression
9
- from streamlit.components.v1 import components
10
  from streamlit_option_menu import option_menu
11
 
12
- # from streamlit.components.v1 import IFrame
13
-
14
- image = Image.open('./assets/logo_latam_brain.png')
15
- logo = Image.open('./assets/LatamBrainlogo.png')
16
- scrum = Image.open("./assets/Scrum'ProcessLB.png")
17
- dashboard_ejemplo = Image.open('./assets/dashboard_ejemplo.png')
18
-
19
- df = pd.read_csv('./ML/ds_salaries.csv')
20
 
 
21
  st.markdown("""<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
22
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>""",
23
  unsafe_allow_html=True)
@@ -27,847 +19,27 @@ selected2 = option_menu(None, ["Home", "Análisis", "ML", "New", "Contact"],
27
  icons=['house', 'bi-archive', "bi-robot",
28
  "bi-arrow-up-right-square",
29
  "bi-envelope"],
30
- menu_icon="cast", default_index=0,
 
31
  orientation="horizontal",
32
-
33
  )
34
 
35
- # Pagina HOME
36
  if selected2 == "Home":
37
- col1, col2 = st.columns(2)
38
- col1.markdown("""
39
- <br/>
40
- <br/>
41
- <br/>
42
- <h1 style="text-align:center; font-weight:bold;
43
- text-shadow:0px 0px 10px #5c62ac;font-size:3rem">LatamBrain</h1>
44
- <h5 style="text-align:center;color:#5c62ac">tú cerebro tecnológico</h5>
45
- <br />
46
- """, unsafe_allow_html=True)
47
- col2.image(image, width=300)
48
-
49
- st.markdown('''
50
- <br>
51
- <h2>Quienes somos?</h2>
52
- <hr>
53
- <p>LatamBrain es una startup latinoamericana altamente innovadora y
54
- tecnológica que está aprovechando las últimas tendencias en tecnología
55
- para brindar soluciones personalizadas, seguras y eficientes a sus
56
- clientes.
57
- Si busca soluciones que lo preparen para el futuro,
58
- no dude en contactar a LatamBrain.
59
- </p>
60
- <p>LatamBrain, tú cerebro tecnológico!</p>
61
- ''', unsafe_allow_html=True)
62
-
63
- st.markdown('''
64
- <br>
65
- <h2>Servicios</h2>
66
- <hr>
67
- ''', unsafe_allow_html=True)
68
-
69
- col1, col2, col3 = st.columns(3)
70
- col1.markdown('''
71
- <li>Data Análisis
72
- <li>Reportes financieros
73
- <li>KPI's personalizados
74
- <li>Asesoramientos y Plan de Ejecución
75
- <li>Y más..
76
- ''', unsafe_allow_html=True)
77
- col2.markdown('''
78
- <li>Machine Learning
79
- <li>Deep Learning
80
- <li>Automatización de con ML
81
- <li>ChatBot
82
- <li>Y más...
83
- ''', unsafe_allow_html=True)
84
- col3.markdown('''
85
- <li>Cloud AWS
86
- <li>Máxima seguridad en tús datos
87
- <li>Disponibilidad y velocidad de datos
88
- <li>Y más...
89
- ''', unsafe_allow_html=True)
90
-
91
- st.markdown('''
92
- <br>
93
- <h2>Nosotros y Como Trabajamos</h2>
94
- <hr>
95
- ''', unsafe_allow_html=True)
96
- st.image(scrum)
97
-
98
- #####
99
- st.markdown("""
100
- <br>
101
- <h3>LatamBrain - Spot</h3>
102
- <hr>
103
- """, unsafe_allow_html=True)
104
-
105
-
106
- VIDEO_ID = "VIDEO_ID"
107
-
108
- # Genera el código HTML del iframe
109
- html = f"""
110
- <div >
111
- <iframe
112
- style="height:200px;width
113
- :700px"
114
- width="530"
115
- height="360"
116
- src="https://www.youtube.com/embed/G8PdiAwhbNM"
117
- title="LatamBrain - Spot"
118
- frameborder="0"
119
- allow="accelerometer; autoplay; clipboard-write;
120
- encrypted-media; gyroscope;
121
- picture-in-picture; web-share"
122
- allowfullscreen
123
- >
124
- </iframe>
125
- </div>
126
-
127
- """
128
-
129
- # Inserta el iframe en la aplicación de Streamlit
130
- st.components.v1.html(html)
131
-
132
- #####
133
-
134
- # st.image(logo, width=700)
135
- st.markdown('''
136
- <br>
137
- <h3>Como fue este proceso para nosotros?</h3>
138
- <hr>
139
- ''', unsafe_allow_html=True)
140
- col1, col2, col3 = st.columns(3)
141
- catriel = '''
142
- <h4><strong>Catriel Pérez<strong></h4>
143
- <p style="margin-top:-20px">Data Engineer</p>
144
- <p>Ha sido una experiencia increíble trabajar con este equipo. Todos
145
- han sido muy profesionales y comprometidos con el éxito del proyecto. Me siento agradecido de haber formado parte de este equipo y haber aprendido tanto en el proceso. Y esto... recién comienza!</p>
146
- <a href="mailto:perezcatriel@gmail.com">Contactame...</a>
147
- <p>24 de abril del 2023</p>
148
- '''
149
-
150
- mati = '''
151
- <h4><strong>Matias Benitez</strong></h4>
152
- <p style="margin-top:-20px">Machine Learning</p>
153
- <p>Trabajar en este proyecto ha sido una verdadera aventura. He enfrentado muchos desafíos y he aprendido cosas nuevas todos los días. El equipo con el que he trabajado ha sido excepcional, siempre dispuesto a ayudar y colaborar en todo momento. Me llevo una experiencia enriquecedora y valiosa.</p>
154
- <a href="mailto:matiasbenitezcarrizo@gmail.com">Contactame...</a>
155
- <p>24 de abril del 2023</p>
156
- '''
157
 
158
- luis = '''
159
- <h4><strong>Luis Rascón</strong></h4>
160
- <p style="margin-top:-20px">Data Analyst</p>
161
- <p>No tengo más que palabras de agradecimiento por esta experiencia. He tenido la oportunidad de trabajar con gente talentosa y apasionada por su trabajo, lo que ha hecho que el proyecto sea un éxito rotundo. Me llevo muchas lecciones aprendidas y nuevas habilidades que me servirán en mi carrera profesional. Ha sido una experiencia inolvidable.</p>
162
- <a href="mailto:luis.francisco.rc@gmail.com">Contactame...</a>
163
- <p>24 de abril del 2023</p>
164
- '''
165
-
166
- col1.markdown(luis, unsafe_allow_html=True)
167
- col2.markdown(mati, unsafe_allow_html=True)
168
- col3.markdown(catriel, unsafe_allow_html=True)
169
-
170
- st.markdown("""
171
- <br>
172
- <h3>Documentación Extra</h3>
173
- <hr>
174
- """, unsafe_allow_html=True)
175
-
176
- col1, col2, col3, col4 = st.columns(4)
177
- col1.markdown("""
178
- <a href="https://github.com/LRascon/data_world_jobs">Github</a>
179
- """, unsafe_allow_html=True)
180
- col2.markdown("""
181
- <a href="https://www.notion.so/Data-World-Tendencias-del-Mercado-Laboral-c61f044bd0db44988147fc961551666d">Notion</a>
182
- """, unsafe_allow_html=True)
183
- col3.markdown("""
184
- <a href="https://public.tableau.com/views/latam_brain_context
185
- /DashboardVistazoelMercadoActual?:language=es-ES&publish=yes
186
- &:display_count=n&:origin=viz_share_link">Tableau</a>
187
- """, unsafe_allow_html=True)
188
- col4.markdown("""
189
- <a href="https://www.youtube.com/watch?v=G8PdiAwhbNM">YouTube</a>
190
- """, unsafe_allow_html=True)
191
-
192
- # Pagina Projects
193
  if selected2 == "Análisis":
194
- st.markdown('''
195
- <h1 style="text-shadow:0 0 10px #5c62ac;font-weight:bold">Data
196
- World Jobs</h1>
197
- ''', unsafe_allow_html=True)
198
-
199
-
200
- #####
201
- def main():
202
- st.markdown("""
203
- <h2>Propuesta de Proyecto</h2>
204
- <hr>
205
- """,
206
- unsafe_allow_html=True)
207
- st.markdown("""
208
- <p>Es por todo esto que <strong>Latam Brain</strong>, una empresa
209
- líder en
210
- ciencia de
211
- datos, ha diseñado un
212
- proyecto revolucionario que aborda este desafío de frente. </p>
213
- <ul>Este proyecto se basa en cuatro objetivos fundamentales:
214
- <li> Recopilar datos de todas las ofertas de empleo relacionadas con la
215
- ciencia de datos
216
- y crear un data warehouse, un recurso invaluable para almacenar y analizar
217
- información de manera eficiente.
218
- <li> Obtener un panorama general de la situación actual del mercado
219
- laboral en el
220
- ámbito de la ciencia de datos tanto a nivel mundial como en América Latina.
221
- <li> Identificar las características clave que definen a los
222
- profesionales en este campo,
223
- como habilidades, herramientas y funciones, y su relación con el nivel de salario.
224
- <li> Crear un modelo predictivo utilizando Machine Learning para
225
- identificar patrones y
226
- tendencias en los datos generados por las distintas fuentes de información.
227
- </ul>
228
- """, unsafe_allow_html=True)
229
-
230
- st.markdown(
231
- """
232
- <div style="font-weight:bold;font-size:1.5rem;width:60vw
233
- ;margin:auto;
234
- border-radius:10px;padding:10px">
235
- <cite >Nuestro proyecto, con su
236
- amplio
237
- alcance y
238
- enfoque
239
- en el
240
- análisis exhaustivo de las ofertas laborales,busca revolucionar
241
- la forma en que las empresas de reclutamiento identifican y
242
- contratan a profesionales especializados en ciencia de datos y
243
- análisis.</cite>
244
- </div>
245
- <br>
246
- """, unsafe_allow_html=True)
247
- st.markdown("""
248
- <ul><strong style="font-size:1.5rem">Lo que te ofrecemos:</strong>
249
- <li><strong>Base de Datos en la nube (aws)</strong> que nos ayude a
250
- descubrir las
251
- habilidades y
252
- herramientas más demandadas en el mercado. Con esta información, pueden
253
- afinar su búsqueda y encontrar a los candidatos ideales para sus clientes. A su vez,
254
- los candidatos pueden mejorar sus habilidades y aumentar sus posibilidades de
255
- conseguir empleo en empresas que se ajusten a sus metas profesionales.
256
- <li><strong>Dashboards de Analítica</strong> que nos permita
257
- visualizar las
258
- tendencias y características
259
- que nos permitan tomar mejores decisiones en el mercado laboral dedicado en
260
- este caso a Data.
261
- <li><strong>El modelo predictivo de Machine Learning,</strong>
262
- como el cerebro detrás
263
- de todo el
264
- proyecto, permitirá anticipar tendencias y patrones en la demanda de talento, lo
265
- que permitirá a las empresas de reclutamiento estar siempre un paso adelante y
266
- adaptarse a las necesidades cambiantes del mercado.
267
- </ul>
268
- """, unsafe_allow_html=True)
269
-
270
- st.markdown(
271
- """<p>Con este proyecto, Latam Brain no solo está cambiando el
272
- juego en la industria del reclutamiento, sino que también está
273
- creando un puente entre el talento y las empresas en la era del
274
- Big Data. Juntos, estamos construyendo un futuro donde las
275
- empresas y los profesionales pueden alcanzar su máximo potencial, gracias a la unión perfecta entre la ciencia de datos y el reclutamiento en la era de la Transformación Digital</p>""",
276
- unsafe_allow_html=True)
277
-
278
- st.markdown("""
279
- <h2>Análisis de mercado y recomendaciones</h2>
280
- <hr>
281
- """,
282
- unsafe_allow_html=True)
283
-
284
- st.markdown("""<h4>Dashboard Vistazo General el Mercado Laboral Empleos
285
- Data</h4>""", unsafe_allow_html=True)
286
-
287
- # Cargar y mostrar la imagen
288
- imagen_1 = "./assets/Dashboard_Vistazo_al_Mercado_Actual.png"
289
- st.image(imagen_1, caption="Dashboard Vistazo el Mercado Actual.",
290
- use_column_width=True)
291
-
292
- st.markdown("""
293
- <a href="https://public.tableau.com/views/latam_brain_context
294
- /DashboardVistazoelMercadoActual?:language=es-ES&publish=yes
295
- &:display_count=n&:origin=viz_share_link"> Dashboard Dinámico -
296
- Vistazo General Mercado Laboral</a>
297
- """, unsafe_allow_html=True)
298
-
299
- st.markdown("""
300
- <p>Basándonos en los hallazgos del dashboard de visión
301
- general
302
- relacionado a los empleos de data, podemos hacer el siguiente
303
- análisis y recomendaciones:</p>
304
- """, unsafe_allow_html=True)
305
-
306
- st.markdown("""
307
- <h3>Análisis</h3>
308
- <hr>
309
- """, unsafe_allow_html=True)
310
 
311
- st.markdown("""
312
- <ol>
313
- <li> El salario promedio anual en empleos de data ha experimentado
314
- un crecimiento significativo (30%) entre 2019 y 2020, lo que indica una alta demanda y valoración de los profesionales en este campo.
315
- <li> El número de empleos relacionados con data ha aumentado en un
316
- sorprendente 450%, lo que demuestra un interés creciente por parte de las empresas en contratar profesionales con habilidades en ciencia de datos y análisis.
317
- <li> La mayoría de los empleados en este campo se encuentran en
318
- compañías medianas (más del 50%), lo que sugiere que estas empresas podrían estar invirtiendo más en ciencia de datos y análisis que las pequeñas o grandes empresas.
319
- <li> En cuanto a la antigüedad, hay una mayor cantidad de empleados
320
- en puestos senior, seguido de semisenior, junior y, por último, expert. Esto indica que las empresas están buscando profesionales con experiencia en el campo, aunque también hay oportunidades para aquellos con menos experiencia.
321
- <li> La mayoría de los empleos en este campo se ofrecen en
322
- modalidad remota, lo que puede atraer a una amplia gama de candidatos y permitir una mayor flexibilidad en la contratación y el trabajo.
323
- """, unsafe_allow_html=True)
324
-
325
- st.markdown("""
326
- <h3>Recomendaciones</h3>
327
- <hr>
328
- """, unsafe_allow_html=True)
329
-
330
- st.markdown("""
331
- <li> Como empresa de reclutamiento, enfóquense en buscar candidatos con
332
- experiencia en ciencia de datos y análisis, ya que estos perfiles son altamente demandados. Además, consideren ofrecer capacitación y desarrollo profesional para ayudar a los candidatos a avanzar en sus carreras y mejorar sus habilidades.
333
- <li> Atraigan a los profesionales de la ciencia de datos ofreciendo
334
- salarios competitivos y oportunidades de crecimiento, ya que el salario promedio anual en este campo está en aumento.
335
- <li> Las pequeñas y grandes empresas podrían considerar aumentar su
336
- inversión en ciencia de datos y análisis, ya que las compañías medianas parecen estar liderando en este aspecto.
337
- <li> Las empresas deben adaptarse a las tendencias actuales de
338
- contratación y ofrecer puestos de trabajo en modalidad remota cuando sea posible. Esto no solo ampliará el grupo de candidatos, sino que también puede aumentar la satisfacción y la retención de los empleados.
339
- <li> Y para loos profesionales que buscan empleo en el campo de la
340
- ciencia de datos deben enfocarse en adquirir habilidades y experiencia relevantes, especialmente en áreas de alta demanda. Además, pueden considerar buscar oportunidades de trabajo remoto, ya que estas parecen ser predominantes en la industria.
341
- """, unsafe_allow_html=True)
342
-
343
- st.markdown("""
344
- <h2>Dashboards especializados como herramientas de Análisis</h2>
345
- <hr>
346
- """, unsafe_allow_html=True)
347
-
348
- st.markdown("""
349
- <h4>Dashboard General Data Jobs</h4>
350
- """, unsafe_allow_html=True)
351
-
352
- # Cargar y mostrar la imagen
353
- imagen_2 = "./assets/Dashboard_General_Data_Jobs.png"
354
- st.image(imagen_2, caption="Dashboard General Data Jobs.",
355
- use_column_width=True)
356
-
357
- st.markdown("""
358
- <a href="https://public.tableau.com/views/latam_brain_mvp_la
359
- /DashboardGeneralDataJobs?:language=es-ES&publish=yes&:display_count
360
- =n&:origin=viz_share_link">Dashboard Dinámico - General Data Jobs</a>
361
- """, unsafe_allow_html=True)
362
-
363
- st.markdown("""
364
- <h3><q>El futuro del empleo en Ciencia de Datos: Un vistazo a nuestros
365
- revolucionarios Dashboards de Análisis</q> - <cite>LatamBrain</cite>
366
- """, unsafe_allow_html=True)
367
-
368
- st.markdown("""
369
- <p>Nuestro <strong>Dashboard General Data Jobs</strong> cuenta con una
370
- serie de
371
- gráficos esclarecedores que abarcan diferentes aspectos del mercado
372
- laboral en el campo de la Ciencia de Datos. El dashboard que atraves
373
- de cada uno de los gráficos nos muestra información pertinente para
374
- la toma de decisiones informadas y estratégicas.</p>
375
- """, unsafe_allow_html=True)
376
-
377
- st.markdown("""
378
- <h3>Gráficos y lo que nos permiten visualizar</h3>
379
- """, unsafe_allow_html=True)
380
-
381
- st.markdown("""
382
- <ol>
383
- <li><strong>Participación de empleos por rol:</strong> Este gráfico
384
- muestra la
385
- distribución de empleos en el ámbito de la Ciencia de Datos entre diferentes roles, como científicos, analistas, ingenieros y especialistas en Machine Learning. Con esta información, podrán identificar las áreas de mayor demanda y adaptar sus estrategias de reclutamiento o formación en consecuencia.
386
- <li><strong>Participación de empleos por tipo:</strong> Aquí,
387
- visualizamos la
388
- proporción de empleos según su tipo: tiempo completo, freelance, pasantías y contratos. Esto les permitirá evaluar la naturaleza del mercado laboral y considerar qué tipo de contratación es más adecuado para sus necesidades empresariales.
389
- <li><strong>Participación de mercado en empleos por
390
- modalidad:</strong>
391
- Este gráfico
392
- compara la cantidad de empleos que son presenciales y remotos, lo que les ayudará a comprender la prevalencia de cada modalidad y adaptar sus ofertas de trabajo para satisfacer las expectativas de los profesionales en la actualidad.
393
- <li><strong>Salario promedio anual por antigüedad:</strong> Aquí,
394
- observamos la
395
- relación entre el salario promedio anual y la antigüedad del empleado, desde ejecutivos hasta empleados de nivel inicial. Este conocimiento les permitirá establecer salarios competitivos y atractivos para atraer y retener talento en cada nivel de experiencia.
396
- <li><strong>Salario promedio anual por rol:</strong> Este gráfico
397
- muestra el salario
398
- promedio anual en función del rol, ya sea científico, analista, ingeniero o especialista en Machine Learning. Con esta información, podrán comparar los salarios entre roles y asegurarse de que sus ofertas salariales sean competitivas dentro del mercado.
399
- <li><strong>Participación de mercado por país:</strong> Aquí,
400
- analizamos la
401
- distribución geográfica de los empleos en Ciencia de Datos, lo que les permitirá identificar las áreas geográficas con mayor demanda de profesionales y ajustar sus estrategias de contratación o expansión en consecuencia.
402
- <li><strong>Top 10 países por salario promedio anual:</strong> Por
403
- último,
404
- este gráfico presenta los 10 países con los salarios promedio anuales más altos en el ámbito de la Ciencia de Datos. Este conocimiento les permitirá evaluar la competitividad de sus salarios a nivel internacional y tomar decisiones informadas sobre dónde enfocar sus esfuerzos de contratación.
405
- """, unsafe_allow_html=True)
406
-
407
- st.markdown("""
408
- <h4>Dashboard Latino América Data Jobs</h4>
409
- """, unsafe_allow_html=True)
410
-
411
- # Cargar y mostrar la imagen
412
- imagen_3 = "./assets/Dashboard_Latinoamerica_Data_Jobs.png"
413
- st.image(imagen_3, caption="Dashboard Latinoamerica Data Jobs.",
414
- use_column_width=True)
415
-
416
- st.markdown("""
417
- <a href="https://public.tableau.com/views/latam_brain_mvp_la
418
- /DashboardLatinoamericaDataJobs?:language=es-ES&publish=yes
419
- &:display_count=n&:origin=viz_share_link">Dashboard Dinámico -
420
- Latinoamerica Data Jobs</a>
421
- """, unsafe_allow_html=True)
422
-
423
- st.markdown("""
424
- <p>Nuestro <strong>Dashboard Latinoamérica Data Jobs</strong> es una
425
- solución integral
426
- diseñada para proporcionar información valiosa sobre el panorama del
427
- empleo en el ámbito de la ciencia de datos en América Latina. Esta
428
- herramienta fácil de usar presenta una serie de gráficos que abarcan
429
- diversos aspectos del mercado laboral en la región, permitiéndoles
430
- tomar decisiones informadas y estratégicas en sus esfuerzos de contratación y expansión. A continuación, les presento una descripción de los gráficos incluidos en nuestro dashboard:</p>
431
- """, unsafe_allow_html=True)
432
-
433
- st.markdown("""
434
- <h3>Gráficos y lo que nos permiten visualizar</h3>
435
- """, unsafe_allow_html=True)
436
-
437
- st.markdown("""
438
- <ol>
439
- <li><strong>Participación de Mercado Latinoamericano por
440
- país:</strong>
441
- Este
442
- gráfico
443
- muestra el porcentaje de participación de cada país en cuanto a la cantidad de empleos de data en América Latina. Con esta información, podrán identificar los países con mayor demanda de profesionales en ciencia de datos y enfocar sus esfuerzos de contratación y expansión en consecuencia.
444
- <li><strong>Salario Promedio Anual por Región:</strong> Aquí,
445
- comparamos el salario
446
- promedio anual en el mundo y en América Latina en el ámbito de la ciencia de datos. Esta comparación les permitirá evaluar la competitividad de los salarios en la región y tomar decisiones informadas sobre cómo atraer y retener talento.
447
- <li><strong>Participación del mercado en Empleos Data en América
448
- Latina:</strong>
449
- Este gráfico presenta la participación de cada país en el mercado de empleos de data en América Latina, así como el porcentaje de modalidad (presencial y remota) en cada país. Con esta información, podrán evaluar las tendencias de contratación en la región y adaptar sus ofertas de trabajo para satisfacer las expectativas de los profesionales en el ámbito de la ciencia de datos.
450
- <li><strong>Participación de mercado en empleos Data por Rol en
451
- porcentaje: </strong>
452
- Este gráfico muestra la distribución de empleos en el ámbito de la ciencia de datos en América Latina entre diferentes roles, como científicos, analistas, ingenieros y especialistas en Machine Learning. Con esta información, podrán identificar las áreas de mayor demanda y adaptar sus estrategias de reclutamiento o formación en consecuencia.
453
- <li><strong>Salario Promedio Anual en USD por país:</strong> Por
454
- último,
455
- este gráfico presenta el salario promedio anual en dólares estadounidenses para cada país en América Latina. Este conocimiento les permitirá evaluar la competitividad de sus salarios a nivel regional y tomar decisiones informadas sobre dónde enfocar sus esfuerzos de contratación.
456
- """, unsafe_allow_html=True)
457
-
458
- st.markdown("""
459
- <p><strong>En resumen,</strong> nuestros revolucionarios Dashboards de
460
- Análisis son
461
- unas herramientas poderosas que les proporcionan información valiosa
462
- sobre el mercado laboral en el ámbito de la Ciencia de Datos. Al
463
- aprovechar esta información, podrán tomar decisiones informadas y
464
- estratégicas que les permitirán atraer y retener a los mejores
465
- talentos en el campo, mantenerse competitivos en el mercado y, en última instancia, impulsar el crecimiento y éxito de su empresa.</p>
466
- """, unsafe_allow_html=True)
467
-
468
- st.markdown("""
469
- <p>Nuestro equipo de expertos en ciencia de datos y análisis ha
470
- trabajado incansablemente para diseñar y desarrollar este dashboard,
471
- asegurando que sea fácil de usar, visualmente atractivo y, lo más
472
- importante, útil en la toma de decisiones empresariales.</p>
473
- """, unsafe_allow_html=True)
474
-
475
- st.markdown("""
476
- <p>Les invitamos a explorar nuestro Dashboard de Análisis y
477
- experimentar por sí mismos cómo esta herramienta puede transformar la forma en que abordan el empleo en el ámbito de la Ciencia de Datos. Estamos seguros de que, al integrar esta información en sus estrategias de contratación, formación y desarrollo, podrán mantenerse a la vanguardia en este campo en constante evolución y crecimiento.</p>
478
- """, unsafe_allow_html=True)
479
-
480
- st.markdown("""
481
- <p>Si tienen alguna pregunta o necesitan más información sobre cómo
482
- nuestros Dashboards de Análisis puede ayudarles a alcanzar sus
483
- objetivos empresariales, no duden en ponerse en contacto con
484
- nosotros. Estamos aquí para apoyarles en cada paso del camino hacia
485
- el éxito en el emocionante mundo de la Ciencia de Datos.</p>
486
- """, unsafe_allow_html=True)
487
-
488
-
489
- main()
490
- # if __name__ == "__main__":
491
- # main()
492
-
493
- #####
494
  if selected2 == "ML":
495
- st.markdown('''
496
- <br>
497
- <h3>Predicción de Tendencias sobre puestos de trabajo con un modelo
498
- de Regresión Lineal</h3>
499
- <p>Este modelo predice la cantidad de puestos laborales para un año X sobre Data, según los resultados que tiene en la base de datos</p>
500
- <hr>
501
- ''', unsafe_allow_html=True)
502
-
503
- # st.set_page_config(page_title="Predicción de nuevos puestos de trabajo",
504
- # page_icon=":bar_chart:", layout="wide")
505
-
506
- # Cargar los datos
507
-
508
- # Seleccionar las columnas relevantes
509
- df_relevant = df[['job_title', 'work_year']]
510
-
511
- # Transformar la columna work_year en un tipo date en la columna date
512
- df_relevant['date'] = pd.to_datetime(df_relevant['work_year'], format='%Y')
513
-
514
- # Agregar una columna con el año de creación
515
- df_relevant['year'] = pd.DatetimeIndex(df_relevant['date']).year
516
-
517
- # Contar la cantidad de job_title creados por año
518
- job_title_count = df_relevant.groupby('year').count()['job_title']
519
-
520
- # Crear un dataframe con la cantidad de job_title creados por año
521
- df_job_title_count = pd.DataFrame(
522
- {'year': job_title_count.index,
523
- 'job_title_count': job_title_count.values})
524
-
525
- # Crear un modelo de regresión lineal
526
- model = LinearRegression()
527
 
528
- # Entrenar el modelo con los datos históricos
529
- X = df_job_title_count[['year']]
530
- y = df_job_title_count['job_title_count']
531
- model.fit(X, y)
532
-
533
- # Obtener el año actual
534
- current_year = datetime.datetime.now().year
535
-
536
- # Predecir la cantidad de nuevos job_title que se crearán este año
537
- current_year_input = st.number_input('Ingresa un año:', value=current_year,
538
- min_value=current_year,
539
- max_value=2050, step=1)
540
- if current_year_input < current_year:
541
- st.warning('Solo se pueden hacer predicciones para años futuros.')
542
- current_year_input = current_year
543
- st.write('Se usará el año actual:', current_year_input)
544
-
545
- with st.spinner('Prediciendo...'):
546
- time.sleep(1)
547
- job_title_count_pred = model.predict([[current_year_input]])
548
-
549
- # Obtener el último año del dataset
550
- last_year = df_job_title_count['year'].max()
551
- last_year_count = \
552
- df_job_title_count.loc[df_job_title_count['year'] == last_year][
553
- 'job_title_count'].values[0]
554
-
555
- # Mostrar resultados
556
- st.write(
557
- "Se crearán aproximadamente **{}** nuevos puestos de trabajo este año **{}**.".format(
558
- int(job_title_count_pred), current_year_input))
559
- percentage_change = (
560
- job_title_count_pred - last_year_count) / last_year_count * 100
561
- percentage_change = float(percentage_change)
562
- if percentage_change >= 0:
563
- st.write(
564
- "Esto representa un aumento del {:.2f}% con respecto al año {}.".format(
565
- percentage_change, last_year))
566
- else:
567
- st.write(
568
- "Esto representa una disminución del {:.2f}% con respecto al año {}".format(
569
- abs(percentage_change), last_year))
570
-
571
- # Crear un gráfico de línea
572
- line_chart = alt.Chart(df_job_title_count).mark_line().encode(
573
- x='year',
574
- y='job_title_count'
575
- ).properties(
576
- title='Cantidad de nuevos puestos de trabajo por año',
577
- width=300,
578
- height=200
579
- ).configure_axis(
580
- labelFontSize=14,
581
- titleFontSize=16
582
- )
583
-
584
- # Crear un punto para mostrar el valor predicho
585
- point = alt.Chart(df_job_title_count.iloc[-1:]).mark_point(
586
- color='#5c62ac').encode(
587
- x='year',
588
- y='job_title_count'
589
- )
590
-
591
- # Mostrar la gráfica actualizada con el valor predicho para el año ingresado
592
- # st.altair_chart(line_chart, use_container_width=True)
593
-
594
- # Crear botón para graficar la predicción
595
- if st.button('Mostrar gráfico de predicción'):
596
- # Crear dataframe con los años y las predicciones
597
- years = list(range(last_year, current_year + current_year_input - 2000))
598
- predictions = model.predict([[year] for year in years])
599
- df_predictions = pd.DataFrame(
600
- {'year': years, 'job_title_count_pred': predictions})
601
-
602
- # Crear gráfico de línea
603
- line_chart = alt.Chart(df_predictions).mark_line().encode(
604
- x='year',
605
- y='job_title_count_pred'
606
- ).properties(
607
- width=700,
608
- height=400
609
- )
610
-
611
- # Agregar capa con punto violeta en el valor predicho para el año actual
612
- current_year_pred = int(model.predict([[current_year_input]])[0])
613
- point_chart = alt.Chart(pd.DataFrame(
614
- {'x': [current_year_input], 'y': [current_year_pred]})).mark_point(
615
- color='#5c62ac',
616
- size=300,
617
- stroke='#5c62ac',
618
- strokeWidth=5).encode(
619
- x='x',
620
- y='y'
621
- )
622
-
623
- # # ocultar los títulos de los ejes x e y
624
- # line_chart.configure_axis(
625
- # x=None,
626
- # y=None
627
- # )
628
-
629
- # Mostrar gráfico con la capa adicional del punto rojo
630
- st.altair_chart(line_chart + point_chart)
631
-
632
- st.markdown('''
633
- <br><br><br>
634
- <h2>Gracias por su <strong>tiempo y atención!</strong></h2>
635
- <hr>
636
- <h3>Nuevas Propuestas...</h3>
637
- <p>Sí te gusto lo que viste, te invito a ver lo que se vendrá en la
638
- sección <span style="font-weight:bold">"New"</span></p>
639
- ''', unsafe_allow_html=True)
640
-
641
- #
642
  if selected2 == "New":
 
643
 
644
- progress_text = "Operación en progreso... Por favor espere..."
645
- my_bar = st.progress(0, text=progress_text)
646
-
647
- for percent_complete in range(100):
648
- time.sleep(0.05)
649
- my_bar.progress(percent_complete + 1, text=progress_text)
650
-
651
- #####
652
- st.markdown("""
653
- <h1>Proyectos en Beta</h1>
654
- <hr>
655
- <p>Estos proyectos todavía no están terminados, pero queremos mostrar un avance de lo que se viene muy pronto...</p>
656
- """, unsafe_allow_html=True)
657
-
658
- import pandas as pd
659
- import streamlit as st
660
- from sklearn.preprocessing import LabelEncoder
661
- from sklearn.ensemble import RandomForestRegressor
662
-
663
- # Leer los datos y seleccionar las columnas necesarias
664
- df = pd.read_csv('./ML/ds_salaries.csv')
665
- df = df[['company_location', 'salary_in_usd']]
666
-
667
- # Codificar las ubicaciones de las empresas
668
- le = LabelEncoder()
669
- df['company_location'] = le.fit_transform(df['company_location'])
670
-
671
- # Decodificar las ubicaciones de las empresas
672
- decoded_locations = le.inverse_transform(df['company_location'].unique())
673
-
674
- # Separar los datos de entrada y salida
675
- X = df.iloc[:, :-1].values
676
- y = df.iloc[:, -1].values
677
-
678
- # Entrenar el modelo
679
- model = RandomForestRegressor(n_estimators=100, random_state=42)
680
- model.fit(X, y)
681
-
682
- # Obtener las ubicaciones de las empresas y sus salarios predichos
683
- locations = df['company_location'].unique()
684
- predicted_salaries = model.predict(locations.reshape(-1, 1))
685
- results_df = pd.DataFrame(
686
- {'company_location': locations, 'predicted_salary': predicted_salaries})
687
-
688
- # Decodificar las ubicaciones de las empresas
689
- results_df['company_location'] = le.inverse_transform(
690
- results_df['company_location'])
691
-
692
- # Ordenar los resultados por salario predicho
693
- results_df = results_df.sort_values('predicted_salary',
694
- ascending=False).reset_index(drop=True)
695
-
696
- # Mostrar el título y el top 5 de países mejor pagados
697
- st.markdown("""
698
- <h2>Top 5 de países mejor pagados</h2>
699
- <hr>
700
- """, unsafe_allow_html=True)
701
-
702
- # Descripción
703
- st.markdown("""
704
- <p>Este código utiliza un algoritmo de <strong>RandomForest</strong>
705
- 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>
706
- """, unsafe_allow_html=True)
707
-
708
- for i in range(5):
709
- location = results_df.loc[i, 'company_location']
710
- salary = results_df.loc[i, 'predicted_salary']
711
- st.markdown(f'### **{location}**: ${salary:,.2f}',
712
- unsafe_allow_html=True)
713
-
714
- # Mostrar el menú desplegable para seleccionar un país
715
- st.markdown("""
716
- <h2>Seleccionar un país</h2>
717
- <hr>
718
- """, unsafe_allow_html=True)
719
- selected_location = st.selectbox('Ubicación de la empresa',
720
- decoded_locations)
721
-
722
- # Mostrar el salario predicho para el país seleccionado
723
- predicted_salary = results_df.loc[results_df[
724
- 'company_location'] == selected_location, 'predicted_salary'].iloc[
725
- 0]
726
- st.markdown(f'### **{selected_location}**: ${predicted_salary:,.2f}',
727
- unsafe_allow_html=True)
728
-
729
- #####
730
- import pandas as pd
731
- import streamlit as st
732
- from sklearn.feature_extraction.text import CountVectorizer
733
- from sklearn.naive_bayes import MultinomialNB
734
-
735
- # Cargar los datos
736
- df = pd.read_csv('./assets/dataset_modelo_1.csv')
737
-
738
- # Crear una lista con todas las skills disponibles
739
- all_skills = set()
740
- for skills in df.skills:
741
- all_skills.update(skills.split(", "))
742
-
743
- # Crear un diccionario que relaciona cada skill con su índice en el vector
744
- skill_indices = {skill: i for i, skill in enumerate(all_skills)}
745
-
746
- # Crear una matriz de características con la frecuencia de cada skill en cada fila
747
- vectorizer = CountVectorizer(vocabulary=skill_indices.keys(),
748
- lowercase=False)
749
- X = vectorizer.fit_transform(df.skills)
750
-
751
- # Entrenar el modelo
752
- clf = MultinomialNB()
753
- clf.fit(X, df.Aptitude)
754
-
755
- # Crear la interfaz de usuario con Streamlit
756
- st.markdown("""
757
- <h2>Predicción de Skills</h2>
758
- <hr>
759
- """, unsafe_allow_html=True)
760
- st.markdown(
761
- """
762
- <p>Ingrese el título del trabajo para ver las habilidades más
763
- importantes.</p>
764
- <p>Con el modelo de <strong>Naive Bayes</strong> cada skill recibe
765
- una puntuación con respecto a un título de trabajo, por lo cual,
766
- al ingresar un título de trabajo el algoritmo retorna las skill más
767
- utilizadas en las publicaciones de la base de dato de LatamBrain.
768
- """, unsafe_allow_html=True)
769
-
770
- title = st.text_input("Título del trabajo")
771
-
772
-
773
- # Crear una función que encuentra las habilidades más importantes para un título dado
774
- def get_top_skills(title, limit):
775
- # Filtrar el dataframe por el título dado
776
- filtered_df = df[df.job_title.str.contains(title, case=False)]
777
-
778
- # Crear una matriz de características con la frecuencia de cada skill en el dataframe filtrado
779
- X_filtered = vectorizer.transform(filtered_df.skills)
780
-
781
- # Calcular la frecuencia de cada habilidad en el dataframe filtrado
782
- skill_frequencies = X_filtered.sum(axis=0).A1
783
-
784
- # Obtener los nombres de las habilidades
785
- skill_names = vectorizer.vocabulary_.keys()
786
-
787
- # Crear un diccionario que relaciona cada habilidad con su frecuencia
788
- skill_freq_dict = dict(zip(skill_names, skill_frequencies))
789
-
790
- # Ordenar las habilidades por frecuencia descendente y devolver las más importantes (según el límite dado)
791
- top_skills = sorted(skill_freq_dict, key=skill_freq_dict.get,
792
- reverse=True)[:limit]
793
- return top_skills
794
-
795
-
796
- if title:
797
- limit = st.number_input("Cantidad de habilidades a mostrar", value=5,
798
- min_value=1, max_value=len(all_skills))
799
- top_skills = get_top_skills(title, limit)
800
- st.write(
801
- f"Las {limit} habilidades más importantes para el trabajo de '{title}' son:")
802
- for skill in top_skills:
803
- st.write(f"- {skill}")
804
-
805
- #####
806
-
807
  if selected2 == "Contact":
808
-
809
- st.markdown('''
810
- <h2>Simulación de <strong>Presupuesto</strong></h2>
811
- <hr>
812
- ''', unsafe_allow_html=True)
813
-
814
- # Define los precios para cada opción
815
- precio_analisis = 3500
816
- precio_ML = 5500
817
- precio_app = 3000
818
- precio_mantenimiento = 550
819
-
820
- # Define las opciones como un diccionario de la forma {nombre_opción: precio_opción}
821
- opciones = {
822
- "Opción 1": precio_analisis,
823
- "Opción 2": precio_ML,
824
- "Opción 3": precio_app,
825
- "Opción 4": precio_mantenimiento
826
- }
827
-
828
- # Crea un checkbox para cada opción
829
- analisis = st.checkbox("Análisis y Reportes")
830
- ML = st.checkbox("Algoritmos de ML aplicado")
831
- app = st.checkbox("Creación de una App")
832
- # mantenimiento = st.checkbox('Mantenimiento')
833
-
834
- # Crea un campo numérico para la cantidad
835
- cantidad = st.number_input("Meses de mantenimiento:", min_value=0, value=0)
836
-
837
- mes_mantenimiento = cantidad * precio_mantenimiento
838
-
839
- # Calcula el total en función de las opciones elegidas
840
- total = mes_mantenimiento + sum(
841
- [opciones[opcion] for opcion, seleccionada in zip(opciones.keys(),
842
- [analisis, ML,
843
- app]) if
844
- seleccionada])
845
-
846
- # Muestra el total
847
- st.markdown(f'''
848
- Total $: <span style="background:#5c62ac;\
849
- border-radius:5px;padding:5px">{total}</span>
850
- :rocket:
851
- ''', unsafe_allow_html=True)
852
-
853
- st.markdown('''
854
- <br>
855
- <h2>Datos de contactos</h2>
856
- <hr>
857
- ''', unsafe_allow_html=True)
858
- # Crea campos de entrada para el nombre, correo electrónico y mensaje
859
- nombre = st.text_input("Nombre completo")
860
- email = st.text_input("Correo electrónico")
861
- mensaje = st.text_area("Mensaje")
862
-
863
- # Crea un botón para enviar el formulario
864
- enviar = st.button("Enviar")
865
-
866
- # Si el botón es presionado, muestra un mensaje de confirmación
867
- if enviar:
868
- if nombre and email and mensaje:
869
-
870
- st.write(
871
- "¡Gracias por tu mensaje! Nos pondremos en contacto contigo pronto.")
872
- else:
873
- st.error("Por favor completa todos los campos requeridos.")
 
1
+ # librerias
 
 
 
 
2
  import streamlit as st
 
 
 
3
  from streamlit_option_menu import option_menu
4
 
5
+ # paginas
6
+ from page.analisis import Analisis
7
+ from page.contact import Contact
8
+ from page.home import Home
9
+ from page.machine_learning import ML
10
+ from page.new import New
 
 
11
 
12
+ # link necesario para bootstrap
13
  st.markdown("""<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
14
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>""",
15
  unsafe_allow_html=True)
 
19
  icons=['house', 'bi-archive', "bi-robot",
20
  "bi-arrow-up-right-square",
21
  "bi-envelope"],
22
+ menu_icon="cast",
23
+ default_index=0,
24
  orientation="horizontal",
 
25
  )
26
 
27
+ # Home
28
  if selected2 == "Home":
29
+ Home()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
+ # Análisis
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  if selected2 == "Análisis":
33
+ Analisis()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
+ # ML
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  if selected2 == "ML":
37
+ ML()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
+ # New
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  if selected2 == "New":
41
+ New()
42
 
43
+ # Contact
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  if selected2 == "Contact":
45
+ Contact()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
page/__pycache__/analisis.cpython-310.pyc ADDED
Binary file (2.83 kB). View file
 
page/__pycache__/contact.cpython-310.pyc ADDED
Binary file (1.81 kB). View file
 
page/__pycache__/home.cpython-310.pyc ADDED
Binary file (6.07 kB). View file
 
page/__pycache__/machine_learning.cpython-310.pyc ADDED
Binary file (3.6 kB). View file
 
page/__pycache__/new.cpython-310.pyc ADDED
Binary file (4.27 kB). View file
 
page/analisis.py ADDED
@@ -0,0 +1,382 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+
4
+ def Analisis():
5
+ # Titulo
6
+ # st.markdown('''
7
+ # <h1 style="text-shadow:0 0 10px #5c62ac;font-weight:bold">Data
8
+ # World Jobs</h1>
9
+ # ''', unsafe_allow_html=True)
10
+
11
+ # Propuesta
12
+ # st.markdown("""
13
+ # <h2>Propuesta de Proyecto</h2>
14
+ # <hr>
15
+ # """,
16
+ # unsafe_allow_html=True)
17
+ # st.markdown("""
18
+ # <p>Es por todo esto que <strong>Latam Brain</strong>, una empresa
19
+ # líder en ciencia de datos, ha diseñado un proyecto revolucionario
20
+ # que aborda este desafío de frente. </p>
21
+ # <ul>Este proyecto se basa en cuatro objetivos fundamentales:
22
+ # <li> Recopilar datos de todas las ofertas de empleo relacionadas
23
+ # con la ciencia de datos y crear un data warehouse, un recurso
24
+ # invaluable para almacenar y analizar información de manera
25
+ # eficiente.
26
+ # <li> Obtener un panorama general de la situación actual del
27
+ # mercado laboral en el ámbito de la ciencia de datos tanto a
28
+ # nivel mundial como en América Latina.
29
+ # <li> Identificar las características clave que definen a los
30
+ # profesionales en este campo, como habilidades, herramientas y
31
+ # funciones, y su relación con el nivel de salario.
32
+ # <li> Crear un modelo predictivo utilizando Machine Learning para
33
+ # identificar patrones y tendencias en los datos generados por
34
+ # las distintas fuentes de información.
35
+ # </ul>
36
+ # """, unsafe_allow_html=True)
37
+ #
38
+ # st.markdown(
39
+ # """
40
+ # <div style="font-weight:bold;font-size:1.5rem;width:60vw;margin:auto;
41
+ # border-radius:10px;padding:10px">
42
+ # <cite >Nuestro proyecto, con su amplio alcance y enfoque en el
43
+ # análisis exhaustivo de las ofertas laborales,busca revolucionar
44
+ # la forma en que las empresas de reclutamiento identifican y
45
+ # contratan a profesionales especializados en ciencia de datos y
46
+ # análisis.</cite>
47
+ # </div>
48
+ # <br>
49
+ # """, unsafe_allow_html=True)
50
+ # st.markdown("""
51
+ # <ul><strong style="font-size:1.5rem">Lo que te ofrecemos:</strong>
52
+ # <li><strong>Base de Datos en la nube (aws)</strong> que nos ayude a
53
+ # descubrir las
54
+ # habilidades y
55
+ # herramientas más demandadas en el mercado. Con esta información, pueden
56
+ # afinar su búsqueda y encontrar a los candidatos ideales para sus clientes. A su vez,
57
+ # los candidatos pueden mejorar sus habilidades y aumentar sus posibilidades de
58
+ # conseguir empleo en empresas que se ajusten a sus metas profesionales.
59
+ # <li><strong>Dashboards de Analítica</strong> que nos permita
60
+ # visualizar las
61
+ # tendencias y características
62
+ # que nos permitan tomar mejores decisiones en el mercado laboral dedicado en
63
+ # este caso a Data.
64
+ # <li><strong>El modelo predictivo de Machine Learning,</strong>
65
+ # como el cerebro detrás
66
+ # de todo el
67
+ # proyecto, permitirá anticipar tendencias y patrones en la demanda de talento, lo
68
+ # que permitirá a las empresas de reclutamiento estar siempre un paso adelante y
69
+ # adaptarse a las necesidades cambiantes del mercado.
70
+ # </ul>
71
+ # """, unsafe_allow_html=True)
72
+ #
73
+ # st.markdown(
74
+ # """<p>Con este proyecto, Latam Brain no solo está cambiando el juego en
75
+ # la industria del reclutamiento, sino que también está creando un puente
76
+ # entre el talento y las empresas en la era del Big Data. Juntos, estamos
77
+ # construyendo un futuro donde las empresas y los profesionales pueden
78
+ # alcanzar su máximo potencial, gracias a la unión perfecta entre la
79
+ # ciencia de datos y el reclutamiento en la era de la Transformación
80
+ # Digital</p>""",
81
+ # unsafe_allow_html=True)
82
+
83
+ # Opción comercial
84
+
85
+
86
+ # Análisis y Recomendación
87
+ # st.markdown("""
88
+ # <h2>Análisis de mercado y recomendaciones</h2>
89
+ # <hr>
90
+ # """,
91
+ # unsafe_allow_html=True)
92
+
93
+ # Dashboard General
94
+ # st.markdown("""
95
+ # <h4>¡Descubre el panorama completo del mercado laboral de
96
+ # Data con nuestro Dashboard de Empleos Data!</h4>
97
+ # """, unsafe_allow_html=True)
98
+
99
+ # imagen_1 = "./assets/Dashboard_Vistazo_al_Mercado_Actual.png"
100
+ # st.image(imagen_1, caption="Dashboard de Empleos Data",
101
+ # use_column_width=True)
102
+
103
+ # # st.markdown("""
104
+ # <a href="https://public.tableau.com/views/latam_brain_context
105
+ # /DashboardVistazoelMercadoActual?:language=es-ES&publish=yes
106
+ # &:display_count=n&:origin=viz_share_link"> Dashboard - Tableau</a>
107
+ # """, unsafe_allow_html=True)
108
+
109
+ # Análisis
110
+ # st.markdown("""
111
+ # <h3>Análisis</h3>
112
+ # <hr>
113
+ # """, unsafe_allow_html=True)
114
+
115
+ # st.markdown("""
116
+ # <ol>
117
+ # <li> El salario promedio anual en empleos de data ha experimentado
118
+ # un crecimiento significativo (30%) entre 2019 y 2020, lo que indica una alta demanda y valoración de los profesionales en este campo.
119
+ # <li> El número de empleos relacionados con data ha aumentado en un
120
+ # sorprendente 450%, lo que demuestra un interés creciente por parte de las empresas en contratar profesionales con habilidades en ciencia de datos y análisis.
121
+ # <li> La mayoría de los empleados en este campo se encuentran en
122
+ # compañías medianas (más del 50%), lo que sugiere que estas empresas podrían estar invirtiendo más en ciencia de datos y análisis que las pequeñas o grandes empresas.
123
+ # <li> En cuanto a la antigüedad, hay una mayor cantidad de empleados
124
+ # en puestos senior, seguido de semisenior, junior y, por último, expert. Esto indica que las empresas están buscando profesionales con experiencia en el campo, aunque también hay oportunidades para aquellos con menos experiencia.
125
+ # <li> La mayoría de los empleos en este campo se ofrecen en
126
+ # modalidad remota, lo que puede atraer a una amplia gama de candidatos y permitir una mayor flexibilidad en la contratación y el trabajo.
127
+ # """, unsafe_allow_html=True)
128
+
129
+ # Opción comercial
130
+
131
+
132
+ # Recomendación
133
+ # st.markdown("""
134
+ # <h3>Recomendaciones</h3>
135
+ # <hr>
136
+ # """, unsafe_allow_html=True)
137
+
138
+ # st.markdown("""
139
+ # <li> Como empresa de reclutamiento, enfóquense en buscar
140
+ # candidatos con experiencia en ciencia de datos y análisis, ya que
141
+ # estos perfiles son altamente demandados. Además, consideren ofrecer
142
+ # capacitación y desarrollo profesional para ayudar a los candidatos
143
+ # a avanzar en sus carreras y mejorar sus habilidades.
144
+ # <li> Atraigan a los profesionales de la ciencia de datos ofreciendo
145
+ # salarios competitivos y oportunidades de crecimiento, ya que el
146
+ # salario promedio anual en este campo está en aumento.
147
+ # <li> Las pequeñas y grandes empresas podrían considerar aumentar su
148
+ # inversión en ciencia de datos y análisis, ya que las compañías
149
+ # medianas parecen estar liderando en este aspecto.
150
+ # <li> Las empresas deben adaptarse a las tendencias actuales de
151
+ # contratación y ofrecer puestos de trabajo en modalidad remota cuando
152
+ # sea posible. Esto no solo ampliará el grupo de candidatos, sino que
153
+ # también puede aumentar la satisfacción y la retención de los
154
+ # empleados.
155
+ # <li> Y para loos profesionales que buscan empleo en el campo de la
156
+ # ciencia de datos deben enfocarse en adquirir habilidades y
157
+ # experiencia relevantes, especialmente en áreas de alta demanda.
158
+ # Además, pueden considerar buscar oportunidades de trabajo remoto,
159
+ # ya que estas parecen ser predominantes en la industria.
160
+ # """, unsafe_allow_html=True)
161
+
162
+
163
+
164
+ # Dashboard Especifico
165
+ # st.markdown("""
166
+ # <h2>Dashboards especializados como herramientas de Análisis</h2>
167
+ # <hr>
168
+ # """, unsafe_allow_html=True)
169
+
170
+ # Opción comercial
171
+
172
+
173
+
174
+ # st.markdown("""
175
+ # <h4>"Descubre las Tendencias Laborales: Crecimiento Explosivo en Empleos de Ciencia de Datos y Análisis"</h4>
176
+ # """, unsafe_allow_html=True)
177
+
178
+ # Cargar y mostrar la imagen
179
+ # imagen_2 = "./assets/Dashboard_General_Data_Jobs.png"
180
+ # st.image(imagen_2, caption="Dashboard General Data Jobs.",
181
+ # use_column_width=True)
182
+
183
+ # st.markdown("""
184
+ # <a href="https://public.tableau.com/views/latam_brain_mvp_la
185
+ # /DashboardGeneralDataJobs?:language=es-ES&publish=yes&:display_count
186
+ # =n&:origin=viz_share_link">Dashboard - Tableau</a>
187
+ # """, unsafe_allow_html=True)
188
+
189
+ # Cita
190
+ # st.markdown("""
191
+ # <h3><q>El futuro del empleo en Ciencia de Datos: Un vistazo a
192
+ # nuestros
193
+ # revolucionarios Dashboards de Análisis</q> - <cite>LatamBrain</cite>
194
+ # """, unsafe_allow_html=True)
195
+
196
+ # st.markdown("""
197
+ # <p>Nuestro <strong>Dashboard General Data Jobs</strong> cuenta con
198
+ # una serie de gráficos esclarecedores que abarcan diferentes aspectos
199
+ # del mercado laboral en el campo de la Ciencia de Datos. El dashboard
200
+ # que atraves de cada uno de los gráficos nos muestra información
201
+ # pertinente para la toma de decisiones informadas y estratégicas.</p>
202
+ # """, unsafe_allow_html=True)
203
+
204
+ # Graficos
205
+ # st.markdown("""
206
+ # <h3>Gráficos y lo que nos permiten visualizar</h3>
207
+ # """, unsafe_allow_html=True)
208
+
209
+ # st.markdown("""
210
+ # <ol>
211
+ # <li><strong>Participación de empleos por rol:</strong> Este
212
+ # gráfico muestra la distribución de empleos en el ámbito de la
213
+ # Ciencia de Datos entre diferentes roles, como científicos,
214
+ # analistas, ingenieros y especialistas en Machine Learning. Con
215
+ # esta información, podrán identificar las áreas de mayor demanda
216
+ # y adaptar sus estrategias de reclutamiento o formación en
217
+ # consecuencia.
218
+ # <li><strong>Participación de empleos por tipo:</strong> Aquí,
219
+ # visualizamos la proporción de empleos según su tipo: tiempo
220
+ # completo, freelance, pasantías y contratos. Esto les permitirá
221
+ # evaluar la naturaleza del mercado laboral y considerar qué tipo
222
+ # de contratación es más adecuado para sus necesidades
223
+ # empresariales.
224
+ # <li><strong>Participación de mercado en empleos por
225
+ # modalidad:</strong> Este gráfico compara la cantidad de empleos
226
+ # que son presenciales y remotos, lo que les ayudará a comprender
227
+ # la prevalencia de cada modalidad y adaptar sus ofertas de
228
+ # trabajo para satisfacer las expectativas de los profesionales
229
+ # en la actualidad.
230
+ # <li><strong>Salario promedio anual por antigüedad:</strong>
231
+ # Aquí, observamos la relación entre el salario promedio anual y
232
+ # la antigüedad del empleado, desde ejecutivos hasta empleados de
233
+ # nivel inicial. Este conocimiento les permitirá establecer
234
+ # salarios competitivos y atractivos para atraer y retener talento
235
+ # en cada nivel de experiencia.
236
+ # <li><strong>Salario promedio anual por rol:</strong> Este
237
+ # gráfico muestra el salario promedio anual en función del rol, ya
238
+ # sea científico, analista, ingeniero o especialista en Machine
239
+ # Learning. Con esta información, podrán comparar los salarios
240
+ # entre roles y asegurarse de que sus ofertas salariales sean
241
+ # competitivas dentro del mercado.
242
+ # <li><strong>Participación de mercado por país:</strong> Aquí,
243
+ # analizamos la distribución geográfica de los empleos en Ciencia
244
+ # de Datos, lo que les permitirá identificar las áreas geográficas
245
+ # con mayor demanda de profesionales y ajustar sus estrategias de
246
+ # contratación o expansión en consecuencia.
247
+ # <li><strong>Top 10 países por salario promedio anual:</strong>
248
+ # Por último, este gráfico presenta los 10 países con los salarios
249
+ # promedio anuales más altos en el ámbito de la Ciencia de Datos.
250
+ # Este conocimiento les permitirá evaluar la competitividad de sus
251
+ # salarios a nivel internacional y tomar decisiones informadas
252
+ # sobre dónde enfocar sus esfuerzos de contratación.
253
+ # """, unsafe_allow_html=True)
254
+
255
+ # Dashboard Latino América
256
+
257
+
258
+
259
+ # st.markdown("""
260
+ # <h4>¡Descubre el panorama laboral de la Ciencia de Datos en
261
+ # Latinoamérica con nuestro Dashboard Latinoamérica Data Jobs!</h4>
262
+ # """, unsafe_allow_html=True)
263
+
264
+ # Cargar y mostrar la imagen
265
+ # imagen_3 = "./assets/Dashboard_Latinoamerica_Data_Jobs.png"
266
+ # st.image(imagen_3, caption="Dashboard Latinoamerica Data Jobs.",
267
+ # use_column_width=True)
268
+ #
269
+ # st.markdown("""
270
+ # <a href="https://public.tableau.com/views/latam_brain_mvp_la
271
+ # /DashboardLatinoamericaDataJobs?:language=es-ES&publish=yes
272
+ # &:display_count=n&:origin=viz_share_link">Dashboard - Tableau</a>
273
+ # """, unsafe_allow_html=True)
274
+
275
+ # st.markdown("""
276
+ # <p>Nuestro <strong>Dashboard Latinoamérica Data Jobs</strong> es una
277
+ # solución integral diseñada para proporcionar información valiosa
278
+ # sobre el panorama del empleo en el ámbito de la ciencia de datos en
279
+ # América Latina. Esta herramienta fácil de usar presenta una serie de
280
+ # gráficos que abarcan diversos aspectos del mercado laboral en la
281
+ # región, permitiéndoles tomar decisiones informadas y estratégicas en
282
+ # sus esfuerzos de contratación y expansión. A continuación, les
283
+ # presento una descripción de los gráficos incluidos en nuestro
284
+ # dashboard:</p>
285
+ # """, unsafe_allow_html=True)
286
+
287
+ # st.markdown("""
288
+ # <h3>Gráficos y lo que nos permiten visualizar</h3>
289
+ # """, unsafe_allow_html=True)
290
+ #
291
+ # st.markdown("""
292
+ # <ol>
293
+ # <li><strong>Participación de Mercado Latinoamericano por
294
+ # país:</strong> Este gráfico muestra el porcentaje de
295
+ # participación de cada país en cuanto a la cantidad de empleos de
296
+ # data en América Latina. Con esta información, podrán identificar
297
+ # los países con mayor demanda de profesionales en ciencia de
298
+ # datos y enfocar sus esfuerzos de contratación y expansión en
299
+ # consecuencia.
300
+ # <li><strong>Salario Promedio Anual por Región:</strong> Aquí,
301
+ # comparamos el salario promedio anual en el mundo y en América
302
+ # Latina en el ámbito de la ciencia de datos. Esta comparación les
303
+ # permitirá evaluar la competitividad de los salarios en la región
304
+ # y tomar decisiones informadas sobre cómo atraer y retener
305
+ # talento.
306
+ # <li><strong>Participación del mercado en Empleos Data en América
307
+ # Latina:</strong> Este gráfico presenta la participación de cada
308
+ # país en el mercado de empleos de data en América Latina, así
309
+ # como el porcentaje de modalidad (presencial y remota) en cada
310
+ # país. Con esta información, podrán evaluar las tendencias de
311
+ # contratación en la región y adaptar sus ofertas de trabajo para
312
+ # satisfacer las expectativas de los profesionales en el ámbito de
313
+ # la ciencia de datos.
314
+ # <li><strong>Participación de mercado en empleos Data por Rol en
315
+ # porcentaje: </strong> Este gráfico muestra la distribución de
316
+ # empleos en el ámbito de la ciencia de datos en América Latina
317
+ # entre diferentes roles, como científicos, analistas, ingenieros
318
+ # y especialistas en Machine Learning. Con esta información,
319
+ # podrán identificar las áreas de mayor demanda y adaptar sus
320
+ # estrategias de reclutamiento o formación en consecuencia.
321
+ # <li><strong>Salario Promedio Anual en USD por país:</strong> Por
322
+ # último, este gráfico presenta el salario promedio anual en
323
+ # dólares estadounidenses para cada país en América Latina. Este
324
+ # conocimiento les permitirá evaluar la competitividad de sus
325
+ # salarios a nivel regional y tomar decisiones informadas sobre
326
+ # dónde enfocar sus esfuerzos de contratación.
327
+ # """, unsafe_allow_html=True)
328
+
329
+
330
+
331
+ # st.markdown("""
332
+ # <p><strong>En resumen,</strong> nuestros revolucionarios Dashboards
333
+ # de Análisis son unas herramientas poderosas que les proporcionan
334
+ # información valiosa sobre el mercado laboral en el ámbito de la
335
+ # Ciencia de Datos. Al aprovechar esta información, podrán tomar
336
+ # decisiones informadas y estratégicas que les permitirán atraer y
337
+ # retener a los mejores talentos en el campo, mantenerse competitivos
338
+ # en el mercado y, en última instancia, impulsar el crecimiento y
339
+ # éxito de su empresa.</p>
340
+ # """, unsafe_allow_html=True)
341
+
342
+ # st.markdown("""
343
+ # <p>Nuestro equipo de expertos en ciencia de datos y análisis ha
344
+ # trabajado incansablemente para diseñar y desarrollar este dashboard,
345
+ # asegurando que sea fácil de usar, visualmente atractivo y, lo más
346
+ # importante, útil en la toma de decisiones empresariales.</p>
347
+ # """, unsafe_allow_html=True)
348
+
349
+ # st.markdown("""
350
+ # <p>Les invitamos a explorar nuestro Dashboard de Análisis y
351
+ # experimentar por sí mismos cómo esta herramienta puede transformar
352
+ # la forma en que abordan el empleo en el ámbito de la Ciencia de
353
+ # Datos. Estamos seguros de que, al integrar esta información en sus
354
+ # estrategias de contratación, formación y desarrollo, podrán
355
+ # mantenerse a la vanguardia en este campo en constante evolución y
356
+ # crecimiento.</p>
357
+ # """, unsafe_allow_html=True)
358
+
359
+ # st.markdown("""
360
+ # <p>Si tienen alguna pregunta o necesitan más información sobre cómo
361
+ # nuestros Dashboards de Análisis puede ayudarles a alcanzar sus
362
+ # objetivos empresariales, no duden en ponerse en contacto con
363
+ # nosotros. Estamos aquí para apoyarles en cada paso del camino hacia
364
+ # el éxito en el emocionante mundo de la Ciencia de Datos.</p>
365
+ # """, unsafe_allow_html=True)
366
+
367
+
368
+
369
+ # Version Comercial
370
+ st.markdown("""La ciencia de datos es una de las industrias de mayor
371
+ crecimiento en el mundo, y las oportunidades laborales para profesionales en este campo son más emocionantes y abundantes que nunca. Como expertos en Data Analyst, sabemos que la demanda de profesionales en ciencia de datos y análisis se ha disparado en los últimos años, con un aumento del 450% en el número de empleos relacionados con data. ¡Eso es una locura!
372
+
373
+ Pero aquí viene lo más emocionante: el salario promedio anual en este campo aumentó un 30% entre 2019 y 2020. Eso significa que hay una gran cantidad de oportunidades disponibles para quienes quieran trabajar en esta industria en constante crecimiento.
374
+
375
+ En Latam Brain, estamos en el negocio de ayudar a las empresas a aprovechar al máximo el análisis de datos, y para lograrlo, estamos creando un data warehouse para almacenar y analizar información de manera eficiente. Además, estamos identificando las características clave que definen a los profesionales en este campo, como habilidades, herramientas y funciones, y estamos creando un modelo predictivo utilizando Machine Learning para identificar patrones y tendencias en los datos.
376
+
377
+ Nuestra recomendación para las empresas que quieran aprovechar al máximo el mercado laboral de la ciencia de datos es enfocarse en buscar candidatos con habilidades en ciencia de datos y análisis y ofrecerles oportunidades de capacitación y desarrollo profesional para ayudarles a avanzar en sus carreras y mejorar sus habilidades. No olvides ofrecer salarios competitivos y oportunidades de crecimiento, ya que el salario promedio anual en este campo está en aumento. También es importante que consideren la posibilidad de ofrecer oportunidades de trabajo remoto para atraer a los mejores talentos, ya que la mayoría de los empleos en este campo se ofrecen en modalidad remota.
378
+
379
+ En resumen, la ciencia de datos es una de las industrias más emocionantes y
380
+ en constante crecimiento, y las oportunidades para profesionales en este
381
+ campo son abundantes. Si tu empresa quiere aprovechar al máximo el mercado
382
+ laboral de la ciencia de datos, asegúrate de enfocarte en buscar talentos con habilidades en ciencia de datos y análisis, ofrecer oportunidades de capacitación y desarrollo profesional, salarios competitivos y oportunidades de crecimiento, y considerar la posibilidad de ofrecer oportunidades de trabajo remoto. ¡No te quedes atrás en esta emocionante industria! !Utiliza el paquete de Recruiter de LatamBrain!""")
page/contact.py ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+
4
+ def Contact():
5
+ st.markdown('''
6
+ <h2>Simulación de <strong>Presupuesto</strong></h2>
7
+ <hr>
8
+ ''', unsafe_allow_html=True)
9
+
10
+ # Define los precios para cada opción
11
+ precio_analisis = 3500
12
+ precio_ML = 5500
13
+ precio_app = 3000
14
+ precio_mantenimiento = 550
15
+
16
+ # Define las opciones como un diccionario de la forma {nombre_opción: precio_opción}
17
+ opciones = {
18
+ "Opción 1": precio_analisis,
19
+ "Opción 2": precio_ML,
20
+ "Opción 3": precio_app,
21
+ "Opción 4": precio_mantenimiento
22
+ }
23
+
24
+ # Crea un checkbox para cada opción
25
+ analisis = st.checkbox("Análisis y Reportes")
26
+ ML = st.checkbox("Algoritmos de ML aplicado")
27
+ app = st.checkbox("Creación de una App")
28
+ # mantenimiento = st.checkbox('Mantenimiento')
29
+
30
+ # Crea un campo numérico para la cantidad
31
+ cantidad = st.number_input("Meses de mantenimiento:", min_value=0, value=0)
32
+
33
+ mes_mantenimiento = cantidad * precio_mantenimiento
34
+
35
+ # Calcula el total en función de las opciones elegidas
36
+ total = mes_mantenimiento + sum(
37
+ [opciones[opcion] for opcion, seleccionada in zip(opciones.keys(),
38
+ [analisis, ML,
39
+ app]) if
40
+ seleccionada])
41
+
42
+ # Muestra el total
43
+ st.markdown(f'''
44
+ Total $: <span style="background:#5c62ac;\
45
+ border-radius:5px;padding:5px">{total}</span>
46
+ :rocket:
47
+ ''', unsafe_allow_html=True)
48
+
49
+ st.markdown('''
50
+ <br>
51
+ <h2>Datos de contactos</h2>
52
+ <hr>
53
+ ''', unsafe_allow_html=True)
54
+ # Crea campos de entrada para el nombre, correo electrónico y mensaje
55
+ nombre = st.text_input("Nombre completo")
56
+ email = st.text_input("Correo electrónico")
57
+ mensaje = st.text_area("Mensaje")
58
+
59
+ # Crea un botón para enviar el formulario
60
+ enviar = st.button("Enviar")
61
+
62
+ # Si el botón es presionado, muestra un mensaje de confirmación
63
+ if enviar:
64
+ if nombre and email and mensaje:
65
+
66
+ st.write(
67
+ "¡Gracias por tu mensaje! Nos pondremos en contacto contigo pronto.")
68
+ else:
69
+ st.error("Por favor completa todos los campos requeridos.")
page/home.py ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from PIL import Image
3
+
4
+ image = Image.open('./assets/logo_latam_brain.png')
5
+ logo = Image.open('./assets/LatamBrainlogo.png')
6
+ scrum = Image.open("./assets/Scrum'ProcessLB.png")
7
+
8
+
9
+ def Home():
10
+ # Logo y Presentación
11
+ col1, col2 = st.columns(2)
12
+ col1.markdown("""
13
+ <br/>
14
+ <br/>
15
+ <br/>
16
+ <h1 style="text-align:center; font-weight:bold;
17
+ text-shadow:0px 0px 10px #5c62ac;font-size:3rem">LatamBrain</h1>
18
+ <h5 style="text-align:center;color:#5c62ac">tú cerebro tecnológico</h5>
19
+ <br />
20
+ """, unsafe_allow_html=True)
21
+ col2.image(image, width=300)
22
+
23
+ # Quienes somos
24
+ st.markdown('''
25
+ <br>
26
+ <h2>Quienes somos?</h2>
27
+ <hr>
28
+ <p><strong>LatamBrain</strong> es la startup que necesitas para llevar
29
+ tu negocio al siguiente nivel. Nuestro enfoque altamente innovador y
30
+ tecnológico garantiza soluciones personalizadas, seguras y eficientes
31
+ que te mantendrán un paso adelante de la competencia. Nos enorgullece
32
+ ser líderes en nuestra industria y estamos comprometidos en ayudarte a
33
+ prepararte para el futuro. No pierdas la oportunidad de contactar con
34
+ <strong>LatamBrain</strong> y descubrir cómo podemos ayudarte a llevar
35
+ tus ideas más allá.</p>
36
+
37
+ <p><strong>LatamBrain</strong>, tú cerebro tecnológico!</p>
38
+ ''', unsafe_allow_html=True)
39
+
40
+ # Servicios
41
+ st.markdown('''
42
+ <br>
43
+ <h2>Servicios</h2>
44
+ <hr>
45
+ ''', unsafe_allow_html=True)
46
+
47
+ col1, col2, col3 = st.columns(3)
48
+ col1.markdown('''
49
+ <li>Data Análisis
50
+ <li>Reportes financieros
51
+ <li>KPI's personalizados
52
+ <li>Asesoramientos y Plan de Ejecución
53
+ <li>Y más...
54
+ ''', unsafe_allow_html=True)
55
+ col2.markdown('''
56
+ <li>Machine Learning
57
+ <li>Deep Learning
58
+ <li>Automatización de con ML
59
+ <li>ChatBot
60
+ <li>Y más...
61
+ ''', unsafe_allow_html=True)
62
+ col3.markdown('''
63
+ <li>Cloud AWS
64
+ <li>Máxima seguridad en tús datos
65
+ <li>Disponibilidad y velocidad de datos
66
+ <li>Y más...
67
+ ''', unsafe_allow_html=True)
68
+
69
+ # Nosotros y como trabajamos
70
+ st.markdown('''
71
+ <br>
72
+ <h2>Nosotros y Como Trabajamos</h2>
73
+ <hr>
74
+ ''', unsafe_allow_html=True)
75
+ st.image(scrum)
76
+
77
+ # Video
78
+ st.markdown("""
79
+ <br>
80
+ <h3>LatamBrain - Spot</h3>
81
+ <hr>
82
+ """, unsafe_allow_html=True)
83
+
84
+ VIDEO_ID = "https://www.youtube.com/embed/G8PdiAwhbNM"
85
+
86
+ # Genera el código HTML del iframe
87
+ html = f"""
88
+ <div >
89
+ <iframe
90
+ style="height:200px;width
91
+ :700px"
92
+ width="530"
93
+ height="360"
94
+ src= {VIDEO_ID}
95
+ title="LatamBrain - Spot"
96
+ frameborder="0"
97
+ allow="accelerometer; autoplay; clipboard-write;
98
+ encrypted-media; gyroscope;
99
+ picture-in-picture; web-share"
100
+ allowfullscreen
101
+ >
102
+ </iframe>
103
+ </div>
104
+
105
+ """
106
+
107
+ # Inserta el iframe en la aplicación de Streamlit
108
+ st.components.v1.html(html)
109
+
110
+ # Opiniones
111
+ st.markdown('''
112
+ <br>
113
+ <h3>Como fue este proceso para nosotros?</h3>
114
+ <hr>
115
+ ''', unsafe_allow_html=True)
116
+ col1, col2, col3 = st.columns(3)
117
+
118
+ catriel = '''
119
+ <h4><strong>Catriel Pérez<strong></h4>
120
+ <p style="margin-top:-20px">Data Engineer</p>
121
+ <p>Ha sido una experiencia increíble trabajar con este equipo. Todos
122
+ han sido muy profesionales y comprometidos con el éxito del proyecto. Me siento agradecido de haber formado parte de este equipo y haber aprendido tanto en el proceso. Y esto... recién comienza!</p>
123
+ <a href="mailto:perezcatriel@gmail.com">Contactame...</a>
124
+ <p>24 de abril del 2023</p>
125
+ '''
126
+ mati = '''
127
+ <h4><strong>Matias Benitez</strong></h4>
128
+ <p style="margin-top:-20px">Machine Learning</p>
129
+ <p>Trabajar en este proyecto ha sido una verdadera aventura. He enfrentado muchos desafíos y he aprendido cosas nuevas todos los días. El equipo con el que he trabajado ha sido excepcional, siempre dispuesto a ayudar y colaborar en todo momento. Me llevo una experiencia enriquecedora y valiosa.</p>
130
+ <a href="mailto:matiasbenitezcarrizo@gmail.com">Contactame...</a>
131
+ <p>24 de abril del 2023</p>
132
+ '''
133
+ luis = '''
134
+ <h4><strong>Luis Rascón</strong></h4>
135
+ <p style="margin-top:-20px">Data Analyst</p>
136
+ <p>No tengo más que palabras de agradecimiento por esta experiencia. He tenido la oportunidad de trabajar con gente talentosa y apasionada por su trabajo, lo que ha hecho que el proyecto sea un éxito rotundo. Me llevo muchas lecciones aprendidas y nuevas habilidades que me servirán en mi carrera profesional. Ha sido una experiencia inolvidable.</p>
137
+ <a href="mailto:luis.francisco.rc@gmail.com">Contactame...</a>
138
+ <p>24 de abril del 2023</p>
139
+ '''
140
+
141
+ col1.markdown(luis, unsafe_allow_html=True)
142
+ col2.markdown(mati, unsafe_allow_html=True)
143
+ col3.markdown(catriel, unsafe_allow_html=True)
144
+
145
+ # Documentos Extras
146
+ st.markdown("""
147
+ <br>
148
+ <h3>Documentación Extra</h3>
149
+ <hr>
150
+ """, unsafe_allow_html=True)
151
+
152
+ col1, col2, col3, col4 = st.columns(4)
153
+ col1.markdown("""
154
+ <a href="https://github.com/LRascon/data_world_jobs">Github</a>
155
+ """, unsafe_allow_html=True)
156
+ col2.markdown("""
157
+ <a href="https://www.notion.so/Data-World-Tendencias-del-Mercado-Laboral-c61f044bd0db44988147fc961551666d">Notion</a>
158
+ """, unsafe_allow_html=True)
159
+ col3.markdown("""
160
+ <a href="https://public.tableau.com/views/latam_brain_context
161
+ /DashboardVistazoelMercadoActual?:language=es-ES&publish=yes
162
+ &:display_count=n&:origin=viz_share_link">Tableau</a>
163
+ """, unsafe_allow_html=True)
164
+ col4.markdown("""
165
+ <a href="https://www.youtube.com/watch?v=G8PdiAwhbNM">YouTube</a>
166
+ """, unsafe_allow_html=True)
page/machine_learning.py ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import datetime
2
+ import time
3
+
4
+ import altair as alt
5
+ import pandas as pd
6
+ import streamlit as st
7
+ from sklearn.linear_model import LinearRegression
8
+
9
+ df = pd.read_csv('./ML/ds_salaries.csv')
10
+
11
+
12
+ def ML():
13
+ st.markdown('''
14
+ <br>
15
+ <h3>Predicción de Tendencias sobre puestos de trabajo con un modelo
16
+ de Regresión Lineal</h3>
17
+ <p>Este modelo predice la cantidad de puestos laborales para un año X sobre Data, según los resultados que tiene en la base de datos</p>
18
+ <hr>
19
+ ''', unsafe_allow_html=True)
20
+
21
+ # st.set_page_config(page_title="Predicción de nuevos puestos de trabajo",
22
+ # page_icon=":bar_chart:", layout="wide")
23
+
24
+ # Cargar los datos
25
+
26
+ # Seleccionar las columnas relevantes
27
+ df_relevant = df[['job_title', 'work_year']]
28
+
29
+ # Transformar la columna work_year en un tipo date en la columna date
30
+ df_relevant['date'] = pd.to_datetime(df_relevant['work_year'], format='%Y')
31
+
32
+ # Agregar una columna con el año de creación
33
+ df_relevant['year'] = pd.DatetimeIndex(df_relevant['date']).year
34
+
35
+ # Contar la cantidad de job_title creados por año
36
+ job_title_count = df_relevant.groupby('year').count()['job_title']
37
+
38
+ # Crear un dataframe con la cantidad de job_title creados por año
39
+ df_job_title_count = pd.DataFrame(
40
+ {'year': job_title_count.index,
41
+ 'job_title_count': job_title_count.values})
42
+
43
+ # Crear un modelo de regresión lineal
44
+ model = LinearRegression()
45
+
46
+ # Entrenar el modelo con los datos históricos
47
+ X = df_job_title_count[['year']]
48
+ y = df_job_title_count['job_title_count']
49
+ model.fit(X, y)
50
+
51
+ # Obtener el año actual
52
+ current_year = datetime.datetime.now().year
53
+
54
+ # Predecir la cantidad de nuevos job_title que se crearán este año
55
+ current_year_input = st.number_input('Ingresa un año:', value=current_year,
56
+ min_value=current_year,
57
+ max_value=2050, step=1)
58
+ if current_year_input < current_year:
59
+ st.warning('Solo se pueden hacer predicciones para años futuros.')
60
+ current_year_input = current_year
61
+ st.write('Se usará el año actual:', current_year_input)
62
+
63
+ with st.spinner('Prediciendo...'):
64
+ time.sleep(1)
65
+ job_title_count_pred = model.predict([[current_year_input]])
66
+
67
+ # Obtener el último año del dataset
68
+ last_year = df_job_title_count['year'].max()
69
+ last_year_count = \
70
+ df_job_title_count.loc[df_job_title_count['year'] == last_year][
71
+ 'job_title_count'].values[0]
72
+
73
+ # Mostrar resultados
74
+ st.write(
75
+ "Se crearán aproximadamente **{}** nuevos puestos de trabajo este año **{}**.".format(
76
+ int(job_title_count_pred), current_year_input))
77
+ percentage_change = (
78
+ job_title_count_pred - last_year_count) / last_year_count * 100
79
+ percentage_change = float(percentage_change)
80
+ if percentage_change >= 0:
81
+ st.write(
82
+ "Esto representa un aumento del {:.2f}% con respecto al año {}.".format(
83
+ percentage_change, last_year))
84
+ else:
85
+ st.write(
86
+ "Esto representa una disminución del {:.2f}% con respecto al año {}".format(
87
+ abs(percentage_change), last_year))
88
+
89
+ # Crear un gráfico de línea
90
+ line_chart = alt.Chart(df_job_title_count).mark_line().encode(
91
+ x='year',
92
+ y='job_title_count'
93
+ ).properties(
94
+ title='Cantidad de nuevos puestos de trabajo por año',
95
+ width=300,
96
+ height=200
97
+ ).configure_axis(
98
+ labelFontSize=14,
99
+ titleFontSize=16
100
+ )
101
+
102
+ # Crear un punto para mostrar el valor predicho
103
+ point = alt.Chart(df_job_title_count.iloc[-1:]).mark_point(
104
+ color='#5c62ac').encode(
105
+ x='year',
106
+ y='job_title_count'
107
+ )
108
+
109
+ # Mostrar la gráfica actualizada con el valor predicho para el año ingresado
110
+ # st.altair_chart(line_chart, use_container_width=True)
111
+
112
+ # Crear botón para graficar la predicción
113
+ if st.button('Mostrar gráfico de predicción'):
114
+ # Crear dataframe con los años y las predicciones
115
+ years = list(range(last_year, current_year + current_year_input - 2000))
116
+ predictions = model.predict([[year] for year in years])
117
+ df_predictions = pd.DataFrame(
118
+ {'year': years, 'job_title_count_pred': predictions})
119
+
120
+ # Crear gráfico de línea
121
+ line_chart = alt.Chart(df_predictions).mark_line().encode(
122
+ x='year',
123
+ y='job_title_count_pred'
124
+ ).properties(
125
+ width=700,
126
+ height=400
127
+ )
128
+
129
+ # Agregar capa con punto violeta en el valor predicho para el año actual
130
+ current_year_pred = int(model.predict([[current_year_input]])[0])
131
+ point_chart = alt.Chart(pd.DataFrame(
132
+ {'x': [current_year_input], 'y': [current_year_pred]})).mark_point(
133
+ color='#5c62ac',
134
+ size=300,
135
+ stroke='#5c62ac',
136
+ strokeWidth=5).encode(
137
+ x='x',
138
+ y='y'
139
+ )
140
+
141
+ # # ocultar los títulos de los ejes x e y
142
+ # line_chart.configure_axis(
143
+ # x=None,
144
+ # y=None
145
+ # )
146
+
147
+ # Mostrar gráfico con la capa adicional del punto rojo
148
+ st.altair_chart(line_chart + point_chart)
149
+
150
+ st.markdown('''
151
+ <br><br><br>
152
+ <h2>Gracias por su <strong>tiempo y atención!</strong></h2>
153
+ <hr>
154
+ <h3>Nuevas Propuestas...</h3>
155
+ <p>Sí te gusto lo que viste, te invito a ver lo que se vendrá en la
156
+ sección <span style="font-weight:bold">"New"</span></p>
157
+ ''', unsafe_allow_html=True)
158
+
159
+ #
page/new.py ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+
3
+ import pandas as pd
4
+ import streamlit as st
5
+ from sklearn.ensemble import RandomForestRegressor
6
+ from sklearn.feature_extraction.text import CountVectorizer
7
+ from sklearn.naive_bayes import MultinomialNB
8
+ from sklearn.preprocessing import LabelEncoder
9
+
10
+
11
+ def New():
12
+ progress_text = "Operación en progreso... Por favor espere..."
13
+ my_bar = st.progress(0, text=progress_text)
14
+
15
+ for percent_complete in range(100):
16
+ time.sleep(0.05)
17
+ my_bar.progress(percent_complete + 1, text=progress_text)
18
+
19
+ st.markdown("""
20
+ <h1>Proyectos en Beta</h1>
21
+ <hr>
22
+ <p>Estos proyectos todavía no están terminados, pero queremos mostrar un avance de lo que se viene muy pronto...</p>
23
+ """, unsafe_allow_html=True)
24
+
25
+ # Leer los datos y seleccionar las columnas necesarias
26
+ df = pd.read_csv('./ML/ds_salaries.csv')
27
+ df = df[['company_location', 'salary_in_usd']]
28
+
29
+ # Codificar las ubicaciones de las empresas
30
+ le = LabelEncoder()
31
+ df['company_location'] = le.fit_transform(df['company_location'])
32
+
33
+ # Decodificar las ubicaciones de las empresas
34
+ decoded_locations = le.inverse_transform(df['company_location'].unique())
35
+
36
+ # Separar los datos de entrada y salida
37
+ X = df.iloc[:, :-1].values
38
+ y = df.iloc[:, -1].values
39
+
40
+ # Entrenar el modelo
41
+ model = RandomForestRegressor(n_estimators=100, random_state=42)
42
+ model.fit(X, y)
43
+
44
+ # Obtener las ubicaciones de las empresas y sus salarios predichos
45
+ locations = df['company_location'].unique()
46
+ predicted_salaries = model.predict(locations.reshape(-1, 1))
47
+ results_df = pd.DataFrame(
48
+ {'company_location': locations, 'predicted_salary': predicted_salaries})
49
+
50
+ # Decodificar las ubicaciones de las empresas
51
+ results_df['company_location'] = le.inverse_transform(
52
+ results_df['company_location'])
53
+
54
+ # Ordenar los resultados por salario predicho
55
+ results_df = results_df.sort_values('predicted_salary',
56
+ ascending=False).reset_index(drop=True)
57
+
58
+ # Mostrar el título y el top 5 de países mejor pagados
59
+ st.markdown("""
60
+ <h2>Top 5 de países mejor pagados</h2>
61
+ <hr>
62
+ """, unsafe_allow_html=True)
63
+
64
+ # Descripción
65
+ st.markdown("""
66
+ <p>Este código utiliza un algoritmo de <strong>RandomForest</strong>
67
+ 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>
68
+ """, unsafe_allow_html=True)
69
+
70
+ for i in range(5):
71
+ location = results_df.loc[i, 'company_location']
72
+ salary = results_df.loc[i, 'predicted_salary']
73
+ st.markdown(f'### **{location}**: ${salary:,.2f}',
74
+ unsafe_allow_html=True)
75
+
76
+ # Mostrar el menú desplegable para seleccionar un país
77
+ st.markdown("""
78
+ <h2>Seleccionar un país</h2>
79
+ <hr>
80
+ """, unsafe_allow_html=True)
81
+ selected_location = st.selectbox('Ubicación de la empresa',
82
+ decoded_locations)
83
+
84
+ # Mostrar el salario predicho para el país seleccionado
85
+ predicted_salary = results_df.loc[results_df[
86
+ 'company_location'] == selected_location, 'predicted_salary'].iloc[
87
+ 0]
88
+ st.markdown(f'### **{selected_location}**: ${predicted_salary:,.2f}',
89
+ unsafe_allow_html=True)
90
+
91
+ #####
92
+
93
+ # Cargar los datos
94
+ df = pd.read_csv('./assets/dataset_modelo_1.csv')
95
+
96
+ # Crear una lista con todas las skills disponibles
97
+ all_skills = set()
98
+ for skills in df.skills:
99
+ all_skills.update(skills.split(", "))
100
+
101
+ # Crear un diccionario que relaciona cada skill con su índice en el vector
102
+ skill_indices = {skill: i for i, skill in enumerate(all_skills)}
103
+
104
+ # Crear una matriz de características con la frecuencia de cada skill en cada fila
105
+ vectorizer = CountVectorizer(vocabulary=skill_indices.keys(),
106
+ lowercase=False)
107
+ X = vectorizer.fit_transform(df.skills)
108
+
109
+ # Entrenar el modelo
110
+ clf = MultinomialNB()
111
+ clf.fit(X, df.Aptitude)
112
+
113
+ # Crear la interfaz de usuario con Streamlit
114
+ st.markdown("""
115
+ <h2>Predicción de Skills</h2>
116
+ <hr>
117
+ """, unsafe_allow_html=True)
118
+ st.markdown(
119
+ """
120
+ <p>Ingrese el título del trabajo para ver las habilidades más
121
+ importantes.</p>
122
+ <p>Con el modelo de <strong>Naive Bayes</strong> cada skill recibe
123
+ una puntuación con respecto a un título de trabajo, por lo cual,
124
+ al ingresar un título de trabajo el algoritmo retorna las skill más
125
+ utilizadas en las publicaciones de la base de dato de LatamBrain.
126
+ """, unsafe_allow_html=True)
127
+
128
+ title = st.text_input("Título del trabajo")
129
+
130
+ # Crear una función que encuentra las habilidades más importantes para un título dado
131
+ def get_top_skills(title, limit):
132
+ # Filtrar el dataframe por el título dado
133
+ filtered_df = df[df.job_title.str.contains(title, case=False)]
134
+
135
+ # Crear una matriz de características con la frecuencia de cada skill en el dataframe filtrado
136
+ X_filtered = vectorizer.transform(filtered_df.skills)
137
+
138
+ # Calcular la frecuencia de cada habilidad en el dataframe filtrado
139
+ skill_frequencies = X_filtered.sum(axis=0).A1
140
+
141
+ # Obtener los nombres de las habilidades
142
+ skill_names = vectorizer.vocabulary_.keys()
143
+
144
+ # Crear un diccionario que relaciona cada habilidad con su frecuencia
145
+ skill_freq_dict = dict(zip(skill_names, skill_frequencies))
146
+
147
+ # Ordenar las habilidades por frecuencia descendente y devolver las más importantes (según el límite dado)
148
+ top_skills = sorted(skill_freq_dict, key=skill_freq_dict.get,
149
+ reverse=True)[:limit]
150
+ return top_skills
151
+
152
+ if title:
153
+ limit = st.number_input("Cantidad de habilidades a mostrar", value=5,
154
+ min_value=1, max_value=len(all_skills))
155
+ top_skills = get_top_skills(title, limit)
156
+ st.write(
157
+ f"Las {limit} habilidades más importantes para el trabajo de '{title}' son:")
158
+ for skill in top_skills:
159
+ st.write(f"- {skill}")
160
+
161
+ #####
requirements.txt CHANGED
@@ -1,56 +0,0 @@
1
- altair==4.2.2
2
- attrs==23.1.0
3
- blinker==1.6.2
4
- cachetools==5.3.0
5
- certifi==2022.12.7
6
- charset-normalizer==3.1.0
7
- click==8.1.3
8
- decorator==5.1.1
9
- defusedxml==0.7.1
10
- entrypoints==0.4
11
- gitdb==4.0.10
12
- GitPython==3.1.31
13
- idna==3.4
14
- importlib-metadata==6.6.0
15
- Jinja2==3.1.2
16
- joblib==1.2.0
17
- jsonschema==4.17.3
18
- markdown-it-py==2.2.0
19
- MarkupSafe==2.1.2
20
- mdurl==0.1.2
21
- numpy==1.24.2
22
- packaging==23.1
23
- pandas==1.5.3
24
- Pillow==9.5.0
25
- plotly==5.14.1
26
- protobuf==3.20.3
27
- pyarrow==11.0.0
28
- pydeck==0.8.1b0
29
- Pygments==2.15.1
30
- Pympler==1.0.1
31
- pyrsistent==0.19.3
32
- python-dateutil==2.8.2
33
- pytz==2023.3
34
- pytz-deprecation-shim==0.1.0.post0
35
- requests==2.28.2
36
- rich==13.3.4
37
- scikit-learn==1.2.2
38
- scipy==1.10.1
39
- six==1.16.0
40
- smmap==5.0.0
41
- streamlit==1.21.0
42
- streamlit-embedcode==0.1.2
43
- streamlit-option-menu==0.3.2
44
- tableauserverclient==0.25
45
- tenacity==8.2.2
46
- threadpoolctl==3.1.0
47
- toml==0.10.2
48
- toolz==0.12.0
49
- tornado==6.3.1
50
- typing_extensions==4.5.0
51
- tzdata==2023.3
52
- tzlocal==4.3
53
- urllib3==1.26.15
54
- validators==0.20.0
55
- watchdog==3.0.0
56
- zipp==3.15.0