arundhaj

all that is technology

Resample timeseries data with custom function

 

With timeseries data we often require to resample on different intervel to feed in to our analytics model.

Pandas resample have a built-in list of widely used methods. However, if the built-in methods are not sufficient, it is always possible to write a custom function to resample.

This post shows an example.

Say, we have a months temperature data captured every hour. We shall calculate the number of times in a day the temperature crossed 40 degree celsius.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

ts_index = pd.date_range(start='10/01/2016', end='10/30/2016', freq='H')
temperature_series = pd.Series(np.random.randint(20, 60, len(ts_index)), index=ts_index)

temperature_series_mean = temperature_series
                              .resample('D')
                                  .mean()

temperature_series_gt_40 = temperature_series
                              .resample('D')
                                  .apply(lambda day_array: sum(day_array > 40))

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

# Day's mean shown as line chart
plt_mean = ax1.plot(temperature_series_mean, 'c-')

# Day's count shown as dot chart
plt_gt40 = ax2.plot(temperature_series_gt_40, 'bo')

ax1.set_xlabel('Date')
ax1.set_ylabel('Day\'s mean temerature')
ax2.set_ylabel('Number of times temperature crossed 40')

plt.legend(handles=plt_mean, loc='upper left')
plt.rcParams['figure.figsize'] = 13,7
plt.show()

Resample Timeseries

Comments