Pandas, производительность при многократной динамической статистике на разных временных интервалах

#python #pandas #stream

#python #pandas #поток

Вопрос:

Я новичок в pandas и хотел бы знать, как наилучшим образом использовать ограниченные по времени скользящие окна и расчет статистики качения. Я обрабатываю непрерывный поток с различными вычислениями скользящих данных (средневзвешенное, среднее, сумма, максимальное, самое старое …) в разных временных окнах (1 час, 4 часа, 1 день, 1 неделя …), также сгруппированных по другому идентификатору элемента.

Выходной поток создается для каждого элемента со своей собственной текущей статистикой, но также и со статистикой из похожих элементов (данные связаны по ближайшим переменным временным интервалам и ранее идентифицированным похожим элементам).

В настоящее время я создал пользовательский код без использования pandas, где значительное улучшение скорости связано с: вычислением скользящей статистики с использованием только дифференциального вычисления (т.Е. вычисление разницы для новых данных и данных, отброшенных из скользящего окна), связывание переменного временного интервала похожих элементов, как это происходит в потоке. Я хотел бы переключиться на pandas, но хотел бы быть уверенным в ожидаемой производительности.

Есть ли способ достичь аналогичной (или лучшей) производительности с pandas ? Затем:

  1. pandas вычисляет каждую скользящую статистику для всех значений скользящего окна или выполняет дифференциальный расчет для новых / старых значений? Затем, при создании «пользовательских функций» для скользящей статистики, могу ли я также выполнять дифференциальные вычисления, чтобы избежать огромных затрат на повторную обработку всех значений?

  2. какой наиболее эффективный способ объявить многократную скользящую статистику в нескольких временных окнах? Если я также хочу сгруппировать это по каждому элементу, я предполагаю, что мне следует просто добавить что-то вроде «my_stream.groupby(item_key)», будет ли это по-прежнему эффективно?

  3. вывод: для каждого элемента я вывожу его собственную скользящую статистику и статистику из похожих элементов, но временные интервалы варьируются (от 10 млн до 40 млн). Как я мог бы связать каждую строку элемента из другого элемента только с ближайшей «более старой» временной меткой (я имею в виду: если время для элемента 1 равно 02: 00, а у элемента 2 есть данные в 02: 01 и 01: 50, я должен связать с данными из 01: 50)? сильно ли это повлияет на производительность?

Я попытался создать быструю иллюстрацию, но не очень простую :

Ввод:

  Item   | Price | Date          
------- | ----- | --------------
1       | 10    | 2014 01:01:01 
2       | 20    | 2014 01:01:02 
1       | 20    | 2014 01:21:00 
1       | 20    | 2014 01:31:01 
  

Вывод:

  Item   | Date  | Price | Mean1hr   | Mean4hr   | Mean24hr  | Sum1hr    | Sum4hr    | Sum24hr | SimilarMean1hr | SimilarMean4hr | Similar24hr |     
 -------|------|--------|-------|-------------|-----------|-------|--------|-------|----------|----------|--------|     
 1  | 2014 01:21:00 | 15    | 8 | 3 | 30    | 30    | 35    | 16    | 14    | 10 | 
  

Большое спасибо,
Ксавье

Комментарии:

1. ну, это довольно широкий вопрос. вам нужно было бы показать некоторые примеры и то, что вы ожидаете. динамическая статистика недоступна в режиме реального времени (например, инкрементная).

2. Я думаю, вы предоставили ответ: если скользящая статистика не может быть инкрементной, я сомневаюсь, что смогу достичь аналогичной производительности, потому что тогда все данные вычисляются по всем значениям (т.Е. в моем случае для данных с задержкой в месяц это почти 3000 значений каждый раз).

3. хорошо, pandas работает довольно быстро, поскольку весь этот код находится на cython. итак, вы должны попробовать. (мои 2c заключаются в том, что синтаксис настолько мощный и настолько общий, что даже если в некоторых случаях он медленнее, выгода того стоит).

4. тогда есть ли у вас какой-либо намек или пример для вопросов 2 и 3? Я попытался поместить образцы данных

5. pandas.pydata.org/pandas-docs/stable /… , в документах есть что почитать