Изменение частоты для временных рядов в Numpy - PullRequest
0 голосов
/ 27 марта 2020

У меня есть Timeseries от Kaggle, которая является несчастным случаем DUI в Соединенных Штатах. Я создал небольшую программу на Pandas, которая сохраняет временный порядок, но делает так, чтобы в каждой строке было одинаковое количество аварий. Проблема, с которой я столкнулся, заключается в том, что эта программа приводит к сбоям в работе компьютера из-за требований к памяти Поэтому я пытался перенести код в Numpy, чтобы я мог скомпилировать его на Cython с помощью Memory Views, но у меня были проблемы с получением похожих результатов из Numpy Code. Это Pandas код:

new_time_series = (ts.loc[ts.index.repeat(ts.Accidents)]    
           .assign(Accidents=1,
                   groups=lambda x: np.arange(len(x))//1000
                  )
           .groupby('groups')
           .agg({'DateTime':'first',
                 'Accidents':'sum',
                 'Blood_Alcohol_Content':'mean',
                 'Num_Injuries':'mean'})
        )

Это код Numpy, который у меня есть, проблема в том, что, хотя он намного проще в памяти, его легко комментировать и компилировать в Cython, ему не хватает способность разбивать строки на части. Таким образом, он дает уровень или нормализацию для Аварий, но в зависимости от того, на какую частоту установлена, и количество Аварий в каждой строке, результаты от этих двух могут быть радикально различными.

def generate_new_timeseries(ts, frequency=100):
    DateTime = ts[:,0]
    Blood_Alcohol_Content = ts[:,1]
    Accidents = ts[:,2]
    ans = np.zeros(shape=(len(Accidents), 3))
    row_counter = 0
    vol = 0
    lasti = 0
    for i in range(len(Accidents)):
        vol += Accidents[i]
        if vol >= frequency:
            ans[row_counter][0] = DateTime[i]                       # time
            ans[row_counter][1] = np.mean(Blood_Alcohol_Content[lasti:i+1])         
            ans[row_counter][2] = np.sum(Accidents[lasti:i+1])
            row_counter += 1
            lasti = i+1
            vol = 0
    return ans[:row_counter]

Может кто-нибудь дать мне несколько полезных советов о том, как я могу полностью сохранить код в Numpy для предварительной проверки, чтобы я не разрушал свой компьютер, получая при этом правильные результаты из Pandas пример, который я разместил первым. Буду очень благодарен за любую помощь.

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