File size: 2,199 Bytes
76ba4f4
2086e56
 
a8a3333
76ba4f4
 
a8a3333
 
76ba4f4
a8a3333
 
 
 
ac0650f
 
76ba4f4
 
 
2de254e
1cfde01
76ba4f4
ac0650f
76ba4f4
ac0650f
 
 
 
76ba4f4
0919ad9
 
 
 
2de254e
76ba4f4
2de254e
76ba4f4
2de254e
76ba4f4
 
2de254e
 
 
 
 
 
 
76ba4f4
2de254e
 
76ba4f4
2de254e
 
 
 
 
 
 
 
0919ad9
2de254e
 
76ba4f4
 
 
 
 
 
 
1cfde01
2de254e
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
import gradio as gr
import yfinance as yf
import pandas as pd

# Mapping company names to their ticker symbols
company_dict = {
    "Apple": "AAPL",
    "Google": "GOOGL",
    "Microsoft": "MSFT",
    "Amazon": "AMZN",
    "Tesla": "TSLA"
}

# Function to fetch ESG data for the selected company
def fetch_esg_data(company_name):
    ticker = company_dict[company_name]
    stock = yf.Ticker(ticker)
    esg_data = stock.sustainability

    if esg_data is not None and not esg_data.empty:
        esg_df = pd.DataFrame(esg_data)
        esg_scores = esg_df.loc[["environmentScore", "socialScore", "governanceScore"], :].dropna().astype(float)
        
        plot_df = pd.DataFrame({
            "ESG Category": ["Environment", "Social", "Governance"],
            "Score": esg_scores.squeeze().values
        })
        
        # Save the ESG data to a CSV file
        csv_filename = f"{ticker}_esg_data.csv"
        esg_df.to_csv(csv_filename)

        return plot_df, csv_filename
    else:
        return pd.DataFrame(), None

# Gradio interface
def app_interface():
    with gr.Blocks() as app:
        # Dropdown to select company name
        company = gr.Dropdown(
            label="Select Company",
            choices=list(company_dict.keys()),
            value="Apple",  # Default value
            interactive=True  # Make it interactive
        )
        
        # Button to fetch and plot ESG data
        plot_button = gr.Button("Generate ESG Plot")
        
        # LinePlot component for displaying the ESG data
        line_plot = gr.LinePlot(label="ESG Scores Line Plot", x="ESG Category", y="Score", overlay_point=True)
        
        # ScatterPlot component for displaying the ESG data
        scatter_plot = gr.ScatterPlot(label="ESG Scores Scatter Plot", x="ESG Category", y="Score", overlay_point=True)
        
        # File output for CSV download
        csv_output = gr.File(label="Download CSV")

        # Define the action when the "Generate ESG Plot" button is clicked
        plot_button.click(fn=fetch_esg_data, inputs=company, outputs=[line_plot, csv_output, scatter_plot])

    return app

# Launch the Gradio app
app = app_interface()
app.launch()