#python #pandas #stream
#python #pandas #поток
Вопрос:
Я новичок в pandas и хотел бы знать, как наилучшим образом использовать ограниченные по времени скользящие окна и расчет статистики качения. Я обрабатываю непрерывный поток с различными вычислениями скользящих данных (средневзвешенное, среднее, сумма, максимальное, самое старое …) в разных временных окнах (1 час, 4 часа, 1 день, 1 неделя …), также сгруппированных по другому идентификатору элемента.
Выходной поток создается для каждого элемента со своей собственной текущей статистикой, но также и со статистикой из похожих элементов (данные связаны по ближайшим переменным временным интервалам и ранее идентифицированным похожим элементам).
В настоящее время я создал пользовательский код без использования pandas, где значительное улучшение скорости связано с: вычислением скользящей статистики с использованием только дифференциального вычисления (т.Е. вычисление разницы для новых данных и данных, отброшенных из скользящего окна), связывание переменного временного интервала похожих элементов, как это происходит в потоке. Я хотел бы переключиться на pandas, но хотел бы быть уверенным в ожидаемой производительности.
Есть ли способ достичь аналогичной (или лучшей) производительности с pandas ? Затем:
-
pandas вычисляет каждую скользящую статистику для всех значений скользящего окна или выполняет дифференциальный расчет для новых / старых значений? Затем, при создании «пользовательских функций» для скользящей статистики, могу ли я также выполнять дифференциальные вычисления, чтобы избежать огромных затрат на повторную обработку всех значений?
-
какой наиболее эффективный способ объявить многократную скользящую статистику в нескольких временных окнах? Если я также хочу сгруппировать это по каждому элементу, я предполагаю, что мне следует просто добавить что-то вроде «my_stream.groupby(item_key)», будет ли это по-прежнему эффективно?
-
вывод: для каждого элемента я вывожу его собственную скользящую статистику и статистику из похожих элементов, но временные интервалы варьируются (от 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 /… , в документах есть что почитать