Обработка больших файлов 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!
Понравилось прочитанное? Пожалуйста, подпишитесь на меня или поделитесь, чтобы помочь мне расти и продолжать создавать забавные инструменты и контент.