如何将 UTF-8 数据从 Movielens 导入 MySql。
我从 http://grouplens.org/datasets/movielens/ 获取数据为了我的推荐系统论文目的,我只想要 100K 和 Tag Gnome 数据。
我一直在谷歌和这个论坛上搜索,但我没有找到任何关于将这些文件导入 MySQl 的信息。我自己,目前使用 PhpMyAdmin 来管理 MySQL,所以如果有人知道如何轻松地将这些文件导入 MySQL。
如果你们推荐我使用 php 一个一个地迭代它,我很好,但请向我解释代码。
最佳答案
您需要编写一些自定义代码以将他们的所有数据导入 MySQL。 Stack Overflow 有史以来最愚蠢的答案,对吧?
因此他们提供了一组平面文件,每个文件都在 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
简而言之:
- 在 MySQL 中创建自己的数据库和表。
- 以编程方式打开文件并将每一行解析为 SQL。
- 将 SQL 导入 MySQL。
- ???
- 利润!
是的,我知道我还没有真正告诉你任何事情,让我们做一个,你可以做其他的。
我会做 u.genre,因为我很懒,而且很容易。
制作一个新表格,我假设你知道如何制作表格等。
u.genre 有两个东西:流派和 id。
unknown|0
Action|1
...etc...
所以你的表应该有两个字段。
您将使用两种数据类型:https://dev.mysql.com/doc/refman/5.7/en/data-types.html
id - 未签名的 TINYINT
TINYINT 无符号是 0 到 255
类型 - VARCHAR(20)
VARCHAR 20 最多 20 个字符,最长的是“Documentary”,因此如果他们添加一个新字符,将为您提供一些额外的空间。
打开文件获取内容: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 中插入数据的资源太多了,所以我先讲到这里。每个人的数据库设置都有些不同,因此针对我的特定设置编写它对您没有帮助。
关于php - 如何将Movielens数据导入Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24603503/