File size: 6,145 Bytes
d4f51ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import pandas as pd
import yfinance as yf
import seaborn as sns
import matplotlib.pyplot as plt
# import openai


def load_and_display_pl(ticker1, ticker2):
    try:
        # Fetch P&L data
        ticker1_data = yf.Ticker(ticker1).financials
        ticker2_data = yf.Ticker(ticker2).financials

        # Transpose for better visualization
        ticker1_df = ticker1_data.transpose()
        ticker2_df = ticker2_data.transpose()

        # Basic data cleaning (adjust as needed)
        ticker1_df = ticker1_df.fillna(0)  # Fill missing values with 0
        ticker2_df = ticker2_df.fillna(0)

        ticker1_df = ticker1_df[['Total Revenue', 'Cost Of Revenue', 'Gross Profit', 'Operating Income', 'Operating Expense', 'EBIT', 'EBITDA', 'Pretax Income','Tax Provision','Net Interest Income','Net Income', 'Basic EPS']]
        ticker2_df = ticker2_df[['Total Revenue', 'Cost Of Revenue', 'Gross Profit', 'Operating Income', 'Operating Expense', 'EBIT', 'EBITDA', 'Pretax Income','Tax Provision','Net Interest Income','Net Income', 'Basic EPS']]

        # Calculate and visualize horizontal analysis
        ticker1_pct_change = ticker1_df.pct_change(axis=1) * 100
        ticker2_pct_change = ticker2_df.pct_change(axis=1) * 100

        ticker1_pct_change_1 = ticker1_pct_change[['Gross Profit',  'Pretax Income', 'Net Income']]
        ticker2_pct_change_2 = ticker2_pct_change[['Gross Profit',  'Pretax Income', 'Net Income']]

        #calculate the vertical analysis 
        ticker_1_vertical = ticker1_df.T.div(ticker1_df['Total Revenue'], axis=1).round(2) * 100
        ticker_2_vertical = ticker2_df.T.div(ticker2_df['Total Revenue'], axis=1).round(2) * 100

        #MARGINS & Ratios
        #ticker one
        ticker1_df['Operating_profit_Margin'] = (ticker1_df['Operating Income'] /ticker1_df['Total Revenue']) *100
        ticker1_df['Operating_Expense_Ratio'] = (ticker1_df['Operating Expense'] /ticker1_df['Total Revenue']) *100
        ticker1_df['Interest_Coverage_Ratio'] = ticker1_df['EBIT'] / abs(ticker1_df['Net Interest Income']) 
        ticker1_df['Effective_Tax_Rate'] = (ticker1_df['Tax Provision'] / ticker1_df['Pretax Income']) * 100
        ticker1_df['Net_profit_Margin'] = (ticker1_df['Net Income'] /ticker1_df['Total Revenue']) *100

        ticker2_df['Operating_profit_Margin'] = (ticker2_df['Operating Income'] /ticker2_df['Total Revenue']) *100
        ticker2_df['Operating_Expense_Ratio'] = (ticker2_df['Operating Expense'] /ticker2_df['Total Revenue']) *100
        ticker2_df['Interest_Coverage_Ratio'] = ticker2_df['EBIT'] / abs(ticker2_df['Net Interest Income']) 
        ticker2_df['Effective_Tax_Rate'] = (ticker2_df['Tax Provision'] / ticker2_df['Pretax Income']) * 100
        ticker2_df['Net_profit_Margin'] = (ticker2_df['Net Income'] /ticker2_df['Total Revenue']) *100


        Profit_Margins_1 = ticker1_df[['Operating_profit_Margin', 'Operating_Expense_Ratio', 'Interest_Coverage_Ratio', 'Effective_Tax_Rate', 'Net_profit_Margin']]
        Profit_Margins_2 = ticker2_df[['Operating_profit_Margin', 'Operating_Expense_Ratio', 'Interest_Coverage_Ratio', 'Effective_Tax_Rate', 'Net_profit_Margin']]



        # Display side-by-side
        
        col1, col2 = st.columns(2)
        with col1:
            st.header(f"Vertical Analysis : {ticker1}")
            st.dataframe(ticker_1_vertical)
            st.header(f"Horizantal Analysis : {ticker1}")
            st.dataframe(ticker1_pct_change)
            st.header(f"Trend Analysis : {ticker1}")
            st.line_chart(ticker1_pct_change_1)
            # st.dataframe(Profit_Margins)
            fig, ax =plt.subplots()
            plt.title(f"Margins & Tax coverage Ratio of : {ticker1}")
            sns.heatmap(Profit_Margins_1, annot=True, fmt='.2f', cmap='coolwarm', ax=ax)
            st.pyplot(fig)
            



        with col2:
            st.header(f"Vertical Analysis of : {ticker2}")
            st.dataframe(ticker_2_vertical)
            st.header(f"Horizantal Analysis : {ticker2}")
            st.dataframe(ticker2_pct_change)
            st.header(f"Trend Analysis of :{ticker2}")
            st.line_chart(ticker2_pct_change_2)
            fig, ax =plt.subplots()
            plt.title(f"Margins & Tax coverage Ratio of : {ticker2}")
            sns.heatmap(Profit_Margins_2, annot=True, fmt='.2f', cmap='coolwarm', ax=ax)
            st.pyplot(fig)



    #     # GPT-3 Integration
    #     openai.api_key = ""
    #     # Prepare data for GPT-3
    #     ticker1_summary = f"**{ticker1}**\n\n" \
    #                      f"**Vertical Analysis:**\n{ticker_1_vertical.to_markdown()}\n\n" \
    #                      f"**Horizontal Analysis:**\n{ticker1_pct_change.to_markdown()}\n\n" \
    #                      f"**Key Ratios:**\n{Profit_Margins_1.to_markdown()}\n\n"
    #     ticker2_summary = f"**{ticker2}**\n\n" \
    #                      f"**Vertical Analysis:**\n{ticker_2_vertical.to_markdown()}\n\n" \
    #                      f"**Horizontal Analysis:**\n{ticker2_pct_change.to_markdown()}\n\n" \
    #                      f"**Key Ratios:**\n{Profit_Margins_2.to_markdown()}\n\n"

    #     prompt = f"Compare and contrast the financial performance of the two companies based on their P&L data:\n\n" \
    #              f"{ticker1_summary}\n\n" \
    #              f"{ticker2_summary}\n\n" \
    #              f"Provide insights into their profitability, growth trends, and operational efficiency."

    #     # Generate response from GPT-3
    #     response = openai.Completion.create(
    #         engine="text-ada-001",  # Choose an appropriate engine
    #         prompt=prompt,
    #         max_tokens=1024,
    #         n=1,
    #         stop=None,
    #         temperature=0.7
    #     )

    #     # Display GPT-3's analysis
    #     st.header("GPT-3 Analysis")
    #     st.write(response.choices[0].text)

    except Exception as e:
        st.error(f"An error occurred: {e}")
    return load_and_display_pl