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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +88 -13
app.py CHANGED
@@ -1,9 +1,3 @@
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,15 +6,80 @@ import itertools
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,6 +93,11 @@ def carregar_planilha():
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,6 +112,10 @@ def carregar_planilha():
48
  df.drop_duplicates(inplace=True)
49
 
50
  print("✅ Planilha carregada com sucesso")
 
 
 
 
51
  return True
52
 
53
  except Exception as e:
@@ -75,6 +143,8 @@ def buscar_combinacoes(credito_desejado, entrada_desejada, parcela_desejada, adm
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,9 +231,13 @@ def ajustar_e_buscar(credito_desejado, entrada_desejada, parcela_desejada, admin
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,10 +319,11 @@ with gr.Blocks(title="Sistema de Busca de Consórcio Im��vel") as demo:
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,4 +341,4 @@ with gr.Blocks(title="Sistema de Busca de Consórcio Imóvel") as demo:
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
 
 
 
 
 
 
 
1
  # app.py
2
  import pandas as pd
3
  import requests
 
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
  # 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
  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
  # 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
 
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
  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
 
342
  # Inicia o aplicativo Gradio
343
  if __name__ == "__main__":
344
+ demo.launch()