在MySQL中设置大型数据库以便在R中进行分析

时间:2010-07-27 03:33:12

标签: mysql macos r

在分析R中的大型数据集时,我已达到RAM的限制。我认为我的下一步是将这些数据导入MySQL数据库并使用RMySQL包。主要是因为我不知道数据库术语,我无法弄清楚如何超越安装MySQL几个小时的谷歌搜索和RSeeking(我在Mac OSX 10.6上运行MySQL和MySQL Workbench,但也可以运行Ubuntu 10.04 )。

是否有关于如何开始使用此方法的良好参考?此时我不想做任何关系数据库。我只想将.csv文件导入到本地MySQL数据库中,并使用RMySQL进行子集化。

我很感激任何指针(包括“你离开基地!”因为我是R的新手并且对大型数据集更新......这个是大约80 mb)

5 个答案:

答案 0 :(得分:6)

RMySQL的文档非常好 - 但它确实假设您了解SQL的基础知识。这些是:

  • 创建数据库
  • 创建表格
  • 将数据放入表格
  • 从表中获取数据

第1步很简单:在MySQL控制台中,只需“创建数据库DBNAME”即可。或者从命令行使用 mysqladmin ,或者通常有MySQL管理GUI。

第2步有点困难,因为您必须指定表字段及其类型。这取决于您的CSV(或其他分隔)文件的内容。一个简单的例子看起来像:

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

其中说创建一个包含2个字段的表: id ,它将是主键(因此必须是唯一的)并且会在添加新记录时自动增量;和 height ,此处指定为float(数字类型),总共3位数,小数点后2位(例如 100.27)。了解data types非常重要。

第3步 - 有多种方法可以将数据导入表中。最简单的方法之一是使用 mysqlimport 实用程序。在上面的示例中,假设您的数据位于与表(mydata)同名的文件中,第一列是制表符,第二列是高度变量(没有标题行),这将起作用:

mysqlimport -u DBUSERNAME -pDBPASSWORD DBNAME mydata

第4步 - 要求您知道如何运行MySQL查询。再一次,一个简单的例子:

select * from mydata where height > 50;

表示“从高度超过50”的表mydata中获取所有行(id + height)。

掌握了这些基础知识之后,您可以转到更复杂的示例,例如创建2个或更多表以及运行从每个表连接数据的查询。

然后 - 您可以转到RMySQL手册。在RMySQL中,您设置数据库连接,然后使用SQL查询语法将表中的行作为数据框返回。因此,获得SQL部分非常重要 - RMySQL部分很简单。

网上有大量的MySQL和SQL教程,包括MySQL网站上的“官方”tutorial。只需Google搜索“mysql tutorial”。

就个人而言,我根本不认为80 Mb是一个大型数据集;我很惊讶这导致RAM问题,我确信本机R函数可以很容易地处理它。但是学习SQL等新技能很好,即使你不需要它来解决这个问题。

答案 1 :(得分:5)

我有一个很好的建议。对于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语句就像这样

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

否则,neilfws的解释非常好。

P.S。我也有点惊讶你的剧本在80mb上窒息。 R中不可能只是在块中搜索文件而不在内存中打开它?

答案 2 :(得分:2)

sqldf软件包可以让您更轻松地完成所需操作:http://code.google.com/p/sqldf/。特别是如果您是唯一使用该数据库的人。

编辑:这就是我认为在这种情况下(来自网站)有用的原因:

使用sqldf,用户无需执行以下操作,所有这些都将自动完成:

  • 数据库设置
  • 编写定义每个表的create table语句
  • 导入和导出数据库
  • 在常见情况下将返回的列强制转换为适当的类

另见:Quickly reading very large tables as dataframes in R

答案 3 :(得分:1)

我同意到目前为止所说的话。虽然我认为开始使用MySQL(数据库)一般来说,如果要处理数据,这一点并不是一个坏主意。我的意思是我检查了你的资料,这是金融博士生。我不知道这是否意味着定量。财务,但很可能你会在你的职业生涯中遇到非常大的数据集。我可以花一些时间,我建议学习一些关于数据库的东西。它只是帮助。 MySQL本身的文档非常可靠,您可以在此处获得大量额外(特定)帮助。

我也在Mac OS X Snow Leopard上使用MySQL workbench运行MySQL。所以这就是帮助我完成相对简单的工作。

  • 我安装了MAMP,它为我的本地Apache网络服务器提供了PHP,MySQL和MySQL工具PHPmyadmin,它可以作为MySQL工作台的一个很好的基于Web的替代方案(它并不总是超级稳定在Mac上:)。您将有一个小小部件来启动和停止服务器,并可以访问一些基本配置设置(例如通过浏览器的端口)。这真的是一键安装。

  • 安装Rpackage RMySQL。我将把我的连接字符串放在这里,也许这会有所帮助:

  • 使用MySQL工作台创建数据库。 INT和VARCHAR(对于包含字符的分类变量)应该是您在开始时基本需要的字段类型。

  • 尝试找到最适合您的导入例程。我不知道你是不是贝壳/终端家伙 - 如果是这样你会喜欢neilfws的建议。您也可以使用我更喜欢的LOAD DATA INFILE,因为它只有一个查询而不是INSERT INTO(逐行)

如果您更准确地指定了问题,您将获得更具体的帮助 - 请随时提问;)

我假设您必须使用time series data进行大量工作 - 周围有project (TSMySQL)使用R和关系数据库(例如MySQL,但也可用于其他DBMS)来存储时间序列数据。此外,您甚至可以将R连接到FAME(这在财务人员中很受欢迎,但价格昂贵)。最后一段肯定不是什么基础,但我认为它可能会帮助你考虑是否值得喧嚣深入潜入它。

答案 4 :(得分:0)

Practical Computing for Biologists作为一个很好的(虽然是针对特定主题的)SQLite的介绍

第15章数据组织和数据库