
Esta é uma biblioteca analítica C ++ projetada para análise de dados semelhante às bibliotecas em Python e R., por exemplo, você compararia isso com pandas ou dados.
Você pode cortar os dados de várias maneiras diferentes. Você pode ingressar, mesclar, grupo-by os dados. Você pode executar vários algoritmos estatísticos, de resumo, financeiro e ML nos dados. Você pode adicionar seus algoritmos personalizados facilmente. Você pode classificar em várias colunas, escolher e excluir os dados. E mais ...
O DataFrame também inclui uma grande coleção de algoritmos analíticos na forma de visitantes. São de estatísticas básicas como média , desvio de DST , retorno ,… a análises mais envolvidas, como propagação de afinidade , ajuste polinomial , transformação rápida de Fourier de comprimento arbitrário ... incluindo uma boa coleção de indicadores comerciais. Você também pode adicionar facilmente seus próprios algoritmos.
A DataFrame também emprega uma extensa multithreading em quase todas as suas APIs, para grandes conjuntos de dados. Isso torna o DataFrame especialmente adequado para analisar grandes conjuntos de dados.
Para operações básicas começarem você, consulte Hello World. Para uma lista completa de recursos com amostras de código, consulte a documentação.
Eu segui alguns princípios nesta biblioteca :
Você provavelmente já ouviu falar do Polars Dataframe. Ele é implementado em ferrugem e portado com cabeça de zero para Python (desde que você não tenha um loop). Muitas pessoas me pediram para escrever uma comparação para o DataFrame vs. Polars . Então, finalmente encontrei algum tempo para aprender um pouco sobre polares e escrever uma referência muito simples.
Escrevi os seguintes programas idênticos para polares e dados de dados C ++ (e pandas). Usei a versão Polars: 0.19.14 (versão de pandas: 1.5.3, versão Numpy: 1.24.2). E usei o compilador Clang C ++ 20 com a opção -o3. Eu corri no meu, um tanto desatualizado, MacBook Pro (Intel Chip, 96 GB de RAM).
Nos dois casos, criei um DataFrame com 3 colunas aleatórias. O DataFrame de C ++ também exigiu uma coluna de índice adicional do mesmo tamanho. Os polares não acreditam nas colunas de índice (que têm seus próprios prós e contras. Não estou passando por isso aqui). Cada programa possui três partes idênticas. Primeiro, gera e preenche 3 colunas com 300m de números aleatórios cada (no caso do quadro de dados C ++, também deve gerar uma coluna de índice seqüencial do mesmo tamanho). Essa é a parte em que não estou interessado. Na segunda parte, calcula a média da primeira coluna, a variação da segunda coluna e a correlação de Pearson da segunda e terceira colunas. Na terceira parte, ele faz uma seleção (ou filtro como Polars o chama) em uma das colunas.
Resultados :
O conjunto de dados máximo que eu poderia carregar em polares era de 300m linhas por coluna. Qualquer conjunto de dados maior explodiu a memória e fez com que o OS o matasse. Eu executei C ++ DataFrame com 10b linhas por coluna e tenho certeza de que ela também seria executada com conjuntos de dados maiores. Então, fui forçado a correr os dois com 300m linhas para comparar. Eu executei cada teste 4 vezes e levei o melhor tempo. Os números de polares variaram muito de uma corrida para outra, especialmente os tempos de cálculo e seleção. Os números de dados de dados C ++ foram significativamente mais consistentes.
| C ++ DataFrame | Polars | Pandas | |
|---|---|---|---|
| Geração de dados/tempo de carregamento | 26.945900 Secs | 28.468640 Secs | 36.678976 Secs |
| Tempo de cálculo | 1.260150 segundos | 4.876561 Secs | 40.326350 Secs |
| Tempo de seleção | 0,742493 Secs | 3.876561 Secs | 8.326350 Secs |
| Tempo geral: | 28.948600 Secs | 36.876345 Secs | 85.845114 Secs |
Por favor, considere patrocinar o DataFrame, especialmente se você o estiver usando na capacidade de produção. É a forma mais forte de apreciação