Spaces:
Sleeping
Sleeping
File size: 4,980 Bytes
d9c5f4c a08c239 c966468 a08c239 d9c5f4c 9cf9e4c d9c5f4c a08c239 d9c5f4c ec10bb0 d9c5f4c 051ccf5 d9c5f4c 7f961d9 2c91951 7f961d9 d9c5f4c a5e2017 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | import streamlit as st
from PIL import Image
import pandas as pd
import numpy as np
import base64
import joblib
from sklearn.preprocessing import LabelEncoder, MinMaxScaler
import random
# Configura o pandas para exibir floats com 2 casas decimais
pd.set_option('display.float_format', '{:.2f}'.format)
# Page configuration
st.set_page_config(
page_title="Viabilidade",
page_icon="🔎",
layout="wide",
initial_sidebar_state="expanded"
)
def validar_e_transformar_dados(novos_dados: pd.DataFrame):
# 1. Carregar encoders se existirem
try:
label_encoders = joblib.load(f'modelo/label_encoders.joblib')
except FileNotFoundError:
label_encoders = {}
# 2. Carregar preprocessor
preprocessor = joblib.load(f'modelo/modelo_preprocessor.joblib')
# 3. Obter colunas do treinamento
try:
colunas_numericas = preprocessor.transformers_[0][2]
except:
colunas_numericas = []
colunas_categoricas = list(label_encoders.keys())
todas_colunas_esperadas = colunas_numericas + colunas_categoricas
# 4. Validar colunas
if set(novos_dados.columns) != set(todas_colunas_esperadas):
raise ValueError(f"\n❌ Colunas esperadas: {todas_colunas_esperadas}\n🔴 Encontradas: {novos_dados.columns.tolist()}")
# 5. Aplicar LabelEncoders
for col, encoder in label_encoders.items():
novos_dados[col] = encoder.transform(novos_dados[col])
# 6. Aplicar scaler
dados_transformados = preprocessor.transform(novos_dados)
print("Transformação de novos dados concluída.")
return dados_transformados
# Função para codificar a imagem em base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# Interface do Streamlit
logo = Image.open('img/logo.png')
img = Image.open('img/fundo1.png')
image_path="fundo.png"
img.save(image_path)
# Getting the base64 string
base64_image = encode_image(image_path)
# Usando HTML para centralizar a imagem
st.markdown(
f"""
<div style="display: flex; justify-content: center;">
<img src="data:image/png;base64,{base64_image}" alt="Imagem" style="width: 50%; height: auto;">
</div>
""",
unsafe_allow_html=True
)
st.sidebar.image(logo, caption="", use_container_width=True)
html_page_title = """
<div style="background-color:black;padding=60px">
<p style='text-align:center;font-size:50px;font-weight:bold; color:white'>Estudo de Viabilidade de Projeto</p>
</div>
"""
st.sidebar.markdown(html_page_title, unsafe_allow_html=True)
html_page_mensagem1 = """
<div style="background-color:black;padding=20px">
<p style='text-align:center;font-size:20px;font-weight:bold; color:white'>Enviar a Planilha CSV com as seguintes informações</p>
</div>
"""
st.markdown(html_page_mensagem1, unsafe_allow_html=True)
html_page_mensagem2 = """
<div style="background-color:black;padding=20px">
<p style='text-align:center;font-size:18px;font-weight:bold; color:white'>investimento, preco, custo_variavel, demanda_1, demanda_2, demanda_3, demanda_4, demanda_5, selic</p>
</div>
"""
st.markdown(html_page_mensagem2, unsafe_allow_html=True)
uploaded_files = st.file_uploader(
"Selecione a planilha",
type=["csv"], # Tipos de arquivo permitidos
accept_multiple_files=False # Permite upload de vários arquivos
)
if uploaded_files is not None:
st.write(uploaded_files.name)
df = pd.read_csv(uploaded_files)
colunas = ['investimento', 'preco', 'custo_variavel', 'demanda_1', 'demanda_2', 'demanda_3', 'demanda_4', 'demanda_5', 'selic']
df = df[colunas]
st.table(df.head())
size = df.shape[0]
st.write(f"Primeiras 5 linhas de {size}")
if st.button("Sortear dados"):
indice = random.randint(0, len(df) - 1)
st.write(f"Índice sorteado: {indice}")
df_teste = df.iloc[indice].to_frame(name='Dados para Teste').T
st.table(df_teste)
#if st.button("Analisar dados 🔍", type="primary"):
with st.spinner("Processando imagens..."):
# Processar novos dados para o modelo avaliar
preprocessed_data = validar_e_transformar_dados(df_teste)
# Carregar o modelo treinado e avaliado
best_model = joblib.load('modelo/best_model.joblib')
# Agora você pode usar 'preprocessed_data' para fazer previsões:
predictions = np.argmax(best_model.predict(preprocessed_data), axis=1)
if predictions: # 1
st.subheader(f' 🏅 Pode comprar a champanhe!!!')
st.balloons()
else:
st.subheader(" 😮 Pense melhor nisso.")
st.snow()
else:
st.info("Nenhuma planilha carregada ainda.")
|