File size: 4,282 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
 
b6f303c
 
78b5466
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7d074fa
78b5466
7d074fa
 
 
 
 
 
78b5466
 
1cee5ae
78b5466
 
 
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
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:
    tab_df = df[(df['Instituição'] == selected_instituicao)]
    data_string = tab_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({'Período': int(period), 'Valor Monetário': monetary_value})

    # Create a DataFrame from the list
    table_data = pd.DataFrame(data)

    # Calculate the sum
    total_sum = table_data['Valor Monetário'].str.replace('R$ ', '').str.replace(',', '').astype(float).sum()

    # Create a DataFrame for the "Total" row
    total_row = pd.DataFrame({'Período': ['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.')