DavidSB commited on
Commit
a2c5274
·
verified ·
1 Parent(s): 842dae3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +119 -92
app.py CHANGED
@@ -96,12 +96,8 @@ def avaliacao_imovel(planilha, v_d, scv_d,
96
  # Carregando os dados
97
  df_dados = pd.read_excel(planilha.name)
98
  df_original = df_dados.copy()
99
-
100
- # Carregando o(s) avaliando(s)
101
- df_aval = pd.read_excel(planilha.name, 'avaliando')
102
- df_aval_original = df_aval.copy()
103
-
104
- # ---------------------------------Nome das variáveis------------------------------#
105
 
106
  # Obtenha os nomes das colunas, excluindo a primeira
107
  nomes_colunas = df_original.columns[1:]
@@ -121,18 +117,6 @@ def avaliacao_imovel(planilha, v_d, scv_d,
121
  aplicar_operacao(df_dados, scv_8, 9)
122
  aplicar_operacao(df_dados, scv_9, 10)
123
  aplicar_operacao(df_dados, scv_10, 11)
124
- # avaliando(s)
125
- aplicar_operacao(df_aval, scv_d, 1)
126
- aplicar_operacao(df_aval, scv_1, 2)
127
- aplicar_operacao(df_aval, scv_2, 3)
128
- aplicar_operacao(df_aval, scv_3, 4)
129
- aplicar_operacao(df_aval, scv_4, 5)
130
- aplicar_operacao(df_aval, scv_5, 6)
131
- aplicar_operacao(df_aval, scv_6, 7)
132
- aplicar_operacao(df_aval, scv_7, 8)
133
- aplicar_operacao(df_aval, scv_8, 9)
134
- aplicar_operacao(df_aval, scv_9, 10)
135
- aplicar_operacao(df_aval, scv_10, 11)
136
 
137
  #----------------------------Renomear colunas----------------------------#
138
  #dados
@@ -156,6 +140,9 @@ def avaliacao_imovel(planilha, v_d, scv_d,
156
  df_outliers = df_dados.drop(linhas_selecionadas)
157
  df_filtrado.sort_values(by=df_filtrado.columns[0], inplace=True)
158
 
 
 
 
159
  #----------------Manipulação das Colunas (variáveis)-----------------------#
160
 
161
  # Variáveis independentes
@@ -176,27 +163,7 @@ def avaliacao_imovel(planilha, v_d, scv_d,
176
  (i == 11 and v_10):
177
  if i < len(df_filtrado.columns):
178
  X[col] = df_filtrado.iloc[:, i]
179
-
180
-
181
- X_aval = pd.DataFrame()
182
-
183
- # Iterar sobre as colunas do DataFrame df_filtrado
184
- for i, col in enumerate(df_aval.columns):
185
- # Verificar se a coluna atual deve ser adicionada com base na condição e se ela existe no DataFrame
186
- if (i == 2 and v_1) or \
187
- (i == 3 and v_2) or \
188
- (i == 4 and v_3) or \
189
- (i == 5 and v_4) or \
190
- (i == 6 and v_5) or \
191
- (i == 7 and v_6) or \
192
- (i == 8 and v_7) or \
193
- (i == 9 and v_8) or \
194
- (i == 10 and v_9) or \
195
- (i == 11 and v_10):
196
- if i < len(df_aval.columns):
197
- X_aval[col] = df_aval.iloc[:, i]
198
-
199
- X_aval.insert(0, 'const', 1)
200
 
201
  #---------------------------Gráficos de dispersão--------------------------#
202
 
@@ -260,7 +227,7 @@ def avaliacao_imovel(planilha, v_d, scv_d,
260
  # Calculando R² ajustado
261
  r_squared_adjusted = round(resultado.rsquared_adj, 8)
262
  # Obtendo Número de Observações
263
- num_observacoes = round(resultado.nobs, 0)
264
  # Calculando Coeficiente de Correlação
265
  coef_correlacao = round(np.sqrt(r_squared), 8)
266
  # Calculando o teste de Jarque-Bera para os resíduos
@@ -285,6 +252,7 @@ def avaliacao_imovel(planilha, v_d, scv_d,
285
  R² ajustado: {r_squared_adjusted}
286
  Correlação: {coef_correlacao}
287
  Número de observações: {num_observacoes}
 
288
 
289
  Teste de Jarque-Bera:
290
  - Estatística do teste: {jarque_bera_test}
@@ -331,6 +299,7 @@ def avaliacao_imovel(planilha, v_d, scv_d,
331
 
332
  # Criar DataFrame apenas com os dados cujo erro padronizado é maior que 2
333
  df_maiores_que_2 = df_final[abs(df_final['Erro Padronizado']) > 2]
 
334
 
335
  # Listagem de pontos com resíduos > 2
336
  Listagem_df_maiores_que_2 = df_maiores_que_2.iloc[:, 0].tolist()
@@ -364,58 +333,105 @@ def avaliacao_imovel(planilha, v_d, scv_d,
364
 
365
 
366
  #----------------------------------Avaliação--------------------------------#
367
- # Avaliando(s)
368
- valores_previstos_aval = resultado.predict(X_aval)
369
- df_aval_original['VALOR'] = round(valores_previstos_aval, 8)
370
 
371
- if scv_d == 'lny':
372
- df_aval_original['VALOR'] = round(np.exp(df_aval_original['VALOR']), 8)
373
- elif scv_d == '1/y':
374
- df_aval_original['VALOR'] = round(1 / df_aval_original['VALOR'], 8)
375
- elif scv_d == 'y²':
376
- df_aval_original['VALOR'] = round(np.sqrt(df_aval_original['VALOR']), 8)
377
- else:
378
- pass # Nenhuma transformação é necessária
379
 
380
- # Campo de arbítrio
381
- df_aval_original['LI_CA'] = round((df_aval_original['VALOR']*0.85), 2)
382
- df_aval_original['LS_CA'] = round((df_aval_original['VALOR']*1.15), 2)
383
-
384
- # Intervalo de Confiança de 80%
385
- # Calcular os intervalos de confiança para a média prevista
386
- intervalo_confianca = resultado.get_prediction(X_aval).summary_frame(alpha=0.2)
387
- # Extrair os limites inferior e superior do intervalo de confiança
388
- limite_inferior = intervalo_confianca['mean_ci_lower']
389
- limite_superior = intervalo_confianca['mean_ci_upper']
390
- # Adicionar as colunas ao DataFrame df_aval_original
391
- df_aval_original['LI_IC'] = limite_inferior.values
392
- df_aval_original['LS_IC'] = limite_superior.values
393
-
394
- if scv_d == 'lny':
395
- df_aval_original['LI_IC'] = round(np.exp(df_aval_original['LI_IC']), 2)
396
- df_aval_original['LS_IC'] = round(np.exp(df_aval_original['LS_IC']), 2)
397
- elif scv_d == '1/y':
398
- df_aval_original['LI_IC'] = round(1 / df_aval_original['LI_IC'], 2)
399
- df_aval_original['LS_IC'] = round(1 / df_aval_original['LS_IC'], 2)
400
- elif scv_d == 'y²':
401
- df_aval_original['LI_IC'] = round(np.sqrt(df_aval_original['LI_IC']), 2)
402
- df_aval_original['LS_IC'] = round(np.sqrt(df_aval_original['LS_IC']), 2)
403
- else:
404
- pass # Nenhuma transformação é necessária
405
-
406
- df_aval_original['LI_IC_%'] = round(((df_aval_original['VALOR']-df_aval_original['LI_IC'])/df_aval_original['VALOR'])*100, 2)
407
- df_aval_original['LS_IC_%'] = round(((df_aval_original['LS_IC']-df_aval_original['VALOR'])/df_aval_original['VALOR'])*100, 2)
408
- df_aval_original['TOTAL_IC_%'] = round(df_aval_original['LI_IC_%'] + df_aval_original['LS_IC_%'], 2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
 
410
- # Aplicação das condições para determinar 'PRECISÃO'
411
- df_aval_original['PRECISÃO'] = "" # Inicializa a coluna 'PRECISÃO'
412
- df_aval_original.loc[df_aval_original['TOTAL_IC_%'] <= 30, 'PRECISÃO'] = "Grau III"
413
- df_aval_original.loc[(df_aval_original['TOTAL_IC_%'] > 30) & (df_aval_original['TOTAL_IC_%'] <= 40), 'PRECISÃO'] = "Grau II"
414
- df_aval_original.loc[(df_aval_original['TOTAL_IC_%'] > 40) & (df_aval_original['TOTAL_IC_%'] <= 50), 'PRECISÃO'] = "Grau I"
415
- df_aval_original.loc[df_aval_original['TOTAL_IC_%'] > 50, 'PRECISÃO'] = "Fora dos critérios"
416
 
417
- # Salve o DataFrame 'result' em uma planilha
418
- df_aval_original.to_excel("planilha_aval.xlsx", index=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
419
 
420
  #-----------------------------------------------Gráficos-------------------------------------------------#
421
 
@@ -528,15 +544,26 @@ def avaliacao_imovel(planilha, v_d, scv_d,
528
 
529
  numeros = [str(i) for i in range(0, 501)]
530
 
531
- with gr.Blocks(theme=gr.themes.Default(), title="<span style='color: gray; font-size: 48px;'>avalia.se</span>") as interface:
532
  gr.Markdown(f"""
533
- <p style="text-align: left;"><b><span style='color: grey; font-size: 30px;'>Módulo de Regressão Linear</span></b></p>
 
 
 
 
 
534
  <p style="text-align: left;"></span>Aplicativo MCDDM com tratamento científico / Para ver a documentação, você pode baixar <a href='https://huggingface.co/spaces/DavidSB/avaliaFACTOR/resolve/main/dados_entrada_factor.xlsx' download='dados_entrada_factor.xlsx'>aqui</a><br><br></p>
535
  """)
 
 
 
 
 
 
536
  with gr.Row():
537
  with gr.Column():
538
  with gr.Row():
539
- fl_1 = gr.File(label="Upload planilha", type="filepath", scale=2, height=100)
540
  with gr.Row():
541
  drop = gr.Dropdown(['Valor total', 'Valor unitário',], label="VARIÁVEL DEPENDENTE", value='Valor unitário')
542
  rd_0 = gr.Dropdown(['y', 'lny', '1/y', 'y²'], label="Escala VARIÁVEL DEPENDENTE", value='y')
@@ -611,4 +638,4 @@ with gr.Blocks(theme=gr.themes.Default(), title="<span style='color: gray; font-
611
  button_4.click(avaliacao_imovel, inputs=inputs, outputs=outputs)
612
 
613
  if __name__ == "__main__":
614
- interface.launch(debug=True)
 
96
  # Carregando os dados
97
  df_dados = pd.read_excel(planilha.name)
98
  df_original = df_dados.copy()
99
+
100
+ # ---------------------------Nome das variáveis--------------------------#
 
 
 
 
101
 
102
  # Obtenha os nomes das colunas, excluindo a primeira
103
  nomes_colunas = df_original.columns[1:]
 
117
  aplicar_operacao(df_dados, scv_8, 9)
118
  aplicar_operacao(df_dados, scv_9, 10)
119
  aplicar_operacao(df_dados, scv_10, 11)
 
 
 
 
 
 
 
 
 
 
 
 
120
 
121
  #----------------------------Renomear colunas----------------------------#
122
  #dados
 
140
  df_outliers = df_dados.drop(linhas_selecionadas)
141
  df_filtrado.sort_values(by=df_filtrado.columns[0], inplace=True)
142
 
143
+ # Contagem de linhas no DataFrame resultante
144
+ num_outliers = df_outliers.shape[0]
145
+
146
  #----------------Manipulação das Colunas (variáveis)-----------------------#
147
 
148
  # Variáveis independentes
 
163
  (i == 11 and v_10):
164
  if i < len(df_filtrado.columns):
165
  X[col] = df_filtrado.iloc[:, i]
166
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
 
168
  #---------------------------Gráficos de dispersão--------------------------#
169
 
 
227
  # Calculando R² ajustado
228
  r_squared_adjusted = round(resultado.rsquared_adj, 8)
229
  # Obtendo Número de Observações
230
+ num_observacoes = int(round(resultado.nobs, 0))
231
  # Calculando Coeficiente de Correlação
232
  coef_correlacao = round(np.sqrt(r_squared), 8)
233
  # Calculando o teste de Jarque-Bera para os resíduos
 
252
  R² ajustado: {r_squared_adjusted}
253
  Correlação: {coef_correlacao}
254
  Número de observações: {num_observacoes}
255
+ Número de dados não utilizados: {num_outliers}
256
 
257
  Teste de Jarque-Bera:
258
  - Estatística do teste: {jarque_bera_test}
 
299
 
300
  # Criar DataFrame apenas com os dados cujo erro padronizado é maior que 2
301
  df_maiores_que_2 = df_final[abs(df_final['Erro Padronizado']) > 2]
302
+ df_maiores_que_2['Erro Abs'] = abs(df_maiores_que_2['Erro Padronizado'])
303
 
304
  # Listagem de pontos com resíduos > 2
305
  Listagem_df_maiores_que_2 = df_maiores_que_2.iloc[:, 0].tolist()
 
333
 
334
 
335
  #----------------------------------Avaliação--------------------------------#
 
 
 
336
 
337
+ try:
338
+ # Carregando o(s) avaliando(s)
339
+ df_aval = pd.read_excel(planilha.name, 'avaliando')
340
+ df_aval_original = df_aval.copy()
 
 
 
 
341
 
342
+ # avaliando(s)
343
+ aplicar_operacao(df_aval, scv_d, 1)
344
+ aplicar_operacao(df_aval, scv_1, 2)
345
+ aplicar_operacao(df_aval, scv_2, 3)
346
+ aplicar_operacao(df_aval, scv_3, 4)
347
+ aplicar_operacao(df_aval, scv_4, 5)
348
+ aplicar_operacao(df_aval, scv_5, 6)
349
+ aplicar_operacao(df_aval, scv_6, 7)
350
+ aplicar_operacao(df_aval, scv_7, 8)
351
+ aplicar_operacao(df_aval, scv_8, 9)
352
+ aplicar_operacao(df_aval, scv_9, 10)
353
+ aplicar_operacao(df_aval, scv_10, 11)
354
+
355
+
356
+ X_aval = pd.DataFrame()
357
+
358
+ # Iterar sobre as colunas do DataFrame df_filtrado
359
+ for i, col in enumerate(df_aval.columns):
360
+ # Verificar se a coluna atual deve ser adicionada com base na condição e se ela existe no DataFrame
361
+ if (i == 2 and v_1) or \
362
+ (i == 3 and v_2) or \
363
+ (i == 4 and v_3) or \
364
+ (i == 5 and v_4) or \
365
+ (i == 6 and v_5) or \
366
+ (i == 7 and v_6) or \
367
+ (i == 8 and v_7) or \
368
+ (i == 9 and v_8) or \
369
+ (i == 10 and v_9) or \
370
+ (i == 11 and v_10):
371
+ if i < len(df_aval.columns):
372
+ X_aval[col] = df_aval.iloc[:, i]
373
+
374
+ X_aval.insert(0, 'const', 1)
375
+
376
+ # Avaliando(s)
377
+ valores_previstos_aval = resultado.predict(X_aval)
378
+ df_aval_original['VALOR'] = round(valores_previstos_aval, 8)
379
+
380
+ if scv_d == 'lny':
381
+ df_aval_original['VALOR'] = round(np.exp(df_aval_original['VALOR']), 8)
382
+ elif scv_d == '1/y':
383
+ df_aval_original['VALOR'] = round(1 / df_aval_original['VALOR'], 8)
384
+ elif scv_d == 'y²':
385
+ df_aval_original['VALOR'] = round(np.sqrt(df_aval_original['VALOR']), 8)
386
+ else:
387
+ pass # Nenhuma transformação é necessária
388
 
389
+ # Campo de arbítrio
390
+ df_aval_original['LI_CA'] = round((df_aval_original['VALOR']*0.85), 2)
391
+ df_aval_original['LS_CA'] = round((df_aval_original['VALOR']*1.15), 2)
 
 
 
392
 
393
+ # Intervalo de Confiança de 80%
394
+ # Calcular os intervalos de confiança para a média prevista
395
+ intervalo_confianca = resultado.get_prediction(X_aval).summary_frame(alpha=0.2)
396
+ # Extrair os limites inferior e superior do intervalo de confiança
397
+ limite_inferior = intervalo_confianca['mean_ci_lower']
398
+ limite_superior = intervalo_confianca['mean_ci_upper']
399
+ # Adicionar as colunas ao DataFrame df_aval_original
400
+ df_aval_original['LI_IC'] = limite_inferior.values
401
+ df_aval_original['LS_IC'] = limite_superior.values
402
+
403
+ if scv_d == 'lny':
404
+ df_aval_original['LI_IC'] = round(np.exp(df_aval_original['LI_IC']), 2)
405
+ df_aval_original['LS_IC'] = round(np.exp(df_aval_original['LS_IC']), 2)
406
+ elif scv_d == '1/y':
407
+ df_aval_original['LI_IC'] = round(1 / df_aval_original['LI_IC'], 2)
408
+ df_aval_original['LS_IC'] = round(1 / df_aval_original['LS_IC'], 2)
409
+ elif scv_d == 'y²':
410
+ df_aval_original['LI_IC'] = round(np.sqrt(df_aval_original['LI_IC']), 2)
411
+ df_aval_original['LS_IC'] = round(np.sqrt(df_aval_original['LS_IC']), 2)
412
+ else:
413
+ pass # Nenhuma transformação é necessária
414
+
415
+ df_aval_original['LI_IC_%'] = round(((df_aval_original['VALOR']-df_aval_original['LI_IC'])/df_aval_original['VALOR'])*100, 2)
416
+ df_aval_original['LS_IC_%'] = round(((df_aval_original['LS_IC']-df_aval_original['VALOR'])/df_aval_original['VALOR'])*100, 2)
417
+ df_aval_original['TOTAL_IC_%'] = round(df_aval_original['LI_IC_%'] + df_aval_original['LS_IC_%'], 2)
418
+
419
+ # Aplicação das condições para determinar 'PRECISÃO'
420
+ df_aval_original['PRECISÃO'] = "" # Inicializa a coluna 'PRECISÃO'
421
+ df_aval_original.loc[df_aval_original['TOTAL_IC_%'] <= 30, 'PRECISÃO'] = "Grau III"
422
+ df_aval_original.loc[(df_aval_original['TOTAL_IC_%'] > 30) & (df_aval_original['TOTAL_IC_%'] <= 40), 'PRECISÃO'] = "Grau II"
423
+ df_aval_original.loc[(df_aval_original['TOTAL_IC_%'] > 40) & (df_aval_original['TOTAL_IC_%'] <= 50), 'PRECISÃO'] = "Grau I"
424
+ df_aval_original.loc[df_aval_original['TOTAL_IC_%'] > 50, 'PRECISÃO'] = "Fora dos critérios"
425
+
426
+ # Salve o DataFrame 'result' em uma planilha
427
+ df_aval_original.to_excel("planilha_aval.xlsx", index=False)
428
+
429
+ except:
430
+ # Se a aba não existir, crie um DataFrame vazio
431
+ df_aval_original = pd.DataFrame()
432
+
433
+ # Salve o DataFrame 'result' em uma planilha
434
+ df_aval_original.to_excel("planilha_aval.xlsx", index=False)
435
 
436
  #-----------------------------------------------Gráficos-------------------------------------------------#
437
 
 
544
 
545
  numeros = [str(i) for i in range(0, 501)]
546
 
547
+ with gr.Blocks(theme=gr.themes.Default(primary_hue="yellow", secondary_hue="yellow",)) as interface:
548
  gr.Markdown(f"""
549
+ <p style="text-align: left; font-family: 'Quicksand', sans-serif; font-weight: bold;">
550
+ <b><span style='color: grey; font-size: 48px;'>aval</span></b>
551
+ <b><span style='color: orange; font-size: 48px;'>ia</span></b>
552
+ <b><span style='color: grey; font-size: 48px;'>.se</span></b>
553
+ </p>
554
+ <p style="text-align: left;"><b><span style='color: grey; font-size: 30px;'>Regressão Linear</span></b></p>
555
  <p style="text-align: left;"></span>Aplicativo MCDDM com tratamento científico / Para ver a documentação, você pode baixar <a href='https://huggingface.co/spaces/DavidSB/avaliaFACTOR/resolve/main/dados_entrada_factor.xlsx' download='dados_entrada_factor.xlsx'>aqui</a><br><br></p>
556
  """)
557
+
558
+ #<span style='color: grey; font-size: 48px;'>avalia.se</span></b>
559
+
560
+
561
+
562
+
563
  with gr.Row():
564
  with gr.Column():
565
  with gr.Row():
566
+ fl_1 = gr.File(label="Upload planilha", type="file", scale=2, height=100)
567
  with gr.Row():
568
  drop = gr.Dropdown(['Valor total', 'Valor unitário',], label="VARIÁVEL DEPENDENTE", value='Valor unitário')
569
  rd_0 = gr.Dropdown(['y', 'lny', '1/y', 'y²'], label="Escala VARIÁVEL DEPENDENTE", value='y')
 
638
  button_4.click(avaliacao_imovel, inputs=inputs, outputs=outputs)
639
 
640
  if __name__ == "__main__":
641
+ interface.launch(debug=True)