将Audioscrobbler数据读入R

时间:2012-03-15 16:58:10

标签: r

我在将中等大小的数据集读入R时遇到了问题。

数据集是由Audioscrobbler发布的数据库,现在与Last.fm合并,用户可以听听音乐。数据集可用here,它有三个数据集:主要(和更大)数据集,用户ID,艺术家ID以及用户收听给定艺术家的次数。第二个列有两列:艺术家ID和艺术家的名字。这是我遇到问题的数据集。

数据集似乎格式不正确,我不知道如何阅读它。

我试过了:

test <- scan("artist_data.txt", what=list("numeric", "character"), fill=T)

然而,它会返回一个列表,数据分离不清楚,当我怀疑有更多记录时,它会显示&#34;读取18996条记录&#34;(虽然我不确定,因为我可以&# 39;读取数据!)。

有什么想法吗?

很抱歉没有给出一个简单的可重复的例子,但由于我无法读取数据,我不知道如何给出一个可重复的例子(我知道这会让你们很难给出答案。但你可以下载数据集,虽然可能需要一些时间。再次抱歉)。

2 个答案:

答案 0 :(得分:2)

此数据集完全混乱!

一些问题是(对于能够回答这个问题的更有野心或知识渊博的人):

  • 艺术家姓名中的奇怪字符和符号(当您阅读文件时,您需要使用encoding="UTF-8"
  • 有些项目甚至从右向左阅读(不知道如何解决这个问题!)
  • 其中一些艺术家名称中包含实际标签
  • 其中一些项目的名称中包含“\ t”,因此如果没有先搜索并替换所有这些内容,很难进行基本搜索
  • 一些艺术家名字在多行上(导致只有艺术家姓名的最后一部分的行)(并且,是的,自动换行是关闭的)

我的建议是首先使用优秀的文本编辑器进行大量清理(我使用SciTE没有任何问题)。我必须做的一些基本的清理工作,包括删除额外的标签(应该只有一个标签分隔艺术家ID和艺术家名称),使用一些正则表达式删除没有的行从数字开始,并确保所有行结尾都相同(源文件在某些​​位置具有不同的行结尾)。

在那之后,你最好的选择可能是加载数据,找到问题行(R应该在遇到错误时告诉你),在文本编辑器中修复它们,重新加载数据,找到问题行......直到你得到没有错误,使用:

artist.data = read.delim("artist_data.txt", header=F, sep="\t", encoding="UTF-8")

我实际上能够在Gnumeric中打开我的半清理文本文件,在按升序排序后我能够发现更多问题,但我认为不需要。

即使在完成所有这些操作之后,您的数据集仍然会变得一团糟,只是因为由于标签管理不佳而未能在Audioscrobbler数据库中正确记录所有艺术家名称。因此,你可能会有艺术家,如“02Nine ihch Nalis-Heard like”。

如果有人能提出有效的方法来清理这些数据,我很乐意学习它!看来知道它会很有用。

答案 1 :(得分:0)

这应该(可能)有效:

ad <- readLines(pipe("sed artist_data.txt -e 's!\\x0D!!g'", open="rb"))
library("gsubfn")
addf <- strapply(ad, "^([^\\t]*)\\t(.*)$", c, simplify=rbind)

第一部分确实处理嵌入式控件-M,第二部分尝试仅拆分第一个选项卡(但不包括任何后续选项卡)。

一点也不快。