Обработка больших файлов CSV в Javascript может быть сложной задачей, особенно при работе с ограничениями памяти. Традиционно эта задача выполняется на Python и с помощью популярных библиотек, таких как pandas. Пакет npm csvtransformers упрощает работу с большими файлами CSV в Javascript, предоставляя набор простых в использовании функций, которые используют возможности Python для обработки больших наборов данных. В этой статье мы рассмотрим, как использовать csvtransformers для управления большими CSV-файлами в Javascript.

Как это работает?
csvtransformers использует python-shell для выполнения сценариев python, которые обрабатывают файлы csv с помощью pandas, dask и других мощных библиотек. За кулисами python-shell использует API-интерфейсы NodeJS spawn и child_process для создания среды для выполнения кода Python. Довольно аккуратно!
В общем, я могу изучить другие варианты использования приложений python-in-node, такие как обучение или запуск LLM!
Начиная
Чтобы использовать csvtransformers, выполните следующие действия:
1. Установите пакет csvtransformers:
npm i csvtransformers
2. Импортируйте csvtransformers в свой файл Javascript или Typescript:
import {csvtransformer} from 'csvtransformers'
or
const {csvTransformer} = require('csvtransformers')
3. Установите Python с https://www.python.org/
4. Установите необходимые библиотеки Python с помощью установщика пакетов Python (pip3):
pip3 install numpy pip3 install pandas pip3 install dask pip3 install datetime pip3 install glob
Примечание. Эта библиотека была создана на основе NodeJS 16.17.1 и Python 3.11.2.
Функции
csvtransformers предоставляет несколько функций для работы с CSV-файлами. Вот некоторые из наиболее часто используемых:
.aggregatorBool()
Эта функция создает агрегацию логических значений для заданного идентификатора и выводит результат в новые столбцы. Это полезно для агрегирования оценок «да/нет», «нравится/нет» и т. д.
.aggregatorBool(inputFile, outputFile, idCol, targetCol, newCol1, newCol2)
.агрегаторInt()
Эта функция создает агрегацию целочисленных значений для заданного идентификатора и выводит результат в новые столбцы. Это полезно для агрегирования оценок от 1 до 5 звезд.
.aggregatorInt(inputFile, outputFile, targetCol)
.binaryToBoolean()
Эта функция преобразует двоичное значение в логическое значение (0 = ложь, 1 = истина).
.binaryToBoolean(inputFile, targetCol, outputFile)
.booleanToBinary()
Эта функция преобразует логическое значение в двоичное (false = 0, true = 1).
.booleanToBinary(inputFile, targetCol, outputFile)
.обычай()
Эта функция позволяет вам запускать собственный скрипт Python.
.custom(customScript)
.генератор()
Эта функция создает новый файл CSV.
.generator(outputFile, headers, size, …valueCols)
.isoToUnix()
Эта функция изменяет значение даты и времени столбца с ISO на UNIX.
.isoToUnix(inputFile, outputFile, targetCol)
.слияние()
Эта функция объединяет строки двух файлов по общему значению столбца.
.merge(inputFile, targetCol, outputFile)
.понижать()
Эта функция преобразует строковое значение в нижний регистр.
.toLower(inputFile, targetCol, outputFile)
.unixToISO()
Эта функция изменяет значение даты и времени столбца с UNIX на ISO.
.unixToISO(inputFile, indexCol, outputFile, targetCol)
Примеры
Вот несколько примеров для каждой функции, предоставляемой пакетом csvtransformers:
.aggregatorBool()
// simplest example using minimum required input
csvtransformers.aggregatorBool('input.csv')
// skipping optional arguments
csvtransformers.aggregatorBool('input.csv', undefined, 'product_id')
.агрегаторInt()
// simplest example using minimum required input
csvtransformers.aggregatorInt('input.csv', 'product_id', 'rating')
// skipping optional arguments
csvtransformers.aggregatorInt('input.csv', 'product_id', 'rating', 'output.csv')
.binaryToBoolean()
// simplest example using minimum required input
csvtransformers.binaryToBoolean('input.csv', 'binary_col')
// skipping optional arguments
csvtransformers.binaryToBoolean('input.csv', 'binary_col', 'output.csv')
.booleanToBinary()
// simplest example using minimum required input
csvtransformers.booleanToBinary('input.csv', 'boolean_col')
// skipping optional arguments
csvtransformers.booleanToBinary('input.csv', 'boolean_col', 'output.csv')
.обычай()
// backticks `` are required for .custom() scripts
const script = `
import pandas as pd
# read in csv file
df = pd.read_csv('my_boring_data.csv')
# convert all values in 'name' column to string 'hotdog'
df['name'] = df['name'].astype(str).replace('', 'hotdog')
# save changes to csv file
df.to_csv('my_cool_data.csv', index=False)
`
csvtransformers.custom(script)
.генератор()
// 3 column csv file creation
function nameGen() {
const names = ['John','Jane','Taylor','Sally','Tom','Harry','Lily','Olivia','Marcus','Emma'];
const randomIndex = Math.floor(Math.random() * names.length);
return names[randomIndex];
}
function birthdayGen() {
let year = Math.floor(Math.random() * (2020–1900 + 1)) + 1900;
let month = Math.floor(Math.random() * 12) + 1;
let day;
if (month === 2) {
day = Math.floor(Math.random() * 28) + 1;
} else if (month === 4 || month === 6 || month === 9 || month === 11) {
day = Math.floor(Math.random() * 30) + 1;
} else {
day = Math.floor(Math.random() * 31) + 1;
}
// return the random birthday
return `${month}/${day}/${year}`;
}
csvtransformers.generator('output.csv', 'id,name,birthday\n', 1e8, nameGen, birthdayGen)
.isoToUnix()
// simplest example
csvtransformers.isoToUnix('input.csv')
// skipping optional arg
csvtransformers.isoToUnix('input.csv', undefined, 'datetime')
.слияние()
// simplest example
csvtransformers.merge('input1.csv', 'input2.csv', 'common_col')
// skipping optional arg
csvtransformers.merge('input1.csv', 'input2.csv', 'common_col', 'output.csv')
.понижать()
// simplest example
csvtransformers.toLower('input.csv', 'string_col')
// skipping optional arg
csvtransformers.toLower('input.csv', 'string_col', 'output.csv')
.unixToISO()
// simplest example
csvtransformers.unixToISO('input.csv', 'user_id')
// skipping optional arg
csvtransformers.unixToISO('input.csv', 'user_id', undefined, 'datetime')
Заключение
Пакет npm csvtransformers упрощает управление большими файлами CSV в Javascript, предоставляя набор простых функций, которые позволят вам управлять гигабайтами данных CSV за считанные минуты. Используя этот пакет, вы можете преодолеть ограничения памяти, часто возникающие при работе с большими наборами данных. Попробуйте csvtransformers и упростите работу с CSV-файлами с помощью Javascript! Или дайте python-shell или методу процесса spawn_child шанс выполнить ваш python в nodeJS!
Понравилось прочитанное? Пожалуйста, подпишитесь на меня или поделитесь, чтобы помочь мне расти и продолжать создавать забавные инструменты и контент.