Как стать автором
Обновить

Комментарии 19

Серьёзно? Вы планируете публиковать всю книгу здесь, на Хабре?

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

В первую очередь нужно научиться понимать инструменты статистики. Как бездарно порой используют статистику в управлении проектами, напоминает о том, что компьютер мозги не заменит.
Что лучше использовать для работы с данными: Python или R?
Условие 1: Python хорошо известен
Условия 2: ни R ни Python не известны

Буду благодарен, если еще и объясните почему лучше выбрать R вместо Python.
я писал и на Python и на R. Пожалуй, самый ощутимый, интегральный, плюс R — скорость получения конечного презентабельного результата, от простенького статичного отчёта до аккуратного интерактивного сайта, с таблицами, графиками и прочим. По такой скорости R превосходит Python, наверно, в разы.
А как создается связка R и Web?
Через shiny
Спасибо. А как вы используете R?
Ещё иногда важным отличием оказывается то, что под R больше узкоспециализированных пакетов, которые сложно найти не только под Python, но и под другие языки. Зачастую это просто обвязка вокруг проверенных временем C/C++-библиотек.

Например, однажды надо было придумать алгоритм, завязанный на распределении пользователей по территории, что подразумевало использование равномерного разбиения нашего голубого шарика на ячейки. Нашёлся хороший проект DGGRID, который берёт на себя всю математику. И именно для R тут же нашёлся пакет, который даёт интерфейс к DGGRID + визуализацию через gdal и shapefile'ы. То есть переход между шагами «найти инструмент» и «проверить алгоритм» был максимально плавным и незаметным: 10 минут на чтение сайта DGGRID, 5 минут на поиск пакета для R, ещё 10 минут на чтение доки к нему, и вот я уже гружу тестовый датасет и смотрю на красивую визуализацию карты.

Ну, а про кучи различных статистических узкоспециализированных или малопопулярных методов, реализованных в пакетах к R (например, equipercentile equating), я уж молчу. Тут скорее сказывается то, что R более привычен тем, чей фокус смещен от программирования в науку. Поэтому такие пакеты в CRAN появляются быстрее любого другого языка. Почему так вышло — не знаю.

А вот со всем, что касается собственно программирования и написания не просто скриптов, а реально работающих и поддерживаемых программ, у R дела обстоят гораздо скромнее. Во многом тут сказывается куча legacy и незаточенность под современные нужды. Также есть особенности самого языка, которые могут быть непривычны тем, кто использует более традиционные языки — им просто может быть сложно понимать ваш код. Советую сразу после знакомства с основами идти читать про пакеты от tidyverse, например. Они очень приятно преображают R и делают написание кода на нём гораздо приятнее. И, к сожалению, именно про написание не скриптов, а реальных программ и организации их, про язык R как язык программирования книг я не встречал.
Для своей дипломной (4 года назад) я использовал R для сбора данных с веб страниц (web scraping), и последующей обработки данных. Так вот, для скрейпинга это не подохдящий инструмент, медленно и ненадежно. Сегодня я бы заюзал для сбора данных python, а статистичекий анализ делал бы в R.
Я пишу на R в области data science. За несколько месяцев получается разработать прототип сервиса, переписывание полного функционала которого на продакшн-ЯП заняло бы годы. Плюс симпатичная презентация результатов (markdown, shiny, ggplot2).
Интересно а будет ли вариант в читаемом виде? ну там fb2, epub или на худой конец pdf
R очень хороший язык, но несколько необычный. Это лучший язык в мире по критерию количества кода на получаемый результат. То есть, на один напечатываемый символ вы получаете больше всего результата, как в виде (обработки) данных так и в виде видимого (графического) результата. Пакетов в нем многие тысячи, которые буквально делают всё-всё. Он является проблемно ориентированным языком, нацеленный на переработку данных статистики и любых вычислений с массивами данных, а также представлений их в графическом виде, которых тысячи, и которые настраиваются под любой вкус.

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

Будучи объектным языком, однако он появился до еще распространения объектно-ориентированного подхода, поэтому там очень необычная реализация основанная на чисто функционально-ориентированном интерфейсе. По существу весь синтаксис там из C, плюс идеи работы с массивами из Алгола. Функция это тоже просто объект, который можно менять на лету, по существу все функции в нем это замыкания всегда. Вы никак не можете указывать никаких прототипов классов, объектов, интерфейсов (кроме набора параметров функций). Функции все полиморфны, параметры можно передавать любого типа, она сама с ними разбирается. С++ понятия класс в нем нет, атрибут класс это введенная надстройка для вызова генерик-функций (методов категориального класса), аналогов C++ темплэйтов.

Хотя язык полностью встроено поддерживает объектно-ориентированную триаду (инкапсуляция, полиморфизм, наследование), достигает он это настолько необычным способом, в основном потому что в его синтаксисе нет способа описать тип переменной (поэтому это даже не то что строготипизированный язык, а даже не слабо типизированный. то есть вообще н типизированный), но при этом также нет способа и нарушить правила этой триады. Чистые сложные объекты в языке используются редко, но например стэк и ggplot2 являются сложными объектами; основным понятием в нем является простая функция. Именно на основе функций создаются объекты, ведь каждая функция в нем автоматом является конструктором объекта, поэтому достаточно из нее вернуть структуру (список) и он становится объектом, при этом методы объекта там передаются как и другие члены объекта. Поскольку у переменных нет понятия типа, то присвоение к приватным члены класса, это внутренние переменные функции-конструктора, происходит специальным знаком присвоения "<<-". Да, необычное свойство это что в языке аж четыре знака присвоения (=,<-,->,<<-)! Так же необычным свойством, что доступ к членам объектов происходит не всем привычной точкой, когда язык создавался это было еще не общепринято, а знаком $ или сложным оператором доступа к элементам списка [[ ]]. Точка в нем это обычный символ, который может быть в любом имени, который используется в надстройке генерик-функций классов. В языке есть все концепции правящие бал до 2000-х годов, например создание произвольных бинарных операторов. Замечательным лаконичным свойством является то, что все языковые конструкции рассматриваются как операторы, и поэтому все конструкции блоков {}, условных и циклических выражений возвращают значение, которое можно использовать в комбинации с другими операторами. Отсюда в языке нету такого тернарного сишного оператора ?:, его просто заменяет более читабельная конструкция if()else.

В общем, язык замечательный, хотя он изначально создавался как чисто интерпретирующий, сейчас в нем есть JIT-компилятор. Осваивается мгновенно, хотя требует некоторого приспособления к его образу мысли, в том числе в том что вся работа в нем может быть только через тестирование (во встроенной среде) и чтение встроенных справок (поскольку типизированности нет, функции могут принимать любой набор нетипизированных параметров, полный полиморфизм, отсюда следствие, есть полный набор встроенных экзамплов и демок по любой теме), зато в результате очень быстрое программирование с написанием малого количества кода, но большим количеством результата.
Далеко не со всем согласен…
его можно назвать чисто объектным,

R поддерживает около 7-ми парадигм, включая функциональную, процедурную и ООП.

Нет типов данных как таковых, есть внутренние режимы хранения данных и объединения объектов в иерархические структуры

Типы данных есть и их целых 7 — numeric, integer, complex, logical, character, NA, NULL. И каждый из этих типов может быть представлен в базовой структуре вектора (включая сам вектор, matrix, array, data.frame, list) + дополнительные структуры factor и formula + расширяемые структуры различных пакетов.

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

Т.к. базовая структура вектор, то атрибуты хранятся на его уровне — отдельный элемент вектора не может иметь свой отдельный аттрибут, он просто индексируется из векторного атрибута.

Вы никак не можете указывать никаких прототипов классов, объектов, интерфейсов (кроме набора параметров функций)

В объектах класса S4 вы можете все это сделать — определить слоты, прототипы и т.д.

Ну и дальше много чего написано исходя из предположения, что нет системы типов, хотя она по факту есть, но динамическая. Кстати возможна реализация и строго-типизированной системы через S4-объекты.
Редко где видел примеры реализации экспериментов в R с помощью ООП. Обычно функциональный и/или процедурный подход, после которого рекомендуется выносить функционал в пакеты. Писать классы и методы на R (я пробовал только в рамках обучающего курса) — это менее удобно, не популярно (не нужно)?
не поделитесь информацией об обучающем курсе?
Coursera Advanced R Programming. Лучше начать с R Programming.
спасибо
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.