-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
78 lines (59 loc) · 2.57 KB
/
app.py
File metadata and controls
78 lines (59 loc) · 2.57 KB
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
# imports
import streamlit as st
import pandas as pd
import altair as alt
# functions
@st.cache_data
def load_data():
df_data = pd.read_csv('CEN0101J.csv')
df_data.rename(columns={
'Druh PHM': 'PalivoDruh',
'CENPHM1': 'PalivoId',
'Měsíce': 'RokMesicText',
'CasM': 'RokMesicId',
'Hodnota': 'Cena'}
, inplace=True)
palivo_rename = {
'Benzin automobilový bezolovnatý Natural 95 [Kč/l]': 'Natural 95 [Kč/l]',
'Benzin automobilový bezolovnatý Super plus 98 [Kč/l]': 'Natural 98 [Kč/l]',
'LPG [Kč/l]': 'LPG [Kč/l]',
'Motorová nafta [Kč/l]': 'Nafta [Kč/l]',
'Stlačený zemní plyn - CNG [Kč/kg]': 'CNG [Kč/kg]',
}
df_data['PalivoDruh'] = df_data['PalivoDruh'].replace(palivo_rename)
df_data = df_data[['PalivoDruh', 'PalivoId', 'RokMesicText', 'RokMesicId', 'Cena']]
df_data['Datum'] = pd.to_datetime(df_data['RokMesicId'])
df_data['Rok'] = df_data['Datum'].dt.year
df_data['Mesic'] = df_data['Datum'].dt.month
return df_data
@st.cache_data
def load_categories(df_data):
categories = df_data['PalivoDruh'].unique()
return categories.tolist()
@st.cache_data
def load_group_data(df_data):
return df_data.groupby(['Rok', 'PalivoDruh'])['Cena'].max().reset_index()
def load_data_by_category(df_group_data, category):
return df_group_data[df_group_data['PalivoDruh'] == category]
def get_cost(df_selected_data, asc=True):
return df_selected_data.sort_values('Cena', ascending=asc).iloc[0]
# initial load data
data = load_data()
group_data = load_group_data(data)
# layout
st.title('Přehled cen pohonných hmot')
st.header('Ceny pohonných hmot podle typu paliva')
selected_type = st.selectbox('Vyberte typ paliva', load_categories(data))
data_by_category = load_data_by_category(group_data, selected_type)
category_chart = alt.Chart(data_by_category).mark_line().encode(x='Rok:O', y='Cena:Q')
st.altair_chart(category_chart)
col_left, col_right = st.columns(2)
with col_left:
st.metric(f'Nejnižší cena paliva ({selected_type})', f'{get_cost(data_by_category)['Cena']} Kč', get_cost(data_by_category)['Rok'])
with col_right:
st.metric(f'Nejvyšší cena paliva ({selected_type})', f'{get_cost(data_by_category, asc=False)['Cena']} Kč', get_cost(data_by_category, asc=False)['Rok'])
col_left, col_right = st.columns(2)
with col_left:
st.metric(f'Nejnižší cena paliva ({selected_type})', f'{data_by_category['Cena'].min()} Kč')
with col_right:
st.metric(f'Nejvyšší cena paliva ({selected_type})', f'{data_by_category['Cena'].max()} Kč')