data_world_jobs / app.py
perezcatriel's picture
projects
4f30b91
raw
history blame
29.9 kB
import streamlit as st
from PIL import Image
from streamlit_option_menu import option_menu
import pandas as pd
import datetime
import time
import altair as alt
import pandas as pd
import streamlit as st
from sklearn.linear_model import LinearRegression
image = Image.open('./assets/logo_latam_brain.png')
logo = Image.open('./assets/LatamBrainlogo.png')
scrum = Image.open("./assets/Scrum'ProcessLB.png")
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">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>""",
unsafe_allow_html=True)
# 1. as sidebar menu
# with st.sidebar:
# selected = option_menu("Main Menu", ["Home", 'Contact'],
# icons=['house', 'gear'], menu_icon="cast", default_index=1)
# selected
# 2. horizontal menu
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",
)
# styles={
# "container": {"padding": "0!important", "background-color": "#fafafa"},
# "icon": {"color": "orange", "font-size": "25px"},
# "nav-link": {"font-size": "25px", "text-align": "left", "margin":"0px", "--hover-color": "#eee"},
# "nav-link-selected": {"background-color": "green"},
# }
if selected2 == "Home":
# col1, col2, col3 = st.columns(3)
#
# col1.write(' ')
# st.image(logo, width=700)
# col3.write(' ')
col1, col2 = st.columns(2)
col1.markdown("""
<br/>
<br/>
<hr/>
<h1 style="text-align:center; font-weight:bold;
text-shadow:0px 0px 10px #5c62ac">LatamBrain</h1>
<h5 style="text-align:center;color:#5c62ac">tú cerebro tecnológico</h5>
<hr />
""", unsafe_allow_html=True)
col2.image(image, width=300)
st.markdown('''
<br>
<h2>Quienes somos?</h2>
<hr>
<p>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.
</p>
<p>LatamBrain, tú cerebro tecnológico!</p>
''', unsafe_allow_html=True)
st.markdown('''
<br>
<h2>Servicios</h2>
<hr>
''', unsafe_allow_html=True)
col1, col2, col3 = st.columns(3)
col1.markdown('''
<li>Data Análisis
<li>Reportes financieros
<li>KPI's personalizados
<li>Asesoramientos y Plan de Ejecución
<li>Y más...
''', unsafe_allow_html=True)
col2.markdown('''
<li>Machine Learning
<li>Deep Learning
<li>Automatización de con ML
<li>ChatBot
<li>Y más...
''', unsafe_allow_html=True)
col3.markdown('''
<li>Cloud AWS
<li>Máxima seguridad en tús datos
<li>Disponibilidad y velocidad de datos
<li>Y más...
''', unsafe_allow_html=True)
st.markdown('''
<br>
<h2>Nosotros y Como Trabajamos</h2>
<hr>
''', unsafe_allow_html=True)
st.image(scrum)
# st.image(logo, width=700)
st.markdown('''
<br>
<h2>Opiniones</h2>
<hr>
''', unsafe_allow_html=True)
col1, col2, col3 = st.columns(3)
catriel = '''
<h4>Catriel Pérez</h4>
<a href="mailto:perezcatriel@gmail.com">Contactame</a>
<p>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!</p>
<p>24 de abril del 2023</p>
'''
mati = '''
<h4>Matias Benitez</h4>
<a href="mailto:matiasbenitezcarrizo@gmail.com">Contactame</a>
<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>
<p>24 de abril del 2023</p>
'''
luis = '''
<h4>Luis Rascón</h4>
<a href="mailto:luis.francisco.rc@gmail.com">Contactame</a>
<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>
<p>24 de abril del 2023</p>
'''
col1.markdown(luis, unsafe_allow_html=True)
col2.markdown(mati, unsafe_allow_html=True)
col3.markdown(catriel, unsafe_allow_html=True)
if selected2 == "Projects":
st.markdown('''
<h1 style="text-shadow:0 0 10px #5c62ac;font-weight:bold">Data
World Jobs</h1>
''', unsafe_allow_html=True)
st.markdown('''
<h2>Situación actual</h2>
<hr>
''', 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('dashboard')
st.markdown('''
https://public.tableau.com/views/sp500_16798321799250/sp500?:language=en-US&:display_count=n&:origin=viz_share_link
''', unsafe_allow_html=True)
st.markdown('''
<div class='tableauPlaceholder' id='viz1682356202051' style='position: relative'><noscript><a href='https:&#47;&#47;public.tableau.com&#47;views&#47;sp500_analyst&#47;Sheet1?:language=es-ES&amp;:display_count=n&amp;:origin=viz_share_link'><img alt='sp500 ' src='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;sp&#47;sp500_16798321799250&#47;sp500&#47;1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='embed_code_version' value='3' /> <param name='site_root' value='' /><param name='name' value='sp500_16798321799250&#47;sp500' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;sp&#47;sp500_16798321799250&#47;sp500&#47;1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='language' value='en-US' /></object></div> <script type='text/javascript'> var divElement = document.getElementById('viz1682356202051'); var vizElement = divElement.getElementsByTagName('object')[0]; vizElement.style.width='100%';vizElement.style.height=(divElement.offsetWidth*0.75)+'px'; var scriptElement = document.createElement('script'); scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js'; vizElement.parentNode.insertBefore(scriptElement, vizElement); </script>
''', unsafe_allow_html=True)
# streamlit_app.py
import streamlit as st
# # Set up connection.
# tableau_auth = TSC.PersonalAccessTokenAuth(
# st.secrets["tableau"]["token_name"],
# st.secrets["tableau"]["personal_access_token"],
# st.secrets["tableau"]["site_id"],
# )
# server = TSC.Server(st.secrets["tableau"]["server_url"],
# use_server_version=True)
# Get various data.
# Explore the tableauserverclient library for more options.
# Uses st.cache_data to only rerun when the query changes or after 10 min.
# @st.cache_data(ttl=600)
# def run_query():
# with server.auth.sign_in(tableau_auth):
# # Get all workbooks.
# workbooks, pagination_item = server.workbooks.get()
# workbooks_names = [w.name for w in workbooks]
#
# # Get views for first workbook.
# server.workbooks.populate_views(workbooks[0])
# views_names = [v.name for v in workbooks[0].views]
#
# # Get image & CSV for first view of first workbook.
# view_item = workbooks[0].views[0]
# server.views.populate_image(view_item)
# server.views.populate_csv(view_item)
# view_name = view_item.name
# view_image = view_item.image
# # `view_item.csv` is a list of binary objects, convert to str.
# view_csv = b"".join(view_item.csv).decode("utf-8")
#
# return workbooks_names, views_names, view_name, view_image, view_csv
#
#
# workbooks_names, views_names, view_name, view_image, view_csv = run_query()
#
# # Print results.
# st.subheader("📓 Workbooks")
# st.write("Found the following workbooks:", ", ".join(workbooks_names))
#
# st.subheader("👁️ Views")
# st.write(
# f"Workbook *{workbooks_names[0]}* has the following views:",
# ", ".join(views_names),
# )
#
# st.subheader("🖼️ Image")
# st.write(f"Here's what view *{view_name}* looks like:")
# st.image(view_image, width=300)
#
# st.subheader("📊 Data")
# st.write(f"And here's the data for view *{view_name}*:")
# st.write(pd.read_csv(StringIO(view_csv)))
#
# code = """
# <div class='tableauPlaceholder' id='viz1682353778450' style='position: relative'><noscript><a href='https:&#47;&#47;public.tableau.com&#47;views&#47;sp500_analyst&#47;Sheet1?:language=es-ES&amp;:display_count=n&amp;:origin=viz_share_link'><img alt='sp500 ' src='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;sp&#47;sp500_16798321799250&#47;sp500&#47;1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='embed_code_version' value='3' /> <param name='site_root' value='' /><param name='name' value='sp500_16798321799250&#47;sp500' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;sp&#47;sp500_16798321799250&#47;sp500&#47;1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='language' value='en-US' /></object></div> <script type='text/javascript'> var divElement = document.getElementById('viz1682353778450'); var vizElement = divElement.getElementsByTagName('object')[0]; vizElement.style.width='100%';vizElement.style.height=(divElement.offsetWidth*0.75)+'px'; var scriptElement = document.createElement('script'); scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js'; vizElement.parentNode.insertBefore(scriptElement, vizElement); </script>
# """
# embed_code(code, "html")
# # st.write(
# "<div class='tableauPlaceholder' id='viz1682353778450' style='position: relative'><noscript><a href='https:&#47;&#47;public.tableau.com&#47;views&#47;sp500_analyst&#47;Sheet1?:language=es-ES&amp;:display_count=n&amp;:origin=viz_share_link'><img alt='sp500 ' src='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;sp&#47;sp500_16798321799250&#47;sp500&#47;1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='embed_code_version' value='3' /> <param name='site_root' value='' /><param name='name' value='sp500_16798321799250&#47;sp500' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;sp&#47;sp500_16798321799250&#47;sp500&#47;1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='language' value='en-US' /></object></div> <script type='text/javascript'> var divElement = document.getElementById('viz1682353778450'); var vizElement = divElement.getElementsByTagName('object')[0]; vizElement.style.width='100%';vizElement.style.height=(divElement.offsetWidth*0.75)+'px'; var scriptElement = document.createElement('script'); scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js'; vizElement.parentNode.insertBefore(scriptElement, vizElement); </script>",
# unsafe_allow_html=True)
st.markdown('''
<br>
<h2>Nuestra Solución</h2>
<hr>
''', 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.write('dashboard')
st.write('modelo de ML prediccion')
# st.set_page_config(page_title="Predicción de nuevos puestos de trabajo",
# page_icon=":bar_chart:", layout="wide")
st.title('Predicción de nuevos puestos de trabajo con ML')
# Cargar los datos
df = pd.read_csv(
'/home/catriel/Documents/data_world_jobs/data/ds_salaries.csv')
# 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 rojo 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'
)
# Mostrar gráfico con la capa adicional del punto rojo
st.altair_chart(line_chart + point_chart)
st.markdown('''
<br>
<h2>Gracias por su tiempo y atención!</h2>
<hr>
<h3>Nuevas Propuestas...</h3>
<p>Sí te gusto lo que viste, te invito a ver lo que se vendrá en la
sección "New"</p>
''', unsafe_allow_html=True)
# col1, col2 = st.columns(2)
# col1.image(image)
# col2.markdown(f"""
#
#
#
#
# <div id="carouselExampleCaptions" class="carousel slide">
# <div class="carousel-indicators">
# <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
# <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="Slide 2"></button>
# <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="Slide 3"></button>
# </div>
# <div class="carousel-inner">
# <div class="carousel-item active">
# {image}
# <div class="carousel-caption d-none d-md-block">
# <h5>First slide label</h5>
# <p>Some representative placeholder content for the first slide.</p>
# </div>
# </div>
# <div class="carousel-item">
# {image}
# <div class="carousel-caption d-none d-md-block">
# <h5>Second slide label</h5>
# <p>Some representative placeholder content for the second slide.</p>
# </div>
# </div>
# <div class="carousel-item">
# <img src="..." class="d-block w-100" alt="...">
# <div class="carousel-caption d-none d-md-block">
# <h5>Third slide label</h5>
# <p>Some representative placeholder content for the third slide.</p>
# </div>
# </div>
# </div>
# <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
# <span class="carousel-control-prev-icon" aria-hidden="true"></span>
# <span class="visually-hidden">Previous</span>
# </button>
# <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
# <span class="carousel-control-next-icon" aria-hidden="true"></span>
# <span class="visually-hidden">Next</span>
# </button>
# </div>
# """, unsafe_allow_html=True)
if selected2 == "New":
col1, col2, col3 = st.columns(3)
col1.markdown(f"""
<div class="container text-center">
<div class="row align-items-start">
<div class="col">
email
</div>
<div class="col">
github
</div>
<div class="col">
{image}
</div>
</div>
</div>
""", unsafe_allow_html=True)
col2.balloons()
container = st.container()
container.markdown("Hello")
container.write('aqui y ahora')
container.image(image)
import streamlit as st
st.success('This is a success message!', icon="✅")
import streamlit as st
import time
progress_text = "Operation in progress. Please wait."
my_bar = st.progress(0, text=progress_text)
for percent_complete in range(100):
time.sleep(0.1)
my_bar.progress(percent_complete + 1, text=progress_text)
if selected2 == "Contact US":
st.markdown('''
<h2>Presupuesto</h2>
<hr>
''', 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 $: <span style="background:#5c62ac;\
border-radius:5px;padding:5px">{total}</span>
:rocket:
''', unsafe_allow_html=True)
st.markdown('''
<br>
<h2>Datos de contactos</h2>
<hr>
''', 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.")