Spaces:
Sleeping
Sleeping
File size: 5,048 Bytes
4b68381 c318f99 018decc 4b68381 17249dc df022b3 3910b68 df022b3 3910b68 df022b3 3910b68 df022b3 3910b68 df022b3 a268f6c 3910b68 a8d856c cfc693b 3910b68 c318f99 4b68381 a8d856c da0d4b5 098ca40 079a1f5 098ca40 ad5d544 098ca40 b654e25 ad5d544 b654e25 ad5d544 b654e25 ad5d544 098ca40 b654e25 ad5d544 b654e25 098ca40 a2fbaf9 d283271 a2fbaf9 9f3b801 d283271 9f3b801 a2fbaf9 ad5d544 a2fbaf9 098ca40 78b5466 1cee5ae cdcda6d 78b5466 bdd90e4 78b5466 bdd90e4 78b5466 bdd90e4 78b5466 2864c62 7b357aa 2864c62 78b5466 bdd90e4 78b5466 bdd90e4 2864c62 7d074fa bdd90e4 7d074fa 78b5466 1cee5ae 78b5466 2864c62 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
import streamlit as st
import pandas as pd
import numpy as np
df = pd.read_csv('last_results_5.csv')
image1 = 'images/rs_pmpa.PNG'
title_html = """
<style>
@font-face {
font-family: 'Quicksand';
src: url('font/Quicksand-VariableFont_wght.ttf') format('truetype');
}
body {
font-family: 'Quicksand', sans-serif;
}
.custom-title {
color: darkgreen;
font-size: 30px;
font-weight: bold;
}
</style>
<span class='custom-title'>PREVISÕES DE RECEITAS</span>
"""
# Set a fixed width for the sidebar
st.markdown(
"""
<style>
.sidebar .sidebar-content {
width: 300px;
}
</style>
""",
unsafe_allow_html=True
)
with st.sidebar:
st.image(image1, use_column_width=True)
st.markdown(title_html, unsafe_allow_html=True)
selected_instituicao = st.selectbox('Seleciona Instituição', df['Instituição'].unique())
selected_conta = st.selectbox('Seleciona Conta', df['Conta'].unique())
# Filter the DataFrame based on selected values
filtered_df = df[(df['Instituição'] == selected_instituicao) & (df['Conta'] == selected_conta)]
# Set custom width for columns
col1_width = 400
col2_width = 400
col1, col2 = st.columns([col1_width, col2_width])
# Display the Forecasts values in the first column
col1.header('Valores previstos')
if not filtered_df.empty:
data_string = filtered_df['Forecasts'].iloc[0]
# Split the string into lines
lines = data_string.split('\n')
# Iterate through the lines and extract the values
for line in lines[:-2]:
period, value = line.split()
num_float = float(value)
monetary_value = f'R$ {num_float:,.2f}' # Adding commas for thousands separator
col1.write(f"Período {period}: {monetary_value}")
else:
col1.warning('No data available for the selected filters.')
# Display the Forecasts values as line plots in the second column
col2.header('Gráfico com previsões')
if not filtered_df.empty:
data_string = filtered_df['Forecasts'].iloc[0]
# Create a list to store data for each period
data = []
# Split the string into lines
lines = data_string.split('\n')
# Iterate through the lines and extract the values
for line in lines[:-2]:
period, value = line.split()
num_float = float(value)
monetary_value = f'R$ {num_float:,.2f}' # Adding commas for thousands separator
data.append({'Period': int(period), 'Monetary Value': num_float})
# Create a DataFrame from the list
chart_data = pd.DataFrame(data)
# Sort the DataFrame by 'Period'
chart_data = chart_data.sort_values(by='Period')
# Display line chart with "period" on X-axis and "Monetary Value" on Y-axis
col2.line_chart(chart_data.set_index('Period'))
else:
col2.warning('No data available for the selected filters.')
# Display the table in the third column
col3 = st.columns(1) # You can use st.columns(1) to create a single column layout
if not filtered_df.empty:
# Filter the DataFrame for the selected institution
tab_df = df[df['Instituição'] == selected_instituicao]
# Create an empty list to store data
data = []
# Iterate through each unique 'Conta' in the filtered DataFrame
for conta in tab_df['Conta'].unique():
# Filter the DataFrame for the current 'Conta'
conta_df = tab_df[tab_df['Conta'] == conta]
# Initialize a variable to store the sum for the current 'Conta'
conta_sum = 0.0
# Iterate over each row in the filtered DataFrame for the current 'Conta'
for _, row in conta_df.iterrows():
# Split the 'Forecasts' column's multiline string into lines
lines = row['Forecasts'].split('\n')
# For each line, extract the numeric value and add it to the conta_sum
for line in lines:
if line.strip(): # Ensure the line is not empty
parts = line.split()
value = parts[-1] # Take the last element as the value
conta_sum += float(value)
# Format the sum as a monetary value
monetary_value = f'R$ {conta_sum:,.2f}'
# Append the sum for the current 'Conta' to the data list
data.append({'Conta': conta, 'Valor Monetário': monetary_value})
# Convert the list to a DataFrame
table_data = pd.DataFrame(data)
# Calculate the grand total sum of all 'Conta' values
total_sum = sum(float(row['Valor Monetário'].replace('R$ ', '').replace(',', '')) for row in data)
# Create a DataFrame for the "Total" row
total_row = pd.DataFrame({'Conta': ['TOTAL'], 'Valor Monetário': [f'R$ {total_sum:,.2f}']})
# Concatenate the "Total" row with the existing table data
table_data = pd.concat([table_data, total_row], ignore_index=True)
# Display the table
st.table(table_data)
else:
col3.warning('No data available for the selected filters.') |