scholar_vit: (knot)

У Брэда ДеЛонга интересное наблюдение из комментариев о том, как много людей в статистике перешли на R. По ссылке оттуда любопытная дискуссия о том, почему R оказалась такой успешной, вместе с лекцией Джона Кука (см. видео ниже). Замечательная цитата Бо Каугилла: "Основное достоинство R - она написана статистиками. Основной недостаток R - она написана статистиками".

Про себя могу сказать, что я в последнее время тоже перешел на R. Если пару лет назад я на работе чаще всего писал файлы с расширением .tex, то теперь это, безусловно, .rnw (для непосвященных: это не значит, что я меньше времени провожу в TeXе: .rnw - это TeXовский файл со вставками на R; его пропускают вначале через R, которая проводит вычисления и рисует картинки, а потом через TeX, который верстает отчет).

Одно из последствий успеха R - широкое распространение относительно экзотических методов статистики. Раньше для того, чтобы напустить на данные нейронную сеть, нужно было потратить кучу времени. Теперь написал две строчки на R - и готово. Это, конечно, очень удобно. С другой стороны, это снижение порога входа неизбежно приводит к параллельному снижению уровня. Аналогичный процесс произошел с дискуссиями в Интернете. Когда-то, чтобы что-то поместить в сети, нужно было более или менее разбираться в том, как работает компьютер, модем, коммуникационные программы и т.д. Сейчас все это от пользователя уже не требуется: сравните интерфейс rn и фейсбука. Что привело к демократизации системы - но и к известному изменению среды. Утрачен элитный статус - со всеми его плюсами и минусами.

Впрочем, когда-то и читать умели далеко не все...

Read more... )
scholar_vit: (knot)

Несколько комментаторов предыдущей записи отметили, что из-за грамматических особенностей русского языка формы одного и того же слова попадают в разные категории: Россия, России, Россией подсчитываются отдельно. Полный грамматический анализ — штука сложная. При невнимательности получится как в известном анекдоте про самые частотные глаголы у Михаила Щербаков: "мыть" и "какать". Но есть более простая операция стемминга, она же обрезание, когда у слов отрезают аффиксы. Результат, возможно, более информативен - но для русского языка, увы, менее нагляден.

Пакет SnowballC для R умеет делать обрезание на датском, голландском, английском, финском, французском, немецком, венгерском, итальянском, норвежском, португальском, румынском, русском, испанском, шведском и турецком языках.

Вот программа для расчета облака с обрезанием:

library("tm")
library("wordcloud")
putin <- Corpus(DirSource(pattern="putin.txt"))
putin <- tm_map(putin,content_transformer(tolower))
putin <- tm_map(putin,removePunctuation)
putin <- tm_map(putin,stripWhitespace)
putin <- tm_map(putin,removeWords,stopwords("russian"))
putin <- tm_map(putin, stemDocument, language="russian")
putin <- tm_map(putin,removeWords,c("владимир",
                                    "владимирович",
                                    "путин",
                                    "мситтел",
                                    "кклеймён",
                                    "клеймён",
                                    "впутин",
                                    "это",
                                    "вопрос",
                                    "ещё",
                                    "очен",
                                    "котор"))

wordcloud(putin, max.words=200,
          scale=c(5,0.5),
          random.order=FALSE,
          use.r.layout=FALSE,
          colors=brewer.pal(8, "Dark2"))

А вот результат:

scholar_vit: (knot)

[livejournal.com profile] peresedov задает вопрос, чего не было в "Прямой линии" Путина. Это вопрос, конечно, интересный, но методически правильнее, на мой взгляд, было бы спросить, что там было.

В качестве упражнения я нарисовал облако слов стенограммы. В нее входили как вопросы, так и ответы. Я убрал несколько очевидных слов вроде "который", предлогов и союзов. Вот текст программы:

library("tm")
library("wordcloud")
putin <- Corpus(DirSource(pattern="putin.txt"))
putin <- tm_map(putin,content_transformer(tolower))
putin <- tm_map(putin,removePunctuation)
putin <- tm_map(putin,stripWhitespace)
putin <- tm_map(putin,removeWords,stopwords("russian"))
putin <- tm_map(putin,removeWords,c("владимир",
                                    "владимиром",
                                    "владимирович",
                                    "путиным",
                                    "путин",
                                    "линия",
                                    "прямая",
                                    "мситтель",
                                    "кклеймёнов",
                                    "клеймёнов",
                                    "впутин",
                                    "мситтель:",
                                    "это",
                                    "вопрос",
                                    "ещё",
                                    "очень",
                                    "который",
                                    "которая",
                                    "которые",
                                    "которое"))
wordcloud(putin, max.words=200,
          scale=c(5,0.5),
          random.order=FALSE,
          use.r.layout=FALSE,
          colors=brewer.pal(8, "Dark2"))

А вот что у меня получилось:

Update: Облако Путина после обрезания.

scholar_vit: (knot)

Вчера обновил на своих компьютерах R. Это такая очень удобная программа для разных статистических вычислений; в последнее время она стала одним из моих основных инструментов, вместе с пакетом knitr для автоматической генерации отчетов. Я использовал этот пакет для написания этой заметки.

Среди прочего в дистрибутив R входит больше ста разных наборов данных для тестирования, от количества авиапассажиров за каждый месяц с 1949 по 1960 год до роста и веса американских женщин в семидесятые. Один из этих наборов — статистика выживаемости на "Титанике". Это четырехмерный массив с четырьмя категориями: класс, пол, возраст, выжил человек или нет. Из него легко узнать, например, были ли больше шансы выжить у взрослых или детей:

Read more... )
scholar_vit: (Default)

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

Пошаговое прохождение показало, что все начинается с того, что Sweave выдает замечательное предупреждение:

Warning: '01_preparation.rnw' has unknown encoding: assuming Latin-1
Но исходный файл вовсе не в кодировке Latin-1: он обрабатывает полученные из России по-русски данные, и в нем есть процедуры типа
RussianToLevel <-  function(x) {
  x <- as.character(x)
  if (grepl("^нет",x)) return(1)
  if (grepl("^чуть",x)) return(2)
  if (grepl("^незнач",x)) return(3)
  if (grepl("^средн",x)) return(4)
  if (grepl("^сильн",x)) return(5)
  if (grepl("^очень",x)) return(6)
  return(NA)
}
В файле они превратились в такое:
RussianToLevel <-  function(x) {
  x <- as.character(x)
NA
NA
NA
NA
NA
NA
  return(NA)
}
Неудивительно, что на следующем шаге все вылетает.

Ок, вручную понабирал команды R, получил картинки, послал.

Затем стал думать, что же случилось. С момента, когда я делал эти картинки в прошлый раз, успел обновить R.

Почитал логи программистов. Замечательная запись:

[CHANGES IN R VERSION 2.13.2:] Sweave now knows about a few more Windows' encodings (including cp1250 and cp1257) and some inputenx encodings such as koi8-r.

Это случай так называемого вранья. На самом деле все в точности наоборот: раньше Sweave знала про эти кодировки, а именно в версии 2.13.2 перестала их извлекать из файла. Смена inputenc на inputenx не дала результатов.

Ещё немного экспериментов показало, что если указать кодировку явно, Sweave милостиво соглашается работать.

В итоге все вылечилось заменой в Makefile строчек

%.tex: %.rnw
    R CMD Sweave $<

%.R: %.rnw
   R CMD Stangle $<
на строчки
%.tex: %.rnw
    echo "Sweave ('$<', encoding='koi8-r')" | R --slave

%.R: %.rnw
   echo "Stangle ('$<', encoding='koi8-r')" | R --slave

И на что я, спрашивается, потратил день?!

Програм-м-м-мисты...

Profile

scholar_vit: (Default)
scholar_vit

January 2019

S M T W T F S
  12345
678 9101112
13141516171819
20212223242526
2728293031  

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 23rd, 2025 10:04 am
Powered by Dreamwidth Studios