Загрузка данных из CSV и JSON

Библиотека ml5.js предоставляет удобные инструменты для работы с данными в формате CSV и JSON, что позволяет быстро загружать и использовать их в моделях машинного обучения на JavaScript. Основное преимущество ml5.js заключается в упрощённой интеграции с p5.js и нативным JavaScript, что делает процесс подготовки данных доступным для интерактивных приложений.


Загрузка CSV-файлов

CSV (Comma-Separated Values) — это один из самых популярных форматов для хранения табличных данных. В ml5.js данные из CSV можно загружать с помощью функции ml5.csv().

Пример синтаксиса:

ml5.csv('data.csv', csvLoaded, csvError);

function csvLoaded(data) {
  console.log('Данные CSV загружены:', data);
  data.rows.forEach(row => {
    console.log('Строка:', row);
  });
}

function csvError(error) {
  console.error('Ошибка при загрузке CSV:', error);
}

Особенности работы с CSV:

  • Каждый элемент массива data.rows представляет собой строку таблицы.
  • data.columns содержит имена столбцов.
  • Поддерживаются CSV-файлы с заголовками и без них.
  • Для больших CSV можно использовать асинхронную обработку через промисы или async/await.
async function loadCSV() {
  try {
    const data = await ml5.csv('data.csv');
    console.log('Колонки:', data.columns);
    console.log('Первый ряд:', data.rows[0]);
  } catch (error) {
    console.error('Ошибка загрузки CSV:', error);
  }
}

Загрузка JSON-файлов

JSON (JavaScript Object Notation) является универсальным форматом для хранения структурированных данных. В ml5.js JSON-файлы загружаются стандартными средствами JavaScript, так как библиотека не требует отдельного метода для работы с JSON.

Пример загрузки:

fetch('data.json')
  .then(response => response.json())
  .then(jsonData => {
    console.log('JSON данные загружены:', jsonData);
    jsonData.forEach(item => {
      console.log('Элемент:', item);
    });
  })
  .catch(error => console.error('Ошибка загрузки JSON:', error));

Особенности работы с JSON:

  • Данные могут быть массивом объектов, вложенными объектами или комбинированными структурами.
  • JSON идеально подходит для хранения сложных структур, таких как конфигурации моделей или метки классов.
  • Для больших JSON рекомендуется загружать данные асинхронно и использовать методы фильтрации и маппинга перед подачей в модель.

Преобразование данных для моделей ml5.js

Для большинства моделей ml5.js данные из CSV и JSON необходимо привести к числовому формату.

Работа с CSV:

let features = [];
let labels = [];

data.rows.forEach(row => {
  const feature = row.slice(0, -1).map(Number); // все кроме последнего столбца
  const label = row[row.length - 1]; // последний столбец
  features.push(feature);
  labels.push(label);
});

Работа с JSON:

let features = [];
let labels = [];

jsonData.forEach(item => {
  features.push([item.feature1, item.feature2]);
  labels.push(item.label);
});

Интеграция с ml5.js моделями

После подготовки данных их можно использовать для обучения моделей, например, ml5.neuralNetwork:

const nn = ml5.neuralNetwork({ task: 'classification', debug: true });

features.forEach((feature, i) => {
  nn.addData(feature, { label: labels[i] });
});

nn.normalizeData();
nn.train({ epochs: 50 }, finishedTraining);

function finishedTraining() {
  console.log('Обучение завершено');
}

Рекомендации:

  • Для больших CSV и JSON лучше предварительно фильтровать данные.
  • Нормализация и проверка типов данных обязательны для корректного обучения.
  • ml5.js поддерживает онлайн-загрузку файлов с URL и локальные файлы, что удобно для интерактивных веб-приложений.

Асинхронность и обработка ошибок

При работе с CSV и JSON важно обрабатывать возможные ошибки и использовать асинхронные функции. Это предотвращает зависание приложения и позволяет контролировать процесс загрузки.

async function loadData() {
  try {
    const csvData = await ml5.csv('data.csv');
    const jsonData = await fetch('data.json').then(res => res.json());
    console.log('CSV и JSON загружены успешно');
  } catch (error) {
    console.error('Ошибка загрузки данных:', error);
  }
}

Ключевые моменты

  • CSV удобен для табличных данных, JSON — для структурированных объектов.
  • Данные нужно преобразовать в числовые массивы перед использованием в моделях ml5.js.
  • Асинхронная загрузка и обработка ошибок обязательны для стабильной работы.
  • ml5.js интегрируется с p5.js, что позволяет легко визуализировать данные и результаты обучения.

Знание этих инструментов обеспечивает гибкость при подготовке данных для нейронных сетей, классификаторов и других моделей машинного обучения в среде JavaScript.