2012-03-15 27 views
0

我有问题,读一个中等大小的数据集为R.读的Audioscrobbler数据为R

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

该数据集似乎格式不正确,我不知道该怎么做。

我尝试这样做:

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

但是,它返回一个列表,不能很好地分离数据和它说“阅读18996个记录”,当我怀疑有更多的记录(虽然我不知道,因为我无法读取数据!)。

任何想法?

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

回答

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”之类的艺术家。

如果任何人都可以提出清洁该数据的有效方式,我很想学习吧!这似乎是有用的知道。

+0

不要忘记嵌入式回车符(CONTROL-M的或ASCII X0D)在一些艺术家的名字,它们比行结尾不同的。 – 2012-03-16 15:35:29

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的,第二个尝试拆分的只是第一个选项卡(但没有任何后续的)。

它并不快。

+0

我使用Windows和它没有工作。我用setwd先设置文件的路径。然后我运行了建议的代码。 ř加载的Tcl/Tk,然后说,它关闭不使用的连接:(C:\ Windows \ System32下\ cmd.exe的/ C SED artist_data.txt -e的\ X0D !!克!')。有任何想法吗? – 2012-03-16 13:23:07

+0

当我检查它时,它没有正常运行(得到错误的行数)。 mrdwab的回答http://stackoverflow.com/a/9734026/892313描述了许多可行的问题和策略。 – 2012-03-16 15:33:55