Как стать автором
Поиск
Написать публикацию
Обновить
6.65

R *

Язык для статистической обработки данных

Сначала показывать
Порог рейтинга
Уровень сложности

Глубокое обучение с использованием R и mxnet. Часть 1. Основы работы

Время на прочтение14 мин
Количество просмотров9.9K


Привет, Хабр!

Эта статья является первой частью руководства по приготовления нейронных сетей с использованием библиотеки mxnet на языке R. Источником вдохновения послужила онлайн-книга Deep Learning — The Straight Dope, объема которой достаточно для осознанного использования mxnet на Питоне. Примеры оттуда будут воспроизводиться с поправкой на отсутствие реализации интерфейса Gluon для R. В первой части рассмотрим установку библиотеки и общие принципы работы, а также реализуем простую линейную модель для решения задачи регрессии.
Читать дальше →

Ассоциативные правила, или пиво с подгузниками

Время на прочтение19 мин
Количество просмотров83K


Введение в теорию


Обучение на ассоциативных правилах (далее Associations rules learning — ARL) представляет из себя, с одной стороны, простой, с другой — довольно часто применимый в реальной жизни метод поиска взаимосвязей (ассоциаций) в датасетах, или, если точнее, айтемсетах (itemsests). Впервые подробно об этом заговорил Piatesky-Shapiro G [1] в работе “Discovery, Analysis, and Presentation of Strong Rules.” (1991) Более подробно тему развивали Agrawal R, Imielinski T, Swami A в работах “Mining Association Rules between Sets of Items in Large Databases” (1993) [2] и “Fast Algorithms for Mining Association Rules.” (1994) [3].
Читать дальше →

R — значит регрессия

Время на прочтение8 мин
Количество просмотров83K

Статистика в последнее время получила мощную PR поддержку со стороны более новых и шумных дисциплин — Машинного Обучения и Больших Данных. Тем, кто стремится оседлать эту волну необходимо подружится с уравнениями регрессии. Желательно при этом не только усвоить 2-3 приемчика и сдать экзамен, а уметь решать проблемы из повседневной жизни: найти зависимость между переменными, а в идеале — уметь отличить сигнал от шума.


Регрессия


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

Читать дальше →

Копирование данных с веб-сайта с помощью R и библиотеки rvest

Время на прочтение6 мин
Количество просмотров7.3K

Чтобы проводить анализ данных, необходимо сначала эти данные собрать. Для этой цели есть много разных методов. В этой статье мы будем говорить о копировании данных непосредственно с веб-сайта, или о скрейпинге (scraping). На Хабре есть несколько статей о том, как сделать копирование с помощью Python. Мы будем использовать язык R (вер.3.4.2) и его библиотеку rvest. В качестве примера рассмотрим копирование данных с Google Scholar (GS).

Читать дальше →

Статистика Backblaze, научный подход к анализу надёжности накопителей

Время на прочтение6 мин
Количество просмотров7.8K

Фирма Backblaze регулярно публикует статистику по отказам своих жёстких дисков, и даже выложила в свободный доступ полный архов со статистикой S.M.A.R.T параметров всех своих накопителей.


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

Читать дальше →

Почему результаты логистической регрессии в SAS и R не совпадают

Время на прочтение4 мин
Количество просмотров7.4K
Возможно, эта тема не станет открытием для опытных статистиков. Однако я уверен, что менее опытные статистики и R-программисты смогут открыть для себя новые аспекты логистической регрессии, поскольку найти подробности о причинах несовпадения результатов между статистическими пакетами мне удалось только в документации SAS.
Читать дальше →

R как спасательный круг для системного администратора

Время на прочтение3 мин
Количество просмотров12K

Мотивом для этой публикации послужил доклад «Using the R Software for Log File Analysis» на конференции USENIX, который был обнаружен в интернете при поиске ответов на очередные вопросы. Поскольку была написана целая печатная статья, логично предположить, что тема обладает актуальность. Поэтому решил поделиться примерами решения подобного рода задач, решению которых не придавалось такого значения. Фактически, «заметки на полях».
R, действительно, очень хорошо подходит для подобных задач.


Является продолжением предыдущих публикаций.


Читать дальше →

«HR-аналитика» средствами R

Время на прочтение4 мин
Количество просмотров8.6K

Является продолжением предыдущих публикаций.


Неожиданно оказалось, что для одной из задач, которую пришлось решать примерно год назад, а именно оценка «надежности» большого коллектива, нынче есть весьма популярное название «HR аналитика». Актуализируя в рамках новой задачи материалы, вышел на просторах российского интернета на информативный блог по теме HR-аналитики. Собственно говоря, этот блог + обсуждение вопросов с его автором Эдуардом Бабушкиным и послужили отправной точкой для пересмотра проблематики.


Настоящая публикация носит, скорее, дискуссионно-аналитический характер, нежели утверждающий. Какие подходы и методы оптимальны для задачи HR аналитики, что можно сделать средствами R. Эта неоднозначность вызвана тем, что объектом исследования являются не явления природы, а поведение людей, которое не всегда логично и предсказуемо, особенно при переходе от коллектива к отдельному человеку.


Читать дальше →

Оформление базовой графики R

Время на прочтение3 мин
Количество просмотров19K

Базовая графика в R плоха для печати (если честно, можно было получше выбрать значения по умолчанию). В целом, эти функции для некоторых — признак заката эры R. Думаю, большинство людей согласится, что есть в R графические функции и получше (например, ggplot2). Но иногда бывет целесообразно сделать график именно с помощью базовых функций. Например, если графика в вашей публикации должна быть воспроизводима даже спустя пять лет.

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

Как построить географическую панель наблюдения с данными в реальном времени

Время на прочтение3 мин
Количество просмотров9.3K
В этом посте покажу, как построить интерактивную географическую панель наблюдения с Displayr, Plotly и R. Особенно интересно, что она отслеживает позицию военных самолетов в реальном времени. Для этого я собираюсь взять данные из двух разных источников (регионы на основании размера ВВС и отслеживание позиции самолетов в реальном времени). Панель наблюдения отображает динамические данные двумя способами: оттенок региона (чтобы показать численность ВВС в стране) и точки-маркеры (для позиций самолетов). Потом я построю карту, чтобы аккуратно и красиво отобразить все эти данные.
Читать дальше →

Добыча данных в R

Время на прочтение14 мин
Количество просмотров21K
Этот пост — перевод трех частей серии Data acquisition in R из моего англоязычного блога. Исходная серия задумана в четырех частях, три из которых легли в основу данного поста: Использование подготовленных наборов данных; Доступ к популярным статистическим БД; Демографические данные; Демографические данные. В еще не написанной заключительной части речь пойдет об использовании пространственных данных.




R заточен под воспроизводимость результатов. Существует множество прекрасных решений, обеспечивающих сопоставимость версий системы и пакетов, помогающих применять принципы literate programming… Я же хочу показать, как можно легко и эффективно находить/скачивать/добывать данные, используя собственно R и документируя каждый шаг, что обеспечивает полную воспроизводимость всего процесса. Разумеется, я не ставлю перед собой задачи перечислить все возможные источники данных и фокусирую внимание в основном на демографических данных. Если ваши интересы лежат вне сферы статистики населения, стоит посмотреть в сторону великолепного проекта Open Data Task View.


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

Читать дальше →

Рейтинги автомобильных марок: пример анализа переменных с множественным откликом

Время на прочтение5 мин
Количество просмотров4.5K


В анкетных маркетинговых исследованиях довольно часто встречаются вопросы, в которых респонденты могут выбрать несколько подходящих вариантов из списка возможных ответов (check all that apply questions). Ответы респондентов на такие вопросы задают переменные с множественным откликом (multiple-response variables). Подходящие статистического методы для работы с multiple-response переменными не являются широко известными. В этой статье мы рассмотрим анализ таких переменных на примере данных об автомобильных рейтингах.

Читать дальше →

Ближайшие события

«Оч.умелые ручки»: делаем Tableau/Qlik из R и «синей изоленты»

Время на прочтение4 мин
Количество просмотров5.5K

Является продолжением предыдущих публикаций.


Естественно, что название является потешным, но, как хорошо известно, в каждой шутке есть доля правды. Сама тема возникла, когда в очередной сотый раз пришлось слышать настойчивое пожелание о том, что необходим «гибкий конструктор отчетов/графиков». После определенного момента проще взять и сделать, чем в очередной раз объяснять, что tidyverse покрывает все необходимые потребности.


Сама постановка задачи предельно проста: обеспечить графический интерфейс для рисования разнообразных графических представлений по произвольным табличным данным. Классическое решение представляет собой две связанные сущности:


  • интерфейс с большим-большим количеством менюшек и кнопочек, с множественными закулисными IF для управления взаимными состояниями этих элементов;
  • «гибкий плоттер» с большим количеством вложенных IF для отрисовки графиков в соотвествии со скормленным данными и положением кнопочек-ползунков, выставленных в UI.

С одной стороны делать «Yet Another Tableau» совершенно неинтересно. С другой стороны, постановка в стиле «сделать так, чтобы все было, но ничего не надо делать» — типичная задача для ТРИЗ.


В целом, после непродолжительных размышений было выработано решение, которое почти удовлетворяет последней постановке. Само Shiny приложение пока под NDA, свободно публикуемый прототип приведен на картинке.



Две ключевых идеи по упрощению задачи следующие (ничего нового, все уже придумано до нас):


  1. вместо статически заданного UI переходим к динамически генерируемому;
  2. используем интерпретатор R не только для исходного кода, но и внутри самого кода.

Идея 1. Динамический web-интерфейс


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


Сделаем по-другому. Вместо UI элементов со сложным поведением раскидываем с помощью uiOutput placeholder-ы, в которые динамически рассчитываем и генерируем с помощью shiny::renderUI представление этого элемента. Все внешние параметры, требуемые для генерации элемента, трактуем как реактивные элементы (reactive). При этом все такие интерактивные элементы выступают в качестве «автономных агентов», которые смотрят на окружение и подстраиваются под него. Пользователь изменил состояние одного элемента — все зависимые стали пересчитывать по очереди свое состояние (мы явно не обрабатываем события, а используем реактивный подход shiny). При изменении их состояния могут возникнуть новые индуцированные изменения. И так, пока все не стабилизируется.


В результате, в коде остается только один обработчик (кнопка «Go»)
  observeEvent(input$gen_plot, { # код демонстрирует принцип

    escname <- function(x){
      # имена колонок надо закавычить
      # .....
    }

    point_code <- ""
    if(input$shape_type!="__NO_MAPPING__") {
      aes <- c("shape"=escname(input$aes_shape_col), "color"=escname(input$aes_color_col))
      point_code <- buildPointCode(fixed=c("shape"=input$shape_type, "color"=glue("'{input$plot_color}'")), aes=aes)
    }

    line_code <- ""
    if(input$line_type!="__NO_MAPPING__") {
      aes <- c("linetype"=escname(input$aes_linetype_col), "color"=escname(input$aes_color_col))
      line_code <- buildLineCode(fixed=c("linetype"=input$line_type, "color"=glue("'{input$plot_color}'")), aes=aes)
    }

    gcode <- glue("ggplot(data_df(), aes(x=`{input$x_axis_value}`, y=`{input$y_axis_value}`))\\
                  {point_code} {line_code} + xlab('{input$x_axis_label}')") %>%
      style_text(scope="spaces")

    plot_Rcode(gcode)
  })  
Читать дальше →

R и Информационная безопасность. Как устранить противоречие интересов и запустить R на Linux в оффлайн-режиме

Время на прочтение5 мин
Количество просмотров3.5K

Является продолжением предыдущих публикаций.


Очень часто попытки применить инструменты DataScience в корпоративной среде встают в полное противоречие с требованиями Службы Информационной Безопасности (СИБ). В мире DataScience рекомендация «поставь с гитхаба» становится практически нерешаемой при полной изоляции аналитической машины от интернета. Тем не менее, задача запуска на linux инфраструктуры R в offline окружении вполне решаемая. Ниже приведу последовательность мантр, которые позволят это исполнить. Если какие-то шаги будут не совсем прозрачными, то скорректирую по мере появления комментариев. Эти же шаги можно использовать и для online инсталляции, пропуская шаги, относящиеся к хитрым трюкам или созданию локальных репозиториев. Собрано по крупицам на основании многократных инсталляций под разнообразные задачи. Практика показала, что тема весьма актуальна.


Читать дальше →

Анализируй это — Lenta.ru

Время на прочтение47 мин
Количество просмотров25K


Анализируй это. Lenta.ru (часть 1)


What, How, Why


Для тех кому лень читать — ссылка на датасет внизу статьи.

What — анализ статей новостного ресурса Lenta.ru за последние 18 лет (с 1 сентября 1999 года). How — средствами языка R (с привлечением программы MySterm от Yandex на отдельном участке). Why… В моем случае, коротким ответом на вопрос "почему" будет "получение опыта" в Big Data. Более развернутым же объяснением будет "выполнение какого-либо реального задания, в рамках которого я смогу применить навыки, полученные во время обучения, а так же получить результат, который я бы смог показывать в качестве подтверждения своих умений".

Читать дальше →

Использование R для «промышленной» разработки

Время на прочтение8 мин
Количество просмотров15K

Является продолжением предыдущих публикаций. Не секрет, что при упоминании R в числе используемых инструментов вторым по популярности является вопрос о возможности его применения в «промышленной разработке». Пальму первенства в России неизменно держит вопрос «А что такое R?»


Попробуем разобраться в аспектах и возможности применения R в «промышленной» разработке.


Читать дальше →

R, Asterisk и платяной шкаф

Время на прочтение5 мин
Количество просмотров10K

Является продолжением предыдущих публикаций. Основное назначение публикаций — демонстрация возможностей R по решению различных "рутинных" задач по обработке данных, возникающих в бизнесе. Основной акцент ставится на создание законченного решения для конечного пользователя, а не на принципиальное решение частной задачи набором команд в консоли. Схематический прототип и продукт с конвейера имеют больше различий чем сходства.


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


Читать дальше →

Какие самые нелюбимые языки программирования?

Время на прочтение5 мин
Количество просмотров58K
На Stack Overflow Jobs каждый может опубликовать собственную Developer Story, чтобы поделиться достижениями и поспособствовать карьерному росту. При публикации можно добавить к статье теги, соответствующие языкам и технологиям, с которыми вы бы хотели работать и с которыми бы не хотели:



Это даёт нам возможность изучить мнения сотен тысяч разработчиков. Есть много способов измерить популярность языка. Например, мы часто использовали для изучения трендов статистику визитов на Stack Overflow или просмотров вопросов. Но данные о тегах — уникальная возможность посмотреть, что людям не нравится, когда у них есть возможность сказать об этом в резюме.

(Некоторый анализ я публиковал в личном блоге два года назад, но эта статья дополнена более свежими данными и бóльшим количеством иллюстраций).
Читать дальше →

Глубокое обучение с R и Keras на примере Carvana Image Masking Challenge

Время на прочтение18 мин
Количество просмотров14K


Привет, Хабр!

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

Гораздо привлекательнее выглядит использование R-интерфейсов к TensorFlow и Keras с бекендами на выбор (TensorFlow, Theano, CNTK), подробной документацией и множеством примеров. В этом сообщении будет разобрано решение задачи сегментации изображений на примере соревнования Carvana Image Masking Challenge (победители), в котором требуется научиться отделять автомобили, сфотографированные с 16 разных ракурсов, от фона. "Нейросетевая" часть полностью реализована на Keras, за обработку изображений отвечает magick (интерфейс к ImageMagick), параллельная обработка обеспечивается parallel+doParallel+foreach (Windows) или parallel+doMC+foreach (Linux).

Читать дальше →

Вклад авторов