
Il s'agit d'une bibliothèque analytique C ++ conçue pour l'analyse des données similaire aux bibliothèques de Python et R. Par exemple, vous comparez cela à Pandas ou R Data.Frame
Vous pouvez couper les données de différentes manières. Vous pouvez rejoindre, fusionner, groupe par les données. Vous pouvez exécuter divers algorithmes statistiques, résumés, financiers et ML sur les données. Vous pouvez facilement ajouter vos algorithmes personnalisés. Vous pouvez tri les colonnes multi-colonnes, choisir personnalisé et supprimer les données. Et plus…
DataFrame comprend également une grande collection d'algorithmes analytiques sous forme de visiteurs. Celles-ci proviennent de statistiques de base telles que la moyenne , l'écart des MST , le rendement , à une analyse plus impliquée telles que la propagation d'affinité , l'ajustement polynomial , la transformée de Fourier rapide de la longueur arbitraire … y compris une bonne collection d'indicateurs de trading. Vous pouvez également ajouter facilement vos propres algorithmes.
DataFrame utilise également un multithreading étendu dans presque toutes ses API, pour les grands ensembles de données. Cela rend DataFrame particulièrement adapté à l'analyse de grands ensembles de données.
Pour que les opérations de base vous commencent, voir Hello World. Pour une liste complète des fonctionnalités avec des échantillons de code, voir la documentation.
J'ai suivi quelques principes dans cette bibliothèque :
Vous avez probablement entendu parler de Polar DataFrame. Il est implémenté dans Rust et porté avec un python zéro à Python (tant que vous n'avez pas de boucle). De nombreuses personnes m'ont demandé d'écrire une comparaison pour DataFrame vs Polar . Donc, j'ai finalement trouvé le temps pour en apprendre un peu sur les polaires et écrire une référence très simple.
J'ai écrit les programmes identiques suivants pour les polaires et les données C ++ (et les pandas). J'ai utilisé la version Polars: 0.19.14 (version Pandas: 1.5.3, version Numpy: 1.24.2). Et j'ai utilisé le compilateur C ++ 20 Clang avec l'option -o3. J'ai couru sur mon MacBook Pro, quelque peu obsolète (Intel Chip, 96 Go de RAM).
Dans les deux cas, j'ai créé un DataFrame avec 3 colonnes aléatoires. Le C ++ DataFrame a également nécessité une colonne d'index supplémentaire de la même taille. Polaires ne croit pas aux colonnes d'index (qui a ses propres avantages et inconvénients. Je ne le passe pas ici). Chaque programme a trois pièces identiques. Tout d'abord, il génère et remplit 3 colonnes avec des nombres aléatoires de 300 m chacun (en cas de dataframe C ++, il doit également générer une colonne d'index séquentielle de la même taille). C'est la partie qui ne m'intéresse pas . Dans la deuxième partie, il calcule la moyenne de la première colonne, la variance de la deuxième colonne et la corrélation de Pearson des deuxième et troisième colonnes. Dans la troisième partie, il fait une sélection (ou filtre à mesure que les polaires l'appellent) sur l'une des colonnes.
Résultats :
L'ensemble de données maximal que je pouvais charger en polaires était de 300 m de lignes par colonne. Tout ensemble de données plus important a fait exploser la mémoire et a fait la tuer le système d'exploitation. J'ai exécuté C ++ DataFrame avec 10B lignes par colonne et je suis sûr qu'il aurait également exécuté des ensembles de données plus importants. J'ai donc été obligé d'exécuter les deux avec des lignes de 300 m à comparer. J'ai passé chaque test 4 fois et j'ai pris le meilleur temps. Les nombres de polaires variaient beaucoup d'une course à l'autre, en particulier les temps de calcul et de sélection. Les nombres de données de données C ++ étaient significativement plus cohérents.
| C ++ Dataframe | Polaires | Pandas | |
|---|---|---|---|
| Génération / temps de chargement de données | 26.945900 Secs | 28.468640 Secs | 36.678976 Secs |
| Temps de calcul | 1.260150 Secs | 4.876561 SEC | 40.326350 secondes |
| Temps de sélection | 0,742493 secondes | 3.876561 SEC | 8.326350 secondes |
| Temps global: | 28.948600 SEC | 36.876345 Secs | 85.845114 Secs |
Veuillez envisager de parrainer DataFrame, surtout si vous l'utilisez en capacité de production. C'est la forme d'appréciation la plus forte