pvtools

Basic set of python tools


Keywords
timeseries, jupyter, modelling, photovoltacis
License
Apache-2.0
Install
pip install pvtools==1.1.3

Documentation

pvtools 🕶

A set of python 🐍 tools to process and model PV

I put together a set of tools used to clean data and model bifacial systems using pvfactors, pvlib and bifacialvf 🌞

Install

As of 02/2019: bifacialvf has not yet merged this PR, the simulate function cannot take arbitrary metereological data on the form of pandas DataFrames. So we are force to install a custom fork of bifacialvf from here. This is way, a formal release of capetools to PyPI is not possible rght now, so we have to install by cloning from github.

The recommended method is to install capetools on a conda envirnment. Ideally create a conda env with python 3.6 and then clone and install using pip.

conda create --name=your_env_name python=3.7

git clone https://github.com/tcapelle/capetools/

Now you can install from PyPi:

pip install pvtools

or on editable mode, git clone this repo, and from within the repo install using:

pip install -e .

Getting started 💪

from pvtools.imports import *
from pvtools.utils.missing import *
from pvtools.utils.tmy import read_pvgis
from pvtools.modelling.mypvfactors import *
from pvtools.modelling.mybifacialvf import *
PATH = Path.cwd().parent/'data'
fname = PATH/'pvgis_tmy_chambery.csv'

We will ingest a PVGIS downloaded file for Chambery

gps_data, months, tmy_data = read_pvgis(fname)
tmy_data.head()
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
temp humidity ghi dni dhi infra ws wd pressure
time(UTC)
2012-01-01 00:00:00 2.87 88.28 0.0 -0.0 0.0 259.63 1.33 170.0 99504.0
2012-01-01 01:00:00 3.59 90.07 0.0 -0.0 0.0 268.30 1.39 166.0 99508.0
2012-01-01 02:00:00 4.32 91.86 0.0 -0.0 0.0 276.97 1.45 162.0 99511.0
2012-01-01 03:00:00 5.04 93.64 0.0 -0.0 0.0 285.64 1.51 167.0 99517.0
2012-01-01 04:00:00 5.76 95.43 0.0 -0.0 0.0 294.32 1.57 171.0 99524.0

We can quickly look at missing data:

plot_missing(tmy_data)

png

as expected, no missing data !

Simulations

pvfactors

params = system_def(n_pvrows=3); params
{'n_pvrows': 3,
 'pvrow_height': 1.6218180900789148,
 'pvrow_width': 2.02,
 'tracking': False,
 'axis_azimuth': 0,
 'surface_tilt': 38,
 'surface_azimuth': 180,
 'albedo': 0.4,
 'gcr': 0.5,
 'rho_front_pvrow': 0.075,
 'rho_back_pvrow': 0.075,
 'cut': {0: {'front': 1, 'back': 7},
  1: {'front': 1, 'back': 7},
  2: {'front': 1, 'back': 7}}}
data = get_data(fname, params)
pvarray = run_pvfactors_simulation(data, params)
ax = plot_idx(pvarray)
ax.set_xlim(-2, 10)
(-2, 10)

png

res_pvfactors = individual_report(pvarray, index=data.index)
res_pvfactors.head()
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
qinc_0 qinc_1 qinc_2 qinc_3 qinc_4 qinc_5 qinc_6 qinc_front qinc_back
time(UTC)
2019-01-01 00:00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2019-01-01 01:00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2019-01-01 02:00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2019-01-01 03:00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2019-01-01 04:00:00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
res_pvfactors['21 June 2019'].plot();

png

bifacialvf

res_bifacialvf = run_bifacialvf_simulation(data)
  1%|          | 84/8760 [00:00<00:22, 387.11it/s]

 
********* 
Running Simulation for TMY3:  Chambery
Location:   Chambery
Lat:  45.637001  Long:  5.881  Tz  -1.0
Parameters: beta:  0   Sazm:  180   Height:  0.5   rtr separation:  8.0   Row type:  interior   Albedo:  0.4
Saving into output.csv
 
 


100%|██████████| 8760/8760 [00:28<00:00, 307.76it/s]

Finished
res_bifacialvf['21 June 2019'].plot();

png

Coontributing 👇

Read nbdev documentation please.