Giter Club home page Giter Club logo

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

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

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?

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.