代码之家  ›  专栏  ›  技术社区  ›  Richard Herron

在MySQL中建立大型数据库,在R中进行分析

  •  10
  • Richard Herron  · 技术社区  · 14 年前

    我在分析R中的大数据集时已经达到了RAM的极限。我想我的下一步是将这些数据导入MySQL数据库并使用 RMySQL

    关于如何开始使用这个用法,有好的参考资料吗?在这一点上,我不想做任何类型的关系数据库。我只想将.csv文件导入到本地MySQL数据库中,并使用 RMySQL公司

    我很欣赏任何指点(包括“你太离谱了!”因为我对R和大型数据集都是新手。。。这个大约有80MB)

    5 回复  |  直到 14 年前
        1
  •  6
  •   neilfws    14 年前

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

    步骤1很简单:在MySQL控制台中,只需“createdatabasedbname”。或者在命令行中,使用 mysql管理员

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

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

    身份证件 高度 ,这里指定为浮点数(数字类型),共有3位数字,小数点后有2位数字( 100.27). 你明白这一点很重要 data types .

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

    mysqlimport -u DBUSERNAME -pDBPASSWORD DBNAME mydata
    

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

    select * from mydata where height > 50;
    

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

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

    网上有很多MySQL和SQL教程,包括“官方的” tutorial

        2
  •  5
  •   danieltalsky    14 年前

    我有一个很好的建议。对于80MB,使用SQLite。SQLite是一个超级公共域、轻量级、超快速的基于文件的数据库,它的工作方式(几乎)和SQL数据库一样。 http://www.sqlite.org/index.html

    您不必担心运行任何类型的服务器或权限,您的数据库句柄只是一个文件。

    其他人提到了sqldf: http://code.google.com/p/sqldf/

    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 
    );
    

    另外,我也有点惊讶,你的脚本占用了80mb。在R中,不可能在内存中打开所有文件的情况下,成片地查找文件?

        3
  •  2
  •   Community CDub    8 年前

    sqldf包可能会为您提供一种更简单的方法来完成所需的工作: http://code.google.com/p/sqldf/

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

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

    • 编写create table语句来定义每个表
    • 在数据库中导入和导出
    • 在常见情况下,将返回的列强制到适当的类

    另请参见此处: Quickly reading very large tables as dataframes in R

        4
  •  1
  •   Matt Bannert    14 年前

    MySQL本身的文档是非常可靠的,您可以在这里获得很多额外的(具体的)帮助。

    我也在macosxsnowleopard上用MySQL工作台运行MySQL。所以这就是帮助我相对容易地完成任务的原因。

    • 我安装了 MAMP ,这给了我一个本地Apache web服务器,其中包含PHP、MySQL和MySQL工具PHPmyadmin,可以作为MySQL workbench的一个不错的基于web的替代方案(在Mac上并不总是超级稳定的:)。您将有一个小部件来启动和停止服务器,并可以访问一些基本的配置设置(如通过浏览器的端口)。它真的一键安装在这里。

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

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

    • 尝试找到最适合您的导入例程。我不知道你是否是一个空壳/终端的家伙,如果是这样,你会喜欢什么是尼尔的建议。你也可以用 LOAD DATA INFILE

    如果您能更准确地说明您遇到的问题,您会得到一些更具体的帮助,所以请尽管问;)

    我想你得和我一起工作 time series data project (TSMySQL) 在这方面,我们使用R和关系数据库(例如MySQL,但也可用于其他DBMS)来存储时间序列数据。而且你甚至可以把R和 FAME (这在融资商中很受欢迎,但价格昂贵)。最后一段当然不是什么基本的,但我想它可能会帮助你考虑是否值得花时间深入一点。

        5
  •  0
  •   N Brouwer    11 年前

    Practical Computing for Biologists

    第15章。数据组织和数据库