Files
foxhunt/scripts/python/data/convert_nq_to_parquet.py
jgrusewski 433af5c25d chore: Major codebase cleanup - remove deprecated files and organize structure
- Docker: Delete 23 deprecated Dockerfiles, fix CI/CD to use Dockerfile.foxhunt-build
- Config: Remove 36 .env files, keep 4 essential, delete config/environments/
- Docs: Archive 614 Wave D files to docs/archive/wave_d/, 95% reduction in root
- Scripts: Delete 56 deprecated scripts, keep 58 production-critical (49% reduction)
- Python: Organize 37 scripts into scripts/python/ subdirectories, delete ml/python/
- Build: Remove 1GB artifacts, delete old venvs, clean Python cache from git
- Migrations: Delete deprecated directory (4,432 lines), remove duplicate database/migrations/
- Infrastructure: Delete deployment/ (61 files), docs/scripts/ (8 files)

Total impact: ~2,500 files cleaned, 750MB+ space freed, zero production impact
All deleted scripts backed up to archives. runpod/ and tests/runpod/ preserved.
data_acquisition_service retained per user request.
2025-10-30 01:02:34 +01:00

89 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Convert NQ.FUT DBN file to Parquet format.
Agent: W12-08
Input: test_data/NQ_FUT_180d.dbn (Zstandard compressed)
Output: test_data/NQ_FUT_180d.parquet (Snappy compressed)
"""
import os
import sys
import databento as db
import pyarrow.parquet as pq
INPUT_FILE = "test_data/NQ_FUT_180d.dbn"
OUTPUT_FILE = "test_data/NQ_FUT_180d.parquet"
def main():
"""Convert NQ.FUT DBN to Parquet."""
print("=" * 80)
print("NQ.FUT DBN → Parquet Converter (Agent W12-08)")
print("=" * 80)
print()
# Check input file
if not os.path.exists(INPUT_FILE):
print(f"❌ ERROR: Input file not found: {INPUT_FILE}")
sys.exit(1)
input_size = os.path.getsize(INPUT_FILE)
print(f"📁 Input: {INPUT_FILE} ({input_size / (1024*1024):.2f} MB)")
print(f"📂 Output: {OUTPUT_FILE}")
print()
# Load DBN file
try:
print("⚙️ Loading DBN file...")
store = db.DBNStore.from_file(INPUT_FILE)
# Convert to DataFrame
print("⚙️ Converting to DataFrame...")
df = store.to_df()
bar_count = len(df)
print(f"✅ Loaded {bar_count:,} bars")
print()
# Show sample data
print("📊 Data Preview:")
print(f" Columns: {list(df.columns)}")
print(f" First timestamp: {df.index[0]}")
print(f" Last timestamp: {df.index[-1]}")
print(f" Price range: ${df['close'].min():.2f} - ${df['close'].max():.2f}")
print(f" Total volume: {df['volume'].sum():,.0f}")
print()
# Convert to Parquet
print("⚙️ Writing Parquet file...")
df.to_parquet(OUTPUT_FILE, compression='snappy', engine='pyarrow')
output_size = os.path.getsize(OUTPUT_FILE)
compression_ratio = (1 - output_size / input_size) * 100
print()
print("=" * 80)
print("✅ SUCCESS: Conversion complete!")
print("=" * 80)
print()
print(f"📊 Conversion Results:")
print(f" Bar count: {bar_count:,}")
print(f" Input size: {input_size / (1024*1024):.2f} MB")
print(f" Output size: {output_size / (1024*1024):.2f} MB")
print(f" Compression: {compression_ratio:.1f}% smaller")
print()
print(f"📦 Output file ready for ML training:")
print(f" {OUTPUT_FILE}")
print()
except Exception as e:
print()
print(f"❌ Conversion failed: {e}")
import traceback
traceback.print_exc()
sys.exit(1)
if __name__ == "__main__":
main()