Arthur-Attili commited on
Commit
471c29d
·
verified ·
1 Parent(s): 1f0f91b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +107 -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,99 @@ 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 +112,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 +131,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 +162,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 +250,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 +338,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 +360,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
+ 'ademicon': 'Ademicon',
41
+ 'ancora': 'Ancora',
42
+ 'banco do brasil': 'Banco do Brasil',
43
+ 'bb': 'Banco do Brasil',
44
+ 'Banrisul': 'Banrisul',
45
+ 'banrisul': 'Banrisul',
46
+ 'Bradesco': 'Bradesco',
47
+ 'bradesco': 'Bradesco',
48
+ 'caixa': 'Caixa XS5',
49
+ 'xs5': 'Caixa XS5',
50
+ 'caixa xs5': 'Caixa XS5',
51
+ 'caixa seguradora': 'Caixa XS5',
52
+ 'cnp': 'Caixa CNP',
53
+ 'Canopus': 'Canopus',
54
+ 'canopus': 'Canopus',
55
+ 'disal': 'Disal',
56
+ 'disal consorcios': 'Disal',
57
+ 'Embracon': 'Embracon',
58
+ 'embracon': 'Embracon',
59
+ 'ford': 'Ford',
60
+ 'honda': 'Honda',
61
+ 'hs': 'HS',
62
+ 'hs consorcio': 'HS',
63
+ 'Maggi': 'Maggi',
64
+ 'maggi': 'Maggi',
65
+ 'Mycon': 'Mycon',
66
+ 'mycon': 'Mycon',
67
+ 'porto': 'Porto Seguro',
68
+ 'porto-vp': 'Porto Seguro VP',
69
+ 'remaza': 'Remaza',
70
+ 'Rodebens': 'Rodobens',
71
+ 'rodobens': 'Rodobens',
72
+ 'Santander': 'Santander',
73
+ 'santander': 'Santander',
74
+ 'scania': 'Scania',
75
+ 'Serello': 'Serello',
76
+ 'serello': 'Serello',
77
+ 'servopa': 'Servopa',
78
+ 'sicoob unicoob': 'Sicoob Unicoob',
79
+ 'sicoobu': 'Sicoob Unicoob',
80
+ 'Sicredi': 'Sicredi',
81
+ 'sicredi': 'Sicredi',
82
+ 'Sponchiado': 'Sponchiado',
83
+ 'sponchiado': 'Sponchiado',
84
+ 'unifisa': 'Unifisa',
85
+ 'Volkswagen': 'Volkswagen',
86
+ 'volkswagen': 'Volkswagen',
87
+ 'yamaha': 'Yamaha',
88
+ 'zema': 'Zema'
89
+ }
90
+
91
+ return mapeamento.get(nome_limpo, nome_limpo)
92
+
93
+ def verificar_administradoras():
94
+ """Mostra como ficaram as administradoras após a padronização."""
95
+ if df is not None and 'administradora' in df.columns:
96
+ print("🔍 Administradoras únicas após padronização:")
97
+ administradoras_unicas = df[df['tipo_do_bem'].str.lower() == 'imovel']['administradora'].unique()
98
+ for i, adm in enumerate(sorted(administradoras_unicas), 1):
99
+ print(f"{i:2d}. {adm}")
100
+ print(f"Total: {len(administradoras_unicas)} administradoras")
101
+
102
  def carregar_planilha():
103
  """Carrega e prepara a planilha para análise."""
104
  global df
 
112
  # Padroniza nomes das colunas
113
  df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
114
 
115
+ # 👇 NOVA PADRONIZAÇÃO DAS ADMINISTRADORAS
116
+ if 'administradora' in df.columns:
117
+ # Aplica a padronização personalizada
118
+ df['administradora'] = df['administradora'].apply(padronizar_nomes_administradoras)
119
+
120
  # Converte colunas numéricas
121
  colunas_numericas = ['valor_credito', 'valor_entrada', 'valor_parcela', 'saldo_devedor', 'qtd_parcelas']
122
  for coluna in colunas_numericas:
 
131
  df.drop_duplicates(inplace=True)
132
 
133
  print("✅ Planilha carregada com sucesso")
134
+
135
+ # Mostra as administradoras padronizadas
136
+ verificar_administradoras()
137
+
138
  return True
139
 
140
  except Exception as e:
 
162
  # Certifica-se de que administradoras é uma lista (Gradio retorna tupla)
163
  if isinstance(administradoras, tuple):
164
  administradoras = list(administradoras)
165
+ # 👇 CORREÇÃO IMPORTANTE: Remove o .lower() aqui
166
+ administradoras = [a.strip() for a in administradoras]
167
  df_filtrado = df_filtrado[df_filtrado['administradora'].isin(administradoras)]
168
 
169
  if df_filtrado.empty:
 
250
 
251
  # Prepara a lista de administradoras para o Gradio
252
  def get_administradoras_options():
253
+ if df is not None and 'administradora' in df.columns:
254
+ adm_list = (
255
+ df[df['tipo_do_bem'].str.lower() == 'imovel']['administradora']
256
+ .dropna()
257
+ .unique()
258
+ )
259
+ return sorted(adm_list.tolist())
260
  return []
261
 
262
  # Criando a interface Gradio
 
338
  entrada_input = gr.Number(label="Entrada Desejada (R$)", value=30000, step=1000)
339
  parcela_input = gr.Number(label="Parcela Desejada (R$)", value=1500, step=100)
340
 
341
+ administradoras_options = get_administradoras_options()
342
  administradoras_multiselect = gr.CheckboxGroup(
343
  label="Filtrar por Administradoras",
344
+ choices=administradoras_options,
345
+ value=administradoras_options # Seleciona todas por padrão
346
  )
347
 
348
  submit_btn = gr.Button("🔍 Buscar Combinações", variant="primary")
 
360
 
361
  # Inicia o aplicativo Gradio
362
  if __name__ == "__main__":
363
+ demo.launch()