Spaces:
Running
Running
ykjung
feat: implement chunked Parquet uploads to Hugging Face for memory efficiency and improved data handling
dd5d980 | title: CreateDataSet | |
| emoji: ๐ | |
| colorFrom: gray | |
| colorTo: green | |
| sdk: gradio | |
| sdk_version: 6.6.0 | |
| app_file: app.py | |
| pinned: false | |
| # CreateDataSet | |
| ๋์ค๋ฅ/๋ด์์ฆ๊ถ๊ฑฐ๋์(US) ํฐ์ปค์ ์ผ๋ด ๋ฐ์ดํฐ๋ฅผ ์์งํด Hugging Face Dataset์ผ๋ก ์ ๋ก๋ํ๋ Gradio ์ฑ์ ๋๋ค. | |
| ## ๋ฒํผ ๋ก์ง ์ค๋ช | |
| ์ด ์ฑ์ ํต์ฌ ๋์์ ์๋ 2๊ฐ ๋ฒํผ์ผ๋ก ์คํ๋ฉ๋๋ค. | |
| --- | |
| ## 1) `๐ ํฐ์ปค ๋ชฉ๋ก ๋ฏธ๋ฆฌ๋ณด๊ธฐ` | |
| UI ์ฐ๊ฒฐ: | |
| - `preview_btn.click(fn=preview_tickers, inputs=[], outputs=[output_log])` | |
| ์คํ ํจ์: | |
| - `preview_tickers()` | |
| ๋ด๋ถ ๋ก์ง: | |
| 1. `get_all_us_tickers()` ํธ์ถ | |
| 2. ์ผํ ์คํฌ๋ฆฌ๋(`yf.screen`)๋ก ๊ฑฐ๋์๋ณ ํฐ์ปค ์์ง | |
| - NASDAQ: `NMS`, `NGM`, `NCM` | |
| - NYSE: `NYQ` | |
| 3. ํฐ์ปค ํํฐ ์ ์ฉ | |
| - `-`, `.`, `$` ํฌํจ ํฐ์ปค ์ ์ธ | |
| - 5๊ธ์์ด๋ฉฐ ๋ง์ง๋ง์ด `W`, `R`, `U`์ธ ํ์์ฑ ํฐ์ปค ์ ์ธ | |
| 4. ์ค๋ณต ์ ๊ฑฐ + ์ ๋ ฌ | |
| 5. ๋ก๊ทธ ํ ์คํธ ๋ฐํ | |
| - ๋์ค๋ฅ ๊ฐ์ | |
| - ๋ด์์ฆ๊ถ๊ฑฐ๋์ ๊ฐ์ | |
| - ์ ์ฒด ๊ฐ์ | |
| - ๊ฐ ๊ฑฐ๋์ ์ 20๊ฐ ์ํ ํฐ์ปค | |
| ํน์ง: | |
| - ์ค์ ๋ฐ์ดํฐ ์์ง/์ ๋ก๋๋ ์ํํ์ง ์๊ณ , ์์ง ๋์ ํฐ์ปค ๋ชฉ๋ก๋ง ๋น ๋ฅด๊ฒ ํ์ธํฉ๋๋ค. | |
| - ๊ฒฐ๊ณผ๋ ์ค๋ฅธ์ชฝ `๋ก๊ทธ ์ถ๋ ฅ` ํ ์คํธ๋ฐ์ค์ ํ์๋ฉ๋๋ค. | |
| --- | |
| ## 2) `๐ ํ์ดํ๋ผ์ธ ์์` | |
| UI ์ฐ๊ฒฐ: | |
| - `start_btn.click(fn=run_pipeline, inputs=[hf_token_input, all_dataset_input, recent_dataset_input, batch_size_input, period_input, checkpoint_batch_input], outputs=[output_log])` | |
| ์คํ ํจ์: | |
| - `run_pipeline(hf_token, all_dataset_name, recent_dataset_name, batch_size, period, checkpoint_batch_size, progress=gr.Progress())` | |
| ์ฌ์ ์กฐ๊ฑด: | |
| - `HF_TOKEN`์ด ํ์ํฉ๋๋ค. | |
| - ํ ํฐ์ด ์์ผ๋ฉด ์ฆ์ ์คํจ ๋ฉ์์ง๋ฅผ ๋ฐํํ๊ณ ์ข ๋ฃํฉ๋๋ค. | |
| ๋จ๊ณ๋ณ ๋ก์ง: | |
| 1. **ํฐ์ปค ๋ชฉ๋ก ์์ง** | |
| - `get_all_us_tickers()` ํธ์ถ | |
| - ์ ์ฒด ๋์ ํฐ์ปค ๊ฐ์ ๊ณ์ฐ | |
| 2. **๊ธฐ์กด ๋ฐ์ดํฐ์ ๋ก๋ + ์ฌ๊ฐ ๋์ ๊ณ์ฐ** | |
| - ๊ธฐ์กด `all`, `30d` ๋ฐ์ดํฐ์ ๋ก๋ ์๋ | |
| - ์ด๋ฏธ ์์ง๋ ํฐ์ปค๋ฅผ ์ ์ธํ๊ณ ์ด๋ฒ ์คํ ๋์ ํฐ์ปค๋ง ๊ณ์ฐ | |
| 3. **ํฐ์ปค๋ณ ๊ฐ๊ฒฉ ๋ฐ์ดํฐ ์์ง** | |
| - ๊ฐ ํฐ์ปค์ ๋ํด `fetch_ticker_data(ticker)` ์คํ | |
| - `yf.Ticker(ticker).history(period=period, interval="1d")` ํธ์ถ | |
| - ์ปฌ๋ผ ์ ๋ฆฌ: `Ticker`, `Date`, `Open`, `High`, `Low`, `Close`, `Volume` | |
| - ์ซ์ ์ปฌ๋ผ ๋ฐ์ฌ๋ฆผ(์์์ 4์๋ฆฌ) | |
| - ์ฅ์ค ๋ฏธํ์ ์ข ๊ฐ ์ ์ธ ๋ก์ง ์ ์ฉ | |
| - ๋ด์ ์๊ฐ ๊ธฐ์ค | |
| - ๋ง๊ฐ ํ์ ์ (today) ๋ฐ์ดํฐ๋ ์ ์ธ | |
| - ์คํจ ์ ์ต๋ 3ํ ์ฌ์๋ | |
| - 10ํฐ์ปค๋ง๋ค 0.5์ด ๋๊ธฐ(ํธ์ถ ์ฐจ๋จ ์ํ) | |
| - ์ค์ ํ ๊ฐ๊ฒฉ(`checkpoint_batch_size`)๋ง๋ค ์์ง ๋ฒํผ๋ฅผ Parquet ์ฒญํฌ๋ก ์ ๋ก๋ | |
| - ์ฒญํฌ ์ ๋ก๋ ํ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ฅผ ์ฆ์ ๋น์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ํ | |
| 4. **์ต์ข ๋ณํฉ ๋ฐ์** | |
| - ๋ง์ง๋ง ๋ฏธ๋ฐ์ ๋ฒํผ๋ฅผ ์ฒญํฌ ์ ๋ก๋๋ก ๋ฐ์ | |
| 5. **์ต๊ทผ 30์ผ ๋ฐ์ดํฐ์ ๊ฐฑ์ ** | |
| - ํฐ์ปค๋ณ ์ต๊ทผ 30์ผ ๋ฐ์ดํฐ ์ฒญํฌ๋ฅผ ํจ๊ป ์ ๋ก๋ | |
| 6. **Hugging Face ์ ๋ก๋** | |
| - ๋ด๋ถ์ ์ผ๋ก `HfApi.upload_file(..., path_in_repo="data/chunks/...parquet")` ๋ฐฉ์ ์ฌ์ฉ | |
| - ๋์ฉ๋ ์ ์ฒด ๋ฐ์ดํฐํ๋ ์ ์ฌ์ ๋ก๋๋ฅผ ํผํด์ ๋ฉ๋ชจ๋ฆฌ ํผํฌ๋ฅผ ๋ฎ์ถค | |
| 7. **์๋ฃ ๋ก๊ทธ ๋ฐํ** | |
| - ์์/์ข ๋ฃ ์๊ฐ, ์ฑ๊ณต/์คํจ ๊ฐ์, ์ ๋ก๋ ๊ฒฐ๊ณผ๋ฅผ ํ ์คํธ๋ก ๋ฐํ | |
| ์งํ๋ฅ (Progress Bar): | |
| - ์์ง ์์: `0` | |
| - ๋ฐ์ดํฐ ๋ณํฉ: `0.9` | |
| - 30์ผ ํํฐ๋ง: `0.93` | |
| - ์ ๋ก๋: `0.95` | |
| - ์๋ฃ: `1.0` | |
| --- | |
| ## 3) `โก ์ค์๊ฐ ์์` | |
| UI ์ฐ๊ฒฐ: | |
| - `realtime_btn.click(fn=run_realtime_update, inputs=[hf_token_input, all_dataset_input, recent_dataset_input], outputs=[output_log])` | |
| ์คํ ํจ์: | |
| - `run_realtime_update(hf_token, all_dataset_name, recent_dataset_name, progress=gr.Progress())` | |
| ํต์ฌ ๋ชฉ์ : | |
| - ๋ฐ์ดํฐ์ ์ ์ด๋ฏธ ๋ฑ๋ก๋ ํฐ์ปค๋ค์ ๊ธฐ์ค์ผ๋ก TradingView Screener์์ ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด ์กฐํ | |
| - `all` ๋ฐ์ดํฐ์ : ์ค๋ ๋ฐ์ดํฐ **์ถ๊ฐ๋ง(append-only)** | |
| - `30d` ๋ฐ์ดํฐ์ : ์ค๋๋ ๋ฐ์ดํฐ ์ ๊ฑฐ ํ ์ค๋ ๋ฐ์ดํฐ ๋ฐ์ | |
| ๋จ๊ณ๋ณ ๋ก์ง: | |
| 1. **์ฅ์ค ์ฌ๋ถ ํ์ธ (์ธ๋จธํ์ ์๋ ๋ฐ์)** | |
| - `America/New_York` ๊ธฐ์ค ์๊ฐ์ผ๋ก ์ ๊ท์ฅ(09:30~16:00) ์ฌ๋ถ ํ๋จ | |
| - ์ฅ์ค์ด๋ฉด ๋ก๊ทธ์ **`์ฅ์ค์ ๋๋ค.`** ์ถ๋ ฅ | |
| 2. **๊ธฐ์กด ๋ฐ์ดํฐ์ ๋ก๋** | |
| - HF Hub์์ `all`, `30d` ๋ฐ์ดํฐ์ ๋ก๋ | |
| - ์กฐํ ํฐ์ปค๋ ์ฐ์ `30d`์ `Ticker` ๋ชฉ๋ก ์ฌ์ฉ (์์ผ๋ฉด `all` ์ฌ์ฉ) | |
| 3. **์ค๋ ๋ฐ์ดํฐ ์ค๋ณต ์์ง ์ฒดํฌ** | |
| - `all` ๋ฐ์ดํฐ์ ์์ ์ค๋ ๋ ์ง(๋ด์ ๊ธฐ์ค) ํ ํ์ธ | |
| - ๋์ ํฐ์ปค๊ฐ ๋ชจ๋ ์ค๋ ๋ ์ง๋ก ์ด๋ฏธ ์กด์ฌํ๋ฉด **`์ด๋ฏธ ์์งํ์ต๋๋ค`** ์ถ๋ ฅ ํ ์ข ๋ฃ | |
| 4. **TradingView ์ผ๊ด ์กฐํ** | |
| - Yahoo๊ฐ ์๋ `https://scanner.tradingview.com/america/scan` ์ฌ์ฉ | |
| - ํฐ์ปค๋ณ `NASDAQ/NYSE/AMEX` ์ฌ๋ณผ์ ํจ๊ป ์กฐํ | |
| - ์์ ์ปฌ๋ผ: `close/open/high/low/volume` | |
| 5. **`all` ์ ๋ฐ์ดํธ (์ถ๊ฐ๋ง)** | |
| - ์ค๋ ๋ฐ์ดํฐ๊ฐ ์๋ ํฐ์ปค๋ง ์ ๊ท ํ์ผ๋ก ์ถ๊ฐ | |
| 6. **`30d` ์ ๋ฐ์ดํธ (๊ต์ฒด+์ ๋ฆฌ)** | |
| - ๊ฐ์ ํฐ์ปค์ ์ค๋ ํ์ ์ต์ ๊ฐ์ผ๋ก ๊ต์ฒด | |
| - ํฐ์ปค๋ณ ์ต๊ทผ 30์ผ๋ง ์ ์งํ๋๋ก ํํฐ๋ง | |
| 7. **HF ์ ๋ก๋** | |
| - `all`, `30d` ๋ ๋ฐ์ดํฐ์ ์ ๊ฐ๊ฐ push | |
| --- | |
| ## ์ ๋ ฅ๊ฐ ์ค๋ช | |
| - `ํ๊น ํ์ด์ค ํ ํฐ (HF_TOKEN)` | |
| - ๋ฐ์ดํฐ์ ์ ๋ก๋ ์ธ์ฆ์ฉ | |
| - `์ ์ฒด๊ธฐ๊ฐ ๋ฐ์ดํฐ์ ์ด๋ฆ (all)` | |
| - ์: `username/us-stocks-daily-all` | |
| - `์ต๊ทผ 30์ผ ๋ฐ์ดํฐ์ ์ด๋ฆ (30d)` | |
| - ์: `username/us-stocks-daily-30d` | |
| - `๋ก๊ทธ ์ถ๋ ฅ ๋ฐฐ์น ํฌ๊ธฐ` | |
| - ๋ช ๊ฐ ํฐ์ปค๋ง๋ค ์ค๊ฐ ์งํ ๋ก๊ทธ๋ฅผ ๋จ๊ธธ์ง ์ค์ | |
| - `์กฐํ ๊ธฐ๊ฐ (Yahoo period)` | |
| - ์: `max`, `10y`, `5y`, `2y`, `1y`, `6mo`, `3mo`, `1mo` | |
| - ํ์ดํ๋ผ์ธ ์คํ ์๊ฐ์ ์ค์ด๊ณ ์ถ๋ค๋ฉด `max` ๋์ ๋ ์งง์ ๊ธฐ๊ฐ์ ์ ํ | |
| - `์ค๊ฐ ์ ๋ก๋ ๊ฐ๊ฒฉ (ํฐ์ปค ์)` | |
| - ์: `100`์ด๋ฉด 100๊ฐ ํฐ์ปค ์ฒ๋ฆฌ๋ง๋ค ์ค๊ฐ ์ ๋ก๋ | |
| - `0`์ด๋ฉด ์ค๊ฐ ์ ๋ก๋ ์์ด ๋ง์ง๋ง์ ํ ๋ฒ๋ง ์ ๋ก๋ | |
| ์ฌ์คํ(Resume) ๋์: | |
| - ์ด๋ฏธ ๋ฐ์ดํฐ์ ์ ์กด์ฌํ๋ ํฐ์ปค๋ ์๋์ผ๋ก ์คํตํฉ๋๋ค. | |
| - ์ด์ ์คํ์์ ์ค๊ฐ์ ์คํจํด๋, ๋ค์ ์คํ ์ ๋จ์ ํฐ์ปค ์์ฃผ๋ก ์ด์ด์ ์์งํฉ๋๋ค. | |
| - ์ฒดํฌํฌ์ธํธ ๊ฐ๊ฒฉ(์: 100) ๊ธฐ์ค์ผ๋ก ์ ์ฅ๋๋ฏ๋ก, ์คํจ ์ ์ต๊ทผ ์ฒดํฌํฌ์ธํธ ์ดํ ๊ตฌ๊ฐ๋ง ์ฌ์์ง๋ฉ๋๋ค. | |
| --- | |
| ## ์ฐธ๊ณ | |
| - Hugging Face Spaces ์ค์ ๋ ํผ๋ฐ์ค: | |
| - https://huggingface.co/docs/hub/spaces-config-reference | |