Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/scls19fr/pandas_degreedays
A Python package to calculate degree days (DD or in french DJU - degré jour unifié) from measured outdoor temperatures and to make it possible to quantify drift of energy consumption for heating (or cooling)
https://github.com/scls19fr/pandas_degreedays
consumption cooling energy heating matplotlib numpy pandas python temperature
Last synced: about 1 month ago
JSON representation
A Python package to calculate degree days (DD or in french DJU - degré jour unifié) from measured outdoor temperatures and to make it possible to quantify drift of energy consumption for heating (or cooling)
- Host: GitHub
- URL: https://github.com/scls19fr/pandas_degreedays
- Owner: scls19fr
- License: bsd-3-clause
- Created: 2014-12-21T12:39:16.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2018-11-27T19:42:01.000Z (almost 6 years ago)
- Last Synced: 2024-09-10T15:01:34.272Z (2 months ago)
- Topics: consumption, cooling, energy, heating, matplotlib, numpy, pandas, python, temperature
- Language: Python
- Homepage:
- Size: 1.24 MB
- Stars: 15
- Watchers: 5
- Forks: 5
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE.TXT
Awesome Lists containing this project
README
Welcome to pandas\_degreedays's documentation!
==============================================[![Latest Version](https://img.shields.io/pypi/v/pandas_degreedays.svg)](https://pypi.python.org/pypi/pandas_degreedays/)
[![Supported Python versions](https://img.shields.io/pypi/pyversions/pandas_degreedays.svg)](https://pypi.python.org/pypi/pandas_degreedays/)
[![Wheel format](https://img.shields.io/pypi/wheel/pandas_degreedays.svg)](https://pypi.python.org/pypi/pandas_degreedays/)
[![License](https://img.shields.io/pypi/l/pandas_degreedays.svg)](https://pypi.python.org/pypi/pandas_degreedays/)
[![Development Status](https://img.shields.io/pypi/status/pandas_degreedays.svg)](https://pypi.python.org/pypi/pandas_degreedays/)
[![Downloads monthly](https://img.shields.io/pypi/dm/pandas_degreedays.svg)](https://pypi.python.org/pypi/pandas_degreedays/)
[![Requirements Status](https://requires.io/github/scls19fr/pandas_degreedays/requirements.svg?branch=master)](https://requires.io/github/scls19fr/pandas_degreedays/requirements/?branch=master)
[![Documentation Status](https://readthedocs.org/projects/pandas_degreedays/badge/?version=latest)](http://pandas_degreedays.readthedocs.org/en/latest/)
[![Sourcegraph](https://sourcegraph.com/api/repos/github.com/scls19fr/pandas_degreedays/.badges/status.png)](https://sourcegraph.com/github.com/scls19fr/pandas_degreedays)
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/scls19fr/pandas_degreedays?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Code Health](https://landscape.io/github/scls19fr/pandas_degreedays/master/landscape.svg?style=flat)](https://landscape.io/github/scls19fr/pandas_degreedays/master)
[![Build Status](https://travis-ci.com/scls19fr/pandas_degreedays.svg)](https://travis-ci.com/scls19fr/pandas_degreedays)pandas\_degreedays
==================Pandas Degree Days (`pandas_degreedays`) is a [Python](https://www.python.org/) package to calculate [degree days](http://en.wikipedia.org/wiki/Degree_day).
Usage
-----You must provide a [Pandas Series](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html) with temperature values.
Let's call `ts_temp` this Serie which looks like:
datetime
2014-03-20 23:00:00 11
2014-03-20 23:30:00 11
2014-03-21 00:00:00 11
2014-03-21 00:30:00 11
2014-03-21 01:00:00 11
2014-03-21 01:30:00 11
...
2014-11-01 20:00:00 12
2014-11-01 20:30:00 12
2014-11-01 21:00:00 12
2014-11-01 21:30:00 12
2014-11-01 22:00:00 12
2014-11-01 22:30:00 12
Name: temp, Length: 10757You can get a time serie with temperature in `sample` folder and read it using:
import pandas as pd
filename = 'temperature_sample.xls'
df_temp = pd.read_excel(filename)
df_temp = df_temp.set_index('datetime')
ts_temp = df_temp['temp']You can also fetch a time serie with temperature from [OpenWeatherMap.org](http://www.openweathermap.org/). You need to install first [openweathermap\_requests](http://openweathermap-requests.readthedocs.org/).
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
from pandas_degreedays.provider import TemperatureProvider
api_key = 'YOUR_API_KEY'
ts_temp = TemperatureProvider('OpenWeatherMap', api_key=api_key).get_from_coordinates(0.34189, 46.5798114, '20150101', '20150915')
#ts_temp = TemperatureProvider('OpenWeatherMap', api_key=api_key).get_from_place('Poitiers,FR', '20150101', '20150915')We can see if some data are missing using:
idx = ts_temp.index
s_idx = pd.Series(idx, index=idx)
diff_idx = s_idx-s_idx.shift(1)
s_sampling_period = diff_idx.value_counts()
sampling_period = s_sampling_period.index[0] # most prevalent sampling period
not_sampling_period = (diff_idx != sampling_period) # True / FalseWe can interpolate linearly missing data using:
from pandas_degreedays import inter_lin_nan
ts_temp = inter_lin_nan(ts_temp, '1H') # interpolates linearly NaNWe can calculate degree days using:
from pandas_degreedays import calculate_dd
df_degreedays = calculate_dd(ts_temp, method='pro', typ='heating', Tref=18.0, group='yearly')`method` can be:
- `'pro'` (energy professionals) - this is default calculation method
- `'meteo'``typ` (calculation type) can be :
- `'heating'` - this is default calculation type
- `'cooling'``Tref` is reference temperature - default value is `18.0`
`group` can be:
- `'yearly'` - this is default grouping option
- `'yearly10'` - same as `'yearly'` but year starts in October (10)
- `'monthly'`
- `'weekly'`
- `None`
- Any lambda function that can be use and that can be applied to a `datetime`:Example:
from pandas_degreedays import yearly_month
df_degreedays = calculate_dd(ts_temp, method='pro', typ='heating', Tref=18.0, group=lambda dt: yearly_month(dt, 10))It outputs a [Pandas DataFrame](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html) with degree days like:
Tmin Tmax Tavg Tref DD DD_cum
2014-03-22 7.0 11.0 9.00 18 9.000000 9.000000
2014-03-23 3.0 12.0 7.50 18 10.500000 19.500000
2014-03-24 0.0 10.0 5.00 18 13.000000 32.500000
2014-03-25 6.0 10.0 8.00 18 10.000000 42.500000
2014-03-26 5.0 12.0 8.50 18 9.500000 52.000000
2014-03-27 2.0 8.0 5.00 18 13.000000 65.000000
... ... ... ... ... ... ...
2014-10-26 5.0 17.0 11.00 18 7.000000 653.547663
2014-10-27 9.0 22.0 15.50 18 3.336923 656.884586
2014-10-28 7.5 20.0 13.75 18 4.544400 661.428986
2014-10-29 8.0 19.0 13.50 18 4.618182 666.047168
2014-10-30 12.0 22.0 17.00 18 1.992000 668.039168
2014-10-31 11.0 24.0 17.50 18 2.143077 670.182245
[224 rows x 6 columns]You can display plot using:
from pandas_degreedays import plot_temp
plot_temp(ts_temp, df_degreedays)![](docs/img/figure_yearly10.png)
![](docs/img/figure_yearly10_comp.png)
About Pandas
------------[pandas](http://pandas.pydata.org/) is a Python package providing fast, flexible, and expressive data structures designed to make working with "relational" or "labeled" data both easy and intuitive. It's a very convenient library to work with time series.
Install
-------### From Python package index
$ pip install pandas_degreedays
### From source
Get latest version using Git
$ git clone https://github.com/scls19fr/pandas_degreedays.git
$ cd pandas_degreedays
$ python setup.py installLinks
------ Documentation can be found at [Read The Docs](http://pandas-degreedays.readthedocs.org/) ;
- Source code and issue tracking can be found at [GitHub](https://github.com/scls19fr/pandas_degreedays).
- Feel free to [tip me](https://gratipay.com/scls19fr/)!