
Esta es una biblioteca analítica C ++ diseñada para análisis de datos similares a las bibliotecas en Python y R. Por ejemplo, lo compararía con pandas o r data.
Puede cortar los datos de muchas maneras diferentes. Puede unirse, fusionar, agrupar los datos. Puede ejecutar varios algoritmos estadísticos, de resumen, financieros y ML en los datos. Puede agregar sus algoritmos personalizados fácilmente. Puede clasificar, seleccionar personalizados y eliminar los datos. Y más ...
DataFrame también incluye una gran colección de algoritmos analíticos en forma de visitantes. Estos son de estadísticas básicas como media , desviación de ETS , retorno , ... para análisis más involucrados, como propagación de afinidad , ajuste polinomial , transformación rápida de Fourier de longitud arbitraria ... incluyendo una buena colección de indicadores comerciales. También puede agregar fácilmente sus propios algoritmos.
DataFrame también emplea una extensa múltiples lectura en casi todas sus API, para grandes conjuntos de datos. Eso hace que DataFrame sea especialmente adecuado para analizar grandes conjuntos de datos.
Para operaciones básicas para comenzar, ver Hello World. Para obtener una lista completa de características con muestras de código, consulte la documentación.
He seguido algunos principios en esta biblioteca :
Probablemente haya oído hablar de Polars DataFrame. Se implementa en óxido y se porta con cero sobrecargado a Python (siempre que no tenga un bucle). Muchas personas me han pedido que escriba una comparación para DataFrame vs. Polars . Entonces, finalmente encontré algo de tiempo para aprender un poco sobre polares y escribir un punto de referencia muy simple.
Escribí los siguientes programas idénticos para Polars y C ++ DataFrame (y Pandas). Utilicé la versión Polars: 0.19.14 (Versión de Pandas: 1.5.3, Versión Numpy: 1.24.2). Y utilicé el compilador C ++ 20 Clang con la opción -o3. Corrí tanto en mi, algo desactualizado, MacBook Pro (Intel Chip, 96 GB de RAM).
En ambos casos, creé un marco de datos con 3 columnas aleatorias. El C ++ DataFrame también requirió una columna de índice adicional del mismo tamaño. Polars no cree en las columnas índices (que tienen sus propios pros y contras. No lo estoy pasando aquí). Cada programa tiene tres partes idénticas. Primero genera y poca 3 columnas con 300 m de números aleatorios cada uno (en el caso de C ++ DataFrame, también debe generar una columna de índice secuencial del mismo tamaño). Esa es la parte que no me interesa. En la segunda parte, calcula la media de la primera columna, la varianza de la segunda columna y la correlación de Pearson de la segunda y tercera columnas. En la tercera parte, realiza una selección (o filtro como lo llama Polars) en una de las columnas.
Resultados :
El conjunto de datos máximo que pude cargar en polares era de 300 m filas por columna. Cualquier conjunto de datos más grande explotó la memoria y hizo que el sistema operativo lo matara. Ejecuté C ++ DataFrame con filas 10B por columna y estoy seguro de que también se habría ejecutado con conjuntos de datos más grandes. Entonces, me vi obligado a ejecutar ambas con hileras de 300 m para comparar. Corrí cada prueba 4 veces y me tomé el mejor tiempo. Los números de polares variaron mucho de una ejecución a otra, especialmente los tiempos de cálculo y selección. Los números de marco de datos de C ++ fueron significativamente más consistentes.
| Marco de datos C ++ | Polares | Pandas | |
|---|---|---|---|
| Generación de datos/tiempo de carga | 26.945900 secs | 28.468640 segundos | 36.678976 secs |
| Tiempo de cálculo | 1.260150 segundos | 4.876561 secs | 40.326350 segundos |
| Tiempo de selección | 0.742493 secs | 3.876561 secs | 8.326350 segundos |
| Tiempo general: | 28.948600 secs | 36.876345 segundos | 85.845114 secs |
Considere patrocinar DataFrame, especialmente si lo está utilizando en capacidad de producción. Es la forma más fuerte de apreciación