PPSP2 / app.py
Pegumenezes's picture
Upload 2 files
8587bbb verified
Raw
History Blame Contribute Delete
3.93 kB
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
# --- Dados ---
meses = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']
dados_2024 = {
'Mes': meses,
'Papel_Papelao': [8047, 11287, 8184, 10183, 5699, 5830, 7465, 5600, 2960, 5175, 9656, 3960],
'Plastico': [6353, 8771, 6993, 8050, 4880, 5296, 5937, 4747, 2446, 4109, 7667, 3367],
'Metal': [1061, 2025, 1121, 1832, 716, 936, 1553, 904, 361, 630, 1904, 569],
'Vidro': [5248, 6929, 6014, 5821, 3697, 3655, 4950, 3360, 1580, 3261, 6173, 2357]
}
df_2024 = pd.DataFrame(dados_2024)
dados_anuais = {
'Ano': [2022, 2023, 2024],
'Papel_Papelao': [18780, 58718, 84046],
'Plastico': [5340, 1041, 8279],
'Metal': [1300, 1737, 19955],
'Vidro': [0, 725, 1709]
}
df_anuais = pd.DataFrame(dados_anuais)
precos = {
'Papel_Papelao': 0.50,
'Plastico': 0.80,
'Metal': 2.00,
'Vidro': 0.30
}
# --- Estatísticas descritivas ---
desc = df_2024.drop(columns='Mes').describe().T
desc['Mediana'] = df_2024.drop(columns='Mes').median()
desc = desc[['mean', 'Mediana', 'std', 'min', 'max']]
desc.columns = ['Média', 'Mediana', 'Desvio Padrão', 'Mínimo', 'Máximo']
# --- Simulação de faturamento ---
estatisticas = {}
for material in precos.keys():
media = df_2024[material].mean()
std = df_2024[material].std()
estatisticas[material] = {'media': media, 'std': std}
def simular_faturamento_anual(estats, precos, fator=1.0, n_sim=1000, seed=42):
np.random.seed(seed)
faturamentos = []
for _ in range(n_sim):
total = 0
for material, stats in estats.items():
medias = stats['media'] * fator
stds = stats['std']
quantidades = np.random.normal(medias, stds, 12)
quantidades = np.clip(quantidades, 0, None)
total += quantidades.sum() * precos[material]
faturamentos.append(total)
return np.array(faturamentos)
cenarios = {
'Base': 1.0,
'Otimista': 1.15,
'Pessimista': 0.85
}
simulacoes = {nome: simular_faturamento_anual(estatisticas, precos, fator=fator) for nome, fator in cenarios.items()}
# --- Streamlit App ---
st.title('Dashboard de Recicláveis e Faturamento')
# Sidebar
material = st.sidebar.selectbox('Selecione o material', ['Papel_Papelao', 'Plastico', 'Metal', 'Vidro'])
cenario = st.sidebar.selectbox('Selecione o cenário de faturamento', list(cenarios.keys()))
# Evolução anual
st.header(f'Evolução Anual de {material}')
fig1 = px.bar(df_anuais, x='Ano', y=material, title=f'Evolução Anual de {material}')
st.plotly_chart(fig1, use_container_width=True)
# Evolução mensal
st.header(f'Evolução Mensal de {material} em 2024')
fig2 = px.line(df_2024, x='Mes', y=material, markers=True, title=f'Evolução Mensal de {material} em 2024')
st.plotly_chart(fig2, use_container_width=True)
# Estatísticas descritivas
st.header('Estatísticas Descritivas (2024)')
st.dataframe(desc.style.format('{:,.2f}'))
# Boxplot
st.header('Boxplot dos Materiais em 2024')
df_2024_melt = df_2024.melt(id_vars='Mes', var_name='Material', value_name='Quantidade')
fig3 = px.box(df_2024_melt, x='Material', y='Quantidade', title='Boxplot dos Materiais em 2024')
st.plotly_chart(fig3, use_container_width=True)
# Simulação de faturamento
st.header(f'Distribuição do Faturamento Anual Simulado ({cenario})')
dados = simulacoes[cenario]
fig4 = px.histogram(dados, nbins=30, title=f'Distribuição do Faturamento Anual Simulado ({cenario})')
fig4.add_vline(x=dados.mean(), line_dash='dash', line_color='red', annotation_text='Média', annotation_position='top right')
st.plotly_chart(fig4, use_container_width=True)
st.write(f"Média do faturamento anual ({cenario}): R$ {dados.mean():,.2f}")