Dmitryy
Dmitryy личный блог
25 апреля 2019, 22:09

Подбрасываем монетку с помощью языка R

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


На СЛ я часто замечаю, как умные и опытные люди моделируют или вычисляют всё в экселе. Это тоже отличный инструмент, но я думаю им стоит обратить внимание на язык R и попробовать, ничего сложного, как оказалось, там нет. Конечно какие-то базовые навыки программирования всё же потребуются.


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

Настройка среды для запуска R

Сразу хочу сказать, что ничего сложного в настройке нет. Нужно скачать пару файлов и последовательно их установить. Никаких особых настроек и сложных выборов, качаем и ставим, всё заработает.


Сначала вам необходимо поставить само ядро для языка R, его можно взять здесь cran.r-project.org/Там есть версии для всех популярных ОС, но я полагаю здесь большинство использует Windows, тогда переходим на cran.r-project.org/bin/windows/base/ и кликаем по «Download R 3.5.3 for Windows» (79Мб). Далее устанавливаем этот файл.


Затем нам нужно скачать саму среду разработки на языке R. Их большое множество, платных и бесплатных. Будем использовать самую популярную и бесплатную версию, идём сюда www.rstudio.com/products/rstudio/download/ и под самой левой опцией FREE, жмем зеленую кнопку Download (около 150Мб). После скачивания, устанавливаем и можно запускать.

Простой пример работы в RStudio

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


Пример с подбрасыванием монетки

Теперь давайте попробуем подбросить монетку. Скажем мы хотим подбросить монетку N раз, в случае орла мы умножаем результат на 1.01, в случае решки на 0.99. И построим график. Для этого создадим небольшой скрипт. Можно конечно сделать это и в консоли, но для общего развития сделаем скрипт. Выберем File -> New File -> R Script.


В окно скрипта, запишем следующий скрипт (можно скопировать и вставить):

x <- 100         # начальное значение
n <- 100         # количество подбрасываний
a <- array(n)   # пустой массив для результата

# lognormal
toss <- function(x)
   ifelse(rnorm(1, 0) > 0, x * 1.01, x * 0.99)  # если сл. число > 0 то умножаем на 1.01, иначе на 0.99

for (i in 1:n) {   # цикл от 1 до n
  x <- toss(x)    # подбрасываем и записываем результат в x
  a[i] <- x         # записываем x в массив результатов
}

plot(a, type = «l»)   # строим график результата

(если плохо копируется, код также есть на гитхабе https://github.com/dmitryy/finance/blob/master/RScripts/1.%20toss%20the%20coin.r)

Нажмем на кнопку с зеленой стрелочкой Source, это позволяет запустить весь файл. Увидим нечто подобное на графике:
Подбрасываем монетку с помощью языка R


Каждый раз нажимая на кнопку, график будет меняться. Таким образом мы написали небольшую простенькую модель поведения актива, используя до селе нам не известный язык R. Далее попробую написать что-то более сложное и описать, если кому-то будет интересно.


Более подробная документация на русском языке по R tsamsonov.github.io/r-geo-course/ 

Также буду благодарен, если подскажите другие источники для обучения, т.к. я сам только начинаю его осваивать.
20 Комментариев
  • Дмитрий Ш
    25 апреля 2019, 22:23
    Тьфу, блин… Я монетку при помощи языка подбрасываю до небес
    А тут ещё R какоета
  • _sg_
    25 апреля 2019, 22:34
    Поскольку на этом сайте обитает много любителей С Диез,
    то можно добавить сюда еще и ссылку на R for .NET

    https://archive.codeplex.com/?p=rdotnet
    • ch5oh
      25 апреля 2019, 23:41
      _sg_, он фиговато работает насколько мне известно. Особенно с новыми версиями R. А у Вас получилось раскочегарить rdotnet?
      • _sg_
        25 апреля 2019, 23:52
        ch5oh, 
        Я пару простых примеров запускал. Глубже не копал.
        В основном я ориентируюсь на Python.
        Но поскольку Microsoft включил поддержку R даже в MSSQL Server https://docs.microsoft.com/ru-ru/sql/advanced-analytics/r/sql-server-r-services?view=sql-server-2017,
        то стоит на него обратить более пристальное внимание.
        • ch5oh
          25 апреля 2019, 23:57

          _sg_, у майкрософт Р получится с щупальцами в самых неподходящих местах. Наверное, примерно как они С++ изуродовали...

           

          И опять же: много Вы знаете людей, готовых купить SQL Server? =D

          • _sg_
            26 апреля 2019, 00:02
            ch5oh,
            В принципе удобно иметь данные и R — аналитику в одном месте в MSSQL Server.
            На сколько качественно сделано сказать ничего не могу.
             
        • ch5oh
          26 апреля 2019, 00:00

          _sg_, а вообще R — классный для прототипирования статистических алгоритмов.

          Но в тот момент, когда надо выходить в продакшен вдруг выясняется, что он на 3 порядка(!) медленнее C#… Уже полгода грущу с этим знанием...

  • AlexeyTikhonov
    25 апреля 2019, 23:19
    Достоинство R в том, что все вышеизложенное можно написать просто в одну строчку так;)
    plot(100*cumprod(1+sign(rnorm(100))/100), type = «l»)   
    • wrmngr
      26 апреля 2019, 01:42
      AlexeyTikhonov, как человек, который виртуально подбрасывал монетки в экселе, вижуал бейсике, паскале, сишарпе, и питоне должен признать, что это строка мне нравится :)
  • Value
    25 апреля 2019, 23:41
    Почему R а не Python?
    • ch5oh
      25 апреля 2019, 23:43
      Value, питон сакс. =)
      • wrmngr
        26 апреля 2019, 01:45
        Dmitryy, справедливости ради стоит отметить, что у питона есть оболочка Jupiter Notebook, где графики выводить ненамного сложнее
  • ch5oh
    25 апреля 2019, 23:42

    =) Читайте про функцию sample()

    С ее помощью можно не только монетку бросить, но и десяток костяшек запульнуть.

     

    Как раз собирался пост наваять для любителей неправильно трактовать ЦПТ.

     

    Если интересно. ;-)

  • Логарифм Интегралыч
    26 апреля 2019, 18:19
    онлайн компилятор многих языков

    https://rextester.com/l/r_online_compiler
    https://rextester.com

    рассказывается в моих темах

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн