Вложений: 1
Немного об анализе текста в R. Нижеприведенный код разбирает текст (вектор mydata содержит название тем диссертаций) на слова, выделяет корни, строит частотную матрицу слов и выводит в файл картинку.
Версия с перекодировкой в UTF8. Работает под Windows и MacOS. Код:
plot.wordcloud<-function(mydata) { Во вложении находится архив, содержащий данные о всех диссертациях, которые находятся на сайте ВАК с 2011 года. При желании, с этим файлом можно делать что угодно. Загрузка в R Код:
# Для MacOS и Linux Код:
plot.wordcloud(subset(dissers,substr(Nspec,1,2)=="08")$diser) |
Подправил код, указал в явном виде русский в команде Corpus. Иначе сжирало буквы "ч" и "я"
Добавлено через 1 час 11 минут А вот несколько иная задача. Нас интересует конкретное слово -- "оптимизация" . Ну, неравнодушен я к нему. Будем отбирать специальности. Подвох в том, что синтаксический разбор тут делать нельзя, но можно воспользоваться несколькими недокументированными трюками. Код:
x<-subset(dissers,grepl("оптимизац",tolower(diser)))$Nspec Результат забавный, никогда не думал, что оптимизацией занимается медицина |
Здравствуйте!
Подскажите, пожалуйста, из-за чего это может быть? В файле Code.R скрипт Hogfather'а без изменений Скрытый текст
plot.wordcloud<-function(mydata) {
library(tm) library(wordcloud) library(RColorBrewer) library(SnowballC) xkcd.corpus <- Corpus(DataframeSource(data.frame(mydata)),readerC ontrol = list(reader = readPlain, language = "ru")) xkcd.corpus <- tm_map(xkcd.corpus, removePunctuation) xkcd.corpus<- tm_map(xkcd.corpus, removeWords, stopwords("russian")) xkcd.corpus <- tm_map(xkcd.corpus, stemDocument, language = "russian") xkcd.corpus <- tm_map(xkcd.corpus, stripWhitespace) xkcd.corpus <- tm_map(xkcd.corpus, tolower) tdm <- TermDocumentMatrix(xkcd.corpus) m <- as.matrix(tdm) v <- sort(rowSums(m),decreasing=TRUE) d <- data.frame(word = names(v),freq=v) pal <- brewer.pal(9, "BuGn") pal <- pal[-(1:2)] pal2 <- brewer.pal(8,"Dark2") png("wordcloud.png", width=1000,height=1000) wordcloud(d$word,d$freq, scale=c(8,.2),min.freq=3, max.words=Inf, random.order=FALSE, rot.per=.15, colors=pal2) dev.off() } Результат запуска в R ниже Скрытый текст
Введите 'demo()' для запуска демонстрационных программ, 'help()' -- для получения справки, 'help.start()' -- для доступа к справке через браузер. Введите 'q()', чтобы выйти из R. > source("G:\\Program_Files\\R-3.0.2\\dissers\\code.R") > dissers<-read.csv2("G:\\Program_Files\\R-3.0.2\\dissers\\dissers.csv",header=T,fileEncoding ="cp1251",encoding="cp1251") Предупреждение In read.table(file = file, header = header, sep = sep, quote = quote, : incomplete final line found by readTableHeader on 'G:\Program_Files\R-3.0.2\dissers\dissers.csv' > plot.wordcloud(subset(dissers,substr(Nspec,1,2)==" 08")$diser) Loading required package: Rcpp Loading required package: RColorBrewer Ошибка в .Source(readPlain, encoding, nrow(x), FALSE, row.names(x), 0, : vectorized sources must have positive length > dissers<-read.csv2("G:\\Program_Files\\R-3.0.2\\dissers\\dissers.csv",header=T) > plot.wordcloud(subset(dissers,substr(Nspec,1,2)==" 08")$diser) null device 1 > dissers<-read.csv2("G:\\Program_Files\\R-3.0.2\\dissers\\dissers.csv") > plot.wordcloud(subset(dissers,substr(Nspec,1,2)==" 08")$diser) null device 1 > Кодировка файла Code.R -- cp1251. И никаких картинок в папке dissers (Об этом и говорит null device 1 Так?). Работает скрипт порядка 5 минут -- так и должно быть? |
Цитата:
Код:
dissers<-read.csv2("dissers.csv",header=T) Код:
xkcd.corpus <- tm_map(xkcd.corpus, removePunctuation) И, что самое страшное, глючит вот эта команда Код:
tdm <- TermDocumentMatrix(xkcd.corpus) Добавлено через 11 минут Цитата:
Добавлено через 3 часа 36 минут Итак, только в нашем цирке: TermDocumentMatrix который работает под Windows. В данном примере анализируются диссертации по двум специальностям 05.02.22 и 05.02.23, строится общее облако из всех терминов (объединение), а также анализируется, какой термин где что больше используется, а также пересечение терминов. Код:
library(tm) Добавлено через 18 минут Код:
# Дендрограмма Добавлено через 32 минуты Своды документов можно объединять командой c() Код:
# Расширяем нашу коллекцию Добавлено через 6 часов 56 минут Поскольку просто так потратить кучу времени на изучение пакета было бы обидно, пишу статью в нашу вузовскую "Мурзилку" по мотивам анализа данных. Коню понятно, что "играть" на форуме -- это одно, а более-менее серьезное исследование -- это другое, то возник вопрос, что делать с дубликатами защит. А они есть и искажают картину качественно и количественно. Так вот, в R все давно придумано до нас и не надо подключать никаких дополнительных пакетов. Есть чудесная команда duplicated, которая возвращает логический вектор. Вызов duplicated(dissers[,c(1,3,5)], fromLast = TRUE) проверяет наличие строк, в которых дублированы специальность, вид защиты и фамилия. Логика следующая: дубликаты, в большинстве случаев, возникают когда переносят защиту или когда есть ошибка в названии АР. Обратите внимание: убрано 1185 дублирующихся записей. Теперь анализ проводить гораздо корректнее. Напоминаю, что команда dim выводит размер матрицы или таблицы данных (число строк, число столбцов). По сути, нужна только команда dissers<-dissers[!duplicated(dissers[,c(1,3,5)], fromLast = TRUE),] Код:
> dim(dissers) Трансформация данных и построение графика Код:
library(reshape2) Добавлено через 11 часов 17 минут Продолжаем издеваться над теми же данными. А вот пример диаграммы Венна. Очень меня интересуют слова-заглушки: инновации, оптимизация, механизм и т.п. Сказано -- сделано. Строим табличку совпаданий, а затем строим диаграмму. Код:
library(gplots) Радуемся "оптимизации эффективности качества" и т.п. Добавлено через 13 часов 28 минут Следующий пример визуализации данных несколько из другой области. Чисто экономические заморочки -- бридж диаграмма, также называемая waterfall chart. Так вот, в R есть и она. Диаграмма может быть полезна визуализации экономического эффекта с разбивкой по факторам. Можно строить в классическом виде, а можно как в журнале The Economist. Собственно, не растекаясь мысью по древу, код и картинки. Код:
> library(waterfall) Обычный график
http://aspirantura.spb.ru/forum/pict...pictureid=1449 Также можно воспользоваться пакетом ggplot2 и нарисовать графики с использованием его инструментов. Подробности можно посмотреть вот тут. Добавлено через 5 часов 47 минут Еще немного визуализации нечисловых данных. Анализируем пропорции авторефератов на сайте ВАК по экономике. Код:
library(reshape2) http://aspirantura.spb.ru/forum/pict...pictureid=1450 Возможности пакета vsd этим не исчепывается. Подробнее в документации к пакету. |
Цитата:
|
Цитата:
|
Дмитрий В., сейчас пересобираю базу: гружу по новой, но со ссылками на страницы с АР. Потом напишу скрипт, который загрузит в эту же таблицу ссылки на АР, а также информацию о диссоветах и отрасли наук, а потом уже скрипт, который скачивает АР по заданному вектору ссылок в рабочий каталог. Вот этот последний скрипт выложу сюда, поскольку АР скачивать по ключевым словам и специальностям автоматом дело хорошее и нужное.
|
Hogfather, интересно должно получиться, я думаю.
|
Вложений: 1
Еще немного о работе с текстами. Берем послания к федеральному собранию за последние 4 года и рисуем облако. Данный пример показывает, как удобно грузятся данные из текста в UTF-8 в заданном каталоге.Теоретически, R также читает doc и pdf, но через внешние конвертеры в txt.
Код:
library(tm) Исходные данные во вложении, так что экспериментируйте на здоровье. Самые распространенные слова в посланиях. Код:
> findFreqTerms(tdm, 50) Код:
> findAssocs(tdm,"стратегическ",0.98) |
Hogfather,
Цитата:
|
Текущее время: 04:25. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
© 2001—2024, «Аспирантура. Портал аспирантов»