2012-03-15 54 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