чтение данных Audioscrobbler в R - PullRequest
0 голосов
/ 15 марта 2012

У меня проблемы с чтением набора данных среднего размера в R.

Набор данных - это база данных, опубликованная Audioscrobbler, теперь объединенная с Last.fm, о которой слушали пользователи музыки.Набор данных доступен здесь и содержит три набора данных: основной (и больший) с идентификатором пользователя, идентификатором исполнителя и количеством прослушиваний пользователем данного исполнителя.Второй имеет две колонки: идентификатор исполнителя и имя исполнителя.Это набор данных, с которым у меня проблемы.

Набор данных, похоже, плохо отформатирован, и я не знаю, что делать, чтобы его прочитать.

Я пробовал это:

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

Тем не менее, он возвращает список с плохо разделенными данными и говорит «Чтение записей 18996», когда я подозреваю, что есть больше записей (хотя я не уверен, так как не могу прочитатьdata!).

Есть идеи?

Извините, что не приводил простой воспроизводимый пример, но так как я не могу прочитать данные, я не знаю, как привести воспроизводимый пример (и я знаю, что вам, ребята, будет трудно дать ответ. Но вы можете загрузить набор данных, хотя это может занять некоторое время. Снова извините).

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Этот набор данных - полный беспорядок!

Вот некоторые из проблем (для тех, кто более амбициозен или осведомлен, кто может ответить на этот вопрос):

  • странные символы и символы в именах артистов (вам нужно будет использовать encoding="UTF-8" при чтении файла в)
  • некоторые элементы читаются справа налево (не знаю, как это исправить!)
  • В некоторых именах артистов есть вкладки
  • у некоторых элементов в именах есть "\ t", что затрудняет обычный поиск без предварительного поиска и замены всех этих
  • некоторые имена исполнителей находятся более чем в одной строке (что приводит к строке, в которой есть только последняя часть имени исполнителя) (и, да, перенос по словам отключен)

Мое предложение состоит в том, чтобы сначала много чего почистить с помощью хорошего текстового редактора (я использовал SciTE без проблем). Некоторые из основных очисток, которые мне пришлось сделать, чтобы загрузить весь файл, включали удаление дополнительных вкладок (должна быть только одна вкладка, разделяющая идентификатор исполнителя и имя исполнителя) с использованием некоторых регулярных выражений для удаления строк, которые не начните с цифры и убедитесь, что все окончания строк были одинаковыми (исходный файл имеет разные окончания строк в определенных местах).

После этого вам лучше всего загружать данные, находить проблемные строки (R должен сообщить вам, когда обнаружит ошибку), исправлять их в текстовом редакторе, перезагружать данные, находить проблемные строки ... пока вы не получите без ошибок, используя:

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

Мне удалось открыть свой полуочищенный текстовый файл в Gnumeric, где я смог обнаружить еще несколько проблем после сортировки строк в порядке возрастания, но я не думаю, что это необходимо.

Даже после всего этого ваш набор данных будет все еще беспорядочным, хотя бы потому, что не все имена исполнителей были правильно записаны в базе данных Audioscrobbler из-за плохого управления тегами. Таким образом, у вас, скорее всего, будут исполнители типа «02Nine ihch Nalis-Heard like».

Если кто-нибудь может предложить эффективный способ очистки этих данных, я бы с удовольствием их изучил! Кажется, это было бы полезно знать.

0 голосов
/ 16 марта 2012

Это должно (может) работать:

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

Первая часть заботится о встроенных элементах управления-M, а вторая пытается разделить только первую вкладку (но не любые последующие).

Это совсем не быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...