KYTHY commited on
Commit
a4796e3
·
verified ·
1 Parent(s): 444db0b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +4 -8
app.py CHANGED
@@ -119,7 +119,6 @@ def fetch_financial_news(keyword):
119
 
120
 
121
  # --------------------------
122
- # (*** นี่คือส่วนที่แก้ไข MergeError ***)
123
  # ดึงราคาหุ้นตามช่วงเวลาที่กำหนด (และ Flatten Header)
124
  # --------------------------
125
  @st.cache_data(ttl=3600)
@@ -134,22 +133,19 @@ def fetch_stock_price(symbol, start_date, end_date):
134
  st.warning("ไม่พบข้อมูลราคาหุ้นในช่วงเวลานี้")
135
  return pd.DataFrame()
136
 
137
- # ----- (เริ่มการแก้ไข) -----
138
  # 1. Reset index เพื่อให้ 'Date' กลายเป็นคอลัมน์
139
  df = df.reset_index()
140
 
141
  # 2. เลือกเฉพาะคอลัมน์ที่เราต้องการ
142
- # (yfinance อาจส่งคอลัมน์ 'Close' เป็น MultiIndex เช่น ('Close', ''))
143
  df_subset = df[['Date', 'Close']]
144
 
145
- # 3. (สำคัญ) เปลี่ยนชื่อคอลัมน์เพื่อ "flatten" MultiIndex ใดๆ
146
  df_subset.columns = ['date', 'price']
147
 
148
  # 4. แปลง 'date' ให้เป็น .dt.date
149
  df_subset["date"] = pd.to_datetime(df_subset["date"].dt.date)
150
 
151
  return df_subset
152
- # ----- (สิ้นสุดการแก้ไข) -----
153
 
154
  except Exception as e:
155
  st.warning(f"ไม่สามารถดึงราคาหุ้นได้: {e}")
@@ -244,17 +240,16 @@ def main():
244
  max_date = df_sorted["date_day"].max()
245
 
246
  st.info(f"กำลังดึงราคาหุ้น {symbol} ระหว่างวันที่ {min_date.strftime('%Y-%m-%d')} ถึง {max_date.strftime('%Y-%m-%d')}...")
247
- stock_df = fetch_stock_price(symbol, min_date, max_date) # <-- นี่จะเรียกใช้ฟังก์ชันที่แก้ไขแล้ว
248
 
249
  # 3. Merge ข้อมูล 2 ชุด (Sentiment & Stock)
250
  plot_data = pd.merge(
251
  df_sorted,
252
- stock_df, # <-- ตอนนี้ตารางนี้แบนแล้ว (1 level)
253
  left_on="date_day",
254
  right_on="date",
255
  how="left"
256
  )
257
- # (Error MergeError จะไม่เกิดขึ้นแล้ว)
258
 
259
  # 4. เทรนโมเดล Prediction (ใช้ข้อมูลที่ Merge แล้ว)
260
  plot_data["timestamp"] = (plot_data["date_day"] - plot_data["date_day"].min()).dt.days
@@ -279,6 +274,7 @@ def main():
279
  x=plot_data["date_day"], y=plot_data["price"],
280
  name=f"{symbol} Stock Price",
281
  mode="lines+markers",
 
282
  line=dict(color="green", width=2)
283
  ),
284
  row=1, col=1, secondary_y=False
 
119
 
120
 
121
  # --------------------------
 
122
  # ดึงราคาหุ้นตามช่วงเวลาที่กำหนด (และ Flatten Header)
123
  # --------------------------
124
  @st.cache_data(ttl=3600)
 
133
  st.warning("ไม่พบข้อมูลราคาหุ้นในช่วงเวลานี้")
134
  return pd.DataFrame()
135
 
 
136
  # 1. Reset index เพื่อให้ 'Date' กลายเป็นคอลัมน์
137
  df = df.reset_index()
138
 
139
  # 2. เลือกเฉพาะคอลัมน์ที่เราต้องการ
 
140
  df_subset = df[['Date', 'Close']]
141
 
142
+ # 3. เปลี่ยนชื่อคอลัมน์เพื่อ "flatten" MultiIndex ใดๆ
143
  df_subset.columns = ['date', 'price']
144
 
145
  # 4. แปลง 'date' ให้เป็น .dt.date
146
  df_subset["date"] = pd.to_datetime(df_subset["date"].dt.date)
147
 
148
  return df_subset
 
149
 
150
  except Exception as e:
151
  st.warning(f"ไม่สามารถดึงราคาหุ้นได้: {e}")
 
240
  max_date = df_sorted["date_day"].max()
241
 
242
  st.info(f"กำลังดึงราคาหุ้น {symbol} ระหว่างวันที่ {min_date.strftime('%Y-%m-%d')} ถึง {max_date.strftime('%Y-%m-%d')}...")
243
+ stock_df = fetch_stock_price(symbol, min_date, max_date)
244
 
245
  # 3. Merge ข้อมูล 2 ชุด (Sentiment & Stock)
246
  plot_data = pd.merge(
247
  df_sorted,
248
+ stock_df,
249
  left_on="date_day",
250
  right_on="date",
251
  how="left"
252
  )
 
253
 
254
  # 4. เทรนโมเดล Prediction (ใช้ข้อมูลที่ Merge แล้ว)
255
  plot_data["timestamp"] = (plot_data["date_day"] - plot_data["date_day"].min()).dt.days
 
274
  x=plot_data["date_day"], y=plot_data["price"],
275
  name=f"{symbol} Stock Price",
276
  mode="lines+markers",
277
+ connectgaps=True, # <--- (*** นี่คือบรรทัดที่เพิ่มเข้ามา ***)
278
  line=dict(color="green", width=2)
279
  ),
280
  row=1, col=1, secondary_y=False