Настройте большую базу данных в MySQL для анализа в R

Я достиг предела RAM в анализе больших наборов данных в R. Я думаю, что мой следующий шаг должен импортировать эти данные в базу данных MySQL и использовать RMySQL пакет. В основном, потому что я не знаю малопонятный жаргон базы данных, я не смог выяснить, как добраться вне установки MySQL с часами поиска с помощью Google и RSeeking (я выполняю MySQL и MySQL Workbench на Mac OSX 10.6, но могу также запустить Ubuntu 10.04).

Существует ли хорошая ссылка о том, как начать с этим использованием? В этой точке я не хочу делать любой вид реляционного databasing. Я просто хочу импортировать .csv файлы в локальную базу данных MySQL и выполнить в подмножестве с RMySQL.

Я ценю любые указатели (включая, "Вы - путь от основы!" поскольку я плохо знаком с R и более плохо знаком с большими наборами данных... это приблизительно 80 МБ),

10
задан Richard Herron 27 July 2010 в 03:33
поделиться

4 ответа

Документация для RMySQL довольно хороша, но предполагает что вы знаете основы SQL. Это:

  • создание базы данных
  • создание таблицы
  • получение данных в таблице
  • получение данных из таблицы

Шаг 1 прост: в консоли MySQL просто «создать базу данных DBNAME» ". Или из командной строки используйте mysqladmin , или часто есть графические интерфейсы администратора MySQL.

Шаг 2 немного сложнее, так как вы должны указать поля таблицы и их тип. Это будет зависеть от содержимого вашего файла CSV (или другого файла с разделителями). Простой пример будет выглядеть примерно так:

use DBNAME;
create table mydata(
  id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  height FLOAT(3,2)
); 

В котором говорится о создании таблицы с двумя полями: id , который будет первичным ключом (поэтому должен быть уникальным) и будет автоматически увеличиваться при добавлении новых записей; и высота , которая здесь указана как число с плавающей запятой (числовой тип), с 3 цифрами всего и 2 после десятичной точки ( например, 100,27). Важно понимать типы данных .

Шаг 3 - есть разные способы импортировать данные в таблицу. Один из самых простых - использовать утилиту mysqlimport . В приведенном выше примере, если предположить, что ваши данные находятся в файле с тем же именем, что и таблица (mydata), первый столбец представляет собой символ табуляции, а второй - переменную высоты (без строки заголовка), это будет работать:

mysqlimport -u DBUSERNAME -pDBPASSWORD DBNAME mydata

Шаг 4 - требуется, чтобы вы знали, как выполнять запросы MySQL.Снова простой пример:

select * from mydata where height > 50;

Означает «извлечь все строки (id + height) из таблицы mydata, где высота больше 50».

Освоив эти основы, вы можете переходить к более сложным примерам, таким как создание 2 или более таблиц и выполнение запросов, которые объединяют данные из каждой.

Затем вы можете обратиться к руководству по RMySQL. В RMySQL вы настраиваете соединение с базой данных, а затем используете синтаксис запроса SQL для возврата строк из таблицы в качестве фрейма данных. Так что действительно важно, чтобы вы получили часть SQL - часть RMySQL проста.

В сети есть куча руководств по MySQL и SQL, включая «официальное» учебное пособие на веб-сайте MySQL. Просто выполните поиск в Google "учебник по mysql".

Лично я вообще не считаю 80 МБ большим набором данных; Я удивлен, что это вызывает проблему с оперативной памятью, и я уверен, что встроенные функции R могут справиться с этим довольно легко. Но хорошо изучать новые навыки, такие как SQL, даже если они вам не нужны для решения этой задачи.

6
ответ дан 3 December 2019 в 23:10
поделиться

У меня есть очень хорошее предложение. Для 80 МБ используйте SQLite. SQLite - это легковесная, сверхбыстрая база данных на основе файлов, которая работает (почти) так же, как база данных SQL. http://www.sqlite.org/index.html

Вам не нужно беспокоиться о запуске какого-либо сервера или разрешений, ваш дескриптор базы данных - это просто файл.

Кроме того, он хранит все данные в виде строки, поэтому вам даже не нужно беспокоиться о сохранении данных в виде типов (поскольку все, что вам нужно сделать, это в любом случае эмулировать одну текстовую таблицу).

Кто-то еще упомянул sqldf: http://code.google.com/p/sqldf/

, который действительно взаимодействует с SQLite: http://code.google.com/p/sqldf/#9._How_do_I_examine_the_layout_that_SQLite_uses_for_a_table?_whi

Итак, ваш оператор создания SQL будет похож на этот

create table tablename (
  id INT(11) INTEGER PRIMARY KEY,
  first_column_name TEXT,
  second_column_name TEXT,
  third_column_name TEXT 
);

В противном случае объяснение neilfws довольно хорошее.

P.S. Еще немного удивлен, что ваш скрипт захлебывается 80мб. В R невозможно просто искать файл по частям, не открывая его в памяти?

5
ответ дан 3 December 2019 в 23:10
поделиться

Я согласен с тем, что было сказано до сих пор. Хотя я думаю, что начать работу с MySQL (базами данных) в целом - неплохая идея, если вы собираетесь иметь дело с данными. Я имею в виду, что проверил ваш профиль, где написано, что студент-аспирант по финансам. Я не знаю, означает ли это квант. финансы, но вполне вероятно, что в своей карьере вы столкнетесь с действительно большими наборами данных. Если у вас есть время, я бы порекомендовал узнать что-нибудь о базах данных. Это просто помогает. Сама документация MySQL довольно солидная, и вы можете получить много дополнительной (конкретной) помощи здесь, в SO.

Я также запускаю MySQL с рабочей средой MySQL на Mac OS X Snow Leopard. Вот что помогло мне сделать это сравнительно легко.

  • Я установил MAMP , который дает мне локальный веб-сервер Apache с PHP, MySQL и инструментом MySQL PHPmyadmin, который можно использовать как хорошую веб-альтернативу рабочей среде MySQL (которая не всегда очень стабильна на Mac :). У вас будет небольшой виджет для запуска и остановки серверов, а также вы сможете получить доступ к некоторым основным параметрам конфигурации (например, к портам через ваш браузер). Установить здесь можно одним щелчком мыши.

  • Установите Rpackage RMySQL. Я помещу сюда свою строку подключения, может быть, это поможет:

  • Создайте свои базы данных с помощью MySQL workbench. INT и VARCHAR (для категориальных переменных, содержащих символы) должны быть типами полей, которые вам в основном нужны в начале.

  • Попробуйте найти процедуру импорта, которая лучше всего подходит для вас. Я не знаю, являетесь ли вы специалистом по оболочке / терминалу - если да, вам понравится то, что было предложено neilfws.Вы также можете использовать LOAD DATA INFILE , который я предпочитаю, поскольку это только один запрос, а не INSERT INTO (построчно)

. Если вы укажете проблемы, которые у вас есть, более точно, вы получите некоторая более конкретная помощь - не стесняйтесь спрашивать;)

Я полагаю, вам придется много работать с данными временных рядов - есть проект (TSMySQL) вокруг этого использования R и реляционные базы данных (например, MySQL, но также доступные для других СУБД) для хранения данных временных рядов. Кроме того, вы даже можете подключить R к FAME (что популярно среди финансистов, но дорого). В последнем абзаце, конечно, нет ничего принципиального, но я подумал, что он может помочь вам подумать, стоит ли потрудиться, чтобы погрузиться в него немного глубже.

1
ответ дан 3 December 2019 в 23:10
поделиться

Пакет sqldf может дать вам более простой способ делать то, что вам нужно: http://code.google.com/p/sqldf/ . Особенно, если вы единственный, кто пользуется базой данных.

Редактировать: Вот почему я думаю, что это было бы полезно в этом случае (с веб-сайта):

С sqldf пользователь освобождается от необходимости выполнять следующие действия, которые выполняются автоматически:

  • база данных setup
  • записывает оператор создания таблицы, который определяет, что каждая таблица
  • импортирует и экспортирует в базу данных и из нее
  • , в общих случаях приведение возвращаемых столбцов к соответствующему классу

См. также здесь: Быстро чтение очень больших таблиц как фреймов данных в R

2
ответ дан 3 December 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: