Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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.
|
| 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,
|
| 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
|