Saltar al contenido

Equivalente de Python Pandas en JavaScript

Solución:

Este wiki resumirá y comparará muchos pandas-como las bibliotecas de Javascript.

En general, debería consultar el d3 Biblioteca Javascript. d3 es una “navaja suiza” muy útil para manejar datos en Javascript, al igual que pandas es útil para Python. Puede ver d3 usado frecuentemente como pandas, incluso si d3 es no es exactamente un reemplazo de DataFrame / Pandas (es decir d3 no tiene la misma API; d3 no tiene Series / DataFrame que se comportan como en pandas)

La respuesta de Ahmed explica cómo se puede usar d3 para lograr algunas funciones de DataFrame, y algunas de las bibliotecas a continuación se inspiraron en cosas como LearnJsData que usa d3 y lodash.

En cuanto a la transformación de datos de estilo DataFrame (dividir, unir, agrupar por, etc.), aquí hay una lista rápida de algunas de las bibliotecas de Javascript.

Tenga en cuenta que algunas bibliotecas son Node.js, también conocido como Javascript del lado del servidor, algunas son compatibles con el navegador, también conocido como Javascript del lado del cliente, y algunas son Typecript. Por lo tanto, use la opción adecuada para usted.

  • danfo-js
    • De la respuesta de Vignesh
    • danfo (que a menudo se importa y se alias como dfd); tiene una estructura de datos básica de tipo DataFrame, con la capacidad de trazar directamente
    • Creado por el equipo de Tensorflow: “Uno de los principales objetivos de Danfo.js es llevar el procesamiento de datos, el aprendizaje automático y las herramientas de inteligencia artificial a los desarrolladores de JavaScript. … Bibliotecas de código abierto como Numpy y Pandas …”
    • pandas está construido sobre numpy; igualmente danfo-js está construido sobre tensorflow-js
  • pandas-js
    • ACTUALIZAR El repositorio de pandas-js no se ha actualizado por un tiempo
    • De las respuestas de STEEL y Feras
    • “pandas.js es una biblioteca de código abierto (experimental) que imita la biblioteca Python pandas. Se basa en Immutable.js como el equivalente lógico de NumPy. Los principales objetos de datos en pandas.js son, como en Python pandas, la serie y el DataFrame . “
  • dataframe-js
    • “DataFrame-js proporciona una estructura de datos inmutable para javascript y ciencia de datos, el DataFrame, que permite trabajar en filas y columnas con una API inspirada en sql y programación funcional”.
  • falsificación de datos
    • Visto en la respuesta de Ashley Davis
    • “Kit de herramientas de análisis y transformación de datos de JavaScript inspirado en Pandas y LINQ”.
    • Tenga en cuenta que el antiguo repositorio JS de data-forge ya no se mantiene; ahora un nuevo repositorio usa Typecript
  • jsdataframe
    • “Jsdataframe es una biblioteca de gestión de datos de JavaScript inspirada en la funcionalidad del marco de datos en R y Python Pandas”.
  • marco de datos
    • “explorar datos agrupando y reduciendo”.

Luego, después de llegar a esta pregunta, verificar otras respuestas aquí y hacer más búsquedas, encontré opciones como:

  • Apache Arrow en JS
    • Gracias a la sugerencia del usuario Back2Basics:
    • “Apache Arrow es una especificación de diseño de memoria en columnas para codificar vectores y contenedores en forma de tabla de datos planos y anidados. Apache Arrow es el estándar emergente para grandes datos en columnas en memoria (Spark, Pandas, Taladro, Grafismo, …) “
  • Observable
    • A primera vista, parece un JS alternativa a los “cuadernos” de IPython / Jupyter
    • La página de Observable promete: “Programación reactiva”, una “Comunidad”, en una “Plataforma web”
    • Vea la introducción de 5 minutos aquí
  • recline (de la respuesta de Rufus)
    • No utiliza una API “DataFrame”
    • En cambio, enfatiza su API “Multiview” (la interfaz de usuario), (similar al modelo jQuery / DOM) que no requiere jQuery pero sí requiere un navegador. Más ejemplos
    • También destaca su arquitectura MVC-ish; incluidas las cosas de back-end (es decir, conexiones de base de datos)
  • js-data
    • ¡Realmente más un ORM! La mayoría de sus módulos corresponden a diferentes datos almacenamiento preguntas (js-data-mongodb, js-data-redis, js-data-cloud-datastore), clasificación, filtrado, etc.
    • En el lado positivo, funciona en Node.js como primera prioridad; “Funciona en Node.js y en el navegador”.
  • miso (otra sugerencia de Rufus)
    • Mecenas impresionantes como Guardian y bocoup.
  • AlaSQL
    • “AlaSQL” es una base de datos SQL de código abierto para Javascript con un fuerte enfoque en la velocidad de consulta y la flexibilidad de la fuente de datos tanto para datos relacionales como para datos sin esquema. Funciona en su navegador, Node.js y Cordova “.
  • Algunos experimentos mentales:
    • “Escalar un DataFrame en Javascript” – Gary Sieling

Estos son los criterios que usamos para considerar las opciones anteriores.

  • Criterios generales
    • Idioma (NodeJS vs navegador JS vs Typescript)
    • Dependencias (es decir, si utiliza una biblioteca subyacente / AJAX / API remotas)
    • Soporte activo (base de usuarios activa, repositorio de fuente activa, etc.)
    • Tamaño / velocidad de la biblioteca JS
  • Criterios de Panda en su comparación R

    • Rendimiento
    • Funcionalidad / flexibilidad
    • Facilidad de uso
  • Similitud con las API de Pandas / Dataframe
    • Específicamente sobre sus principales características.
    • Énfasis en la ciencia de datos
    • Funciones de visualización integradas
    • Integración demostrada en combinación con otras herramientas como Jupyter
      (cuadernos interactivos), etc.

He estado trabajando en una biblioteca de lucha de datos para JavaScript llamada data-forge. Está inspirado en LINQ y Pandas.

Se puede instalar así:

npm install --save data-forge

Su ejemplo funcionaría así:

var csvData = "Source,col1,col2,col3n" +
    "foo,1,2,3n" +
    "bar,3,4,5n";

var dataForge = require('data-forge');
var dataFrame = 
    dataForge.fromCSV(csvData)
        .parseInts([ "col1", "col2", "col3" ])
        ;

Si sus datos estaban en un archivo CSV, podría cargarlo así:

var dataFrame = dataForge.readFileSync(fileName)
    .parseCSV()
    .parseInts([ "col1", "col2", "col3" ])
    ;

Puedes usar el select método para transformar filas.

Puede extraer una columna usando getSeries luego usa el select método para transformar valores en esa columna.

Obtiene sus datos fuera del marco de datos de esta manera:

var data = dataFrame.toArray();

Para promediar una columna:

 var avg = dataFrame.getSeries("col1").average();

Hay mucho más que puedes hacer con esto.

Puede encontrar más documentación en npm.

Ceaveat ¡Lo siguiente es aplicable solo a d3 v3, y no al último d4v4!

Soy parcial a d3.js, y aunque no será un reemplazo total para Pandas, si pasa algún tiempo aprendiendo su paradigma, debería poder encargarse de todos sus datos por usted. (Y si termina queriendo mostrar los resultados en el navegador, es ideal para eso).

Ejemplo. Mi archivo CSV data.csv:

name,age,color
Mickey,65,black
Donald,58,white
Pluto,64,orange

En el mismo directorio, cree un index.html que contiene lo siguiente:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>My D3 demo</title>

    <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
  </head>
  <body>

      <script charset="utf-8" src="demo.js"></script>
  </body>
</html>

y también un demo.js archivo que contiene lo siguiente:

d3.csv('/data.csv',

       // How to format each row. Since the CSV file has a header, `row` will be
       // an object with keys derived from the header.
       function(row) {
         return {name : row.name, age : +row.age, color : row.color};
       },

       // Callback to run once all data's loaded and ready.
       function(data) {
         // Log the data to the JavaScript console
         console.log(data);

         // Compute some interesting results
         var averageAge = data.reduce(function(prev, curr) {
           return prev + curr.age;
         }, 0) / data.length;

         // Also, display it
         var ulSelection = d3.select('body').append('ul');
         var valuesSelection =
             ulSelection.selectAll('li').data(data).enter().append('li').text(
                 function(d) { return d.age; });
         var totalSelection =
             ulSelection.append('li').text('Average: ' + averageAge);
       });

En el directorio, ejecute python -m SimpleHTTPServer 8181y abra http: // localhost: 8181 en su navegador para ver una lista simple de las edades y su promedio.

Este sencillo ejemplo muestra algunas características relevantes de d3:

  • Excelente soporte para la ingesta de datos en línea (CSV, TSV, JSON, etc.)
  • Inteligencia en la gestión de datos incorporada
  • Manipulación DOM basada en datos (quizás lo más difícil de entender): sus datos se transforman en elementos DOM.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *