В этом примере CSV:
Source,col1,col2,col3
foo,1,2,3
bar,3,4,5
Стандартный метод, который я использую Pandas, таков:
Разобрать CSV
Выберите столбцы во фрейме данных (
col1
иcol3
)- Обработка столбца (например, среднее значение
col1
иcol3
)
Есть ли библиотека JavaScript, которая похожа на Pandas?
javascript
python
pandas
Никогда
источник
источник
Ответы:
Все ответы хороши. Надеюсь, что мой ответ исчерпывающий (т.е. пытается перечислить все варианты). Я надеюсь вернуться и пересмотреть этот ответ с любыми критериями, которые помогут сделать выбор.
Я надеюсь, что все, кто сюда приезжает, знакомы с
d3
.d3
очень полезный «швейцарский армейский нож» для обработки данных в Javascript, какpandas
и в Python. Вы можетеd3
часто видеть, как используетсяpandas
, даже еслиd3
это не совсем замена DataFrame / Pandas (т.е.d3
не имеет того же API;d3
не имеетSeries
/DataFrame
которые ведут себя как вpandas
)Ответ Ахмеда объясняет, как d3 можно использовать для достижения некоторых функций DataFrame, а некоторые из приведенных ниже библиотек были вдохновлены такими вещами, как LearnJsData, которые используют
d3
иlodash
.Что касается функций, ориентированных на DataFrame, я был поражен библиотеками JS, которые помогают. Вот краткий список некоторых вариантов, с которыми вы могли столкнуться. Я еще не проверял ни одного из них подробно (большинство из них я нашел в сочетании поиска Google + NPM).
Будьте осторожны, вы используете разнообразие, с которым можете работать; некоторые из них являются Node.js или серверным Javascript, некоторые - совместимыми с браузером или клиентскими Javascript. Некоторые из них - машинописный текст.
Затем, подойдя к этому вопросу, проверив здесь другие ответы и продолжив поиск, я нашел такие варианты, как:
JS
альтернативой «записным книжкам » IPython / Jupyter.сохранить из Rдокументировать его замену / улучшения / соответствие каждой функции R .способ jQuery для получения данных в DOMего (потрясающий) Multiview (пользовательский интерфейс), который не требует jQuery, но требует браузера! Еще примерыjs-data-mongodb
,js-data-redis
,js-data-cloud-datastore
), сортировка, фильтрация и т.д.Я надеюсь, что этот пост может стать вики-сообществом и оценивать (то есть сравнивать различные варианты выше) по различным критериям, таким как:
Jupyter
(интерактивные записные книжки) и т. Д.Некоторые вещи, которые JS-библиотека может никогда не выполнять (но может ли?)
источник
Я работал над библиотекой обработки данных для JavaScript под названием data-forge. Он вдохновлен LINQ и Pandas.
Его можно установить так:
npm install --save data-forge
Ваш пример будет работать так:
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" ]) ;
Если ваши данные были в CSV-файле, вы можете загрузить их следующим образом:
var dataFrame = dataForge.readFileSync(fileName) .parseCSV() .parseInts([ "col1", "col2", "col3" ]) ;
Вы можете использовать этот
select
метод для преобразования строк.Вы можете извлечь столбец, используя
getSeries
затем этотselect
метод для преобразования значений в этом столбце.Вы получаете свои данные обратно из фрейма данных следующим образом:
var data = dataFrame.toArray();
Чтобы усреднить столбец:
var avg = dataFrame.getSeries("col1").average();
С этим можно сделать гораздо больше.
Вы можете найти больше документации на npm .
источник
Ceaveat Следующее применимо только к d3 v3, но не к последней версии d4v4!
Я неравнодушен к d3.js , и, хотя он не будет полной заменой Pandas, если вы потратите некоторое время на изучение его парадигмы, он сможет позаботиться обо всех ваших проблемах с данными за вас. (И если вам захочется отображать результаты в браузере, он идеально подходит для этого.)
Пример. Мой файл CSV
data.csv
:name,age,color Mickey,65,black Donald,58,white Pluto,64,orange
В том же каталоге создайте файл,
index.html
содержащий следующее:<!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>
а также
demo.js
файл, содержащий следующее: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); });
В каталоге запустите
python -m SimpleHTTPServer 8181
и откройте http: // localhost: 8181 в своем браузере, чтобы увидеть простой список возрастов и их средний возраст.Этот простой пример показывает несколько важных функций d3:
источник
Pandas.js на данный момент является экспериментальной библиотекой, но кажется очень многообещающей, она использует под капотом immutable.js и логику NumpPy, есть как серия объектов данных, так и DataFrame.
источник
Ниже Python numpy и 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)
``
То же самое можно сделать в JavaScript * [ numjs работает только с Node.js ] Но D3.js имеет много расширенных параметров набора файлов данных. И numjs, и Pandas-js все еще работают ..
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 */
источник
Я думаю, что наиболее близкими являются такие библиотеки, как:
В частности, у Recline есть объект Dataset со структурой, отчасти похожей на фреймы данных Pandas. Затем он позволяет вам соединять ваши данные с «представлениями», такими как сетка данных, графики, карты и т. Д. Представления обычно представляют собой тонкую оболочку существующих лучших в своем классе библиотек визуализации, таких как D3, Flot, SlickGrid и т. Д.
Вот пример для Recline:
источник
@neversaint ваше ожидание окончено. скажите, что добро пожаловать в Danfo.js, который представляет собой pandas, подобную библиотеке Javascript, построенную на tensorflow.js и поддерживающую тензоры из коробки. Это означает, что вы можете преобразовать структуру данных danfo в тензоры. И вы можете выполнять группировку, объединение, объединение, построение графиков и другую обработку данных.
источник
Анализировать CSV в javascript довольно просто, потому что каждая строка уже представляет собой массив javascript. Если вы загружаете свой csv в массив строк (по одной на строку), довольно легко загрузить массив массивов со значениями:
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); };
Затем
getData()
возвращает многомерный массив значений по столбцу.Я продемонстрировал вам это в jsFiddle .
Конечно, вы не сможете сделать это так легко, если не доверяете вводимым данным - если в ваших данных может быть скрипт, который может подобрать eval и т. Д.
источник
Вот динамический подход, предполагающий наличие заголовка в строке 1. CSV загружается с
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); });
Затем вы можете получить доступ к каждому столбцу данных, аналогичному фрейму данных R, python или Matlab
df.column_header[row_number]
.источник