createDataSet / README.md
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