Arthur-Attili commited on
Commit
e4104df
·
verified ·
1 Parent(s): a9bc51e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -88
app.py CHANGED
@@ -1,3 +1,9 @@
 
 
 
 
 
 
1
  # app.py
2
  import pandas as pd
3
  import requests
@@ -6,80 +12,15 @@ import itertools
6
  from collections import defaultdict
7
  import gradio as gr
8
  import time
9
- from unicodedata import normalize
10
 
11
  # 🔧 CONFIGURAÇÕES GLOBAIS
 
12
  FILE_ID = "1XvNz7DlWioT64uNdcfBSL8Ui2nRSi9gT"
13
  URL = f"https://drive.google.com/uc?export=download&id={FILE_ID}"
14
 
15
  # Variável global para armazenar o DataFrame
16
  df = None
17
 
18
- def padronizar_nomes_administradoras(nome):
19
- """Padroniza nomes de administradoras com mapeamento específico."""
20
- if pd.isna(nome):
21
- return nome
22
-
23
- # Limpeza básica
24
- nome_limpo = (
25
- str(nome)
26
- .strip()
27
- .lower()
28
- .replace('$', 's')
29
- .replace(' ', ' ')
30
- .strip()
31
- )
32
-
33
- # Remove acentos
34
- nome_limpo = normalize('NFKD', nome_limpo).encode('ASCII', 'ignore').decode('ASCII')
35
-
36
- # 👇 MAPEAMENTO COMPLETO para administradoras de imóveis
37
- mapeamento = {
38
- # Correções de nomes errados → nomes corretos
39
- 'ademicon': 'Ademicon',
40
- 'ancora': 'Ancora',
41
- 'bb': 'Banco do Brasil',
42
- 'banrisul': 'Banrisul',
43
- 'bradesco': 'Bradesco',
44
- 'caixa': 'Caixa XS5',
45
- 'xs5': 'Caixa XS5',
46
- 'cnp': 'Caixa CNP',
47
- 'canopus': 'Canopus',
48
- 'embracon': 'Embracon',
49
- 'ford': 'Ford',
50
- 'honda': 'Honda',
51
- 'hs': 'HS',
52
- 'magalu': 'Magazine Luiza',
53
- 'maggi': 'Maggi',
54
- 'mycon': 'Mycon',
55
- 'porto': 'Porto Seguro',
56
- 'porto-vp': 'Porto Seguro VP',
57
- 'remaza': 'Remaza',
58
- 'rodobens': 'Rodobens',
59
- 'santander': 'Santander',
60
- 'scania': 'Scania',
61
- 'serello': 'Serello',
62
- 'servopa': 'Servopa',
63
- 'sicoobu': 'Sicoob Unicoob',
64
- 'sicredi': 'Sicredi',
65
- 'sponchiado': 'Sponchiado',
66
- 'unifisa': 'Unifisa',
67
- 'volkswagen': 'Volkswagen',
68
- 'yamaha': 'Yamaha',
69
- 'zema': 'Zema'
70
- }
71
-
72
- return mapeamento.get(nome_limpo, nome_limpo)
73
-
74
- def verificar_administradoras():
75
- """Mostra como ficaram as administradoras após a padronização."""
76
- if df is not None and 'administradora' in df.columns:
77
- print("🔍 Administradoras únicas após padronização:")
78
- administradoras_unicas = df[df['tipo_do_bem'].str.lower() == 'imovel']['administradora'].unique()
79
- for i, adm in enumerate(sorted(administradoras_unicas), 1):
80
- print(f"{i:2d}. {adm}")
81
- print(f"Total: {len(administradoras_unicas)} administradoras")
82
-
83
  def carregar_planilha():
84
  """Carrega e prepara a planilha para análise."""
85
  global df
@@ -93,11 +34,6 @@ def carregar_planilha():
93
  # Padroniza nomes das colunas
94
  df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
95
 
96
- # 👇 NOVA PADRONIZAÇÃO DAS ADMINISTRADORAS
97
- if 'administradora' in df.columns:
98
- # Aplica a padronização personalizada
99
- df['administradora'] = df['administradora'].apply(padronizar_nomes_administradoras)
100
-
101
  # Converte colunas numéricas
102
  colunas_numericas = ['valor_credito', 'valor_entrada', 'valor_parcela', 'saldo_devedor', 'qtd_parcelas']
103
  for coluna in colunas_numericas:
@@ -112,10 +48,6 @@ def carregar_planilha():
112
  df.drop_duplicates(inplace=True)
113
 
114
  print("✅ Planilha carregada com sucesso")
115
-
116
- # Mostra as administradoras padronizadas
117
- verificar_administradoras()
118
-
119
  return True
120
 
121
  except Exception as e:
@@ -143,8 +75,6 @@ def buscar_combinacoes(credito_desejado, entrada_desejada, parcela_desejada, adm
143
  # Certifica-se de que administradoras é uma lista (Gradio retorna tupla)
144
  if isinstance(administradoras, tuple):
145
  administradoras = list(administradoras)
146
- # 👇 CORREÇÃO IMPORTANTE: Remove o .lower() aqui
147
- administradoras = [a.strip() for a in administradoras]
148
  df_filtrado = df_filtrado[df_filtrado['administradora'].isin(administradoras)]
149
 
150
  if df_filtrado.empty:
@@ -231,13 +161,9 @@ def ajustar_e_buscar(credito_desejado, entrada_desejada, parcela_desejada, admin
231
 
232
  # Prepara a lista de administradoras para o Gradio
233
  def get_administradoras_options():
234
- if df is not None and 'administradora' in df.columns:
235
- adm_list = (
236
- df[df['tipo_do_bem'].str.lower() == 'imovel']['administradora']
237
- .dropna()
238
- .unique()
239
- )
240
- return sorted(adm_list.tolist())
241
  return []
242
 
243
  # Criando a interface Gradio
@@ -319,11 +245,10 @@ with gr.Blocks(title="Sistema de Busca de Consórcio Im��vel") as demo:
319
  entrada_input = gr.Number(label="Entrada Desejada (R$)", value=30000, step=1000)
320
  parcela_input = gr.Number(label="Parcela Desejada (R$)", value=1500, step=100)
321
 
322
- administradoras_options = get_administradoras_options()
323
  administradoras_multiselect = gr.CheckboxGroup(
324
  label="Filtrar por Administradoras",
325
- choices=administradoras_options,
326
- value=administradoras_options # Seleciona todas por padrão
327
  )
328
 
329
  submit_btn = gr.Button("🔍 Buscar Combinações", variant="primary")
@@ -341,4 +266,4 @@ with gr.Blocks(title="Sistema de Busca de Consórcio Imóvel") as demo:
341
 
342
  # Inicia o aplicativo Gradio
343
  if __name__ == "__main__":
344
- demo.launch()
 
1
+ """Imovel.ipynb
2
+ Automatically generated by Colab.
3
+ Original file is located at
4
+ https://colab.research.google.com/drive/1DZAQZfrXvTy358Vg2qfUg_ge6b3kcgBy
5
+ """
6
+
7
  # app.py
8
  import pandas as pd
9
  import requests
 
12
  from collections import defaultdict
13
  import gradio as gr
14
  import time
 
15
 
16
  # 🔧 CONFIGURAÇÕES GLOBAIS
17
+ # Certifique-se de que este FILE_ID esteja acessível publicamente ou para "Qualquer pessoa com o link"
18
  FILE_ID = "1XvNz7DlWioT64uNdcfBSL8Ui2nRSi9gT"
19
  URL = f"https://drive.google.com/uc?export=download&id={FILE_ID}"
20
 
21
  # Variável global para armazenar o DataFrame
22
  df = None
23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  def carregar_planilha():
25
  """Carrega e prepara a planilha para análise."""
26
  global df
 
34
  # Padroniza nomes das colunas
35
  df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
36
 
 
 
 
 
 
37
  # Converte colunas numéricas
38
  colunas_numericas = ['valor_credito', 'valor_entrada', 'valor_parcela', 'saldo_devedor', 'qtd_parcelas']
39
  for coluna in colunas_numericas:
 
48
  df.drop_duplicates(inplace=True)
49
 
50
  print("✅ Planilha carregada com sucesso")
 
 
 
 
51
  return True
52
 
53
  except Exception as e:
 
75
  # Certifica-se de que administradoras é uma lista (Gradio retorna tupla)
76
  if isinstance(administradoras, tuple):
77
  administradoras = list(administradoras)
 
 
78
  df_filtrado = df_filtrado[df_filtrado['administradora'].isin(administradoras)]
79
 
80
  if df_filtrado.empty:
 
161
 
162
  # Prepara a lista de administradoras para o Gradio
163
  def get_administradoras_options():
164
+ if df is not None:
165
+ adm_list = df[df['tipo_do_bem'].str.lower() == 'imovel']['administradora'].unique()
166
+ return sorted(adm_list)
 
 
 
 
167
  return []
168
 
169
  # Criando a interface Gradio
 
245
  entrada_input = gr.Number(label="Entrada Desejada (R$)", value=30000, step=1000)
246
  parcela_input = gr.Number(label="Parcela Desejada (R$)", value=1500, step=100)
247
 
 
248
  administradoras_multiselect = gr.CheckboxGroup(
249
  label="Filtrar por Administradoras",
250
+ choices=get_administradoras_options(),
251
+ value=get_administradoras_options() # Seleciona todas por padrão
252
  )
253
 
254
  submit_btn = gr.Button("🔍 Buscar Combinações", variant="primary")
 
266
 
267
  # Inicia o aplicativo Gradio
268
  if __name__ == "__main__":
269
+ demo.launch() # Você não precisa disso no Colab, mas sim no arquivo que você fará o deploy