Add transmission datasets and update mining data

Add two new static datasets for cross-region arbitrage calculations:
- transmission_capacity: region-to-region capacity limits (20 rows)
- transmission_cost: transmission costs per path (20 rows)

Update mining dataset with EUR pricing and power metrics:
- Change btc_price_usd to btc_price_eur
- Add power_efficiency_th_per_mw, power_demand_mw
- Add revenue_eur_per_mwh, profit_eur_per_mwh
- Remove mining_profitability column

Changes include:
- scripts/02_fetch_historical.py: rewrite fetch_bitcoin_mining_data()
- scripts/01_generate_synthetic.py: add transmission data generators
- config/data_config.yaml: add transmission config, update bitcoin config
- config/schema.yaml: add 2 new schemas, update bitcoin_mining schema
- scripts/03_process_merge.py: add 2 new datasets
- scripts/04_validate.py: add 2 new datasets
- test/test_data.py: update for new datasets and bitcoin price reference

Total datasets: 9 (734,491 rows, 17.89 MB)
This commit is contained in:
2026-02-11 01:09:33 +07:00
parent d981f7c56c
commit faaadc1297
10 changed files with 361 additions and 70 deletions

View File

@@ -93,4 +93,12 @@ data_center:
bitcoin:
hashrate_range: [150, 250] # EH/s
mining_efficiency_range: [25, 35] # J/TH
power_efficiency_range: [80, 120] # TH/s per MW
eur_usd_rate: 0.92 # For converting to EUR base price
transmission:
capacity_base_range: [1000, 4000] # MW
capacity_uk_multiplier: 0.6 # UK connections typically lower
efficiency_range: [0.95, 0.99]
congestion_surcharge_range: [0.5, 5.0] # EUR/MWh
fee_range: [0, 2.0] # EUR/MWh

View File

@@ -169,18 +169,74 @@ schemas:
type: "float32"
unit: "TH/s"
description: "Mining pool hashrate"
- name: "btc_price_usd"
- name: "btc_price_eur"
type: "float32"
unit: "USD"
description: "Bitcoin price"
- name: "mining_profitability"
unit: "EUR"
description: "Bitcoin price in EUR"
- name: "power_efficiency_th_per_mw"
type: "float32"
unit: "USD/TH/day"
description: "Mining profitability per terahash per day"
unit: "TH/s per MW"
description: "Mining efficiency"
- name: "power_demand_mw"
type: "float32"
unit: "MW"
description: "Power consumption for mining"
- name: "revenue_eur_per_mwh"
type: "float32"
unit: "EUR/MWh"
description: "Mining revenue per MWh of electricity"
- name: "profit_eur_per_mwh"
type: "float32"
unit: "EUR/MWh"
description: "Mining profit after electricity cost"
- name: "electricity_cost"
type: "float32"
unit: "EUR/MWh"
description: "Electricity cost breakeven point"
description: "Electricity cost for mining"
transmission_capacity:
columns:
- name: "source_region"
type: "category"
description: "Source region code"
- name: "target_region"
type: "category"
description: "Target region code"
- name: "capacity_mw"
type: "float32"
unit: "MW"
description: "Maximum transmission capacity"
- name: "direction"
type: "category"
description: "Transmission direction"
- name: "efficiency"
type: "float32"
description: "Transmission efficiency (0-1)"
transmission_cost:
columns:
- name: "source_region"
type: "category"
description: "Source region code"
- name: "target_region"
type: "category"
description: "Target region code"
- name: "cost_eur_mwh"
type: "float32"
unit: "EUR/MWh"
description: "Total transmission cost per MWh"
- name: "loss_percent"
type: "float32"
unit: "%"
description: "Transmission loss percentage"
- name: "congestion_surcharge_eur_mwh"
type: "float32"
unit: "EUR/MWh"
description: "Additional congestion charge"
- name: "fee_eur_mwh"
type: "float32"
unit: "EUR/MWh"
description: "Transmission fee"
validation_rules:
electricity_prices:
@@ -229,5 +285,32 @@ validation_rules:
bitcoin_mining:
- column: "hashrate_ths"
min: 0
- column: "btc_price_usd"
max: 1000000
- column: "btc_price_eur"
min: 1000
max: 200000
- column: "power_efficiency_th_per_mw"
min: 50
max: 150
- column: "power_demand_mw"
min: 10
max: 1000
- column: "revenue_eur_per_mwh"
min: 0
max: 500
transmission_capacity:
- column: "capacity_mw"
min: 100
max: 10000
- column: "efficiency"
min: 0.9
max: 1.0
transmission_cost:
- column: "cost_eur_mwh"
min: 0
max: 50
- column: "loss_percent"
min: 0
max: 15