SelmaNajih001 commited on
Commit
429a3fa
·
verified ·
1 Parent(s): 1d9a934

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -28
app.py CHANGED
@@ -13,7 +13,7 @@ df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
13
  df['Year'] = df['Date'].dt.year
14
  df['Month'] = df['Date'].dt.to_period('M')
15
  df['Day'] = df['Date'].dt.date
16
- df = df[df['Year'] >= 2015] # filtro anno
17
 
18
  # --- TICKERS ---
19
  TICKERS = {
@@ -38,16 +38,13 @@ for company, ticker in TICKERS.items():
38
  df_prices = df_prices.rename(columns={f'Close_{ticker}': 'Close_NASDAQ'})
39
  prices[company] = df_prices
40
 
41
- # --- FUNZIONE PER PREZZI INTERPOLATI ---
42
  def get_prices_for_agg(agg_col):
43
  df_prices_agg = {}
44
  for company, df_price in prices.items():
45
  df_temp = df_price.copy()
46
- if company == "NASDAQ":
47
- col = "Close_NASDAQ"
48
- else:
49
- col = f"Close_{TICKERS[company]}"
50
- df_temp = df_temp.rename(columns={f"Close_{TICKERS[company]}": col})
51
 
52
  if agg_col == "Day":
53
  df_temp = df_temp.set_index('Date').resample('D').mean().interpolate('linear').reset_index()
@@ -57,6 +54,7 @@ def get_prices_for_agg(agg_col):
57
  elif agg_col == "Year":
58
  df_temp['Year'] = df_temp['Date'].dt.year
59
  df_temp = df_temp.groupby('Year')[col].last().reset_index()
 
60
  df_prices_agg[company] = df_temp
61
  return df_prices_agg
62
 
@@ -70,29 +68,23 @@ for company in df['Company'].unique():
70
  df_merged = df_merged.merge(prices['NASDAQ'][['Date', 'Close_NASDAQ']], on='Date', how='left')
71
 
72
  # --- GRADIO FUNCTION ---
73
- def show_sentiment(selected_companies=None, aggregation="Day", selected_year=None):
74
  if not selected_companies:
75
  selected_companies = ["NASDAQ"]
76
 
77
  df_filtered = df_merged.copy()
78
- if selected_year != "All":
79
  df_filtered = df_filtered[df_filtered['Year'] == int(selected_year)]
80
 
81
-
82
  # colonna aggregazione
83
- if aggregation == "Day":
84
- group_col = "Day"
85
- elif aggregation == "Month":
86
- group_col = "Month"
87
  df_filtered['Month'] = df_filtered['Month'].dt.to_timestamp()
88
- elif aggregation == "Year":
89
- group_col = "Year"
90
- else:
91
- group_col = "Day"
92
-
93
 
94
- # prezzi interpolati per il livello di aggregazione
95
- prices_agg = get_prices_for_agg(group_col)
96
 
97
  include_nasdaq = "NASDAQ" in selected_companies
98
  companies_to_plot = [c for c in selected_companies if c != "NASDAQ"]
@@ -104,6 +96,8 @@ def show_sentiment(selected_companies=None, aggregation="Day", selected_year=Non
104
  df_sent = df_filtered[df_filtered['Company'].isin(companies_to_plot)]
105
  df_tmp = df_sent.groupby([group_col, 'Company']).agg({'Score':'sum'}).reset_index()
106
  for c in companies_to_plot:
 
 
107
  ticker_col = f"Close_{TICKERS[c]}"
108
  df_price_col = prices_agg[c][[group_col, ticker_col]]
109
  df_tmp = df_tmp.merge(df_price_col, on=group_col, how='left')
@@ -128,14 +122,20 @@ def show_sentiment(selected_companies=None, aggregation="Day", selected_year=Non
128
  ticker_col = f"Close_{TICKERS[c]}"
129
  df_c = df_grouped[df_grouped['Company'] == c]
130
  if ticker_col in df_c.columns and df_c[ticker_col].notnull().any():
131
- fig.add_scatter(x=df_c[group_col], y=df_c[ticker_col],
132
- mode='lines', name=f"{c} Price", yaxis="y2", line=dict(dash='dot'))
 
 
 
133
 
134
  if include_nasdaq:
135
  df_c = df_grouped[df_grouped['Company'] == 'General']
136
  if 'Close_NASDAQ' in df_c.columns and df_c['Close_NASDAQ'].notnull().any():
137
- fig.add_scatter(x=df_c[group_col], y=df_c['Close_NASDAQ'],
138
- mode='lines', name="NASDAQ Price", yaxis="y2", line=dict(dash='dot'))
 
 
 
139
 
140
  fig.update_layout(
141
  yaxis2=dict(
@@ -158,11 +158,11 @@ demo = gr.Interface(
158
  choices=companies,
159
  value=None,
160
  label="Select Companies (NASDAQ compares with general sentiment)",
161
- multiselect=False
162
  ),
163
  gr.Radio(
164
  choices=["Month", "Year"],
165
- value="Year",
166
  label="Aggregation Level"
167
  ),
168
  gr.Dropdown(
@@ -176,7 +176,10 @@ demo = gr.Interface(
176
  gr.Plot(label="Sentiment Trend"),
177
  ],
178
  title="Dynamic Sentiment Dashboard",
179
- description="Shows sentiment scores aggregated by month or year. NASDAQ compares with general sentiment if selected."
 
 
180
  )
181
 
182
  demo.launch()
 
 
13
  df['Year'] = df['Date'].dt.year
14
  df['Month'] = df['Date'].dt.to_period('M')
15
  df['Day'] = df['Date'].dt.date
16
+ df = df[df['Year'] >= 2015]
17
 
18
  # --- TICKERS ---
19
  TICKERS = {
 
38
  df_prices = df_prices.rename(columns={f'Close_{ticker}': 'Close_NASDAQ'})
39
  prices[company] = df_prices
40
 
41
+ # --- INTERPOLATE PRICES FOR DAY/MONTH ---
42
  def get_prices_for_agg(agg_col):
43
  df_prices_agg = {}
44
  for company, df_price in prices.items():
45
  df_temp = df_price.copy()
46
+ col = 'Close_NASDAQ' if company == 'NASDAQ' else f"Close_{TICKERS[company]}"
47
+ df_temp = df_temp.rename(columns={df_temp.columns[1]: col})
 
 
 
48
 
49
  if agg_col == "Day":
50
  df_temp = df_temp.set_index('Date').resample('D').mean().interpolate('linear').reset_index()
 
54
  elif agg_col == "Year":
55
  df_temp['Year'] = df_temp['Date'].dt.year
56
  df_temp = df_temp.groupby('Year')[col].last().reset_index()
57
+
58
  df_prices_agg[company] = df_temp
59
  return df_prices_agg
60
 
 
68
  df_merged = df_merged.merge(prices['NASDAQ'][['Date', 'Close_NASDAQ']], on='Date', how='left')
69
 
70
  # --- GRADIO FUNCTION ---
71
+ def show_sentiment(selected_companies=None, aggregation="Day", selected_year="All"):
72
  if not selected_companies:
73
  selected_companies = ["NASDAQ"]
74
 
75
  df_filtered = df_merged.copy()
76
+ if selected_year != "All" and selected_year is not None:
77
  df_filtered = df_filtered[df_filtered['Year'] == int(selected_year)]
78
 
 
79
  # colonna aggregazione
80
+ group_col = aggregation
81
+ if aggregation == "Month":
 
 
82
  df_filtered['Month'] = df_filtered['Month'].dt.to_timestamp()
83
+ elif aggregation == "Day":
84
+ df_filtered['Day'] = df_filtered['Date']
 
 
 
85
 
86
+ # prezzi interpolati
87
+ prices_agg = get_prices_for_agg(aggregation)
88
 
89
  include_nasdaq = "NASDAQ" in selected_companies
90
  companies_to_plot = [c for c in selected_companies if c != "NASDAQ"]
 
96
  df_sent = df_filtered[df_filtered['Company'].isin(companies_to_plot)]
97
  df_tmp = df_sent.groupby([group_col, 'Company']).agg({'Score':'sum'}).reset_index()
98
  for c in companies_to_plot:
99
+ if c not in TICKERS:
100
+ continue
101
  ticker_col = f"Close_{TICKERS[c]}"
102
  df_price_col = prices_agg[c][[group_col, ticker_col]]
103
  df_tmp = df_tmp.merge(df_price_col, on=group_col, how='left')
 
122
  ticker_col = f"Close_{TICKERS[c]}"
123
  df_c = df_grouped[df_grouped['Company'] == c]
124
  if ticker_col in df_c.columns and df_c[ticker_col].notnull().any():
125
+ fig.add_scatter(
126
+ x=df_c[group_col], y=df_c[ticker_col],
127
+ mode='lines', name=f"{c} Price", yaxis="y2",
128
+ line=dict(dash='dot')
129
+ )
130
 
131
  if include_nasdaq:
132
  df_c = df_grouped[df_grouped['Company'] == 'General']
133
  if 'Close_NASDAQ' in df_c.columns and df_c['Close_NASDAQ'].notnull().any():
134
+ fig.add_scatter(
135
+ x=df_c[group_col], y=df_c['Close_NASDAQ'],
136
+ mode='lines', name="NASDAQ Price", yaxis="y2",
137
+ line=dict(dash='dot')
138
+ )
139
 
140
  fig.update_layout(
141
  yaxis2=dict(
 
158
  choices=companies,
159
  value=None,
160
  label="Select Companies (NASDAQ compares with general sentiment)",
161
+ multiselect=True
162
  ),
163
  gr.Radio(
164
  choices=["Month", "Year"],
165
+ value="Month",
166
  label="Aggregation Level"
167
  ),
168
  gr.Dropdown(
 
176
  gr.Plot(label="Sentiment Trend"),
177
  ],
178
  title="Dynamic Sentiment Dashboard",
179
+ description="Shows sentiment scores aggregated by month, or year. NASDAQ compares with general sentiment if selected."
180
+
181
+
182
  )
183
 
184
  demo.launch()
185
+