Настройка большой базы данных в MySQL для анализа в R - PullRequest
10 голосов
/ 27 июля 2010

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

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

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

Ответы [ 5 ]

6 голосов
/ 27 июля 2010

Документация для 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)
); 

, который говорит, что создайте таблицу с 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 tutorial".

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

5 голосов
/ 27 июля 2010

У меня есть довольно хорошее предложение. Для 80MB используйте 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 невозможно просто найти файл порциями, не открывая его в памяти?

2 голосов
/ 27 июля 2010

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

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

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

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

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

1 голос
/ 27 июля 2010

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

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

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

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

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

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

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

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

0 голосов
/ 16 января 2014

Практические вычисления для биологов как хорошее (хотя и предметное) введение в SQLite

Глава 15. Организация данных и базы данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...