Update app.py
Browse files
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(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 630 |
|
| 631 |
# Histograma dos resíduos padronizados
|
| 632 |
-
sns.histplot(erro_padronizado, kde=True, color='orange', alpha=0.6, ax=
|
| 633 |
-
|
| 634 |
-
|
| 635 |
-
|
| 636 |
-
|
| 637 |
|
| 638 |
# Gráfico da distância de Cook
|
| 639 |
-
|
| 640 |
-
|
| 641 |
-
|
| 642 |
-
|
| 643 |
-
|
| 644 |
-
|
| 645 |
# Adicionando rótulos aos pontos
|
| 646 |
for i, txt in enumerate(df_final.iloc[:, 0]):
|
| 647 |
-
|
| 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
|
| 657 |
-
|
| 658 |
-
# Plotar a linha de tendência no eixo
|
| 659 |
-
|
| 660 |
-
# Adicionar título e rótulos dos eixos em
|
| 661 |
-
|
| 662 |
-
|
| 663 |
-
|
| 664 |
-
|
| 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,
|
| 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 |
+
|