Язык r использование в играх. Язык R - стандарт для обработки данных

Язык r использование в играх. Язык R - стандарт для обработки данных

16.09.2023

]. «Пролетарий умственного труда». По образованию физик. Тружусь на ниве обработки медицинской и биологической информации 30+ лет.
В R работаю ровно 10 лет, мигрировав на него после 15 лет плотного сотрудничества с Matlab. Первопричиной миграции на другую рабочую платформу послужила моя собственная физическая миграция на противоположный край Земли в Окланд, Новая Зеландия. Здесь жизнь с первых дней толкнула меня в объятия R, о чем мне еще не приходилось жалеть.

Все чаще наблюдаю вспышки интереса к R в профессиональном ру.нете. Ну вот и на этом уважаемом ресурсе появляются статьи про него. Далее под катом моя первая попытка русскоязычного введения в R - первая (словесная) часть презентации, которую я делал для коллег факультета Animal Science, Iova State University три года назад.
(в сторону: а как, оказывется, трудно себя переводить...)


В этом посте

  • Что такое R
  • Откуда он взялся
  • За что я его люблю
  • Мифы и правда

Что такое R

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

S - язык, написанный статистиками для статистиков. по определению автора Джона Чамберса. Язык с момента его появления был очень хорошо принят и протестирован поколениями весьма придирчивых пользователей-статистиков. Можно считать, что он достаточно широко известен и принят в мировом статистическом сообществе. На языке S реализованы и до сих пор эксплуатируются ряд критических эпидемиологических, экологических и финансовых моделей по всему миру и во многих отраслях. Как язык с точки зрения меня, как «пишущего пользователя», S представляет собой весьма приятную альтернативу языку SAS .

Из моего собственного опыта - Знакомство и первые уроки S я сам получил в начале 90-х от экспертов-статистиков ВОЗ, с которыми пересекался по научным исследованиям того времени.

По многим оценкам R (как по мне - так и не сильно преувеличенных) - один из самых успешных проектов опенсорса, распространяется свободно с десятков зеркал по всему миру по стандартам лицензий GNU.
Авторы отвечают категорическим отказом на все предложения по коммерциализации проекта, хотя на сегодняшний день есть основание предполагать, что количество установленных копий R в мире превышает совокупное количество копий всех остальных систем статистического анализа.

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

Откуда взялся S и какое это имеет отношение к R

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

Лаборатории Белла (ака Bell Labs, AT&T Bell Labaratories) достаточно известны в истории науки и техники, и АйТи в частности. Статистические исследования там всегда были поставлены весьма серьезно и также серьезно поддерживались всеми доступными компьютерными средствами (читай - тоннами фортрановского и лисповского кода).

То, что потом стало языком S, возникло в 70-х по инициативе и под руководством Джона Чамберса (John Chambers), как набор скриптов, облегчающих «скармливание» данных фортрановскому коду. Т.е. во главу угла ставилась задача интерактивной манипуляции данными, компактность, приятность в написании и читаемость кода и получения приличного вывода на разнообразные устройства таблиц и графиков.

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

С 1984 года язык обрел имя, свою собственную «Библию» (издана книга Чамберса and Beckers: S: An Interactive Environment for Data Analysis and Graphics ), стал по умолчанию содержать практически полный «джентельменский набор» статистика и «вероятностника» - распредления, генераторы случайных чисел, статистические тесты, многие стандартные статистические анализы, работы с матрицами и пр., не говоря уже о развитой системе научной графики. Самое главное - он стал доступен для пользователей по вему миру за весьма умеренную цену.

В 1988 (издана еще одна книга The New S Langugage ) - модифицирован с применением ООП, все стало объектами с весьма разумными значениями по умолчанию, доступностью для модификации, элементами самодукоментирования и пр. и пр.

В это же время были лабораториями опубликованы исходники и «белл-лабовский» S стал бесплатным для студентов и для использования в научных целях. Это все как-то было связано с «раскулачиванием» AT&T, но меня уже эти подробности не сильно интересовали.

Существовали и, наверное, все еще существуют коммерческие реализация языка S . Я сталкивался с S-Plus и S2000 . Они в разное время поддерживались разными компаниями, в основном, жили (живут?) за счет поддержки ранее созданных на S приложений. В этих пост-белловских версиях S появилась новая версия ООП-движка, но для чистого пользователя это прошло почти бескровно в плане совместимости исторического кода.

R - единственная некоммерческая полностью независимая (от исходной Белловской) реализация языка S .

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

А теперь R

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

В случае с R таких людей трое.
Про Джона Чамберса я уже сказал.

Росс Ихака (Ross Ihaka) - студент, а потом научный сотрудник факультета статистики Оклендского университета темой своей диссертации (которая выполнялась в MIT, USA) выбрал исследование возможности построения виртуальной машины (VM) для статистических языков программирования. В качестве промежуточного языка был выбран Lisp (Common Lisp, CL ) и на нем реализован прототип VM, «понимающий» небольшие подмножества из SAS и S .
Дорабатывать диссертацию Росс вернулся в Окланд, где вскорости встретил Роберта Джентельменв и увлекся проектом R.
Диссертацию Росс так и не защитил, но уже имеет ученую степень от нескольких университетов «по совокупности заслуг». В прошлом году ему было присвоено звание и он получил должность Associate Professor (доцент) в своем родном университете.

Роберт Джентелмен (Robert Gentleman) - еще один статистик со страстью к программированию, родом из Канады, будучи в Оклендском университете на стажировке (он тогда работал в Австралии), предложил Россу «написать какой-нибудь язычок».
Согласно легенде, которую я сам слышал от этих «отцов-основателей» всего чуть ли не за месяц они в порыве безумного энтузиазма переписали на CL практически все команды S , включая мощную библиотеку линейного моделирования.

Вычислительным движком R , следуя традициям прототипа, была выбрана известная, общепризнанная и бесплатная библиотека BLAS , (с возможностью использования ATLAS и пр. с тем же интерфейсом).
Пол Murrel, один из из ближайших друзей Росса и также сотрудник Окландского универа расстарался и написал (кажется, на С) с нуля графический движок, полностью воспроизводящий функциональность такового в S .

В результате получился бесплатный полнофункциональный пакетик, моментально получивший место в учебном процессе Окланлского университета, полностью соответствующий описаниям в очень подробных и качественных книгах Чамберса, которые по традиции издавались в мягких обложках и среднего качества печати, зато были дешевы и доступны.
Несколько групп-активистов GNU-шного (например GIS) движения приняли R в качестве платформы для научных вычислений.

Но поистине широчайшую известность R приобрел в биоинформатике, когда один из «отцов» Роберт Джентельмен, вовлеченный в то время в работы фирмы Affimmetrix , продублировал всю функциональность коммерческого софта фирмы и запустил (ну не один, конечно) опенсорсный проект Bioconductor . В настоящее время Bioconductor является безусловным лидером биоинформатического опенсорса для всех "-омиксов" (genomics, proteomics, metabolomics etc.).

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

Круг замкнулся, когда вышедший на пенсию Чамберс, создатель языка S , вошел на правах полноправного члена в группу активных разработчиков R .

За что я его люблю (список)

  1. Интерактивность, «Программирование с данными» - мой любимый стиль работы
  2. Изящный (на любителя) язык - люблю списки, data frames, функциональное программирование и лямбда-функции (а-la)ю Свобода самовыражения: одну и ту же задачу можно решить десятью способами (смягчает ощущение рутины)
  3. «Трезво смотрит на этот мир» - редко «падает» или кого-нить «подвешивает», логичные операции с пропущенными данными, обработка ошибок во время выполнения (try-error), легкий обмен с системой на уровне стандартного I/O и пр.
  4. Полный набор готовых к употреблению статистических процедур
  5. Хорошо документирован и хорошо сопровождается - совместимость, преемственность и т.п.
  6. Собрал вокруг себя по-человечески приятное профессиональное сообщество (форумы, конференции пользователей и пр.)
  7. Хорошо докуметированный интерфейс для внешних библиотек и функций на чем угодно - Фортран, С, Java. Отсюда море хорошо документированных библиотек по всем аспектам статистики и обработки данных практически во всех сферах науки, но с основным упором на биоинформатику/биостатистику; все регулярно и корректно обновляется, если есть на то авторская воля
  8. Отсутствие обязательного GUI в «базовой комплектации» - Ну не «мышиный» я человек!
Вне списка: Мне просто приятно, что мой основной рабочий инструмент имеет… душу.
Что я, на самом деле, и пытаюсь показать в своей статье.

Для чего и как я его использую (примеры)

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

Мифы и правда

R медленный
R - «тонкий», для вычислений использует blas/lapack/atlas библиотеки, попробуйте написать что-нибудь быстрее этих старых добры фортрановских (зачастую) «рабочих лошадок». Все критичные функции, как правило, используют векторные операции и реализованы на С .
R нерационально использует вычислительные ресурсы, в частности - память
Да, разработчики признают такой грех. Но рабочее время специалиста сейчас всяко дороже «железа». Выгрузите из современного рабочего компа игрушки и с большинством реальных наборов данных у вас с R проблем не будет.
Бесплатный софт не может быть надежным
Может: Fortran, Linux, C, Lisp, Java etc.
Вместо Эпилога
Как сказано выше, пост ниже является фактически переводом моей презентации для достаточно специфичесуой целевой аудитории, и я вкратце опишу эту аудиторию.

Многим «чистым» АйТи с такими людьми придется встретиться, поскольку производство продуктов питания по привлечению капитала и генерации прибылей уже давно соревнуется с нефтью и прочими энергоносителями. А емкость биоинформатического рынка при медицине и фармакологии ограничена, как ни крути.

Итак, моя аудитория - люди, с базовым образованием в генетике и селекции, ветеринарии, реже - биологии (преимущественно - молекулярной). Дядьки и тетки (последних больше), лет по 20-30-… программирующие (!) на FORTRANe или VB , лихо управляющиеся с excel-таблицами в 100к строк/столбцов и периодически «роняющие» своими задачами (и своим программированием) свой вычислительный линуксовый 500+ядерный кластер 12Тб общей памяти и время от времени требующие расширения дисковой памяти очередным десятком терабайт.

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

Данные - таблицы данных от единиц до десятков тысяч строк, включающие иногда 1-5 колонок с фенотипами, но все чаще - десятки или сотни «Ка» столбцов переменных, слабокореллирующих между собой и с фенотипами.

Ну да, еще у них есть «хорошая традиция» расматривать все в аспекте родственных связей (генетика, как-никак). Родственные связи традиционно представлены в виде матрицы «родственных связей» (pedigree) размерами, например 40 000 х 40 000 (это если 40 000 животных). Ну или (пока, к счастью, только в проекте) 20 000 000 х 20 000 000 - это чтобы «охватить» единой моделью все 20 млн. исторических животных, имеющихся в базе данных (DB2 , если кому интересно, и даже Сobol еще «выпилили» не отовсюду...)

По столам, заваленным литературой по (одновременно) Fortran, Java, C#, Scalа, Octavia, Linux for Dummies можно узнать недавних выпускников-биоинформатиков. Но как-то быстро многие из них уходят из науки в «кодеры».

Впрочем, знаю и случай обратного движения. Так что R еще многим пригодится.

Многие примеры и статьи на этом сайте активно используют язык программирования «R».

R для Linux обычно можно установить используя репозитории вашего дистрибутива. Я пользуюсь Debian-based дистрибутивами, в которых стандартная команда для установки R выглядит так:

Sudo apt install r-base

Набирать это нужно в терминале.

Прелесть R заключается в следующем:

  1. Эта программа бесплатна (распространяется под лицензией GPL),
  2. Под эту программу написано много пакетов для решения большого спектра задач. Все они так же бесплатны.
  3. Программа очень гибкая: размеры любых векторов и матриц могут изменяться по желанию пользователя, данные не имеют жёсткую структуру. Это свойство оказывается крайне полезным в случае с прогнозированием, когда исследователю нужно дать прогноз на произвольный срок.

Последнее свойство особенно актуально, так как другие статистические пакеты (такие как SPSS, Eviews, Stata) предполагают, что нас может интересовать только анализ данных, которые имеют фиксированную структуру (например, все данные в рабочем файле должны быть одинаковой периодичности с одинаковыми датами начала и конца).

Впрочем, R - это не самая дружелюбная программа. На время работы с ней забудьте про мышку - практически все самые важные действия в ней выполняются с использованием командной строки. Однако для того чтобы сделать жизнь чуть легче, а саму программу чуть более приветливой, есть программа-frontend (внешний интерфейс) под названием RStudio. Скачать её можно отсюда . Устанавливается она после того, как уже установлен сам R. В RStudio много удобных инструментов и приятный интерфейс, тем не менее анализ и прогнозирование в нём всё так же осуществляются с использованием командной строки.

Давайте попробуем взглянуть на эту замечательную программу.

Знакомство с RStudio

Интерфейс RStudio выглядит следующим образом:

В правом верхнем углу в RStudio указано имя проекта (которое пока что у нас «None» — то есть отсутствует). Если нажать на эту надпись и выбрать «New Project» (новый проект), то нам предложат создать проект. Для базовых целей прогнозирования достаточно выбрать «New Directory» (новая папка для проекта), «Empty Project» (пустой проект), а затем - ввести название проекта и выбрать директорию, в которой его сохранить. Включите воображение и попробуйте придумать название сами:).

Работая с одним проектом, вы всегда сможете обратиться к сохранённым в нём данным, командам и скриптам.

В левой части окна RStudio располагается консоль. Именно в неё мы и будем вписывать различные команды. Например, напишем следующую:

Эта команда сгенерирует 100 случайных величин из нормального распределения с нулевым математическим ожиданием и единичной дисперсией, после чего создаст вектор под названием «x» и запишет полученные 100 величин в него. Символ «<-» эквивалентен символу «=» и показывает какое значение присвоить нашей переменной, стоящей слева. Иногда вместо него удобней использовать символ «->», правда наша переменная в таком случае должна стоять справа. Например, следующий код создаст объект «y» абсолютно идентичный объекту «x»:

Эти векторы теперь появились в правой верхней части экрана, под закладкой, которая у меня озаглавлена «Environment»:

Изменения в закладке "Environment"

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

\(A = \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix} \)

такой вот командой:

то она появится в закладке «Environment»:

Любая функция, которую мы используем, требует, чтобы мы задали некоторые значения определённым параметрам. В функции matrix() есть следующие параметры:

  • data – вектор с данными, который должен быть записан в матрицу,
  • nrow – число строк в матрице,
  • ncol – число столбцов в матрице,
  • byrow - логический параметр. Если «TRUE» (истина), то наполнение матрицы будет осуществляться по строкам (слева направо, строка за строкой). По умолчанию этот параметр имеет значение «FALSE» (ложь),
  • dimnames - лист с именами строк и столбцов.

Некоторые из этих параметров имеют значения по умолчанию (например, byrow=FALSE ), в то время как другие могут быть опущены (например, dimnames ).

Одна из фишек «R» заключается в том, что к любой функции (например, к нашей matrix() ) можно обратиться, задавая значения на прямую:

а можно и так, как мы сделали это ранее - соблюдая последовательность и опуская названия параметров.

Для того, чтобы увидеть содержание любого объекта, находящегося в закладке «Environment», достаточно напечатать его название в консоли:

Другой вариант - это нажать на имя объекта в закладке «Environment».

где matrix - это название интересующей нас функции. RStudio специально для вас в таком случае откроет панель «Help» с описанием:

Найти помощь по функции можно так же, набрав название функции в окне «поиск» (иконка с линзой) в закладке «Help».

В случае, если вы не помните точно, как пишется название функции или какие в ней используются параметры, достаточно начать писать её название в консоли и нажать кнопку «Tab»:

Помимо всего этого в RStudio можно писать скрипты. Они могут понадобиться вам в том случае, если вам нужно написать программу либо вызвать последовательность функций. Создаются скрипты используя кнопку с плюсиком в верхнем левом углу (в выпадающем меню нужно выбрать «R Script»). В открывшемся после этого окне вы сможете писать любые функции и комментарии. Например, если мы хотим построить линейный график по ряду x, это можно сделать следующим образом:

Plot(x) lines(x)

Первая функция строит простейший точечный график, а вторая функция добавляет поверх точек линии, соединяющие точки последовательно. Если выделить эти две команды и нажать «Ctrl+Enter», то они будут выполнены, в результате чего RStudio откроет закладку «Plot» в правом нижнем углу и отобразит в ней построенный график.

Если все набранные команды нам ещё понадобятся в будущем, то этот скрипт можно сохранить (дискетка в левом верхнем углу).

В случае, если вам нужно обратиться к команде, которую вы уже набирали когда-то в прошлом, в правой верхней части экрана есть закладка «History». В ней можно найти и выбрать любую интересующую вас команду и двойным нажатием вставить её в консоль. В самой консоли можно обращаться к предыдущим командам, используя кнопки «Up» (вверх) и «Down» (вниз) на клавиатуре. Сочетание клавиш «Ctrl+Up» позволяет в консоли показать список всех последних команд.

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

Как я уже упомянул ранее для R существует множество пакетов. Все они расположены на сервере CRAN и для установки любого из них нужно знать его название. Установка и обновление пакетов осуществляется с помощью закладки «Packages». Перейдя на неё и нажав на кнопку «Install», мы увидим примерно следующее меню:

Наберём в открывшемся окне: forecast - это пакет, написанный Робом Хайндманом (Rob J. Hyndman), содержащий кучу полезных для нас функций. Нажмём кнопку «Install» (установить), после чего пакет «forecast» будет установлен.

Как вариант мы можем установить любой пакет, зная его название, с помощью команды в консоли:

Install.packages("smooth")

при условии, что он, конечно же, есть в репозитории CRAN. smooth - это пакет , функции в котором разрабатываю и поддерживаю я.

Некоторые пакеты доступны только в исходных кодах на сайтах типа github.com и требуют, чтобы их перед этим собрали. Для сборки пакетов под Windows может понадобиться программа Rtools .

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

Library(forecast)

В Windows может проявиться одна неприятная проблема: некоторые пакет легко скачиваются и собираются, но ни в какую не устанавливаются. R в этом случае пишет что-то типа: "Warning: unable to move temporary installation...". Всё, что нужно сделать в этом случае - добавить папку с R в исключения в антивирусе (либо выключить его на время установки пакетов).

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

Tsdisplay(x)

Она построит нам три графика, которые мы обсудим в главе «Инструментарий прогнозиста ».

Помимо пакета forecast я достаточно часто для различных примеров использую пакет Mcomp . Он содержит ряды данных из базы «M-Competition». Поэтому рекомендую вам его тоже установить.

Очень часто нам будут нужны не просто наборы данных, а данные класса «ts» (временной ряд). Для того, чтобы из любой переменной сделать временной ряд, нужно выполнить следующую команду:

Здесь параметр start позволяет указать дату, с которого начинается наш временной ряд, а frequency задать частоту данных. Число 12 в нашем примере указывает на то, что мы имеем дело с месячными данными. В результате выполнения этой команды мы трансформируем наш вектор «x» во временной ряд месячных данных, начинающийся с января 1984-го года.

Это основные элементы R и RStudio, которые нам понадобятся.

P.P.S. Достаточно хорошее руководство по R опубликовано на сайте QSAR4U Павлом Полищуком.

P.P.P.S. Много информации об R представлено на официальном сайте .

Самостоятельная работа

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

(41/3 + 78/4)*2 2^3+4 1/0 0/0 max(1,min(-2,5),max(2,pi)) sqrt(3^2+4^2) exp(2)+3i log(1024) log(1024, base=2) c(1:3) c(1:5)*2 + 4 x

Недавно столкнулся с таким феноменом - про язык программирования R слышали многие. Но знают что это такое очень мало людей.

Поскольку являюсь носителем этого языка и заинтересован в его популяризации, попытаюсь немного раскрыть тему в этом посте. Будет интересно!

План простой:

1) Что такое язык R

2) Популярность в России

Что такое язык R

R (вики) - язык программирования для статистической обработки данных и работы с графикой, а также свободная программная среда вычислений с открытым исходным кодом в рамках проекта GNU.

По нашему: Язык идеально подходящий для поиска рыночных закономерностей. Бесплатный, быстрый и свободный.

Он позволяет вести статистические исследования всего до чего могут дотянуться руки. За годы его существования появились десятки и сотни расширений для решения практически любых прикладных задач.

Это САМЫЙ популярный язык программирования алготрейдеров на западе. Это передовая того что сейчас доступно в области машинного обучения и статистики.

Для того чтобы писать программы на R, достаточно скачать R-Studio и всё



Некоторое время назад, в рамках популяризации языка, записал мини-курс «R для каждого». Бесплатный. Посмотрите как просто всё это работает и как быстро на нём писать скрипты. Это просто великолепно!

Популярность в России

Оставляет желать лучшего.

Если на западе 90% всех исследований проводиться с помощью этого языка, то в России редкая неделя проходит на СмартЛабе, в которой можно найти хоть одно упоминание о нём. Т.е. число людей знающих R - критически мало.

В числе причин такой ситуации: отсутствие пособий на русском до недавнего времени, отсутствие обучающий курсов, низкая грамотность трейдеров и ещё много чего. Не будем об этом.

Важно лишь то, что популярность этого языка в России и СНГ неуклонно растёт.

Российские пользователи устали от неработающих АПИ и дорогих торговых систем. Бесплатный язык 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 - ещё один ресурс с упорядоченной информацией с официального сайта.

На написание данной статьи меня сподвиг следующий топик: В поисках идеального поста, или загадки хабра . Дело в том, что после ознакомления с языком 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 на русском?

© 2024 nimfettamine.ru - Windows. Железо. Программы. Безопасность. Операционные системы