DavidSB commited on
Commit
5c14400
·
verified ·
1 Parent(s): 4eba89a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +91 -40
app.py CHANGED
@@ -101,7 +101,7 @@ def avaliacao_imovel(planilha, v_d, scv_d,
101
  df_dados = df_dados.round(4)
102
  # Convertendo os cabeçalhos para strings
103
  df_dados.columns = [str(col) for col in df_dados.columns]
104
-
105
  df_dados[df_dados.columns[1]] = df_dados[df_dados.columns[1]].astype(float)
106
  df_dados[df_dados.columns[2]] = df_dados[df_dados.columns[2]].astype(float)
107
  df_original = df_dados.copy()
@@ -551,6 +551,8 @@ def avaliacao_imovel(planilha, v_d, scv_d,
551
  df_aval_original.loc[(df_aval_original['TOTAL_IC_%'] > 40) & (df_aval_original['TOTAL_IC_%'] <= 50), 'PRECISÃO'] = "Grau I"
552
  df_aval_original.loc[df_aval_original['TOTAL_IC_%'] > 50, 'PRECISÃO'] = "Fora dos critérios"
553
 
 
 
554
  # Salve o DataFrame 'result' em uma planilha
555
  df_aval_original.to_excel("planilha_aval.xlsx", index=False)
556
 
@@ -563,40 +565,86 @@ def avaliacao_imovel(planilha, v_d, scv_d,
563
 
564
  #-----------------------------------------------Gráficos-------------------------------------------------#
565
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
566
  # Criando subplots
567
- fig, (ax1, ax2, ax3, ax4) = plt.subplots(4, 1, figsize=(10, 16))
568
-
569
- # Gráfico dos resíduos padronizados
570
- ax1.scatter(df_final['Valores Ajustados'], erro_padronizado, color='orange', alpha=0.6)
571
- ax1.axhline(y=0, color='black', linestyle='--', linewidth=1) # Linha zero
572
- ax1.axhline(y=2, color='red', linestyle='-', linewidth=1) # Linhas vermelhas em ±2
573
- ax1.axhline(y=-2, color='red', linestyle='-', linewidth=1)
574
- ax1.set_title('Gráfico de Resíduos Padronizados')
575
- ax1.set_xlabel('Valores Ajustados')
576
- ax1.set_ylabel('Resíduos Padronizados')
577
- ax1.grid(True)
578
- # Adicionando rótulos aos pontos com resíduos padronizados > 2
579
- # for i, txt in enumerate(df_final.iloc[:, 0]):
580
- # if abs(erro_padronizado[i]) > 2:
581
- # ax1.annotate(txt, (df_final['Valores Ajustados'][i], erro_padronizado[i]), color='black')
582
 
583
  # Histograma dos resíduos padronizados
584
- sns.histplot(erro_padronizado, kde=True, color='orange', alpha=0.6, ax=ax2)
585
- ax2.set_title('Histograma dos Resíduos Padronizados')
586
- ax2.set_xlabel('Resíduos Padronizados')
587
- ax2.set_ylabel('Frequência')
588
- ax2.grid(True)
589
 
590
  # Gráfico da distância de Cook
591
- ax3.plot(distancia_cook, marker='o', linestyle='None', color='orange')
592
- ax3.axhline(y=1, color='red', linestyle='--', linewidth=1)
593
- ax3.set_title('Gráfico da Distância de Cook')
594
- ax3.set_xlabel('Número da Observação')
595
- ax3.set_ylabel('Distância de Cook')
596
- ax3.grid(True)
597
  # Adicionando rótulos aos pontos
598
  for i, txt in enumerate(df_final.iloc[:, 0]):
599
- ax3.annotate(txt, (i, distancia_cook[i]))
600
 
601
  # Gráfico Valores Ajustados vs Preços Observados
602
  # Extrair os valores dos dados
@@ -605,15 +653,15 @@ def avaliacao_imovel(planilha, v_d, scv_d,
605
  # Calcular a linha de tendência (regressão linear)
606
  slope, intercept = np.polyfit(x_values, y_values, 1)
607
 
608
- # Plotar o gráfico de dispersão no eixo ax4
609
- ax4.scatter(x_values, y_values, color='black')
610
- # Plotar a linha de tendência no eixo ax4
611
- ax4.plot(x_values, slope * x_values + intercept, color='orange', linestyle='--', linewidth=2)
612
- # Adicionar título e rótulos dos eixos em ax4
613
- ax4.set_title('Valores Ajustados vs Preços Observados')
614
- ax4.set_xlabel('Preços Observados')
615
- ax4.set_ylabel('Valores Ajustados')
616
- ax4.grid(True)
617
 
618
  # Ajustando a posição dos subplots
619
  plt.tight_layout()
@@ -666,6 +714,7 @@ def avaliacao_imovel(planilha, v_d, scv_d,
666
  fig_v14,
667
  fig_v15,
668
  fig_v16,
 
669
  plt,
670
  df_aval_original,
671
  'planilha_aval.xlsx',
@@ -692,8 +741,8 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="yellow", secondary_hue="yell
692
  with gr.Row():
693
  with gr.Column():
694
  with gr.Row():
695
- #fl_1 = gr.File(label="Upload planilha", type="file", scale=2, height=100)
696
- fl_1 = gr.File(label="Upload planilha", type="filepath", scale=2, height=100)
697
  with gr.Row():
698
  drop = gr.Dropdown(['Valor total', 'Valor unitário',], label="VARIÁVEL DEPENDENTE", value='Valor unitário')
699
  rd_0 = gr.Dropdown(['y', 'lny', '1/y', 'y²'], label="Escala VARIÁVEL DEPENDENTE", value='y')
@@ -772,9 +821,11 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="yellow", secondary_hue="yell
772
  pt_14 = gr.Plot(label="Gráfico Dispersão var 14")
773
  pt_15 = gr.Plot(label="Gráfico Dispersão var 15")
774
  pt_16 = gr.Plot(label="Gráfico Dispersão var 16")
 
775
  pt_17 = gr.Plot(label="Análise Gráfica do Modelo de Regressão")
776
  df_6 = gr.Dataframe(label="Avaliação", height=300)
777
  fl_2 = gr.components.File(label="Resultado da Avaliação")
 
778
  #df_7 = gr.Dataframe(label="X_avall", height=300)
779
  #df_8 = gr.Dataframe(label="X", height=300)
780
  #df_9 = gr.Dataframe(label="y", height=300)
@@ -783,7 +834,7 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="yellow", secondary_hue="yell
783
  cb_7, rd_7, cb_8, rd_8, cb_9, rd_9, cb_10, rd_10, cb_11, rd_11, cb_12, rd_12, cb_13, rd_13,
784
  cb_14, rd_14, cb_15, rd_15, cb_16, rd_16, cb_17]
785
  outputs = [df_1, cols, tx_1, tx_2, ht_1, df_2, tx_3, tx_5, df_3, df_4, df_5, pt_1, pt_2, pt_3, pt_4, pt_5, pt_6,
786
- pt_7, pt_8, pt_9, pt_10, pt_11, pt_12, pt_13, pt_14, pt_15, pt_16, pt_17, df_6, fl_2] #, df_7, df_8, df_9]
787
 
788
  button_1.click(avaliacao_imovel, inputs=inputs, outputs=outputs)
789
  button_2.click(avaliacao_imovel, inputs=inputs, outputs=outputs)
 
101
  df_dados = df_dados.round(4)
102
  # Convertendo os cabeçalhos para strings
103
  df_dados.columns = [str(col) for col in df_dados.columns]
104
+
105
  df_dados[df_dados.columns[1]] = df_dados[df_dados.columns[1]].astype(float)
106
  df_dados[df_dados.columns[2]] = df_dados[df_dados.columns[2]].astype(float)
107
  df_original = df_dados.copy()
 
551
  df_aval_original.loc[(df_aval_original['TOTAL_IC_%'] > 40) & (df_aval_original['TOTAL_IC_%'] <= 50), 'PRECISÃO'] = "Grau I"
552
  df_aval_original.loc[df_aval_original['TOTAL_IC_%'] > 50, 'PRECISÃO'] = "Fora dos critérios"
553
 
554
+ # Retirando as colunas valor total e valor unitário
555
+ df_aval_original = df_aval_original.drop(df_aval_original.columns[[1, 2]], axis=1)
556
  # Salve o DataFrame 'result' em uma planilha
557
  df_aval_original.to_excel("planilha_aval.xlsx", index=False)
558
 
 
565
 
566
  #-----------------------------------------------Gráficos-------------------------------------------------#
567
 
568
+ # Criando o gráfico de resíduos padronizados
569
+ # Criando o gráfico de dispersão
570
+ fig_1 = go.Figure()
571
+
572
+ fig_1.add_trace(go.Scatter(
573
+ x=df_final['Valores Ajustados'],
574
+ y=erro_padronizado,
575
+ mode='markers',
576
+ marker=dict(color='orange', opacity=0.6),
577
+ name='Resíduos Padronizados'
578
+ ))
579
+ # Adicionando linhas de referência
580
+ fig_1.add_shape(
581
+ type="line",
582
+ x0=df_final['Valores Ajustados'].min(),
583
+ y0=0,
584
+ x1=df_final['Valores Ajustados'].max(),
585
+ y1=0,
586
+ line=dict(color="black", width=1, dash="dash"),
587
+ )
588
+ fig_1.add_shape(
589
+ type="line",
590
+ x0=df_final['Valores Ajustados'].min(),
591
+ y0=2,
592
+ x1=df_final['Valores Ajustados'].max(),
593
+ y1=2,
594
+ line=dict(color="red", width=1),
595
+ )
596
+ fig_1.add_shape(
597
+ type="line",
598
+ x0=df_final['Valores Ajustados'].min(),
599
+ y0=-2,
600
+ x1=df_final['Valores Ajustados'].max(),
601
+ y1=-2,
602
+ line=dict(color="red", width=1),
603
+ )
604
+ # Adicionando rótulos aos pontos
605
+ for i, txt in enumerate(df_final.iloc[:, 0]):
606
+ fig_1.add_annotation(
607
+ x=df_final['Valores Ajustados'][i],
608
+ y=erro_padronizado[i],
609
+ text=txt,
610
+ showarrow=True,
611
+ arrowhead=1,
612
+ ax=0,
613
+ ay=-10
614
+ )
615
+ # Definindo layout
616
+ fig_1.update_layout(
617
+ title='Gráfico de Resíduos Padronizados',
618
+ xaxis_title='Valores Ajustados',
619
+ yaxis_title='Resíduos Padronizados',
620
+ showlegend=False,
621
+ hovermode='closest',
622
+ template='plotly_white'
623
+ )
624
+ # Exibindo o gráfico
625
+ fig_1.show()
626
+
627
+ # Outros gráficos
628
  # Criando subplots
629
+ fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(10, 16))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
630
 
631
  # Histograma dos resíduos padronizados
632
+ sns.histplot(erro_padronizado, kde=True, color='orange', alpha=0.6, ax=ax1)
633
+ ax1.set_title('Histograma dos Resíduos Padronizados')
634
+ ax1.set_xlabel('Resíduos Padronizados')
635
+ ax1.set_ylabel('Frequência')
636
+ ax1.grid(True)
637
 
638
  # Gráfico da distância de Cook
639
+ ax2.plot(distancia_cook, marker='o', linestyle='None', color='orange')
640
+ ax2.axhline(y=1, color='red', linestyle='--', linewidth=1)
641
+ ax2.set_title('Gráfico da Distância de Cook')
642
+ ax2.set_xlabel('Número da Observação')
643
+ ax2.set_ylabel('Distância de Cook')
644
+ ax2.grid(True)
645
  # Adicionando rótulos aos pontos
646
  for i, txt in enumerate(df_final.iloc[:, 0]):
647
+ ax2.annotate(txt, (i, distancia_cook[i]))
648
 
649
  # Gráfico Valores Ajustados vs Preços Observados
650
  # Extrair os valores dos dados
 
653
  # Calcular a linha de tendência (regressão linear)
654
  slope, intercept = np.polyfit(x_values, y_values, 1)
655
 
656
+ # Plotar o gráfico de dispersão no eixo ax3
657
+ ax3.scatter(x_values, y_values, color='black')
658
+ # Plotar a linha de tendência no eixo ax3
659
+ ax3.plot(x_values, slope * x_values + intercept, color='orange', linestyle='--', linewidth=2)
660
+ # Adicionar título e rótulos dos eixos em ax3
661
+ ax3.set_title('Valores Ajustados vs Preços Observados')
662
+ ax3.set_xlabel('Preços Observados')
663
+ ax3.set_ylabel('Valores Ajustados')
664
+ ax3.grid(True)
665
 
666
  # Ajustando a posição dos subplots
667
  plt.tight_layout()
 
714
  fig_v14,
715
  fig_v15,
716
  fig_v16,
717
+ fig_1,
718
  plt,
719
  df_aval_original,
720
  'planilha_aval.xlsx',
 
741
  with gr.Row():
742
  with gr.Column():
743
  with gr.Row():
744
+ fl_1 = gr.File(label="Upload planilha", type="file", scale=2, height=100)
745
+ #fl_1 = gr.File(label="Upload planilha", type="filepath", scale=2, height=100)
746
  with gr.Row():
747
  drop = gr.Dropdown(['Valor total', 'Valor unitário',], label="VARIÁVEL DEPENDENTE", value='Valor unitário')
748
  rd_0 = gr.Dropdown(['y', 'lny', '1/y', 'y²'], label="Escala VARIÁVEL DEPENDENTE", value='y')
 
821
  pt_14 = gr.Plot(label="Gráfico Dispersão var 14")
822
  pt_15 = gr.Plot(label="Gráfico Dispersão var 15")
823
  pt_16 = gr.Plot(label="Gráfico Dispersão var 16")
824
+ pt_18 = gr.Plot(label="Gráfico de Resíduos Padronizados")
825
  pt_17 = gr.Plot(label="Análise Gráfica do Modelo de Regressão")
826
  df_6 = gr.Dataframe(label="Avaliação", height=300)
827
  fl_2 = gr.components.File(label="Resultado da Avaliação")
828
+
829
  #df_7 = gr.Dataframe(label="X_avall", height=300)
830
  #df_8 = gr.Dataframe(label="X", height=300)
831
  #df_9 = gr.Dataframe(label="y", height=300)
 
834
  cb_7, rd_7, cb_8, rd_8, cb_9, rd_9, cb_10, rd_10, cb_11, rd_11, cb_12, rd_12, cb_13, rd_13,
835
  cb_14, rd_14, cb_15, rd_15, cb_16, rd_16, cb_17]
836
  outputs = [df_1, cols, tx_1, tx_2, ht_1, df_2, tx_3, tx_5, df_3, df_4, df_5, pt_1, pt_2, pt_3, pt_4, pt_5, pt_6,
837
+ pt_7, pt_8, pt_9, pt_10, pt_11, pt_12, pt_13, pt_14, pt_15, pt_16, pt_18, pt_17, df_6, fl_2] #, df_7, df_8, df_9]
838
 
839
  button_1.click(avaliacao_imovel, inputs=inputs, outputs=outputs)
840
  button_2.click(avaliacao_imovel, inputs=inputs, outputs=outputs)