Mit diesem CSV-Beispiel:
Source,col1,col2,col3
foo,1,2,3
bar,3,4,5
Die Standardmethode, die ich für Pandas verwende, ist folgende:
CSV analysieren
Wählen Sie Spalten in einem Datenrahmen aus (
col1
undcol3
)- Verarbeiten Sie die Spalte (z. B. die durchschnittlichen Werte von
col1
undcol3
)
Gibt es eine JavaScript-Bibliothek, die Pandas mag?
javascript
python
pandas
neversaint
quelle
quelle
Antworten:
Alle Antworten sind gut. Ich hoffe, meine Antwort ist umfassend (dh ich versuche, alle Optionen aufzulisten). Ich hoffe, dass ich zurückkehren und diese Antwort mit allen Kriterien überarbeiten kann, um eine Auswahl zu treffen.
Ich hoffe, dass jemand, der hierher kommt, vertraut ist
d3
.d3
ist ein sehr nützliches "Schweizer Taschenmesser" für den Umgang mit Daten in Javascript, wiepandas
es für Python hilfreich ist. Sie könnend3
häufig verwendet sehenpandas
, auch wennd3
es sich nicht genau um einen DataFrame / Pandas-Ersatz handelt (dhd3
nicht die gleiche API hat;d3
nichtSeries
/DataFrame
die sich wie in verhältpandas
).In Ahmeds Antwort wird erklärt, wie mit d3 einige DataFrame-Funktionen erreicht werden können. Einige der folgenden Bibliotheken wurden von Dingen wie LearnJsData inspiriert, die
d3
und verwendenlodash
.Was DataFrame-fokussierte Funktionen betrifft, war ich mit JS-Bibliotheken überfordert, die helfen. Hier ist eine kurze Liste einiger Optionen, auf die Sie möglicherweise gestoßen sind. Ich habe noch keine im Detail überprüft (die meisten habe ich in Kombination mit Google + NPM-Suche gefunden).
Achten Sie darauf, dass Sie eine Sorte verwenden, mit der Sie arbeiten können. Einige sind Node.js, auch bekannt als serverseitiges Javascript, andere sind browserkompatibel, auch bekannt als clientseitiges Javascript. Einige sind Typoskript.
Nachdem ich zu dieser Frage gekommen war, andere Antworten hier überprüft und mehr gesucht hatte, fand ich Optionen wie:
JS
Alternative zu den IPython / Jupyter "Notebooks" zu sein.bewahren vor R.dokumentieren Sie den Austausch / die Verbesserung / die Entsprechung zu jeder R-Funktion .die jQuery-Methode zum Abrufen von Daten in das DOMEs ist (fantastisch) Multiview (die Benutzeroberfläche), für die kein jQuery, sondern ein Browser erforderlich ist! Mehr Beispielejs-data-mongodb
,js-data-redis
,js-data-cloud-datastore
), Sortierung, Filterung, usw.Ich hoffe, dieser Beitrag kann zu einem Community-Wiki werden und anhand verschiedener Kriterien wie z. B.: Bewertet (dh die verschiedenen oben genannten Optionen verglichen) werden.
Jupyter
(interaktive Notizbücher) usw.Einige Dinge, die eine JS-Bibliothek möglicherweise nie tut (aber könnte es?)
quelle
Ich habe an einer Data Wrangling-Bibliothek für JavaScript namens Data-Forge gearbeitet. Es ist inspiriert von LINQ und Pandas.
Es kann folgendermaßen installiert werden:
npm install --save data-forge
Ihr Beispiel würde folgendermaßen funktionieren:
var csvData = "Source,col1,col2,col3\n" + "foo,1,2,3\n" + "bar,3,4,5\n"; var dataForge = require('data-forge'); var dataFrame = dataForge.fromCSV(csvData) .parseInts([ "col1", "col2", "col3" ]) ;
Wenn sich Ihre Daten in einer CSV-Datei befinden, können Sie sie folgendermaßen laden:
var dataFrame = dataForge.readFileSync(fileName) .parseCSV() .parseInts([ "col1", "col2", "col3" ]) ;
Mit der
select
Methode können Sie Zeilen transformieren.Sie können eine Spalte extrahieren, indem Sie
getSeries
dieselect
Methode verwenden, um Werte in dieser Spalte zu transformieren.Sie erhalten Ihre Daten wie folgt aus dem Datenrahmen zurück:
var data = dataFrame.toArray();
So mitteln Sie eine Spalte:
var avg = dataFrame.getSeries("col1").average();
Damit können Sie noch viel mehr tun.
Weitere Dokumentation finden Sie auf npm .
quelle
Ceaveat Das Folgende gilt nur für d3 v3 und nicht für das neueste d4v4!
Ich bin ein Teil von d3.js , und obwohl es kein vollständiger Ersatz für Pandas ist, sollte es in der Lage sein, alle Ihre Daten für Sie zu erledigen , wenn Sie einige Zeit damit verbringen, sein Paradigma zu lernen. (Und wenn Sie am Ende Ergebnisse im Browser anzeigen möchten, ist dies ideal dafür geeignet.)
Beispiel. Meine CSV-Datei
data.csv
:name,age,color Mickey,65,black Donald,58,white Pluto,64,orange
Erstellen Sie im selben Verzeichnis ein Verzeichnis,
index.html
das Folgendes enthält:<!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>
und auch eine
demo.js
Datei, die Folgendes enthält: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); });
Führen Sie im Verzeichnis http: // localhost: 8181 aus
python -m SimpleHTTPServer 8181
und öffnen Sie es in Ihrem Browser, um eine einfache Auflistung des Alters und seines Durchschnitts anzuzeigen.Dieses einfache Beispiel zeigt einige relevante Funktionen von d3:
quelle
Pandas.js ist im Moment eine experimentelle Bibliothek, scheint aber sehr vielversprechend zu sein, da sie unter der Haube unveränderliche.js und NumpPy-Logik verwendet. Beide Datenobjektserien und DataFrame sind vorhanden.
quelle
Unten ist Python Numpy und Pandas
`` `
import numpy as np import pandas as pd data_frame = pd.DataFrame(np.random.randn(5, 4), ['A', 'B', 'C', 'D', 'E'], [1, 2, 3, 4]) data_frame[5] = np.random.randint(1, 50, 5) print(data_frame.loc[['C', 'D'], [2, 3]]) # axis 1 = Y | 0 = X data_frame.drop(5, axis=1, inplace=True) print(data_frame)
`` `
Dasselbe kann in JavaScript erreicht werden * [ numjs funktioniert nur mit Node.js ] D3.js verfügt jedoch über weit erweiterte Optionen für Datendateien. Sowohl numjs als auch Pandas-js sind noch in Arbeit.
import np from 'numjs'; import { DataFrame } from 'pandas-js'; const df = new DataFrame(np.random.randn(5, 4), ['A', 'B', 'C', 'D', 'E'], [1, 2, 3, 4]) // df /* 1 2 3 4 A 0.023126 1.078130 -0.521409 -1.480726 B 0.920194 -0.201019 0.028180 0.558041 C -0.650564 -0.505693 -0.533010 0.441858 D -0.973549 0.095626 -1.302843 1.109872 E -0.989123 -1.382969 -1.682573 -0.637132 */
quelle
Ich denke, am nächsten kommen Bibliotheken wie:
Insbesondere Recline verfügt über ein Dataset-Objekt mit einer Struktur, die Pandas-Datenrahmen ähnelt. Anschließend können Sie Ihre Daten mit "Ansichten" wie Datenraster, Grafiken, Karten usw. verbinden. Ansichten sind normalerweise dünne Umhüllungen vorhandener Best-of-Breed-Visualisierungsbibliotheken wie D3, Flot, SlickGrid usw.
Hier ist ein Beispiel für Zurücklehnen:
quelle
@neversaint dein Warten hat ein Ende. sagen willkommen zu Danfo.js die Pandas wie Javascript - Bibliothek gebaut auf tensorflow.js und unterstützt Tensoren aus der Box ist. Dies bedeutet, dass Sie die Danfo-Datenstruktur in Tensoren konvertieren können. Und Sie können Groupby, Zusammenführen, Verbinden, Plotten und andere Datenverarbeitung durchführen.
quelle
Es ist ziemlich einfach, CSV in Javascript zu analysieren, da jede Zeile bereits im Wesentlichen ein Javascript-Array ist. Wenn Sie Ihre CSV in ein Array von Zeichenfolgen laden (eine pro Zeile), ist es ziemlich einfach, ein Array von Arrays mit den folgenden Werten zu laden:
var pivot = function(data){ var result = []; for (var i = 0; i < data.length; i++){ for (var j=0; j < data[i].length; j++){ if (i === 0){ result[j] = []; } result[j][i] = data[i][j]; } } return result; }; var getData = function() { var csvString = $(".myText").val(); var csvLines = csvString.split(/\n?$/m); var dataTable = []; for (var i = 0; i < csvLines.length; i++){ var values; eval("values = [" + csvLines[i] + "]"); dataTable[i] = values; } return pivot(dataTable); };
Dann
getData()
kehrt ein mehrdimensionales Array von Werten durch Spalte.Ich habe dies in einer jsFiddle für Sie demonstriert .
Natürlich können Sie es nicht so einfach machen, wenn Sie der Eingabe nicht vertrauen - wenn Ihre Daten ein Skript enthalten könnten, das eval möglicherweise aufnimmt usw.
quelle
Hier ist ein dynamischer Ansatz unter der Annahme eines vorhandenen Headers in Zeile 1. Die CSV wird mit geladen
d3.js
.function csvToColumnArrays(csv) { var mainObj = {}, header = Object.keys(csv[0]); for (var i = 0; i < header.length; i++) { mainObj[header[i]] = []; }; csv.map(function(d) { for (key in mainObj) { mainObj[key].push(d[key]) } }); return mainObj; } d3.csv(path, function(csv) { var df = csvToColumnArrays(csv); });
Dann können Sie auf jede Spalte der Daten zugreifen, die einem R-, Python- oder Matlab-Datenrahmen ähnelt
df.column_header[row_number]
.quelle