Язык r вики. Использование R

На написание данной статьи меня сподвиг следующий топик: В поисках идеального поста, или загадки хабра . Дело в том, что после ознакомления с языком R я крайне искоса смотрю на любые попытки, что-то посчитать в экселе. Но надо признать, что и с R я познакомился лишь неделю назад.

Цель: Собрать средствами языка R данные с любимого HabraHabr"а и провести, собственно то, для чего и был создан язык R, а именно: статистический анализ.

Итак, прочтя этот топик вы узнаете:

  • Как можно использовать R для извлечения данных из Web ресурсов
  • Как преобразовывать данные для последующего анализа
  • Какие ресурсы крайне рекомендуются к прочтению всем желающим познакомиться с R поближе

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

Подготовка

Нам понадобятся следующие ресурсы:

После установки вы должны увидеть что-то типа этого:

В правой нижней панели на вкладке Packages вы можете найти список установленных пакетов. Нам понадобится дополнительно установить следующие:

  • Rcurl - для работы с сетью. Все кто работал с CURL сразу поймет все открывающиеся возможности.
  • XML - пакет для работы с DOM деревом XML документа. Нам понадобится функционал нахождения элементов по xpath
Жмите «Install Packages», выбирайте нужные, а затем выделите их галочкой, чтобы они загрузились в текущее окружение.

Получаем данные

Чтобы получить DOM объект документа полученного из интернета достаточно выполнить следующие строчки:
url<-"http://habrahabr.ru/feed/posts/habred/page10/" cookie<-"Мои сверхсекретные печеньки" html<-getURL(url, cookie=cookie) doc<-htmlParse(html)
Обратите внимание на передаваемые cookie. Если вы захотите повторить эксперемент, то вам надо будет подставить свои cookie, которые получает ваш браузер после авторизации на сайте. Далее нам надо получить интересующие нас данные, а именно:
  • Когда запись была опубликована
  • Сколько было просмотров
  • Сколько человек занесло запись в избранные
  • Сколько было нажатий на +1 и -1 (суммарно)
  • Сколько было +1 нажатий
  • Сколько -1
  • Текущий рейтинг
  • Количество комментариев
Не в даваясь особо в подробности приведу сразу код:
published<-xpathSApply(doc, "//div[@class="published"]", xmlValue) pageviews<-xpathSApply(doc, "//div[@class="pageviews"]", xmlValue) favs<-xpathSApply(doc, "//div[@class="favs_count"]", xmlValue) scoredetailes<-xpathSApply(doc, "//span[@class="score"]", xmlGetAttr, "title") scores<-xpathSApply(doc, "//span[@class="score"]", xmlValue) comments<-xpathSApply(doc, "//span[@class="all"]", xmlValue) hrefs<-xpathSApply(doc, "//a[@class="post_title"]", xmlGetAttr, "href")
Здесь мы использовали поиск элементов и атрибутов с помощью xpath.
Далее крайне рекомендуется сформировать из полученных данных data.frame - это аналог таблиц базы данных. Можно будет делать запросы разного уровня сложности. Иногда диву даешься, как элегантно можно сделать в R ту или иную вещь.
posts<-data.frame(hrefs, published, scoredetailes, scores, pageviews, favs, comments)
После формирования data.frame необходимо будет подправить полученные данные: преобразовать строчки в числа, получить реальную дату в нормальном формате и т.д. Делаем это таким образом:

Posts$comments<-as.numeric(as.character(posts$comments)) posts$scores<-as.numeric(as.character(posts$scores)) posts$favs<-as.numeric(as.character(posts$favs)) posts$pageviews<-as.numeric(as.character(posts$pageviews)) posts$published<-sub(" декабря в ","/12/2012 ",as.character(posts$published)) posts$published<-sub(" ноября в ","/11/2012 ",posts$published) posts$published<-sub(" октября в ","/10/2012 ",posts$published) posts$published<-sub(" сентября в ","/09/2012 ",posts$published) posts$published<-sub("^ ","",posts$published) posts$publishedDate<-as.Date(posts$published, format="%d/%m/%Y %H:%M")

Так же полезно добавить дополнительные поля, которые вычисляются из уже полученных:
scoressplitted<-sapply(strsplit(as.character(posts$scoredetailes), "\\D+", perl=TRUE),unlist) if(class(scoressplitted)=="matrix" && dim(scoressplitted)==4) { scoressplitted<-t(scoressplitted) posts$actions<-as.numeric(as.character(scoressplitted[,1])) posts$plusactions<-as.numeric(as.character(scoressplitted[,2])) posts$minusactions<-as.numeric(as.character(scoressplitted[,3])) } posts$weekDay<-format(posts$publishedDate, "%A")
Здесь мы всем известные сообщения вида «Всего 35: 29 и ↓6» преобразовали в массив данных по тому, сколько вообще было произведено действий, сколько было плюсов и сколько было минусов.

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

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

GetPostsForPages<-function(pages, cookie, sleep=0) { urls<-paste("http://habrahabr.ru/feed/posts/habred/page", pages, "/", sep="") ret<-data.frame() for(url in urls) { ret<-rbind(ret, getPosts(url, cookie)) Sys.sleep(sleep) } return(ret) }
Здесь мы используем системную функцию Sys.sleep, чтобы не устроить случайно хабраэффект самом хабру:)
Данную функцию предлагается использовать следующим образом:
posts<-getPostsForPages(10:100, cookie,5)
Таким образом мы скачиваем все страницы с 10 по 100 с паузой в 5 секунд. Страницы до 10 нам не интересны, так как оценки там еще не видны. После нескольких минут ожидания все наши данные находятся в переменной posts. Рекомендую их тут же сохранить, чтобы каждый раз не беспокоить хабр! Делается это таким образом:
write.csv(posts, file="posts.csv")
А считываем следующим образом:
posts<-read.csv("posts.csv")

Ура! Мы научились получать статистические данные с хабра и сохранять их локально для следующего анализа!

Анализ данных

Этот раздел я оставлю недосказанным. Предлагаю читателю самому поиграться с данными и получить свои долеко идущие выводы. К примеру, попробуйте проанализировать зависимость настроения плюсующих и минусующих в зависимости от дня недели. Приведу лишь 2 интересных вывода, которые я сделал.
Пользователи хабра значительно охотнее плюсуют, чем минусуют.
Это видно по следующему графику. Заметьте, на сколько «облако» минусов равномернее и шире, чем разброс плюсов. Корреляция плюсов от количества просмотров значительно сильнее, чем для минусов. Другими словами: плюсуем не думая, а минусуем за дело!
(Прошу прощения за надписи на графиках: пока не разобрался, как выводить их правильно на русском языке)

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


Как вы можете заметить, есть выраженные пики в районе 0.1, 0.2 и 0.25. Предлагаю читателю самому найти и «назвать» эти классы.
Хочу заметить, что R богата алгоритмами для кластеризации данных, для аппроксимации, для проверки гипотез и т.п.

Полезные ресурсы

Если вы действительно хотите погрузиться в мир R, то рекомендую следующие ссылки. Пожалуйста, поделитесь в комментариях вашими интересными блогами и сайтами на тему R. Есть кто-нибудь пишущий об R на русском?

Хочу рассказать об использовании свободной среды статистического анализа R. Рассматриваю ее как альтернативу статистических пакетов типа SPSS Statistics. К моему глубокому сожалению, она совершенно неизвестна на просторах нашей Родины, а зря. Полагаю, что возможность написания дополнительных процедур статистического анализа на языке S делает систему R полезным инструментом анализа данных.

В весеннем семестре 2010 года мне довелось читать лекции и проводить практические занятия по курсу «Статистический анализ данных» для студентов отделения интеллектуальных систем РГГУ.

Мои студенты предварительно изучали семестровый курс теории вероятностей, покрывающий основы дискретных вероятностных пространств, условные вероятности, теорему Байеса, закон «больших чисел», некоторые сведения о нормальном законе и Центральную предельную теорему.

Лет пять назад я уже проводил занятия по (тогда еще объединенному) семестровому курсу «Основы теории вероятностей и математической статистики», поэтому я расширил свои заметки (выдаваемые перед каждым занятием студентам) по статистике. Сейчас, когда в РГГУ имеется студенческий сервер isdwiki.rsuh.ru отделения, я параллельно выкладываю их на FTP.

Встал вопрос: какую программу использовать, для проведения практических занятий в компьютерном классе? Часто используемый Microsoft Excel был отклонен как из-за проприетарности, так и из-за некорректности реализации некоторых статистических процедур. Об этом можно прочитать, например, в книге А.А.Макарова и Ю.Н.Тюрина «Статистический анализ данных на компьютере». Электронные таблицы Calc из бесплатного офисного пакета Openoffice.org русифицировали так, что мне с трудом удается найти требуемую функцию (их названия еще и сократили отвратительно).

Наиболее часто используется пакет SPSS Statistics. В настоящее время фирма SPSS поглощена фирмой IBM. Среди преимуществ IBM SPSS Statistics выделю:

  • Удобная загрузка данных различных форматов (Excel, SAS, через OLE DB, через ODBC Direct Driver);
  • Наличие как командного языка, так и разветвленной системы меню для прямого доступа к различным процедурам статистического анализа;
  • Графические средства вывода результатов;
  • Встроенный модуль Statistics Coach, интерактивным образом предлагающий адекватный метод анализа.
Недостатками IBM SPSS Statistics на мой взгляд являются:
  • Платность даже для студентов;
  • Необходимость получения (дополнительно оплачиваемых) модулей, содержащих специальные процедуры;
  • Поддержка только 32-разрядных операционных систем Linux, хотя Windows поддерживаются как 32-разрядные, так и 64-разрядные.
В качестве альтернативы я выбрал систему . Эта система начала разрабатываться усилиями Роберта Джентльмена и Росса Ихака на факультете статистики университета Мельбурна в 1995 году. Первые буквы имен авторов определили ее название. Впоследствии к развитию и расширению этой системы подключились ведущие специалисты-статистики.

Достоинствами обсуждаемой системы я считаю:

  • Распространение программы под GNU Public License;
  • Доступность как исходных текстов, так и бинарных модулей в обширной сети репозитариев CRAN (The Comprehensive R Archive Network). Для России - это сервер cran.gis-lab.info ;
  • Наличие установочного пакета под Windows (работает как на 32-х, так и на 64-х разрядной Vista). Случайно выяснилось, что установка не требует прав администратора под Windows XP;
  • Возможность установки из репозитария в Linux (у меня работает на 64-разрядной версии Ubuntu 9.10);
  • Наличие собственного языка программирования статистических процедур R, фактически ставшим стандартом. Он, например, полностью поддерживается новой системой IBM SPSS Statistics Developer;
  • Этот язык является расширением языка S, разработанным в Bell Labs, в настоящее время составляющим основу коммерческой системы S-PLUS. Большинство программ, написанных для S-PLUS, может легко быть исполнено в среде R;
  • Возможность обмена данным с электронными таблицами;
  • Возможность сохранения всей истории вычислений для целей документирования.
К первому занятию были подготовлены CD, на которые были записаны установочные файлы, документация и руководства. О последних скажу подробнее. В CRAN имеются подробные руководства пользователя по установке, языку R (и его подмножеству S), написанию дополнительных статистических процедур, экспорту и импорту данных. В разделе Contributed Documentation имеется большое число публикаций преподавателей-статистиков, использующих этот пакет в учебном процессе. К сожалению, на русском языке ничего нет, хотя, например, есть даже на польском. Из англоязычных книг отмечу «Using R for introductory statistics» профессора Джона Верзани из городского университета Нью-Йорка и «Introduction to the R project for Statistical Computing» профессора Росситера (Голландия) из Международного института Геоинформатики и наблюдений Земли.

Первое занятие было посвящено установке и обучению пользоваться пакетом, знакомство с синтаксисом языка R. В качестве тестовой задачи использовались вычисления интегралов методом Монте-Карло. Вот пример вычисления вероятности с.в. с экспоненциальным распределением с параметром 3 принять значение меньше 0.5 (10000 - число попыток).
> x=runif(10000,0,0.5)
> y=runif(10000,0,3)
> t=y<3*exp(-3*x)
> u=x[t]
> v=y[t]
> plot(u,v)
> i=0.5*3*length(u)/10000

Первые две строчки задают равномерное распределение точек в прямоугольнике x, затем отбираются те точки, которые попали под график экспоненциальной плотности 3*exp(-3*x), функция plot отображает точки в окне графического вывода, наконец, вычисляется искомый интеграл.
Второе занятие было посвящено вычислению описательных статистик (квантилям, медиане, среднему, дисперсии, корреляции и ковариации) и выводу графиков (гистограммы, ящик-с-усами).
В последующих занятиях использовалась библиотека «Rcmdr». Это - графический интерфейс пользователя (GUI) для среды R. Библиотека создается усилиями профессора Джона Фокса из университета McMaster в Канаде.

Установка этой библиотеки производится выполнением команды install.packages(«Rcmdr», dependencies=TRUE) внутри среды R. Если сама среда - интерпретатор языка R, то надстройка «Rcmdr» - это дополнительное окно, снабженное системой меню, содержащей большое число команд, соответствующих стандартным статистическим процедурам. Это особенно удобно для курсов, где главное - научить студента нажимать на кнопочки (к моему сожалению, такие встречаются сейчас все в большем количестве).

Из предыдущего моего курса были расширены заметки к семинарам. Они также доступны через FTP с сайта isdwiki.rsuh.ru. Эти заметки содержали таблицы критических значений, которые использовались для вычислений у доски. В этом году студентам предлагалось решать эти задачи на компьютере, а также проверять таблицы, использовав (нормальные) аппроксимации, также указанные в заметках.

Имелись и некоторые мои промахи. Например, я слишком поздно понял, что Rcmdr позволяет импортировать данные из загруженных пакетов, поэтому относительно большие выборки обрабатывались только на занятиях, посвященных регрессионному анализу. При изложении непараметрических тестов данные студенты вводили руками, используя мои заметки. Другим недостатком, как я сейчас понимаю, было недостаточное число домашних заданий на написание достаточно сложных программ на языке R.

Следует отметить, что на мои занятия ходили несколько студентов старших курсов, а некоторые скачивали материалы лекций и семинаров. Студенты отделения интеллектуальных систем РГГУ получают фундаментальную подготовку по математике и программированию, поэтому использование среды R (вместо электронных таблиц и статистических пакетов с фиксированными статистическими процедурами) представляется мне очень полезным.

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

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

Что необходимо для прохождения
Собственно, язык R (версии 3.2.0 или новее). В качестве среды разработки в видеоуроках будет использоваться RStudio . Впрочем, по желанию можно работать в любой другой IDE или любимом редакторе.

Сертификат
Проходной балл для получения сертификата - 70 баллов из 100. Для сертификата с отличием - 92 .

Who is this course for

Студенты и аспиранты, научные сотрудники, аналитики и исследователи, работающие в области анализа данных

Курс не предполагает знания R или других языков программирования. Однако наличие опыта в обработке данных или знание основных принципов программирования облегчит прохождение уроков. Данный курс хорошо совместим с курсом "Анализ данных в R ". Эти курсы независимы и могут проходиться в любом порядке.

Programming on R. Level 1. Basics

Язык R – самый популярный в мире инструмент статистического анализа данных. Он содержит широчайший спектр возможностей для анализа данных, их визуализации, а также создания документов и веб-приложений. Хотите освоить этот мощный язык под руководством опытного наставника? Приглашаем вас на курс «Программирование на языке R. Уровень 1. Базовые знания» .

Этот курс предназначен для широкого круга специалистов, которым необходимо искать закономерности в большом количестве данных, визуализировать их и строить статистически корректные выводы: социологов, менеджеров клинических испытаний/фармакологов, исследователей (астрономия, физика, биология, генетика, медицина и т.д.), IT-аналитиков, бизнес-аналитиков, финансовых аналитиков, маркетологов. Курс также понравится специалистам, которым не подходит функционал (или платность) / .

На занятиях вы получите основные навыки анализа и визуализации данных в среде R . Большая часть времени отводится практическим заданиям и работе с реальными наборами данных. Вы изучите все новые инструменты работы с данными и научитесь их применять в своей работе.

После курса выдается удостоверение о повышении квалификации центра.

Давайте немного поговорим о языке программирования под названием R. В последнее время вы могли у нас в блогах прочитать статьи о и , тех сферах, где просто необходимо под рукой иметь мощный язык для работы со статистикой и графиками. И R как раз из таких. Новичку в мире программирования буде достаточно непросто в это поверить, но сегодня R уже популярнее SQL, он активно используется в коммерческих организациях, исследовательских и университетах.

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

Что такое язык R, зачем он вам нужен и как его можно использовать с умом, можно узнать из прекрасного Руслана Купцова, который он провёл чуть меньше года назад в рамках GeekWeek-2015.

Книги

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


Интернет-ресурсы

Любой человек, желающий изучить какой-либо язык программирования обязательно должен посетить в поисках знаний два ресурса: официальный сайт его разработчиков и самое крупное онлайн сообщество. Что ж. не будем делать исключение и для R:

Но опять проникшись заботой к тем, кто английский язык выучить ещё не успел, а вот изучить R ну очень хочет, упомянем несколько российских ресурсов:

А пока довершим картину небольшим списком англоязычных, но от этого не менее познавательных сайтов:

CRAN - собственно, место где можно загрузить к себе на компьютер среду разработки R. Кроме того мануалы, примеры и прочее полезное чтиво;

Quick-R - коротко и понятно про статистику, методы её обработки и язык R;

Burns-Stat - про R и про предшественника его S с огромным количеством примеров;

R for Data Science - ещё одна книга от Гаррета Гроулмунда (Garrett Grolemund), переведённая в формат онлайн учебника;

Awesome R - подборка лучшего кода с официального сайта, размещённая на нашем любимом GitHub;

Mran - язык R от Microsoft;

Tutorial R - ещё один ресурс с упорядоченной информацией с официального сайта.

 
Статьи по теме:
Скачать клавиатурный тренажер для детей на русском бесплатно
Основные возможности уникальный альтернативный вариант для расположения рук на клавиатуре; поддержка различных раскладок и языков; звуковые эффекты для музыкального сопровождения работы; специальные уроки, которые помогают запоминать расположение клави
Не работает тачпад: советы и способы их решения
Сенсорная панель ноутбука (также известная как тачпад) является большим преимуществом данного устройства. Она позволяет обходиться без дополнительного оборудования, занимающего место в сумке, а также решает вопрос свободных портов USB. Однако достаточно ч
Конвертер ватт в амперы Что такое мАч
Мощность – это скорость расходования энергии, выраженная в отношении энергии ко времени: 1 Вт = 1 Дж/1 с. Один ватт равен отношению одного джоуля (единице измерения работы) к одной секунде. Практически каждый человек слышал про параметры электричества как
Стамбул - это город превосходных степеней…
Шесть тысяч лет прошло с тех пор, как реки Алибей-су и Кягытхане слились с проливом Босфор после разлома литосферных плит и образовали естественную заводь. Позже она получила название Золотой Рог. Рогом ее назвали, видимо, из-за своей формы. Золотым, по в