Применение скрипта Python к временному ряду по 30 дней за один раз - PullRequest
2 голосов
/ 07 октября 2019

У меня есть сценарий, который я могу применить к большому набору данных временных рядов за один раз, но я хочу посмотреть, не изменятся ли результаты с течением времени, поэтому мне нужно разделить свой временной ряд на окна по 30 дней и запустить сценарий длякаждый блок 30 дней в течение всего периода. Пример моих данных выглядит следующим образом: 24 балла в день:

Date & time          B        C         S1      S2      S3
20/10/2015 00:00    1024.7  228.566111  2.672   2.742   4.508
20/10/2015 01:00    1024.5  65.740034   2.683   2.7535  4.509
20/10/2015 02:00    1024.6  -91.845869  2.6925  2.763   4.509
20/10/2015 03:00    1024.5  -222.368074 2.664   2.764   4.512
20/10/2015 04:00    1024.8  -306.697572 2.6615  2.763   4.5135

Новичок в Python, я искал этот сайт, документацию для панд, видео на YouTube и ряд учебных пособий, но не повезло. Я думал, что это была скользящая функция, но обнаружил, что это просто работает для усреднения данных за месяц (я хочу применить сценарий ко всему месяцу). Затем я попытался выполнить субсэмплирование данных по метке времени, используя:

file.Timestamp = pd.to_datetime(file.Date_time,format='%d-%m-%Y %H:%M') 
file.index = file.Timestamp 

Но это только дало мне ошибки, как и:

monthy = file.resample('M')

Причина в том, что я не знаю много Pythonпоэтому я не знаю, какую функцию я ищу. Может ли кто-нибудь помочь мне или указать мне правильное направление, какую функцию мне нужно исследовать, чтобы сделать это? Я готов провести исследование, просто не знаю, что искать, и у меня закончились идеи. Пока что поиск включает в себя: повторную выборку, подвыборку, окно, переход, период времени, раздел и выбор.

1 Ответ

0 голосов
/ 07 октября 2019

Вы можете легко сделать это, используя обычный цикл for.
Я предполагаю, что вы используете DataFrame для этих данных в своем коде.

#sample file
df = pd.read_excel('yourfile.xlsx')

#lets say your function name is myfunct(dataframe)

r = int(df.shape[0]/(30*24))
for i in range(r):
    temp = df.iloc[i:i+30*24,:]
    myfunct(temp)
#for remaing data that at the end
temp = df.iloc[r*30*24:,:]
myfunct(temp)

Это должно работать нормально. дайте мне знать, если что-то не так в коде.

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