DavidSB commited on
Commit
6539841
·
verified ·
1 Parent(s): f0be48d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -89
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,8 +551,6 @@ 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
- # 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,86 +563,40 @@ def avaliacao_imovel(planilha, v_d, scv_d,
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,15 +605,15 @@ def avaliacao_imovel(planilha, v_d, scv_d,
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,7 +666,6 @@ def avaliacao_imovel(planilha, v_d, scv_d,
714
  fig_v14,
715
  fig_v15,
716
  fig_v16,
717
- fig_1,
718
  plt,
719
  df_aval_original,
720
  'planilha_aval.xlsx',
@@ -821,11 +772,9 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="yellow", secondary_hue="yell
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,7 +783,7 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="yellow", secondary_hue="yell
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)
@@ -844,3 +793,4 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="yellow", secondary_hue="yell
844
  if __name__ == "__main__":
845
  interface.launch(debug=True)
846
 
 
 
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
  # Salve o DataFrame 'result' em uma planilha
555
  df_aval_original.to_excel("planilha_aval.xlsx", index=False)
556
 
 
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
  # 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
  fig_v14,
667
  fig_v15,
668
  fig_v16,
 
669
  plt,
670
  df_aval_original,
671
  'planilha_aval.xlsx',
 
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
  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)
 
793
  if __name__ == "__main__":
794
  interface.launch(debug=True)
795
 
796
+