Панды - Как выполнить OLS-регрессию значений в зависимости от времени в каждой группе кадра данных? - PullRequest
1 голос
/ 22 марта 2019

У меня есть почасовые показания в кадре данных вида:

Date_Time             Temp           
2001-01-01 00:00:00  -1.3
2001-01-01 01:00:00  -2.1
2001-01-01 02:00:00  -1.9
2001-01-01 03:00:00  -2.2
2001-01-01 04:00:00  -2.8
2001-01-01 05:00:00  -2.0
2001-01-01 06:00:00  -2.2

Я хочу сгруппировать показания по N часам (т. Е. 3) и определить наклон OLS Temp против V для каждой группы.

Я знаю, как сгруппировать фрейм данных:

df_g = df_g.assign(tgp = df['Temp'].groupby(pds.Grouper(freq='3h')) )

Но после этого я застрял, не могу понять, с чего начать.Может ли кто-нибудь помочь мне достичь своей цели?

1 Ответ

1 голос
/ 22 марта 2019

Бета простой (единственной переменной) регрессии OLS - просто cov (x, y) / var (x)

Имея это в виду:

# Generate Test data
df = pd.DataFrame(np.random.rand(50), 
                  index=pd.date_range(start='2018 1 1', periods=50, freq='15T'), 
                  columns=['Temp'])
# Copy index as a part of data set
df['DateTime'] = df.index

# Choose starting point as reference date (It doesnt matter what date it is) 
# I'm just looking to convert the dates to numbers
rederence_dt = df['DateTime'].iloc[0] 
df['DateTime'] = (rederence_dt - df['DateTime']).dt.seconds

var = df.groupby(pd.Grouper(freq='3h')).var()['DateTime']
cov = df.groupby(pd.Grouper(freq='3h')).corr().loc(axis=0)[:, 'Temp']['DateTime'].reset_index(level=1, drop=True)

beta = cov/var
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...