Use Excel to define your model parameters.
Project description
# Example
Given an excel file with rows similar to the below
| variable | scenario | module | distribution | param 1 | param 2 | param 3 | unit | start date | end date | CAGR | ref date | label | comment | source |
|-----------------|----------|---------------------------------------------|--------------|------------------|---------|---------|------|------------|------------|------|------------|------------|---------|--------|
| a | | numpy.random | choice | 1 | | | kg | 01/01/2009 | 01/04/2009 | 0.10 | 01/01/2009 | test var 1 | | |
| b | | numpy.random | uniform | 2 | 4 | | - | | | | | label | | |
| c | | numpy.random | triangular | 3 | 6 | 10 | - | | | | | label | | |
| d | | bottom_up_comparision.sampling_core_routers | Distribution | core_routers.csv | | | J/Gb | | | | | label | | |
| | | | | | | | | | | | | | | |
| a | s1 | numpy.random | choice | 2 | | | | | | | | test var 1 | | |
| multiple choice | | numpy.random | choice | 1,2,3 | | | kg | 01/01/2007 | 01/01/2009 | | | test var 1 | | |
You can run python/ numpy code that references these variables and generates random distributions.
For example, the following will initialise a variable `c` with a vector of size 2 with random values
from a triangular distribution.
```
np.random.seed(123)
data = ParameterLoader.from_excel('test.xlsx', size=2, sheet_index=0)
c = data['c']
>>> [ 7.08471918 5.45131111]
```
Other types of distributions include `choice` and `normal`. However you can specify any distribution from
numpy that takes up to three parameters to init.
You can also specify a .csv file with samples and an empiricial distribution function is generated
and variable values will be sampled from that.
## Scenarios
It is possible to define scenarios and have paramter values for a variable change with each scenario.
```
data = ParameterLoader.from_excel('test.xlsx', size=1, sheet_index=0)
res = data['a'][0]
assert res == 1.
data.select_scenario('s1')
res = data['a'][0]
assert res == 2.
```
use `data.unselect_scenario()` to return to the default value.
## Pandas Dataframes
It is possible to define a time frame for distributions and have sample values change over time.
```
# the time axis of our dataset
times = pd.date_range('2009-01-01', '2009-04-01', freq='MS')
# the sample axis our dataset
samples = 2
dfl = DataSeriesLoader.from_excel('test.xlsx', times, size=samples, sheet_index=0)
res = dfl['a']
assert res.loc[[datetime(2009, 1, 1)]][0] == 1
assert np.abs(res.loc[[datetime(2009, 4, 1)]][0] - pow(1.1, 3. / 12)) < 0.00001
```
## Metadata
The contents of the rows is also contained in the metadata
```
# the time axis of our dataset
times = pd.date_range('2009-01-01', '2009-04-01', freq='MS')
# the sample axis our dataset
samples = 3
dfl = DataSeriesLoader.from_excel('test.xlsx', times, size=samples, sheet_index=0)
res = dfl['a']
print(res._metadata)
```
15.5.2015 0.1.1 Renamed class to ParameterLoader
22.5.2015 0.1.2 Add sheet index as parameter to loader
Given an excel file with rows similar to the below
| variable | scenario | module | distribution | param 1 | param 2 | param 3 | unit | start date | end date | CAGR | ref date | label | comment | source |
|-----------------|----------|---------------------------------------------|--------------|------------------|---------|---------|------|------------|------------|------|------------|------------|---------|--------|
| a | | numpy.random | choice | 1 | | | kg | 01/01/2009 | 01/04/2009 | 0.10 | 01/01/2009 | test var 1 | | |
| b | | numpy.random | uniform | 2 | 4 | | - | | | | | label | | |
| c | | numpy.random | triangular | 3 | 6 | 10 | - | | | | | label | | |
| d | | bottom_up_comparision.sampling_core_routers | Distribution | core_routers.csv | | | J/Gb | | | | | label | | |
| | | | | | | | | | | | | | | |
| a | s1 | numpy.random | choice | 2 | | | | | | | | test var 1 | | |
| multiple choice | | numpy.random | choice | 1,2,3 | | | kg | 01/01/2007 | 01/01/2009 | | | test var 1 | | |
You can run python/ numpy code that references these variables and generates random distributions.
For example, the following will initialise a variable `c` with a vector of size 2 with random values
from a triangular distribution.
```
np.random.seed(123)
data = ParameterLoader.from_excel('test.xlsx', size=2, sheet_index=0)
c = data['c']
>>> [ 7.08471918 5.45131111]
```
Other types of distributions include `choice` and `normal`. However you can specify any distribution from
numpy that takes up to three parameters to init.
You can also specify a .csv file with samples and an empiricial distribution function is generated
and variable values will be sampled from that.
## Scenarios
It is possible to define scenarios and have paramter values for a variable change with each scenario.
```
data = ParameterLoader.from_excel('test.xlsx', size=1, sheet_index=0)
res = data['a'][0]
assert res == 1.
data.select_scenario('s1')
res = data['a'][0]
assert res == 2.
```
use `data.unselect_scenario()` to return to the default value.
## Pandas Dataframes
It is possible to define a time frame for distributions and have sample values change over time.
```
# the time axis of our dataset
times = pd.date_range('2009-01-01', '2009-04-01', freq='MS')
# the sample axis our dataset
samples = 2
dfl = DataSeriesLoader.from_excel('test.xlsx', times, size=samples, sheet_index=0)
res = dfl['a']
assert res.loc[[datetime(2009, 1, 1)]][0] == 1
assert np.abs(res.loc[[datetime(2009, 4, 1)]][0] - pow(1.1, 3. / 12)) < 0.00001
```
## Metadata
The contents of the rows is also contained in the metadata
```
# the time axis of our dataset
times = pd.date_range('2009-01-01', '2009-04-01', freq='MS')
# the sample axis our dataset
samples = 3
dfl = DataSeriesLoader.from_excel('test.xlsx', times, size=samples, sheet_index=0)
res = dfl['a']
print(res._metadata)
```
15.5.2015 0.1.1 Renamed class to ParameterLoader
22.5.2015 0.1.2 Add sheet index as parameter to loader
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
Close
Hashes for excel-modelling-helper-0.2.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef2a3f9ceee4b12424af18916a33392a33c93c3f41d056c3f50cc9f7763ee164 |
|
MD5 | 6e366711830705a05bf3de8474ced988 |
|
BLAKE2b-256 | d19e4614006bb9cda01b3977813be23bfc17372fa7d4a7f6e6e59f46998b056c |