File size: 2,176 Bytes
4c68447
 
 
 
 
 
1875b13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""
One-time script used to generate data/price_curves.json
Generate 30 days of realistic ISO New England-style hourly price data.
Run: python data/generate_prices.py
Output: data/price_curves.json
"""
import json
import math
import random

random.seed(12345)

def generate_day(day_type: str = "weekday") -> list[float]:
    """Generate 24 hourly prices for one day."""
    prices = []
    for hour in range(24):
        # Base time-of-use price
        if hour < 6:  # overnight off-peak
            base = 0.035 + random.gauss(0, 0.005)
        elif hour < 8:  # morning ramp
            base = 0.07 + random.gauss(0, 0.008)
        elif hour < 12:  # morning peak
            base = 0.16 + random.gauss(0, 0.020) + (0.05 if day_type == "weekday" else 0)
        elif hour < 14:  # midday moderate
            base = 0.10 + random.gauss(0, 0.012)
        elif hour < 17:  # afternoon
            base = 0.12 + random.gauss(0, 0.015)
        elif hour < 21:  # evening super-peak
            base = 0.22 + random.gauss(0, 0.025) + (0.08 if day_type == "weekday" else 0.02)
        elif hour < 23:  # evening wind-down
            base = 0.09 + random.gauss(0, 0.010)
        else:  # late night
            base = 0.04 + random.gauss(0, 0.006)

        # Seasonal variation (summer = higher peaks)
        season_mult = 1.0
        prices.append(round(max(0.02, base * season_mult), 4))
    return prices


# Generate 30 days: 22 weekdays + 8 weekend days
days = []
day_types = (["weekday"] * 5 + ["weekend"] * 2) * 5  # 5 weeks → 35 days → take 30
for i, dt in enumerate(day_types[:30]):
    day_data = {
        "day": i + 1,
        "day_type": dt,
        "prices_usd_per_kwh": generate_day(dt),
        "source": "synthetic_iso_new_england_style",
        "region": "ISONE",
        "currency": "USD",
    }
    days.append(day_data)

output = {
    "description": "30 days of synthetic ISO New England-style hourly electricity price data",
    "units": "USD/kWh",
    "hours_per_day": 24,
    "days": days,
}

with open("price_curves.json", "w") as f:
    json.dump(output, f, indent=2)

print(f"Generated {len(days)} days of price data -> data/price_curves.json")