How to create an Interactive Fundamental Valuation

aktieanalys
shinylive
python
interactive
valuation
Interactive valation tool using Shinylive with Python
Author

Jakob Johannesson

Published

January 12, 2024

#| standalone: true
#| viewerHeight: 797

from io import StringIO
from pathlib import Path
from os.path import dirname
import pickle as pkl
from shiny import App, render, ui, Inputs, Outputs, Session
import pandas as pd

appdir = Path(__file__).parent

app_ui = ui.page_fluid(

    ui.layout_sidebar(
        ui.sidebar(
        ui.h2("Söder Sportfiske"),
        ui.input_slider("revenue_yearx1", "Omsättningstillväxt år 1", min=-50, max=100, value=27),
        ui.input_slider("profit_marginx1", "Vinstmarginal år 1", min=1, max=20, value=4),
        ui.input_slider("fair_value", "Fair value P/E år 1", min=5, max=50, value=20),
        ui.input_slider("aktiekurs", "Aktiekurs", min=1, max=100, value=30),
        ui.input_slider("cagr_years", "Unika antal år i CAGR", min=2, max=6,value=5),
        ui.input_switch("recent_year", "Räkna med R12 i CAGR?", False),
        ui.input_numeric("antal_aktier", "Antal aktier miljoner", value=8.44)
    ),
    ui.layout_column_wrap(
        ui.value_box( 
            "CAGR Revenue",
            ui.output_text("calculate_cagr"),
            ui.output_text("kpi_pe"),
            theme="bg-gradient-indigo-blue",
            full_screen=True,
        ),
        ui.value_box(
            "Potentiell uppsida",
            ui.output_text("potential"),
            "",
            theme="bg-gradient-indigo-purple"
        ),
        ui.value_box(
            "Estimated Intrinsic Value",
            ui.output_text("potentialkurs"),
            "",
            theme="bg-gradient-indigo-green"
        )),
    ui.layout_column_wrap(ui.output_table("main_table")
    ))
)


def server(input: Inputs, output: Outputs, session: Session):
    
    @output
    @render.text
    def calculate_cagr():
        with open(appdir / "yeardata_long.csv", "r") as file:
            data = file.read()
        df = pd.DataFrame([x.split(',') for x in data.split('\n')])
        df.columns = df.iloc[0]
        df = df.drop(df.index[0])
        df = df.reset_index(drop=True)
        df = pd.DataFrame(df)
        
        # Load the data into a DataFrame
        
        # Filter for 'Net Sales' and 'growthCalcType' 0
        filtered_df = df[(df['name'] == 'Net Sales_0')]
        
        
        # Sort by year
        sorted_df = filtered_df.sort_values(by='period.year', ascending=False)
        
        # Remove the most recent observation if required
        if input.recent_year():
            sorted_df = sorted_df.iloc[0:]
            temp=0
        else:
            sorted_df = sorted_df.iloc[1:]
            temp=1
        
        
        # Select the five most recent years
        recent_df = sorted_df.head(input.cagr_years()-temp)

        
        # Calculate CAGR
        final_value = pd.to_numeric(recent_df.iloc[0]['value'])  # Value in the most recent year
        initial_value = pd.to_numeric(recent_df.iloc[-1]['value'])  # Value in the earliest year of the selected range
        years = recent_df['period.year'].nunique()-1  # Number of unique years
        #return recent_df
        cagr = ((final_value / initial_value) ** (1/years)) - 1
        return str(round(cagr*100,1))+"%"



    def embedded_csv():
        with open(appdir / "yeardata.csv", "r") as file:
            data = file.read()
        df = pd.DataFrame([x.split(',') for x in data.split('\n')])
        if len(df.columns>=6):
            df=df.iloc[:, [0,5,6,7,8,9,10]] # REVENUE, 2018-2023
        
        df.columns = df.iloc[0]
        df = df.drop(df.index[0])
        df = df.reset_index(drop=True)
        df = df.drop(df.index[12])
        df['2024E'] = ""
        #df['2025E'] = None
        df.at[0, '2024E'] = pd.to_numeric(str(1+(input.revenue_yearx1()/100)))* pd.to_numeric(df.at[0, 'Q3 2023'])
        df.at[1, '2024E'] = (pd.to_numeric(df.at[0, '2024E'])/pd.to_numeric(df.at[0, 'Q3 2023'])-1)*100
        df.at[8, '2024E'] = input.profit_marginx1()
        df.at[6, '2024E'] = round(input.profit_marginx1()/100*df.at[0, '2024E'],1)
        df.at[10, '2024E'] = round(input.aktiekurs()*input.antal_aktier()/df.at[6, '2024E'],1)

        #df.at[0, '2025E'] = pd.to_numeric(str(1+(input.revenue_yearx2()/100)))* pd.to_numeric(df.at[0, '2024E'])
        return df



    @output
    @render.table
    def main_table():
        df=embedded_csv()
        return df
    
    @output
    @render.text
    def kpi_pe():
        df=embedded_csv()
        cagr_year=input.cagr_years()
        out=df.columns[-(cagr_year+1):].tolist()
        if input.recent_year():
            out=out[:-1] # Tar bort 2024
            temp=0
        else:
            out=out[:-1] # Tar bort 2024
            out=out[:-1] # Tar bort 2023
            temp=1
        #out=out[:-1] # Tar bort 2024E ur kalkylen
        #out=out[:-] # Tar bort 2024E ur kalkylen
        one=out[0] 
        two=out[cagr_year-(1+temp)]
        output="Mellan "+one+" och "+two
        return output
    
    @output
    @render.text
    def potentialkurs():
        df=embedded_csv()
        upside = input.fair_value()/df.at[10, '2024E']
        formating=upside*input.aktiekurs()
        return str(round(formating,1))+" SEK"
    
    @output
    @render.text
    def potential():
        df=embedded_csv()
        aktiekurs = input.aktiekurs()
        upside = input.fair_value()/df.at[10, '2024E']
        fair_value= input.aktiekurs()*upside
        formating=round(pd.to_numeric((upside-1)*100),1)
        return str(formating)+"%"


app = App(app_ui, server)



## file: yeardata.csv
,2014,2015,2016,2017,2018,2019,2020,2021,2022,Q3 2023
Revenue,22.3,30.2,38.3,56.8,72.1,105.2,165.7,194.0,218.0,222.3
Revenue Y-Y %,36.8,35.4,26.8,48.3,26.9,45.9,57.5,17.1,12.4,6.0
P/S,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.6,1.2,1.1
Operating income,1.9,2.7,4.7,6.9,7.4,11.3,18.4,12.1,3.4,8.3
Operating margin,8.5,8.9,12.3,12.2,10.3,10.7,11.1,6.2,1.6,3.7
EV/EBIT,0.0,0.0,0.0,0.0,0.0,0.0,0.0,39.6,71.0,26.9
Earnings,1.5,2.1,3.6,5.4,5.7,6.6,10.8,9.0,1.7,5.8
Earnings Y-Y %,66.7,40.0,71.4,50.0,5.6,15.8,63.6,-16.7,-81.1,1060.0
Profit margin,6.7,7.0,9.4,9.5,7.9,6.3,6.5,4.6,0.8,2.6
Earnings/share,0.2,0.3,0.5,0.7,0.8,0.9,1.4,1.1,0.2,0.7
P/E,0.0,0.0,0.0,0.0,0.0,0.0,0.0,55.3,150.9,42.8
PEG,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-2.1,-1.9,0.0

## file: yeardata_long.csv
,companyId,kpiId,growthCalcType,period.year,period.label,name,datetime,value
0,2247,2,0,2014,2014,P/E_0,2024-01-07 14:04:08.451127,0.0
1,2247,2,0,2015,2015,P/E_0,2024-01-07 14:04:08.451127,0.0
2,2247,2,0,2016,2016,P/E_0,2024-01-07 14:04:08.451127,0.0
3,2247,2,0,2017,2017,P/E_0,2024-01-07 14:04:08.451127,0.0
4,2247,2,0,2018,2018,P/E_0,2024-01-07 14:04:08.451127,0.0
5,2247,2,0,2019,2019,P/E_0,2024-01-07 14:04:08.451127,0.0
6,2247,2,0,2020,2020,P/E_0,2024-01-07 14:04:08.451127,0.0
7,2247,2,0,2021,2021,P/E_0,2024-01-07 14:04:08.451127,55.31
8,2247,2,0,2022,2022,P/E_0,2024-01-07 14:04:08.451127,150.87
9,2247,2,0,2023,Q3 2023,P/E_0,2024-01-07 14:04:08.451127,42.76
10,2247,2,1,2014,2014,P/E_1,2024-01-07 14:04:08.451127,0.0
11,2247,2,1,2015,2015,P/E_1,2024-01-07 14:04:08.451127,0.0
12,2247,2,1,2016,2016,P/E_1,2024-01-07 14:04:08.451127,0.0
13,2247,2,1,2017,2017,P/E_1,2024-01-07 14:04:08.451127,0.0
14,2247,2,1,2018,2018,P/E_1,2024-01-07 14:04:08.451127,0.0
15,2247,2,1,2019,2019,P/E_1,2024-01-07 14:04:08.451127,0.0
16,2247,2,1,2020,2020,P/E_1,2024-01-07 14:04:08.451127,0.0
17,2247,2,1,2021,2021,P/E_1,2024-01-07 14:04:08.451127,0.0
18,2247,2,1,2022,2022,P/E_1,2024-01-07 14:04:08.451127,172.7878
19,2247,2,1,2023,Q3 2023,P/E_1,2024-01-07 14:04:08.451127,-89.7297
20,2247,3,0,2014,2014,P/S_0,2024-01-07 14:04:08.451127,0.0
21,2247,3,0,2015,2015,P/S_0,2024-01-07 14:04:08.451127,0.0
22,2247,3,0,2016,2016,P/S_0,2024-01-07 14:04:08.451127,0.0
23,2247,3,0,2017,2017,P/S_0,2024-01-07 14:04:08.451127,0.0
24,2247,3,0,2018,2018,P/S_0,2024-01-07 14:04:08.451127,0.0
25,2247,3,0,2019,2019,P/S_0,2024-01-07 14:04:08.451127,0.0
26,2247,3,0,2020,2020,P/S_0,2024-01-07 14:04:08.451127,0.0
27,2247,3,0,2021,2021,P/S_0,2024-01-07 14:04:08.451127,2.57
28,2247,3,0,2022,2022,P/S_0,2024-01-07 14:04:08.451127,1.18
29,2247,3,0,2023,Q3 2023,P/S_0,2024-01-07 14:04:08.451127,1.12
30,2247,3,1,2014,2014,P/S_1,2024-01-07 14:04:08.451127,0.0
31,2247,3,1,2015,2015,P/S_1,2024-01-07 14:04:08.451127,0.0
32,2247,3,1,2016,2016,P/S_1,2024-01-07 14:04:08.451127,0.0
33,2247,3,1,2017,2017,P/S_1,2024-01-07 14:04:08.451127,0.0
34,2247,3,1,2018,2018,P/S_1,2024-01-07 14:04:08.451127,0.0
35,2247,3,1,2019,2019,P/S_1,2024-01-07 14:04:08.451127,0.0
36,2247,3,1,2020,2020,P/S_1,2024-01-07 14:04:08.451127,0.0
37,2247,3,1,2021,2021,P/S_1,2024-01-07 14:04:08.451127,0.0
38,2247,3,1,2022,2022,P/S_1,2024-01-07 14:04:08.451127,-54.1699
39,2247,3,1,2023,Q3 2023,P/S_1,2024-01-07 14:04:08.451127,12.5
40,2247,6,0,2014,2014,Earnings/share_0,2024-01-07 14:04:08.451127,0.2
41,2247,6,0,2015,2015,Earnings/share_0,2024-01-07 14:04:08.451127,0.28
42,2247,6,0,2016,2016,Earnings/share_0,2024-01-07 14:04:08.451127,0.48
43,2247,6,0,2017,2017,Earnings/share_0,2024-01-07 14:04:08.451127,0.72
44,2247,6,0,2018,2018,Earnings/share_0,2024-01-07 14:04:08.451127,0.76
45,2247,6,0,2019,2019,Earnings/share_0,2024-01-07 14:04:08.451127,0.88
46,2247,6,0,2020,2020,Earnings/share_0,2024-01-07 14:04:08.451127,1.44
47,2247,6,0,2021,2021,Earnings/share_0,2024-01-07 14:04:08.451127,1.07
48,2247,6,0,2022,2022,Earnings/share_0,2024-01-07 14:04:08.451127,0.2
49,2247,6,0,2023,Q3 2023,Earnings/share_0,2024-01-07 14:04:08.451127,0.69
50,2247,6,1,2014,2014,Earnings/share_1,2024-01-07 14:04:08.451127,66.6667
51,2247,6,1,2015,2015,Earnings/share_1,2024-01-07 14:04:08.451127,40.5
52,2247,6,1,2016,2016,Earnings/share_1,2024-01-07 14:04:08.451127,71.1744
53,2247,6,1,2017,2017,Earnings/share_1,2024-01-07 14:04:08.451127,50.104
54,2247,6,1,2018,2018,Earnings/share_1,2024-01-07 14:04:08.451127,5.5402
55,2247,6,1,2019,2019,Earnings/share_1,2024-01-07 14:04:08.451127,15.748
56,2247,6,1,2020,2020,Earnings/share_1,2024-01-07 14:04:08.451127,63.7188
57,2247,6,1,2021,2021,Earnings/share_1,2024-01-07 14:04:08.451127,-26.108
58,2247,6,1,2022,2022,Earnings/share_1,2024-01-07 14:04:08.451127,-81.1621
59,2247,6,1,2023,Q3 2023,Earnings/share_1,2024-01-07 14:04:08.451127,1066.1017
60,2247,10,0,2014,2014,EV/EBIT_0,2024-01-07 14:04:08.451127,0.0
61,2247,10,0,2015,2015,EV/EBIT_0,2024-01-07 14:04:08.451127,0.0
62,2247,10,0,2016,2016,EV/EBIT_0,2024-01-07 14:04:08.451127,0.0
63,2247,10,0,2017,2017,EV/EBIT_0,2024-01-07 14:04:08.451127,0.0
64,2247,10,0,2018,2018,EV/EBIT_0,2024-01-07 14:04:08.451127,0.0
65,2247,10,0,2019,2019,EV/EBIT_0,2024-01-07 14:04:08.451127,0.0
66,2247,10,0,2020,2020,EV/EBIT_0,2024-01-07 14:04:08.451127,0.0
67,2247,10,0,2021,2021,EV/EBIT_0,2024-01-07 14:04:08.451127,39.61
68,2247,10,0,2022,2022,EV/EBIT_0,2024-01-07 14:04:08.451127,70.96
69,2247,10,0,2023,Q3 2023,EV/EBIT_0,2024-01-07 14:04:08.451127,26.89
70,2247,10,1,2014,2014,EV/EBIT_1,2024-01-07 14:04:08.451127,0.0
71,2247,10,1,2015,2015,EV/EBIT_1,2024-01-07 14:04:08.451127,0.0
72,2247,10,1,2016,2016,EV/EBIT_1,2024-01-07 14:04:08.451127,0.0
73,2247,10,1,2017,2017,EV/EBIT_1,2024-01-07 14:04:08.451127,0.0
74,2247,10,1,2018,2018,EV/EBIT_1,2024-01-07 14:04:08.451127,0.0
75,2247,10,1,2019,2019,EV/EBIT_1,2024-01-07 14:04:08.451127,0.0
76,2247,10,1,2020,2020,EV/EBIT_1,2024-01-07 14:04:08.451127,0.0
77,2247,10,1,2021,2021,EV/EBIT_1,2024-01-07 14:04:08.451127,0.0
78,2247,10,1,2022,2022,EV/EBIT_1,2024-01-07 14:04:08.451127,79.121
79,2247,10,1,2023,Q3 2023,EV/EBIT_1,2024-01-07 14:04:08.451127,-71.7571
80,2247,19,0,2014,2014,PEG_0,2024-01-07 14:04:08.451127,0.0
81,2247,19,0,2015,2015,PEG_0,2024-01-07 14:04:08.451127,0.0
82,2247,19,0,2016,2016,PEG_0,2024-01-07 14:04:08.451127,0.0
83,2247,19,0,2017,2017,PEG_0,2024-01-07 14:04:08.451127,0.0
84,2247,19,0,2018,2018,PEG_0,2024-01-07 14:04:08.451127,0.0
85,2247,19,0,2019,2019,PEG_0,2024-01-07 14:04:08.451127,0.0
86,2247,19,0,2020,2020,PEG_0,2024-01-07 14:04:08.451127,0.0
87,2247,19,0,2021,2021,PEG_0,2024-01-07 14:04:08.451127,-2.12
88,2247,19,0,2022,2022,PEG_0,2024-01-07 14:04:08.451127,-1.86
89,2247,19,0,2023,Q3 2023,PEG_0,2024-01-07 14:04:08.451127,0.04
90,2247,19,1,2014,2014,PEG_1,2024-01-07 14:04:08.451127,0.0
91,2247,19,1,2015,2015,PEG_1,2024-01-07 14:04:08.451127,0.0
92,2247,19,1,2016,2016,PEG_1,2024-01-07 14:04:08.451127,0.0
93,2247,19,1,2017,2017,PEG_1,2024-01-07 14:04:08.451127,0.0
94,2247,19,1,2018,2018,PEG_1,2024-01-07 14:04:08.451127,0.0
95,2247,19,1,2019,2019,PEG_1,2024-01-07 14:04:08.451127,0.0
96,2247,19,1,2020,2020,PEG_1,2024-01-07 14:04:08.451127,0.0
97,2247,19,1,2021,2021,PEG_1,2024-01-07 14:04:08.451127,0.0
98,2247,19,1,2022,2022,PEG_1,2024-01-07 14:04:08.451127,12.1813
99,2247,19,1,2023,Q3 2023,PEG_1,2024-01-07 14:04:08.451127,100.8897
100,2247,29,0,2014,2014,Operating margin_0,2024-01-07 14:04:08.451127,8.52
101,2247,29,0,2015,2015,Operating margin_0,2024-01-07 14:04:08.451127,8.94
102,2247,29,0,2016,2016,Operating margin_0,2024-01-07 14:04:08.451127,12.27
103,2247,29,0,2017,2017,Operating margin_0,2024-01-07 14:04:08.451127,12.15
104,2247,29,0,2018,2018,Operating margin_0,2024-01-07 14:04:08.451127,10.26
105,2247,29,0,2019,2019,Operating margin_0,2024-01-07 14:04:08.451127,10.74
106,2247,29,0,2020,2020,Operating margin_0,2024-01-07 14:04:08.451127,11.1
107,2247,29,0,2021,2021,Operating margin_0,2024-01-07 14:04:08.451127,6.24
108,2247,29,0,2022,2022,Operating margin_0,2024-01-07 14:04:08.451127,1.56
109,2247,29,0,2023,Q3 2023,Operating margin_0,2024-01-07 14:04:08.451127,3.73
110,2247,29,1,2014,2014,Operating margin_1,2024-01-07 14:04:08.451127,6.8339
111,2247,29,1,2015,2015,Operating margin_1,2024-01-07 14:04:08.451127,4.9296
112,2247,29,1,2016,2016,Operating margin_1,2024-01-07 14:04:08.451127,37.2707
113,2247,29,1,2017,2017,Operating margin_1,2024-01-07 14:04:08.451127,-1.0104
114,2247,29,1,2018,2018,Operating margin_1,2024-01-07 14:04:08.451127,-15.5087
115,2247,29,1,2019,2019,Operating margin_1,2024-01-07 14:04:08.451127,4.6473
116,2247,29,1,2020,2020,Operating margin_1,2024-01-07 14:04:08.451127,3.3796
117,2247,29,1,2021,2021,Operating margin_1,2024-01-07 14:04:08.451127,-43.8311
118,2247,29,1,2022,2022,Operating margin_1,2024-01-07 14:04:08.451127,-74.988
119,2247,29,1,2023,Q3 2023,Operating margin_1,2024-01-07 14:04:08.451127,291.4046
120,2247,30,0,2014,2014,Profit margin_0,2024-01-07 14:04:08.451127,6.73
121,2247,30,0,2015,2015,Profit margin_0,2024-01-07 14:04:08.451127,6.95
122,2247,30,0,2016,2016,Profit margin_0,2024-01-07 14:04:08.451127,9.4
123,2247,30,0,2017,2017,Profit margin_0,2024-01-07 14:04:08.451127,9.51
124,2247,30,0,2018,2018,Profit margin_0,2024-01-07 14:04:08.451127,7.91
125,2247,30,0,2019,2019,Profit margin_0,2024-01-07 14:04:08.451127,6.27
126,2247,30,0,2020,2020,Profit margin_0,2024-01-07 14:04:08.451127,6.52
127,2247,30,0,2021,2021,Profit margin_0,2024-01-07 14:04:08.451127,4.64
128,2247,30,0,2022,2022,Profit margin_0,2024-01-07 14:04:08.451127,0.78
129,2247,30,0,2023,Q3 2023,Profit margin_0,2024-01-07 14:04:08.451127,2.61
130,2247,30,1,2014,2014,Profit margin_1,2024-01-07 14:04:08.451127,21.8258
131,2247,30,1,2015,2015,Profit margin_1,2024-01-07 14:04:08.451127,3.3898
132,2247,30,1,2016,2016,Profit margin_1,2024-01-07 14:04:08.451127,35.1596
133,2247,30,1,2017,2017,Profit margin_1,2024-01-07 14:04:08.451127,1.1491
134,2247,30,1,2018,2018,Profit margin_1,2024-01-07 14:04:08.451127,-16.8402
135,2247,30,1,2019,2019,Profit margin_1,2024-01-07 14:04:08.451127,-20.6425
136,2247,30,1,2020,2020,Profit margin_1,2024-01-07 14:04:08.451127,3.8891
137,2247,30,1,2021,2021,Profit margin_1,2024-01-07 14:04:08.451127,-28.8279
138,2247,30,1,2022,2022,Profit margin_1,2024-01-07 14:04:08.451127,-83.186
139,2247,30,1,2023,Q3 2023,Profit margin_1,2024-01-07 14:04:08.451127,996.2185
140,2247,53,0,2014,2014,Net Sales_0,2024-01-07 14:04:08.451127,22.3
141,2247,53,0,2015,2015,Net Sales_0,2024-01-07 14:04:08.451127,30.2
142,2247,53,0,2016,2016,Net Sales_0,2024-01-07 14:04:08.451127,38.3
143,2247,53,0,2017,2017,Net Sales_0,2024-01-07 14:04:08.451127,56.8
144,2247,53,0,2018,2018,Net Sales_0,2024-01-07 14:04:08.451127,72.1
145,2247,53,0,2019,2019,Net Sales_0,2024-01-07 14:04:08.451127,105.2
146,2247,53,0,2020,2020,Net Sales_0,2024-01-07 14:04:08.451127,165.7
147,2247,53,0,2021,2021,Net Sales_0,2024-01-07 14:04:08.451127,194.0
148,2247,53,0,2022,2022,Net Sales_0,2024-01-07 14:04:08.451127,218.0
149,2247,53,0,2023,Q3 2023,Net Sales_0,2024-01-07 14:04:08.451127,222.3
150,2247,53,1,2014,2014,Net Sales_1,2024-01-07 14:04:08.451127,36.8098
151,2247,53,1,2015,2015,Net Sales_1,2024-01-07 14:04:08.451127,35.426
152,2247,53,1,2016,2016,Net Sales_1,2024-01-07 14:04:08.451127,26.8212
153,2247,53,1,2017,2017,Net Sales_1,2024-01-07 14:04:08.451127,48.3029
154,2247,53,1,2018,2018,Net Sales_1,2024-01-07 14:04:08.451127,26.9366
155,2247,53,1,2019,2019,Net Sales_1,2024-01-07 14:04:08.451127,45.9085
156,2247,53,1,2020,2020,Net Sales_1,2024-01-07 14:04:08.451127,57.5095
157,2247,53,1,2021,2021,Net Sales_1,2024-01-07 14:04:08.451127,17.0791
158,2247,53,1,2022,2022,Net Sales_1,2024-01-07 14:04:08.451127,12.3711
159,2247,53,1,2023,Q3 2023,Net Sales_1,2024-01-07 14:04:08.451127,6.0086
160,2247,55,0,2014,2014,Operating income_0,2024-01-07 14:04:08.451127,1.9
161,2247,55,0,2015,2015,Operating income_0,2024-01-07 14:04:08.451127,2.7
162,2247,55,0,2016,2016,Operating income_0,2024-01-07 14:04:08.451127,4.7
163,2247,55,0,2017,2017,Operating income_0,2024-01-07 14:04:08.451127,6.9
164,2247,55,0,2018,2018,Operating income_0,2024-01-07 14:04:08.451127,7.4
165,2247,55,0,2019,2019,Operating income_0,2024-01-07 14:04:08.451127,11.3
166,2247,55,0,2020,2020,Operating income_0,2024-01-07 14:04:08.451127,18.4
167,2247,55,0,2021,2021,Operating income_0,2024-01-07 14:04:08.451127,12.1
168,2247,55,0,2022,2022,Operating income_0,2024-01-07 14:04:08.451127,3.4
169,2247,55,0,2023,Q3 2023,Operating income_0,2024-01-07 14:04:08.451127,8.3
170,2247,55,1,2014,2014,Operating income_1,2024-01-07 14:04:08.451127,46.1538
171,2247,55,1,2015,2015,Operating income_1,2024-01-07 14:04:08.451127,42.1053
172,2247,55,1,2016,2016,Operating income_1,2024-01-07 14:04:08.451127,74.0741
173,2247,55,1,2017,2017,Operating income_1,2024-01-07 14:04:08.451127,46.8085
174,2247,55,1,2018,2018,Operating income_1,2024-01-07 14:04:08.451127,7.2464
175,2247,55,1,2019,2019,Operating income_1,2024-01-07 14:04:08.451127,52.7027
176,2247,55,1,2020,2020,Operating income_1,2024-01-07 14:04:08.451127,62.8319
177,2247,55,1,2021,2021,Operating income_1,2024-01-07 14:04:08.451127,-34.2391
178,2247,55,1,2022,2022,Operating income_1,2024-01-07 14:04:08.451127,-71.9008
179,2247,55,1,2023,Q3 2023,Operating income_1,2024-01-07 14:04:08.451127,315.0
180,2247,56,0,2014,2014,Earnings_0,2024-01-07 14:04:08.451127,1.5
181,2247,56,0,2015,2015,Earnings_0,2024-01-07 14:04:08.451127,2.1
182,2247,56,0,2016,2016,Earnings_0,2024-01-07 14:04:08.451127,3.6
183,2247,56,0,2017,2017,Earnings_0,2024-01-07 14:04:08.451127,5.4
184,2247,56,0,2018,2018,Earnings_0,2024-01-07 14:04:08.451127,5.7
185,2247,56,0,2019,2019,Earnings_0,2024-01-07 14:04:08.451127,6.6
186,2247,56,0,2020,2020,Earnings_0,2024-01-07 14:04:08.451127,10.8
187,2247,56,0,2021,2021,Earnings_0,2024-01-07 14:04:08.451127,9.0
188,2247,56,0,2022,2022,Earnings_0,2024-01-07 14:04:08.451127,1.7
189,2247,56,0,2023,Q3 2023,Earnings_0,2024-01-07 14:04:08.451127,5.8
190,2247,56,1,2014,2014,Earnings_1,2024-01-07 14:04:08.451127,66.6667
191,2247,56,1,2015,2015,Earnings_1,2024-01-07 14:04:08.451127,40.0
192,2247,56,1,2016,2016,Earnings_1,2024-01-07 14:04:08.451127,71.4286
193,2247,56,1,2017,2017,Earnings_1,2024-01-07 14:04:08.451127,50.0
194,2247,56,1,2018,2018,Earnings_1,2024-01-07 14:04:08.451127,5.5556
195,2247,56,1,2019,2019,Earnings_1,2024-01-07 14:04:08.451127,15.7895
196,2247,56,1,2020,2020,Earnings_1,2024-01-07 14:04:08.451127,63.6364
197,2247,56,1,2021,2021,Earnings_1,2024-01-07 14:04:08.451127,-16.6667
198,2247,56,1,2022,2022,Earnings_1,2024-01-07 14:04:08.451127,-81.1111
199,2247,56,1,2023,Q3 2023,Earnings_1,2024-01-07 14:04:08.451127,1060.0