import datetime import time from streamlit import components import altair as alt import pandas as pd import streamlit as st from PIL import Image from sklearn.linear_model import LinearRegression from streamlit_option_menu import option_menu import plotly.express as px # from streamlit.components.v1 import IFrame image = Image.open('./assets/logo_latam_brain.png') logo = Image.open('./assets/LatamBrainlogo.png') scrum = Image.open("./assets/Scrum'ProcessLB.png") dashboard_ejemplo = Image.open('./assets/dashboard_ejemplo.png') df = pd.read_csv('./ML/ds_salaries.csv') st.markdown(""" """, unsafe_allow_html=True) # Menu horizontal selected2 = option_menu(None, ["Home", "Projects", "New", "Contact US"], icons=['house', 'bi-archive', "bi-arrow-up-right-square", "bi-envelope"], menu_icon="cast", default_index=0, orientation="horizontal", ) # Pagina HOME if selected2 == "Home": col1, col2 = st.columns(2) col1.markdown("""


LatamBrain

tú cerebro tecnológico

""", unsafe_allow_html=True) col2.image(image, width=300) st.markdown('''

Quienes somos?


LatamBrain es una startup latinoamericana altamente innovadora y tecnológica que está aprovechando las últimas tendencias en tecnología para brindar soluciones personalizadas, seguras y eficientes a sus clientes. Si busca soluciones que lo preparen para el futuro, no dude en contactar a LatamBrain.

LatamBrain, tú cerebro tecnológico!

''', unsafe_allow_html=True) st.markdown('''

Servicios


''', unsafe_allow_html=True) col1, col2, col3 = st.columns(3) col1.markdown('''
  • Data Análisis
  • Reportes financieros
  • KPI's personalizados
  • Asesoramientos y Plan de Ejecución
  • Y más.. ''', unsafe_allow_html=True) col2.markdown('''
  • Machine Learning
  • Deep Learning
  • Automatización de con ML
  • ChatBot
  • Y más... ''', unsafe_allow_html=True) col3.markdown('''
  • Cloud AWS
  • Máxima seguridad en tús datos
  • Disponibilidad y velocidad de datos
  • Y más... ''', unsafe_allow_html=True) st.markdown('''

    Nosotros y Como Trabajamos


    ''', unsafe_allow_html=True) st.image(scrum) # st.image(logo, width=700) st.markdown('''

    Opiniones


    ''', unsafe_allow_html=True) col1, col2, col3 = st.columns(3) catriel = '''

    Catriel Pérez

    Data Engineer

    Ha sido una experiencia increíble trabajar con este equipo. Todos 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!

    Contactame...

    24 de abril del 2023

    ''' mati = '''

    Matias Benitez

    Machine Learning

    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.

    Contactame...

    24 de abril del 2023

    ''' luis = '''

    Luis Rascón

    Data Analyst

    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.

    Contactame...

    24 de abril del 2023

    ''' col1.markdown(luis, unsafe_allow_html=True) col2.markdown(mati, unsafe_allow_html=True) col3.markdown(catriel, unsafe_allow_html=True) # Pagina Projects if selected2 == "Projects": st.markdown('''

    Data World Jobs

    ''', unsafe_allow_html=True) st.markdown('''

    Situación actual


    ''', unsafe_allow_html=True) st.write(''' Primero, es importante tener en cuenta que la demanda de trabajos relacionados con la tecnología y la analítica de datos ha aumentado significativamente en los últimos años, lo que ha llevado a que muchos trabajos de data analyst y data scientist se hayan convertido en algunas de las posiciones más populares y mejor remuneradas en el mercado laboral. En Latinoamérica, el crecimiento de la industria tecnológica y de la analítica de datos se ha ido acelerando en los últimos años, especialmente en países como México, Brasil, Argentina, Colombia y Chile. Estos países han experimentado una demanda creciente de profesionales en el área de la tecnología y la analítica de datos, lo que ha llevado a que la mayoría de los empleos en estas áreas se concentren en las grandes ciudades de estos países. Según los informes de los portales de empleo en línea, las posiciones de data analyst en Latinoamérica tienen un salario promedio anual de alrededor de $ 25,000 a $ 40,000 dólares. Sin embargo, es importante tener en cuenta que el salario puede variar dependiendo del país, la ciudad, la experiencia del profesional y la empresa. Además, hay una serie de habilidades que son muy importantes para los profesionales que buscan trabajar en el área de data. Algunas de las habilidades más importantes para un data analyst son: Conocimientos avanzados en Excel y otras herramientas de análisis de datos como Python, R, SQL, entre otras. Habilidad para trabajar con grandes volúmenes de datos y bases de datos complejas. Conocimientos de estadística y análisis de datos. Habilidad para presentar los resultados de los análisis de datos en informes y presentaciones claras y precisas. Habilidad para trabajar en equipo y colaborar con otros profesionales. En resumen, la industria de la tecnología y la analítica de datos está en constante crecimiento en Latinoamérica, lo que ha llevado a una alta demanda de profesionales en el área de data. Los salarios en este campo son competitivos y las habilidades requeridas para ser un buen data analyst incluyen una combinación de conocimientos técnicos y habilidades blandas. ''', unsafe_allow_html=True) st.write("Este es mi dashboard de Tableau:") ####### st.markdown('''''', unsafe_allow_html=True) tableau_url = "https://public.tableau.com/views/latam_brain_mvp/DashboardGeneralDataJobs?:language=es-ES&:display_count=n&:origin=viz_share_link" # Incruste el dashboard de Tableau utilizando components.html st.components.v1.html( f'', height=800) ######### st.markdown('''

    Dashboard contexto actual


    ''', unsafe_allow_html=True) st.image(dashboard_ejemplo, width=700) # Crea un gráfico st.bar_chart(df['salary']) st.title('Ejemplo de gráfico de barras apiladas') chart = alt.Chart(df).mark_bar().encode( x='work_year:N', y='salary:Q', color='categoria:N' ).properties( width=700, height=400 ) st.altair_chart(chart, use_container_width=True) st.title('Ejemplo de gráfico de líneas') chart = alt.Chart(df).mark_line().encode( x='work_year:N', y='salary:Q', color='categoria:N' ).properties( width=700, height=400 ) st.altair_chart(chart, use_container_width=True) st.title('Ejemplo de gráfico de dispersión') chart = alt.Chart(df).mark_point().encode( x='work_year:Q', y='salary:Q', color='genero:N' ).properties( width=700, height=400 ) st.altair_chart(chart, use_container_width=True) st.title('Ejemplo de gráfico de pastel') fig = px.pie(df, values='work_year', names='salary') st.plotly_chart(fig, use_container_width=True) st.markdown('''

    Nuestra Solución


    ''', unsafe_allow_html=True) st.write(''' Gracias por compartir su análisis sobre el mercado de empleo de Data en Latinoamérica.Sobre la base de los hallazgos que ha presentado, se pueden identificar algunas oportunidades y desafíos clave para el crecimiento del sector en la región. Algunas de las principales oportunidades incluyen la creciente demanda de habilidades en Data Science y Machine Learning, la expansión de la adopción de tecnologías de Big Data, y el aumento del interés en la analítica avanzada.Estas tendencias sugieren que hay un mercado creciente para los profesionales de datos en Latinoamérica. Al mismo tiempo, sin embargo, hay algunos desafíos significativos que enfrenta el mercado de empleo de datos en la región.En particular, la falta de habilidades y talento especializado es un problema importante, ya que la mayoría de las empresas no tienen el personal necesario para implementar proyectos de datos complejos.Además, la falta de inversión en tecnologías y herramientas de datos adecuadas y la falta de infraestructura digital suficiente también son barreras para el crecimiento del mercado. Como especialista en Data Analytics, una propuesta de negocio para abordar estos desafíos y aprovechar las oportunidades en el mercado de empleo de datos de Latinoamérica podría ser ofrecer servicios de consultoría y formación para empresas que deseen adoptar tecnologías de Big Data y analítica avanzada.Además, se podría crear una plataforma de datos en línea que brinde acceso a herramientas y recursos de análisis de datos para empresas y profesionales de datos en toda la región.Esta plataforma también podría ofrecer oportunidades de trabajo y proyectos de datos para profesionales de datos en la región. En resumen, el mercado de empleo de datos en Latinoamérica ofrece grandes oportunidades de crecimiento, pero también enfrenta desafíos importantes.Ofrecer servicios de consultoría y formación para empresas que deseen adoptar tecnologías de Big Data y crear una plataforma de datos en línea podría ser una forma de abordar estos desafíos y aprovechar las oportunidades en el mercado de datos de Latinoamérica.''' ) st.markdown('''

    Dashboard Solución


    ''', unsafe_allow_html=True) st.image(dashboard_ejemplo, width=700) st.markdown('''

    Predicción de nuevos puestos de trabajo con ML


    ''', unsafe_allow_html=True) # st.set_page_config(page_title="Predicción de nuevos puestos de trabajo", # page_icon=":bar_chart:", layout="wide") # Cargar los datos # Seleccionar las columnas relevantes df_relevant = df[['job_title', 'work_year']] # Transformar la columna work_year en un tipo date en la columna date df_relevant['date'] = pd.to_datetime(df_relevant['work_year'], format='%Y') # Agregar una columna con el año de creación df_relevant['year'] = pd.DatetimeIndex(df_relevant['date']).year # Contar la cantidad de job_title creados por año job_title_count = df_relevant.groupby('year').count()['job_title'] # Crear un dataframe con la cantidad de job_title creados por año df_job_title_count = pd.DataFrame( {'year': job_title_count.index, 'job_title_count': job_title_count.values}) # Crear un modelo de regresión lineal model = LinearRegression() # Entrenar el modelo con los datos históricos X = df_job_title_count[['year']] y = df_job_title_count['job_title_count'] model.fit(X, y) # Obtener el año actual current_year = datetime.datetime.now().year # Predecir la cantidad de nuevos job_title que se crearán este año current_year_input = st.number_input('Ingresa un año:', value=current_year, min_value=current_year, max_value=2050, step=1) if current_year_input < current_year: st.warning('Solo se pueden hacer predicciones para años futuros.') current_year_input = current_year st.write('Se usará el año actual:', current_year_input) with st.spinner('Prediciendo...'): time.sleep(1) job_title_count_pred = model.predict([[current_year_input]]) # Obtener el último año del dataset last_year = df_job_title_count['year'].max() last_year_count = \ df_job_title_count.loc[df_job_title_count['year'] == last_year][ 'job_title_count'].values[0] # Mostrar resultados st.write( "Se crearán aproximadamente **{}** nuevos puestos de trabajo este año **{}**.".format( int(job_title_count_pred), current_year_input)) percentage_change = ( job_title_count_pred - last_year_count) / last_year_count * 100 percentage_change = float(percentage_change) if percentage_change >= 0: st.write( "Esto representa un aumento del {:.2f}% con respecto al año {}.".format( percentage_change, last_year)) else: st.write( "Esto representa una disminución del {:.2f}% con respecto al año {}".format( abs(percentage_change), last_year)) # Crear un gráfico de línea line_chart = alt.Chart(df_job_title_count).mark_line().encode( x='year', y='job_title_count' ).properties( title='Cantidad de nuevos puestos de trabajo por año', width=300, height=200 ).configure_axis( labelFontSize=14, titleFontSize=16 ) # Crear un punto para mostrar el valor predicho point = alt.Chart(df_job_title_count.iloc[-1:]).mark_point( color='#5c62ac').encode( x='year', y='job_title_count' ) # Mostrar la gráfica actualizada con el valor predicho para el año ingresado # st.altair_chart(line_chart, use_container_width=True) # Crear botón para graficar la predicción if st.button('Mostrar gráfico de predicción'): # Crear dataframe con los años y las predicciones years = list(range(last_year, current_year + current_year_input - 2000)) predictions = model.predict([[year] for year in years]) df_predictions = pd.DataFrame( {'year': years, 'job_title_count_pred': predictions}) # Crear gráfico de línea line_chart = alt.Chart(df_predictions).mark_line().encode( x='year', y='job_title_count_pred' ).properties( width=700, height=400 ) # Agregar capa con punto violeta en el valor predicho para el año actual current_year_pred = int(model.predict([[current_year_input]])[0]) point_chart = alt.Chart(pd.DataFrame( {'x': [current_year_input], 'y': [current_year_pred]})).mark_point( color='#5c62ac', size=300, stroke='#5c62ac', strokeWidth=5).encode( x='x', y='y' ) # # ocultar los títulos de los ejes x e y # line_chart.configure_axis( # x=None, # y=None # ) # Mostrar gráfico con la capa adicional del punto rojo st.altair_chart(line_chart + point_chart) st.markdown('''


    Gracias por su tiempo y atención!


    Nuevas Propuestas...

    Sí te gusto lo que viste, te invito a ver lo que se vendrá en la sección "New"

    ''', unsafe_allow_html=True) # if selected2 == "New": progress_text = "Operation in progress. Please wait." my_bar = st.progress(0, text=progress_text) for percent_complete in range(100): time.sleep(0.05) my_bar.progress(percent_complete + 1, text=progress_text) ##### import pandas as pd import streamlit as st from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB # Cargar los datos df = pd.read_csv('./assets/dataset_modelo_1.csv') # Crear una lista con todas las skills disponibles all_skills = set() for skills in df.skills: all_skills.update(skills.split(", ")) # Crear un diccionario que relaciona cada skill con su índice en el vector skill_indices = {skill: i for i, skill in enumerate(all_skills)} # Crear una matriz de características con la frecuencia de cada skill en cada fila vectorizer = CountVectorizer(vocabulary=skill_indices.keys(), lowercase=False) X = vectorizer.fit_transform(df.skills) # Entrenar el modelo clf = MultinomialNB() clf.fit(X, df.Aptitude) # Crear la interfaz de usuario con Streamlit st.title("Predicción de aptitud para un 'NUEVO' trabajo") st.write( "Ingrese el título del 'Nuevo' trabajo para ver que habilidades " "son las más " "importantes.") title = st.multiselect("Título del trabajo", df.job_title.unique()) # Crear una función que encuentra las habilidades más importantes para un título dado def get_top_skills(title, limit): # Filtrar el dataframe por el título dado filtered_df = df[df.job_title == title] # Crear una matriz de características con la frecuencia de cada skill en el dataframe filtrado X_filtered = vectorizer.transform(filtered_df.skills) # Calcular la frecuencia de cada habilidad en el dataframe filtrado skill_frequencies = X_filtered.sum(axis=0).A1 # Obtener los nombres de las habilidades skill_names = vectorizer.vocabulary_.keys() # Crear un diccionario que relaciona cada habilidad con su frecuencia skill_freq_dict = dict(zip(skill_names, skill_frequencies)) # Ordenar las habilidades por frecuencia descendente y devolver las más importantes (según el límite dado) top_skills = sorted(skill_freq_dict, key=skill_freq_dict.get, reverse=True)[:limit] return top_skills if title: limit = st.number_input("Cantidad de habilidades a mostrar", value=5, min_value=1, max_value=len(all_skills)) top_skills = get_top_skills(title[0], limit) st.write( f"Las {limit} habilidades más importantes para el trabajo de '{title[0]}' son:") for skill in top_skills: st.write(f"- {skill}") ##### ##### if selected2 == "Contact US": st.markdown('''

    Presupuesto


    ''', unsafe_allow_html=True) # Define los precios para cada opción precio_analisis = 3500 precio_ML = 5500 precio_app = 3000 precio_mantenimiento = 550 # Define las opciones como un diccionario de la forma {nombre_opción: precio_opción} opciones = { "Opción 1": precio_analisis, "Opción 2": precio_ML, "Opción 3": precio_app, "Opción 4": precio_mantenimiento } # Crea un checkbox para cada opción analisis = st.checkbox("Análisis y Reportes") ML = st.checkbox("Algoritmos de ML aplicado") app = st.checkbox("Creación de una App") # mantenimiento = st.checkbox('Mantenimiento') # Crea un campo numérico para la cantidad cantidad = st.number_input("Meses de mantenimiento:", min_value=0, value=0) mes_mantenimiento = cantidad * precio_mantenimiento # Calcula el total en función de las opciones elegidas total = mes_mantenimiento + sum( [opciones[opcion] for opcion, seleccionada in zip(opciones.keys(), [analisis, ML, app]) if seleccionada]) # Muestra el total st.markdown(f''' Total $: {total} :rocket: ''', unsafe_allow_html=True) st.markdown('''

    Datos de contactos


    ''', unsafe_allow_html=True) # Crea campos de entrada para el nombre, correo electrónico y mensaje nombre = st.text_input("Nombre completo") email = st.text_input("Correo electrónico") mensaje = st.text_area("Mensaje") # Crea un botón para enviar el formulario enviar = st.button("Enviar") # Si el botón es presionado, muestra un mensaje de confirmación if enviar: if nombre and email and mensaje: st.write( "¡Gracias por tu mensaje! Nos pondremos en contacto contigo pronto.") else: st.error("Por favor completa todos los campos requeridos.")