Coder Social home page Coder Social logo

scls19fr / pandas_degreedays Goto Github PK

View Code? Open in Web Editor NEW
14.0 5.0 5.0 1.26 MB

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)

License: BSD 3-Clause "New" or "Revised" License

Python 100.00%
python pandas temperature heating cooling matplotlib numpy energy consumption

pandas_degreedays's Introduction

Welcome to pandas_degreedays's documentation!

Latest Version Supported Python versions Wheel format License Development Status Downloads monthly Requirements Status Documentation Status Sourcegraph Gitter Code Health Build Status

pandas_degreedays

Pandas Degree Days (pandas_degreedays) is a Python package to calculate degree days.

Usage

You must provide a Pandas Series 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: 10757

You 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. You need to install first openweathermap_requests.

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 / False

We can interpolate linearly missing data using:

from pandas_degreedays import inter_lin_nan 
ts_temp = inter_lin_nan(ts_temp, '1H') # interpolates linearly NaN

We 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 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)

About Pandas

pandas 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 install

Links

pandas_degreedays's People

Contributors

gitter-badger avatar scls19fr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

pandas_degreedays's Issues

DOI

Publishing to Journal of Open Source Software (JOSS) http://joss.theoj.org/ may be considered.

see also https://github.com/python-windrose/windrose/issues/54

Getting an error "TypeError: ufunc 'isnan' not supported for the input types"

one_by_one.xlsx
"""
Created on Fri Oct 23 04:03:30 2020

@author: krishna
"""
import pandas as pd
from pandas_degreedays import inter_lin_nan

filename = 'one_by_one.xls'
df_temp = pd.read_excel(filename)
df_temp = df_temp.set_index('Date')
ts_temp = df_temp['Air Temperature (C°)']

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 / False

from pandas_degreedays import inter_lin_nan
ts_temp = inter_lin_nan(ts_temp, '1H') # interpolates linearly NaN
Traceback (most recent call last):

File "", line 2, in
ts_temp = inter_lin_nan(ts_temp, '1H') # interpolates linearly NaN

File "/home/krishna/anaconda3/lib/python3.7/site-packages/pandas_degreedays/init.py", line 169, in inter_lin_nan
mask = np.isnan(ts)

TypeError: ufunc 'isnan' not supported for the input types

, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

Could you tell me how to solve this issue?

Error while importing data through OpenWeatherMap

Hi,
I am getting an error while running the example that you described. After I write
ts_temp = TemperatureProvider('OpenWeatherMap', api_key='').get_from_coordinates(0.34189, 46.5798114, '20120601', '20141215')
I get errors saying that ValueError: No JSON object could be decoded. The last line of the error messages is ValueError: All objects passed were None.

Any idea why this is happening?
Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.