如何将Movielens数据导入Mysql

时间:2014-07-07 05:23:43

标签: php mysql

如何将Movielens的UTF-8数据导入MySql。

我从http://grouplens.org/datasets/movielens/获取数据,对于我的推荐系统论文目的,我只想要100K和Tag Gnome数据。

我一直在谷歌和这个论坛上搜索,我没有找到任何关于将这些文件导入MySQl的内容。我自己,目前使用PhpMyAdmin来管理MySQL,所以如果有人知道如何轻松地将这些文件导入MySQL。

如果你们建议我使用php逐个迭代它,我很好,但请向我解释代码。

1 个答案:

答案 0 :(得分:0)

您需要编写一些自定义代码才能将所有数据导入MySQL。有关Stack Overflow的Dumbest答案,对吗?

因此,他们提供了一组平面文件,每个文件都在README中描述。

README
allbut.pl
mku.sh
u.data
u.genre
u.info
u.item
u.occupation
u.user
u1.base
u1.test
u2.base
u2.test
u3.base
u3.test
u4.base
u4.test
u5.base
u5.test
ua.base
ua.test
ub.base
ub.test

简而言之:

  1. 在MySQL中创建自己的数据库和表。
  2. 以编程方式打开文件并将每行解析为SQL。
  3. 将SQL导入MySQL。
  4. ???
  5. 利润!
  6. 是的,我知道我还没有真正告诉过你什么,让我们做一个,你可以希望做其他人。

    我会做你的,因为我很懒,很容易。

    制作一张新表,我假设您知道如何制作表等。

    u.genre有两件事:一种流派和一种身份。

     unknown|0
     Action|1
     ...etc...
    

    所以你的桌子应该有两个字段。

    您将使用两种数据类型:https://dev.mysql.com/doc/refman/5.7/en/data-types.html

    id - unsigned TINYINT

    TINYINT unsigned是0到255

    genre - VARCHAR(20)

    VARCHAR 20最多20个字符,它们最长的是“纪录片”,所以如果他们添加一个新的,它会给你一些额外的空间。

    打开文件获取内容:https://secure.php.net/manual/en/function.file-get-contents.php

    $filecontents = file_get_contents("u.genre");
    

    现在让我们逐行分割文件:https://secure.php.net/manual/en/function.explode.php

    $genres = explode("\n", $filecontents);
    

    现在我们将使用foreach循环遍历$ genres并再次爆炸:https://secure.php.net/manual/en/control-structures.foreach.php

    foreach ($genres as &$row) {
        list($genre,$id) = explode("|",$row);
        # more here later
    }
    

    现在让我们输出SQL,如果其中一个字段为空,则跳过。

    if ($genre!="" && $id!=="") {
        print "INSERT INTO genre (genre,id) VALUES ($genre,$id);\n";
    }
    

    把它们放在一起......

    <?php
    $filecontents = file_get_contents("u.genre");
    $genres = explode("\n", $filecontents);
    foreach ($genres as &$row) {
        list($genre,$id) = explode("|",$row);
        if ($genre!="" && $id!=="") {
            $sql = "INSERT INTO genre (genre,id) VALUES ($genre,$id);\n";
            print $sql;
            # Insert each into your DB here.
        }
    }
    ?>
    

    保存并从命令行运行它或者将它放在浏览器中没有充分的理由。

    有太多资源显示如何将数据插入MySQL,所以我将其留在此处。每个人的数据库设置都有所不同,因此为我的特定设置编写它对你没有帮助。