
Это аналитическая библиотека C ++, разработанная для анализа данных, аналогичных библиотек в Python и R. Например, вы сравнили бы это с Pandas или R Data.frame
Вы можете нарезать данные разными способами. Вы можете присоединиться, объединить, группируйте данные. Вы можете запустить различные статистические, суммирующие, финансовые и ML -алгоритмы на данные. Вы можете легко добавить свои пользовательские алгоритмы. Вы можете сортировать многоколонный, выбирать и удалить данные. И еще ...
DataFrame также включает в себя большую коллекцию аналитических алгоритмов в форме посетителей. Они взяты из основных статистиков, таких как среднее значение , отклонение STD , возврат , ... до более вовлеченного анализа, такого как распространение аффинности , полиномиальная подгонка , быстрое преобразование Фурье произвольной длины ... включая хороший набор торговых индикаторов. Вы также можете легко добавить свои собственные алгоритмы.
DataFrame также использует обширное многопоточное чтение практически во всех своих API, для больших наборов данных. Это делает DataFrame особенно подходящим для анализа больших наборов данных.
Для базовых операций, чтобы начать вас, см. Hello World. Полный список функций с образцами кода, см. Документацию.
Я следовал нескольким принципам в этой библиотеке :
Вы, наверное, слышали о DataFrame Polars. Он реализован в ржавчине и переносится с нулевой иоверной в Python (до тех пор, пока у вас нет цикла). Многие люди попросили написать сравнение для DataFrame и Polars . Итак, я наконец нашел некоторое время, чтобы узнать немного о полярах и написать очень простой тестер.
Я написал следующие идентичные программы для Polars и C ++ DataFrame (и Pandas). Я использовал версию Polars: 0.19.14 (версия Pandas: 1.5.3, Numpy версия: 1.24.2). И я использовал компилятор C ++ 20 Clang с опцией -O3. Я работал как на своем, несколько устаревшем, MacBook Pro (Intel Chip, 96 ГБ ОЗУ).
В обоих случаях я создал DataFrame с 3 случайными столбцами. DataFrame C ++ также требовал дополнительного индексного столбца того же размера. Polars не верит в индексные столбцы (у которых есть свои плюсы и минусы. Я не переживаю его здесь). Каждая программа имеет три идентичные части. Сначала он генерирует и заполняет 3 столбца с 300 -метровыми случайными числами каждый (в случае данных C ++, он также должен генерировать последовательный индексный столбец того же размера). Это та часть меня не интересует. Во второй части она рассчитывает среднее значение первого столбца, дисперсию второго столбца и корреляции Пирсона второго и третьего столбца. В третьей части он выполняет выбор (или фильтр как называет поляр) на одном из столбцов.
Результаты :
Максимальный набор данных, который я мог загрузить в поляры, составлял 300 млн строк на столбец. Любой более крупный набор данных взорвал память и заставила ОС убить его. Я запустил C ++ DataFrame с 10B строками на столбец, и я уверен, что он также работает с большими наборами данных. Итак, я был вынужден запустить оба с 300 -метровыми рядами для сравнения. Я пробежал каждый тест 4 раза и занимал лучшее время. Числа поляров сильно варьировались от одного пробега к другому, особенно расчеты и времени отбора. Числа данных C ++ были значительно более последовательными.
| C ++ DataFrame | Поляр | Панды | |
|---|---|---|---|
| Генерация данных/время загрузки | 26.945900 с | 28.468640 с | 36.678976 сек |
| Время расчета | 1,260150 сек | 4,876561 СЕ -МЕС | 40.326350 с |
| Время выбора | 0,742493 сек | 3,876561 сек | 8.326350 с |
| Общее время: | 28.948600 с | 36.876345 с | 85,845114 сек |
Пожалуйста, рассмотрите возможность спонсирования DataFrame, особенно если вы используете его в производственных мощностях. Это самая сильная форма признательности