Utility module to read PSR Sddp's hdr/bin result file pairs.
Project description
PyGraf
Utility module to read Sddp hdr/bin result file pairs. Some examples to convert it to popular formats are available.
Installing
Install the latest version from PyPI
pip install psr-graf
Or download this repository contents.
Usage
Start by importing psr.graf module. It's possible to read data directly using open_bin and open_csv functions
or load_as_dataframe function if pandas package is available.
The example below shows how to load data directly into a pandas.DataFrame and prints the first 5 lines of data.
import psr.graf
df = psr.graf.load_as_dataframe("sample_data/gerter.hdr")
print(df.head())
The output is:
Thermal 1 Thermal 2 Thermal 3
stage scenario block
1 1 1 7.440000 0.744 0.368069
2 6.437624 0.000 0.000000
3 7.440000 0.744 0.576140
4 7.440000 0.744 2.994997
5 7.440000 0.744 0.916644
Alternatively, open_bin and open_csv functions can be used for direct data access as shown in the example next.
import psr.graf
with psr.graf.open_bin("sample_data/gerter.hdr") as graf_file:
print("Stages:", graf_file.stages)
print("Scenarios:", graf_file.scenarios)
print("Agents:", graf_file.agents)
print(f"Initial date: {graf_file.initial_year:04d}/{graf_file.initial_stage:02d}")
print("Units:", graf_file.units)
stage = 2
print(f"Number of blocks at stage {stage}: {graf_file.blocks(stage)}")
scenario = 10
block = 1
print(f"Data at stage {stage}, scenario {scenario}, block {block}:",
graf_file.read(stage, scenario, block))
The output is:
Stages: 12
Scenarios: 50
Agents: ('Thermal 1', 'Thermal 2', 'Thermal 3')
Initial date: 2013/01
Units: GWh
Number of blocks at stage 2: 1
Data at stage 2, scenario 10, block 1: (7.440000057220459, 0.7440000176429749, 0.3680693209171295)
Requirements
- Python 2.7, 3.3 or newer.
- (Optional)
pandaspackage to useload_as_dataframefunction.
File Formats
| File Extension | Description |
|---|---|
| .hdr or .bin | Binary .hdr and .bin pair |
| .dat | Single-binary file |
| .csv | CSV file with specific structure |
load_as_dataframesupports all of them and will determine which reader will be used based on the file extension.open_binsupports only .hdr/bin pairs or single-binary files.open_csvsupports only CSV.
Both open_bin, open_csv, and load_as_dataframe functions accept encoding parameter to specify the encoding of the strings in file. The default is utf-8.
DataFrame options
MultiIndex or single index
load_as_dataframe accepts an optional keyword argument multi_index (default True) to specify if the
returned pandas.DataFrame should use pandas.MultiIndex or not. If False, the returned pandas.DataFrame will have a
single automatic index and the columns 'stage', 'scenario', 'block' will appear before the agents' data.
Example:
import psr.graf
df = psr.graf.load_as_dataframe("sample_data/gerter.hdr", multi_index=False)
print(df.head())
print("Column names:", df.columns.values)
The output is:
stage scenario block Thermal 1 Thermal 2 Thermal 3
0 1 1 1 7.440000 0.744 0.368069
1 1 2 1 6.437624 0.000 0.000000
2 1 3 1 7.440000 0.744 0.576140
3 1 4 1 7.440000 0.744 2.994997
4 1 5 1 7.440000 0.744 0.916644
Column names: ['stage' 'scenario' 'block' 'Thermal 1' 'Thermal 2' 'Thermal 3']
On the other hand,
import psr.graf
df = psr.graf.load_as_dataframe("sample_data/gerter.hdr", multi_index=True)
print(df.head())
print("Column names:", df.columns.values)
Will produce the following output:
Thermal 1 Thermal 2 Thermal 3
stage scenario block
1 1 1 7.440000 0.744 0.368069
2 1 6.437624 0.000 0.000000
3 1 7.440000 0.744 0.576140
4 1 7.440000 0.744 2.994997
5 1 7.440000 0.744 0.916644
Column names: ['Thermal 1' 'Thermal 2' 'Thermal 3']
Index formats
The index_format specifies the format of index columns of the returned pandas.Dataframe. It accepts the following
values:
| Index Format | Columns |
|---|---|
default |
stage, scenario, block or hour |
period |
year, month or week, scenario, block or hour |
defaultcreates apandas.DataFramewith the columns as they are stored in the original file.periodconvertsstageintoyear,monthorweekdepending on the stage type of the file and the initial year and stage.
Filter by stage, scenario, block and/or agent
The load_as_dataframe function accepts the following optional keyword arguments to filter data:
| Argument | Description |
|---|---|
filter_stages |
List of stages to be included |
filter_blocks |
List of blocks to be included |
filter_scenarios |
List of scenarios to be included |
filter_agents |
List of agents to be included. The name is case insensitive. |
An empty list or unspecified means all stages, blocks, scenarios or agents will be included.
Example:
import psr.graf
df = psr.graf.load_as_dataframe("sample_data/gerter.hdr",
filter_stages=[8, ],
filter_scenarios=[10, ],
filter_agents=["Thermal 3", "Thermal 2"])
print(df.head())
Outputs:
Thermal 3 Thermal 2
stage scenario block
10 8 1 9.127362 0.0
Usage Samples
dataframes_sample.py
Shows how to read data into pandas.DataFrames.
Requires pandas package installed.
matplotlib_sample.py
Shows how to read data and plot data from hdr/bin file pairs.
Requires matplotlib package installed.
csv_sample.py
Shows how to convert from hdr/bin file pairs to csv using psr.graf module.
This script can also be called from command line:
python csv_sample.py input_file.hdr output_file.csv
Where output_file.csv is optional.
parquet_sample.py
Shows how to convert from hdr/bin file pairs to Apache Parquet format.
Requires pyarrow package installed.
This script can also be called from command line:
python parquet_sample.py input_file.hdr output_file.parquet
Where output_file.parquet is optional.
Issues and Support
Check PyGraf's GitHub repository and issues page for support.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file psr-graf-2.1.2.tar.gz.
File metadata
- Download URL: psr-graf-2.1.2.tar.gz
- Upload date:
- Size: 11.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e7fee318e1b0584205efbb90fd22d6033efbca21195b4a2dce0e94bc7d918e6b
|
|
| MD5 |
5d39611aff1c1d1e1816522dfdef83ad
|
|
| BLAKE2b-256 |
6c64565bcfc6adf2c4f800c2cefb35f7e0abeabdef29bbbeedddb08566f03c70
|
File details
Details for the file psr_graf-2.1.2-py3-none-any.whl.
File metadata
- Download URL: psr_graf-2.1.2-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6607e7dfcf99f665700525ca3c68cfce2156dc2a5af6c5a1a24f9eb526436a8d
|
|
| MD5 |
d97ea4fde01d4cf8e25c023ef97f2c5a
|
|
| BLAKE2b-256 |
d4b2cf78ab6e6de676cda86f96075abb39220220e7302eb1afa48166cabd1b40
|