Latest posts by Javier Bonilla (see all)
- ESP8266 NodeMCU pinout for Arduino IDE - 19 November, 2019
- Cross-compile and deploy Qt 5.12 for Raspberry Pi - 17 November, 2019
- Raspberry Pi, TensorFlow Lite and Qt/QML: image segmentation example - 11 September, 2019
Do you need weather data in Python for your next project? We got you covered! This tutorial shows how to get open weather data from PVGIS in Python from any location in the world. As an example, there is also a Python notebook that can be executed online from your browser in Google Colaboratory platform.
- Photovoltaic Geographical Information System (PVGIS)
- PVGIS Python class
- GitHub repository
- Colab Python notebook
Photovoltaic Geographical Information System (PVGIS)
PVGIS is a scientific open database and interactive tool for the geographical assessment of solar resource and performance of photovoltaic (PV) technology that has been developed for more than 10 years at the European Commission Joint Research Centre, at the JRC site in Ispra, Italy.
Hourly time series web service
This PVGIS web service provides hourly values for the following variables.
- Global solar irradiance (GHI)
- Direct normal irradiance (DNI)
- Diffuse solar irradiance (DHI)
- Ambient temperature (TAmb)
- Wind Speed (Ws)
The needed inputs to obtain this data are the following.
- Latitude in decimal degrees (south is negative)
- Longitude in decimal degrees (west is negative)
- Radiation database: PVGIS-CMSAF (for Europe and Africa), PVGIS-SARAH (for Europe, Africa and Asia) or PVGIS-NSRDB (for the Americas between 60º N and 20º S)
- Start date and time (from 2007 to 2016, range depends on the particular location)
- End date and time (from 2007 to 2016, range depends on the particular location)
Check PVGIS hourly time series web service website for additional information.
PVGIS Python class
This is an example about how to set the needed inputs and execute the HTTP API request.
from datetime import datetime from PvGis import PvGis # Create PvGis object and set its inputs pvGis = PvGis() pvGis.latitude = 37.097 pvGis.longitude = -2.365 pvGis.start_date = datetime(2016, 6, 1, 00, 00, 00) pvGis.end_date = datetime(2016, 6, 15, 23, 59, 59) pvGis.rad_database = 'PVGIS-CMSAF' # Get data pvGis.request_hourly_time_series()
To save the weather data we have just obtained in a CSV file, we need to call the following method.
# Save weather data to a CSV file pvGis.save_csv('weather_data.csv')
Some rows of the CSV file for this particular example are shown below.
Date,Time,GHI,DNI,DHI,TAmb,Ws 2016-06-01 08:54:00,731.5,612.45,119.05,21.5,3.88 2016-06-01 09:54:00,880.6,753.25,127.35,23.53,4.19 2016-06-01 10:54:00,981.0,848.95,132.05,24.15,4.52 2016-06-01 11:54:00,1023.75,889.9,133.85,24.77,4.86 ...............
But, we can also get the data in a Pandas DataFrame to process or plot it.
# Get Pandas DataFrame df = pvGis.pandas_data_frame()
# Plot weather data data_ghi = go.Scatter(x=df['DateTime'], y=df['GHI'], name='GHI (W/m^2)') data_dni = go.Scatter(x=df['DateTime'], y=df['DNI'], name='DNI (W/m^2)') data_dhi = go.Scatter(x=df['DateTime'], y=df['DHI'], name='DHI (W/m^2)') data_tam = go.Scatter(x=df['DateTime'], y=df['TAmb'], name='Tamb (ºC)') data_wsp = go.Scatter(x=df['DateTime'], y=df['Ws'], name='Wind (m/s)') layout = go.Layout(title='Weather conditions', xaxis=dict(title='Date & time'), yaxis=dict(title='Value')) fig = go.Figure(data=[data_ghi, data_dni, data_dhi, data_tam, data_wsp], layout=layout) py.plot(fig, filename='weather_data.html')
The PVGIS Python class (PvGis.py) is available in our GitHub repository. This repository also includes a Python script with the previous example (PyGis_example.py) and a Colab python notebook (PvGis_example.ipynb).
Colab Python notebook
You can test the previous example online in your browser without any additional tool thanks to Google Colaboratory notebooks.
We have learnt how to get meteorological data from PVGIS database in Python in this tutorial. The PVGIS Python class, an example Python script and a Colab notebook are available in our GitHub repository.
I hope you liked this tutorial, please consider to rate it with the starts you can find below and share it if you find it useful, this gives us feedback about how we are doing. Also, we would love to know which cool projects you are doing or planning to do with this data, so share your plans with us in the comments below :-).