Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +33 -15
src/streamlit_app.py
CHANGED
|
@@ -36,7 +36,7 @@ st.markdown("---")
|
|
| 36 |
tabs = st.tabs(["Simulações Teóricas", "Análise AmesHousing"])
|
| 37 |
|
| 38 |
# -----------------------------------------------------
|
| 39 |
-
# Aba 1: Simulações Teóricas
|
| 40 |
# -----------------------------------------------------
|
| 41 |
with tabs[0]:
|
| 42 |
st.subheader("Teste de Hipótese para Proporção de Testes Positivos de COVID-19")
|
|
@@ -67,33 +67,48 @@ with tabs[1]:
|
|
| 67 |
|
| 68 |
# Leitura fixa do CSV dentro da pasta Dados
|
| 69 |
casa_data = pd.read_csv("../Dados/AmesHousing.csv")
|
| 70 |
-
|
| 71 |
-
# Renomear colunas para evitar problemas com espaços
|
| 72 |
casa_data.columns = casa_data.columns.str.strip().str.replace(" ", "_")
|
| 73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
# -------------------------------------------------
|
| 75 |
# Análise Exploratória
|
| 76 |
# -------------------------------------------------
|
| 77 |
st.markdown("### Distribuição do Preço de Venda")
|
| 78 |
fig, ax = plt.subplots(figsize=(8,5))
|
| 79 |
-
sns.histplot(
|
| 80 |
ax.set_title("Distribuição do Preço de Venda")
|
| 81 |
st.pyplot(fig)
|
| 82 |
|
| 83 |
# Boxplots
|
| 84 |
st.markdown("### Boxplots das Variáveis Selecionadas")
|
| 85 |
-
variavel = st.selectbox(
|
| 86 |
-
|
|
|
|
|
|
|
| 87 |
|
| 88 |
fig2, ax2 = plt.subplots(figsize=(12,6))
|
| 89 |
-
sns.boxplot(x=variavel, y="SalePrice", data=
|
| 90 |
plt.xticks(rotation=90)
|
| 91 |
ax2.set_title(f"Preço de Venda por {variavel}")
|
| 92 |
st.pyplot(fig2)
|
| 93 |
|
| 94 |
# Scatter interativo (média de preço por bairro)
|
| 95 |
st.markdown("### Preço Médio de Venda por Bairro")
|
| 96 |
-
bairro_grouped =
|
| 97 |
count=('SalePrice','size'),
|
| 98 |
mean_price=('SalePrice','mean')
|
| 99 |
).reset_index()
|
|
@@ -115,13 +130,16 @@ with tabs[1]:
|
|
| 115 |
# ANOVA
|
| 116 |
# -------------------------------------------------
|
| 117 |
st.markdown("### ANOVA para Neighborhood, Garage_Type e Fireplaces")
|
| 118 |
-
alpha = st.sidebar.slider(
|
| 119 |
-
|
|
|
|
|
|
|
|
|
|
| 120 |
|
| 121 |
modelos = {
|
| 122 |
-
"Neighborhood": ols('SalePrice ~ C(Neighborhood)', data=
|
| 123 |
-
"Garage_Type": ols('SalePrice ~ C(Garage_Type)', data=
|
| 124 |
-
"Fireplaces": ols('SalePrice ~ C(Fireplaces)', data=
|
| 125 |
}
|
| 126 |
|
| 127 |
for nome, modelo in modelos.items():
|
|
@@ -143,7 +161,7 @@ with tabs[1]:
|
|
| 143 |
|
| 144 |
st.markdown("#### Teste de Homocedasticidade (Levene)")
|
| 145 |
for nome in ["Neighborhood","Garage_Type","Fireplaces"]:
|
| 146 |
-
grupos = [grupo["SalePrice"].dropna() for _, grupo in
|
| 147 |
stat, p = levene(*grupos)
|
| 148 |
st.write(f"{nome}: estatística={stat:.3f}, p={p:.3f} "
|
| 149 |
+ ("variâncias iguais" if p >= alpha else "variâncias diferentes"))
|
|
@@ -153,7 +171,7 @@ with tabs[1]:
|
|
| 153 |
# -------------------------------------------------
|
| 154 |
st.markdown("### Teste não-paramétrico (Kruskal-Wallis)")
|
| 155 |
for nome in ["Neighborhood","Garage_Type","Fireplaces"]:
|
| 156 |
-
grupos = [grupo["SalePrice"].dropna() for _, grupo in
|
| 157 |
stat, p = kruskal(*grupos)
|
| 158 |
st.write(f"{nome}: estatística={stat:.3f}, p={p:.3f} "
|
| 159 |
+ ("diferenças significativas" if p < alpha else "sem diferença significativa"))
|
|
|
|
| 36 |
tabs = st.tabs(["Simulações Teóricas", "Análise AmesHousing"])
|
| 37 |
|
| 38 |
# -----------------------------------------------------
|
| 39 |
+
# Aba 1: Simulações Teóricas
|
| 40 |
# -----------------------------------------------------
|
| 41 |
with tabs[0]:
|
| 42 |
st.subheader("Teste de Hipótese para Proporção de Testes Positivos de COVID-19")
|
|
|
|
| 67 |
|
| 68 |
# Leitura fixa do CSV dentro da pasta Dados
|
| 69 |
casa_data = pd.read_csv("../Dados/AmesHousing.csv")
|
|
|
|
|
|
|
| 70 |
casa_data.columns = casa_data.columns.str.strip().str.replace(" ", "_")
|
| 71 |
|
| 72 |
+
# ---------------------------
|
| 73 |
+
# NOVO: Proporção de amostra
|
| 74 |
+
# ---------------------------
|
| 75 |
+
st.sidebar.markdown("### Parâmetros do AmesHousing")
|
| 76 |
+
prop_sample = st.sidebar.slider(
|
| 77 |
+
"Proporção da amostra usada nos gráficos",
|
| 78 |
+
0.1, 1.0, 1.0, 0.05,
|
| 79 |
+
key="prop_ames"
|
| 80 |
+
)
|
| 81 |
+
|
| 82 |
+
if prop_sample < 1.0:
|
| 83 |
+
dados = casa_data.sample(frac=prop_sample, random_state=42)
|
| 84 |
+
else:
|
| 85 |
+
dados = casa_data.copy()
|
| 86 |
+
|
| 87 |
# -------------------------------------------------
|
| 88 |
# Análise Exploratória
|
| 89 |
# -------------------------------------------------
|
| 90 |
st.markdown("### Distribuição do Preço de Venda")
|
| 91 |
fig, ax = plt.subplots(figsize=(8,5))
|
| 92 |
+
sns.histplot(dados['SalePrice'], kde=True, ax=ax)
|
| 93 |
ax.set_title("Distribuição do Preço de Venda")
|
| 94 |
st.pyplot(fig)
|
| 95 |
|
| 96 |
# Boxplots
|
| 97 |
st.markdown("### Boxplots das Variáveis Selecionadas")
|
| 98 |
+
variavel = st.selectbox(
|
| 99 |
+
"Escolha a variável categórica para comparar preços:",
|
| 100 |
+
["Neighborhood","Garage_Type","Fireplaces"]
|
| 101 |
+
)
|
| 102 |
|
| 103 |
fig2, ax2 = plt.subplots(figsize=(12,6))
|
| 104 |
+
sns.boxplot(x=variavel, y="SalePrice", data=dados, ax=ax2)
|
| 105 |
plt.xticks(rotation=90)
|
| 106 |
ax2.set_title(f"Preço de Venda por {variavel}")
|
| 107 |
st.pyplot(fig2)
|
| 108 |
|
| 109 |
# Scatter interativo (média de preço por bairro)
|
| 110 |
st.markdown("### Preço Médio de Venda por Bairro")
|
| 111 |
+
bairro_grouped = dados.groupby('Neighborhood').agg(
|
| 112 |
count=('SalePrice','size'),
|
| 113 |
mean_price=('SalePrice','mean')
|
| 114 |
).reset_index()
|
|
|
|
| 130 |
# ANOVA
|
| 131 |
# -------------------------------------------------
|
| 132 |
st.markdown("### ANOVA para Neighborhood, Garage_Type e Fireplaces")
|
| 133 |
+
alpha = st.sidebar.slider(
|
| 134 |
+
"Nível de significância (α) - ANOVA AmesHousing",
|
| 135 |
+
0.01,0.10,0.05,0.01,
|
| 136 |
+
key="alpha_ames"
|
| 137 |
+
)
|
| 138 |
|
| 139 |
modelos = {
|
| 140 |
+
"Neighborhood": ols('SalePrice ~ C(Neighborhood)', data=dados).fit(),
|
| 141 |
+
"Garage_Type": ols('SalePrice ~ C(Garage_Type)', data=dados).fit(),
|
| 142 |
+
"Fireplaces": ols('SalePrice ~ C(Fireplaces)', data=dados).fit()
|
| 143 |
}
|
| 144 |
|
| 145 |
for nome, modelo in modelos.items():
|
|
|
|
| 161 |
|
| 162 |
st.markdown("#### Teste de Homocedasticidade (Levene)")
|
| 163 |
for nome in ["Neighborhood","Garage_Type","Fireplaces"]:
|
| 164 |
+
grupos = [grupo["SalePrice"].dropna() for _, grupo in dados.groupby(nome)]
|
| 165 |
stat, p = levene(*grupos)
|
| 166 |
st.write(f"{nome}: estatística={stat:.3f}, p={p:.3f} "
|
| 167 |
+ ("variâncias iguais" if p >= alpha else "variâncias diferentes"))
|
|
|
|
| 171 |
# -------------------------------------------------
|
| 172 |
st.markdown("### Teste não-paramétrico (Kruskal-Wallis)")
|
| 173 |
for nome in ["Neighborhood","Garage_Type","Fireplaces"]:
|
| 174 |
+
grupos = [grupo["SalePrice"].dropna() for _, grupo in dados.groupby(nome)]
|
| 175 |
stat, p = kruskal(*grupos)
|
| 176 |
st.write(f"{nome}: estatística={stat:.3f}, p={p:.3f} "
|
| 177 |
+ ("diferenças significativas" if p < alpha else "sem diferença significativa"))
|