yokoha commited on
Commit
3f553db
Β·
verified Β·
1 Parent(s): 0e796e5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +6 -45
app.py CHANGED
@@ -148,7 +148,6 @@ def _standardize_columns(df: pd.DataFrame) -> pd.DataFrame:
148
  df.reset_index(inplace=True)
149
  df.rename(columns={df.columns[0]: "date"}, inplace=True)
150
 
151
-
152
  # ── convert YYYYMM string to datetime ──────────────────────────────────────
153
  if "date" in df.columns and pd.api.types.is_object_dtype(df["date"]):
154
  if len(df) > 0:
@@ -172,7 +171,6 @@ def _standardize_columns(df: pd.DataFrame) -> pd.DataFrame:
172
  except:
173
  # μ‹€νŒ¨ μ‹œ 일반 λ³€ν™˜ μ‹œλ„
174
  df["date"] = pd.to_datetime(df["date"], errors="coerce")
175
-
176
 
177
  # ── build item from pdlt_nm + spcs_nm if needed ────────────────────
178
  if "item" not in df.columns and {"pdlt_nm", "spcs_nm"}.issubset(df.columns):
@@ -185,8 +183,6 @@ def _standardize_columns(df: pd.DataFrame) -> pd.DataFrame:
185
 
186
  return df
187
 
188
-
189
-
190
  @st.cache_data(show_spinner=False)
191
  def load_data() -> pd.DataFrame:
192
  """Load price data from CSV file."""
@@ -254,47 +250,6 @@ def load_data() -> pd.DataFrame:
254
  st.code(traceback.format_exc())
255
  st.stop()
256
 
257
- # 메인 μ½”λ“œμ— λ‹€μŒ λΆ€λΆ„ μΆ”κ°€ - ν’ˆλͺ©λ³„ 데이터 수 확인
258
- item_df = raw_df.query("item == @selected_item").copy()
259
- if item_df.empty:
260
- st.error(f"μ„ νƒν•œ ν’ˆλͺ© '{selected_item}' 데이터가 μ—†μŠ΅λ‹ˆλ‹€.")
261
- st.stop()
262
- elif len(item_df) < 2:
263
- st.warning(f"μ„ νƒν•œ ν’ˆλͺ© '{selected_item}' 데이터가 λ„ˆλ¬΄ μ μŠ΅λ‹ˆλ‹€ (데이터 수: {len(item_df)}). 예츑이 λΆ€μ •ν™•ν•  수 μžˆμŠ΅λ‹ˆλ‹€.")
264
- else:
265
- st.success(f"μ„ νƒν•œ ν’ˆλͺ© '{selected_item}'에 λŒ€ν•΄ {len(item_df)}개의 데이터가 μžˆμŠ΅λ‹ˆλ‹€.")
266
-
267
- # μ•„λž˜μ²˜λŸΌ μž₯κΈ° 예츑 λΆ€λΆ„ μˆ˜μ •
268
- try:
269
- # 데이터 필터링 둜직 κ°œμ„ 
270
- macro_start_dt = pd.Timestamp("1996-01-01")
271
-
272
- # μ΅œμ†Œ 데이터 수 확인
273
- macro_df = item_df.copy() # 전체 데이터 μ‚¬μš©
274
-
275
- # 데이터가 맀우 적은 경우 κ²½κ³  ν‘œμ‹œ
276
- if len(macro_df) < 5:
277
- st.warning(f"{selected_item}에 λŒ€ν•œ 데이터가 맀우 μ μŠ΅λ‹ˆλ‹€ (데이터 수: {len(macro_df)}). 예츑이 λΆ€μ •ν™•ν•  수 μžˆμŠ΅λ‹ˆλ‹€.")
278
-
279
- # 진단 정보 ν‘œμ‹œ
280
- with st.expander("데이터 진단"):
281
- st.write(f"- 전체 데이터 수: {len(item_df)}")
282
- st.write(f"- 뢄석 데이터 수: {len(macro_df)}")
283
- if len(macro_df) > 0:
284
- st.write(f"- κΈ°κ°„: {macro_df['date'].min().strftime('%Y-%m-%d')} ~ {macro_df['date'].max().strftime('%Y-%m-%d')}")
285
- st.dataframe(macro_df.head())
286
- else:
287
- st.write("데이터가 μ—†μŠ΅λ‹ˆλ‹€.")
288
-
289
- # 데이터 필터링 쑰건 μ™„ν™” - μ΅œμ†Œ 2개 이상이면 μ§„ν–‰
290
- if len(macro_df) >= 2:
291
- # κΈ°μ‘΄ μ½”λ“œ (λͺ¨λΈ ν•™μŠ΅ 및 μ‹œκ°ν™”)
292
- with st.spinner("μž₯κΈ° 예츑 λͺ¨λΈ 생성 쀑..."):
293
- if use_ensemble:
294
- fc_macro = fit_ensemble_model(macro_df, selected_item, MACRO_END)
295
- else:
296
- fc_macro = fit_optimal_model(macro_df, selected_item, MACRO_END)
297
-
298
  @st.cache_data(show_spinner=False)
299
  def get_items(df: pd.DataFrame):
300
  return sorted(df["item"].unique())
@@ -1217,6 +1172,12 @@ item_df = raw_df.query("item == @selected_item").copy()
1217
  if item_df.empty:
1218
  st.error("μ„ νƒν•œ ν’ˆλͺ© 데이터 μ—†μŒ")
1219
  st.stop()
 
 
 
 
 
 
1220
 
1221
  # -------------------------------------------------
1222
  # MACRO FORECAST 1996‑2030 ------------------------
 
148
  df.reset_index(inplace=True)
149
  df.rename(columns={df.columns[0]: "date"}, inplace=True)
150
 
 
151
  # ── convert YYYYMM string to datetime ──────────────────────────────────────
152
  if "date" in df.columns and pd.api.types.is_object_dtype(df["date"]):
153
  if len(df) > 0:
 
171
  except:
172
  # μ‹€νŒ¨ μ‹œ 일반 λ³€ν™˜ μ‹œλ„
173
  df["date"] = pd.to_datetime(df["date"], errors="coerce")
 
174
 
175
  # ── build item from pdlt_nm + spcs_nm if needed ────────────────────
176
  if "item" not in df.columns and {"pdlt_nm", "spcs_nm"}.issubset(df.columns):
 
183
 
184
  return df
185
 
 
 
186
  @st.cache_data(show_spinner=False)
187
  def load_data() -> pd.DataFrame:
188
  """Load price data from CSV file."""
 
250
  st.code(traceback.format_exc())
251
  st.stop()
252
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  @st.cache_data(show_spinner=False)
254
  def get_items(df: pd.DataFrame):
255
  return sorted(df["item"].unique())
 
1172
  if item_df.empty:
1173
  st.error("μ„ νƒν•œ ν’ˆλͺ© 데이터 μ—†μŒ")
1174
  st.stop()
1175
+
1176
+ # 데이터 수 검사
1177
+ if len(item_df) < 2:
1178
+ st.warning(f"μ„ νƒν•œ ν’ˆλͺ© '{selected_item}' 데이터가 λ„ˆλ¬΄ μ μŠ΅λ‹ˆλ‹€ (데이터 수: {len(item_df)}). 예츑이 λΆ€μ •ν™•ν•  수 μžˆμŠ΅λ‹ˆλ‹€.")
1179
+ else:
1180
+ st.success(f"μ„ νƒν•œ ν’ˆλͺ© '{selected_item}'에 λŒ€ν•΄ {len(item_df)}개의 데이터가 μžˆμŠ΅λ‹ˆλ‹€.")
1181
 
1182
  # -------------------------------------------------
1183
  # MACRO FORECAST 1996‑2030 ------------------------