.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "generated/gallery/irradiance-quality/qcrad-limits-irradiance.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_generated_gallery_irradiance-quality_qcrad-limits-irradiance.py: QCrad Limits for Irradiance Data ================================ Test for physical limits on GHI, DHI or DNI using the QCRad criteria. .. GENERATED FROM PYTHON SOURCE LINES 9-16 Identifying and filtering out invalid irradiance data is a useful way to reduce noise during analysis. In this example, we use :py:func:`pvanalytics.quality.irradiance.check_irradiance_limits_qcrad` to test for physical limits on GHI, DHI or DNI using the QCRad criteria. For this example we will use data from the RMIS weather system located on the NREL campus in Colorado, USA. .. GENERATED FROM PYTHON SOURCE LINES 16-24 .. code-block:: default import pvanalytics from pvanalytics.quality.irradiance import check_irradiance_limits_qcrad import pvlib import matplotlib.pyplot as plt import pandas as pd import pathlib .. GENERATED FROM PYTHON SOURCE LINES 25-28 First, read in data from the RMIS NREL system. This data set contains 5-minute right-aligned data. It includes POA, GHI, DNI, DHI, and GNI measurements. .. GENERATED FROM PYTHON SOURCE LINES 28-33 .. code-block:: default pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent rmis_file = pvanalytics_dir / 'data' / 'irradiance_RMIS_NREL.csv' data = pd.read_csv(rmis_file, index_col=0, parse_dates=True) .. GENERATED FROM PYTHON SOURCE LINES 34-38 Now generate solar zenith estimates for the location, based on the data's time zone and site latitude-longitude coordinates. This is done using the :py:func:`pvlib.solarposition.get_solarposition` function. .. GENERATED FROM PYTHON SOURCE LINES 38-46 .. code-block:: default latitude = 39.742 longitude = -105.18 time_zone = "Etc/GMT+7" data = data.tz_localize(time_zone) solar_position = pvlib.solarposition.get_solarposition(data.index, latitude, longitude) .. GENERATED FROM PYTHON SOURCE LINES 47-50 Generate the estimated extraterrestrial radiation for the time series, referred to as dni_extra. This is done using the :py:func:`pvlib.irradiance.get_extra_radiation` function. .. GENERATED FROM PYTHON SOURCE LINES 50-52 .. code-block:: default dni_extra = pvlib.irradiance.get_extra_radiation(data.index) .. GENERATED FROM PYTHON SOURCE LINES 53-55 Use :py:func:`pvanalytics.quality.irradiance.check_irradiance_limits_qcrad` to generate the QCRAD irradiance limit mask .. GENERATED FROM PYTHON SOURCE LINES 55-63 .. code-block:: default qcrad_limit_mask = check_irradiance_limits_qcrad( solar_zenith=solar_position['zenith'], dni_extra=dni_extra, ghi=data['irradiance_ghi__7981'], dhi=data['irradiance_dhi__7983'], dni=data['irradiance_dni__7982']) .. GENERATED FROM PYTHON SOURCE LINES 64-66 Plot the 'irradiance_ghi__7981' data stream with its associated QCRAD limit mask. .. GENERATED FROM PYTHON SOURCE LINES 66-75 .. code-block:: default data['irradiance_ghi__7981'].plot() data.loc[qcrad_limit_mask[0], 'irradiance_ghi__7981'].plot(ls='', marker='.') plt.legend(labels=["RMIS GHI", "Within QCRAD Limits"], loc="upper left") plt.xlabel("Date") plt.ylabel("GHI (W/m^2)") plt.tight_layout() plt.show() .. image-sg:: /generated/gallery/irradiance-quality/images/sphx_glr_qcrad-limits-irradiance_001.png :alt: qcrad limits irradiance :srcset: /generated/gallery/irradiance-quality/images/sphx_glr_qcrad-limits-irradiance_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 76-78 Plot the 'irradiance_dhi__7983 data stream with its associated QCRAD limit mask. .. GENERATED FROM PYTHON SOURCE LINES 78-87 .. code-block:: default data['irradiance_dhi__7983'].plot() data.loc[qcrad_limit_mask[1], 'irradiance_dhi__7983'].plot(ls='', marker='.') plt.legend(labels=["RMIS DHI", "Within QCRAD Limits"], loc="upper left") plt.xlabel("Date") plt.ylabel("DHI (W/m^2)") plt.tight_layout() plt.show() .. image-sg:: /generated/gallery/irradiance-quality/images/sphx_glr_qcrad-limits-irradiance_002.png :alt: qcrad limits irradiance :srcset: /generated/gallery/irradiance-quality/images/sphx_glr_qcrad-limits-irradiance_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 88-90 Plot the 'irradiance_dni__7982' data stream with its associated QCRAD limit mask. .. GENERATED FROM PYTHON SOURCE LINES 90-98 .. code-block:: default data['irradiance_dni__7982'].plot() data.loc[qcrad_limit_mask[2], 'irradiance_dni__7982'].plot(ls='', marker='.') plt.legend(labels=["RMIS DNI", "Within QCRAD Limits"], loc="upper left") plt.xlabel("Date") plt.ylabel("DNI (W/m^2)") plt.tight_layout() plt.show() .. image-sg:: /generated/gallery/irradiance-quality/images/sphx_glr_qcrad-limits-irradiance_003.png :alt: qcrad limits irradiance :srcset: /generated/gallery/irradiance-quality/images/sphx_glr_qcrad-limits-irradiance_003.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.715 seconds) .. _sphx_glr_download_generated_gallery_irradiance-quality_qcrad-limits-irradiance.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: qcrad-limits-irradiance.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: qcrad-limits-irradiance.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_