147 lines
3.5 KiB
Python
147 lines
3.5 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# SPDX-FileCopyrightText: : 2020-2024 The PyPSA-Eur Authors
|
||
|
#
|
||
|
# SPDX-License-Identifier: MIT
|
||
|
|
||
|
import logging
|
||
|
import os
|
||
|
|
||
|
import pandas as pd
|
||
|
import pypsa
|
||
|
from _helpers import configure_logging, set_scenario_config
|
||
|
|
||
|
logger = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
BUSES_COLUMNS = [
|
||
|
"bus_id",
|
||
|
"voltage",
|
||
|
"dc",
|
||
|
"symbol",
|
||
|
"under_construction",
|
||
|
"x",
|
||
|
"y",
|
||
|
"country",
|
||
|
"geometry",
|
||
|
]
|
||
|
LINES_COLUMNS = [
|
||
|
"line_id",
|
||
|
"bus0",
|
||
|
"bus1",
|
||
|
"voltage",
|
||
|
"circuits",
|
||
|
"length",
|
||
|
"underground",
|
||
|
"under_construction",
|
||
|
"geometry",
|
||
|
]
|
||
|
LINKS_COLUMNS = [
|
||
|
"link_id",
|
||
|
"bus0",
|
||
|
"bus1",
|
||
|
"voltage",
|
||
|
"p_nom",
|
||
|
"length",
|
||
|
"underground",
|
||
|
"under_construction",
|
||
|
"geometry",
|
||
|
]
|
||
|
TRANSFORMERS_COLUMNS = [
|
||
|
"transformer_id",
|
||
|
"bus0",
|
||
|
"bus1",
|
||
|
"voltage_bus0",
|
||
|
"voltage_bus1",
|
||
|
"geometry",
|
||
|
]
|
||
|
CONVERTERS_COLUMNS = [
|
||
|
"converter_id",
|
||
|
"bus0",
|
||
|
"bus1",
|
||
|
"voltage",
|
||
|
"geometry",
|
||
|
]
|
||
|
|
||
|
|
||
|
def export_clean_csv(df, columns, output_file):
|
||
|
"""
|
||
|
Export a cleaned DataFrame to a CSV file.
|
||
|
|
||
|
Args:
|
||
|
df (pandas.DataFrame): The DataFrame to be exported.
|
||
|
columns (list): A list of column names to include in the exported CSV file.
|
||
|
output_file (str): The path to the output CSV file.
|
||
|
|
||
|
Returns:
|
||
|
None
|
||
|
"""
|
||
|
rename_dict = {
|
||
|
"Bus": "bus_id",
|
||
|
"Line": "line_id",
|
||
|
"Link": "link_id",
|
||
|
"Transformer": "transformer_id",
|
||
|
"v_nom": "voltage",
|
||
|
"num_parallel": "circuits",
|
||
|
}
|
||
|
|
||
|
if "converter_id" in columns:
|
||
|
rename_dict["Link"] = "converter_id"
|
||
|
|
||
|
df.reset_index().rename(columns=rename_dict).loc[:, columns].replace(
|
||
|
{True: "t", False: "f"}
|
||
|
).to_csv(output_file, index=False, quotechar="'")
|
||
|
|
||
|
return None
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
if "snakemake" not in globals():
|
||
|
from _helpers import mock_snakemake
|
||
|
|
||
|
snakemake = mock_snakemake("prepare_osm_network_release")
|
||
|
|
||
|
configure_logging(snakemake)
|
||
|
set_scenario_config(snakemake)
|
||
|
|
||
|
network = pypsa.Network(snakemake.input.base_network)
|
||
|
|
||
|
network.buses["dc"] = network.buses.pop("carrier").map({"DC": "t", "AC": "f"})
|
||
|
network.lines.length = network.lines.length * 1e3
|
||
|
network.links.length = network.links.length * 1e3
|
||
|
|
||
|
# Export to clean csv for release
|
||
|
logger.info(f"Exporting {len(network.buses)} buses to %s", snakemake.output.buses)
|
||
|
export_clean_csv(network.buses, BUSES_COLUMNS, snakemake.output.buses)
|
||
|
|
||
|
logger.info(
|
||
|
f"Exporting {len(network.transformers)} transformers to %s",
|
||
|
snakemake.output.transformers,
|
||
|
)
|
||
|
export_clean_csv(
|
||
|
network.transformers, TRANSFORMERS_COLUMNS, snakemake.output.transformers
|
||
|
)
|
||
|
|
||
|
logger.info(f"Exporting {len(network.lines)} lines to %s", snakemake.output.lines)
|
||
|
export_clean_csv(network.lines, LINES_COLUMNS, snakemake.output.lines)
|
||
|
|
||
|
# Boolean that specifies if link element is a converter
|
||
|
is_converter = network.links.index.str.startswith("conv") == True
|
||
|
|
||
|
logger.info(
|
||
|
f"Exporting {len(network.links[~is_converter])} links to %s",
|
||
|
snakemake.output.links,
|
||
|
)
|
||
|
export_clean_csv(
|
||
|
network.links[~is_converter], LINKS_COLUMNS, snakemake.output.links
|
||
|
)
|
||
|
|
||
|
logger.info(
|
||
|
f"Exporting {len(network.links[is_converter])} converters to %s",
|
||
|
snakemake.output.converters,
|
||
|
)
|
||
|
export_clean_csv(
|
||
|
network.links[is_converter], CONVERTERS_COLUMNS, snakemake.output.converters
|
||
|
)
|
||
|
|
||
|
logger.info("Export of OSM network for release complete.")
|