xts
Этот график тоже построен в R
НО:
?type
)название_функции()
+ скобки
+ Tab
RStudio представляет собой очень удобную среду (IDE) для работы в R, которая сильно облегчается жизнь.
Environment
). Вкладка History
показывает все команды, которые вы вводили с начала сеанса работы.packages
будет отображаться серия пакетов или надстроек, необходимых для запуска определенных процессов. Дополнительную информацию см. на вкладке help
Начнем с основ:
## [1] "Hello world!"
Сообщения, начинающиеся со знака ##, – показывают результат вывода в консоли R.
R работает и как калькулятор. Можно складывать переменные:
## [1] 4
умножать:
## [1] 6
делить:
## [1] 3
брать квадратный корень:
## [1] 2.236068
брать логарифм
## [1] 1.609438
возводить в степень
## [1] 1024
логические операторы
## [1] TRUE
## [1] TRUE
## [1] TRUE
## [1] TRUE
type
, класс объекта – командой class
.## [1] 1024
Ими могут быть, десятичные числа. Они называются numeric
.
## [1] 10
## [1] "numeric"
## [1] "double"
## [1] TRUE
Команды =
и <-
идентичны и означают “присвоить значение”. Обычно использется <-
. В Rstudio есть удобное сочетание клавиш Alt -
для того, чтобы написать эту комманду.
## [1] 10
Тип integer
## [1] 3
## [1] "integer"
## [1] TRUE
## [1] TRUE
## [1] FALSE
## [1] "logical"
Логические операции
## [1] FALSE
## [1] TRUE
## [1] FALSE
## [1] "logical"
character
– строковая переменная. В R объекты этого типа выделены кавычками.
x = 1 # присвоить x численное значение 1
y = '1' # присвоить y текстовое значение равное 1
as.numeric(y) # преобразовать y в тип numeric
## [1] 1
Обращайте внимание на такой, какой тип имеет переменная с которой вы работаете.
Специальный тип для обозначения пропущенных данных (missing value)
## [1] TRUE
## [1] FALSE TRUE
## [1] FALSE
Вектор – тип данных, который состоит из упорядоченного набора объектов одного типа. Вектор можно создать с помощью команды c
.
## [1] TRUE
## [1] "2" "3" "5" "aa" "bb" "cc" "dd" "ee"
Есть и другие варианты для создания векторов:
## [1] 1 2 3 4 5 6 7 8 9 10
## [1] 2 4 6 8 10
## [1] 1 3 5 7 9
## [1] 1 2 3 4 1 2 3 4
## [1] 1 1 2 2 3 3 4 4
Для векторов одинакой длины операции совершают поэлементно.
У каждого вектора есть свой индекс (порядковый номер), к которому можно обратиться с помощью имени объекта (вектора) и квадратных скобок. Индекс начинается с ‘1’.
## [1] "c"
## [1] NA
## [1] "a" "b" "c"
## [1] "a" "c" "e"
## [1] "a" "b" "d" "e"
## [1] "c" "d" "e"
for
.## [1] 1 2 3
## [1] 4 5 6
## [1] 5 7 9
## [1] 4 10 18
## [1] 0.0000000 0.6931472 1.0986123
Операции могут выполняться и с векторами разной длины. В этом случае используется “выравнивание векторов”" (recycling rule).
## [1] 11 22 33 14 25 36 17 28 39
В чем оно заключается?
с помощью функции ‘length’ можно узнать длину вектора
## [1] 3
matrix – набор количественных данных, упорядоченных в двумерную таблицу.
## [,1] [,2] [,3]
## [1,] 2 4 1
## [2,] 3 5 7
## [1] 7
## [1] 3 5 7
## [1] 2 3
над матрицами можно также совершать операции
## [,1] [,2] [,3]
## [1,] 2 4 1
## [2,] 3 5 7
## [,1] [,2]
## [1,] 1 1
## [2,] 4 2
## [3,] -2 1
data frame
– это набор (коллекция) векторов, объединенных в один объект. Каждый столбец data frame
– вектор. Каждая строка – наблюдение. Большинство структурированных данных хранится в качестве data frame
.
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
## [1] 32 11
## [1] 11
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21 6 160 110 3.9 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
## mpg cyl disp hp drat wt qsec vs am gear carb
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.7 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 1 1 4 2
## mpg cyl disp hp drat wt qsec vs am gear carb
## Ferrari Dino 19.7 6 145 175 3.62 2.77 15.5 0 1 5 6
## Maserati Bora 15.0 8 301 335 3.54 3.57 14.6 0 1 5 8
## Volvo 142E 21.4 4 121 109 4.11 2.78 18.6 1 1 4 2
Существуют разные способы обратиться к элементам data frame
.
К примеру, к отдельной колонке (переменной) можно обратиться следующими способами:
## am
## Mazda RX4 1
## Mazda RX4 Wag 1
## Datsun 710 1
## Hornet 4 Drive 0
## Hornet Sportabout 0
## Valiant 0
## Duster 360 0
## Merc 240D 0
## Merc 230 0
## Merc 280 0
## Merc 280C 0
## Merc 450SE 0
## Merc 450SL 0
## Merc 450SLC 0
## Cadillac Fleetwood 0
## Lincoln Continental 0
## Chrysler Imperial 0
## Fiat 128 1
## Honda Civic 1
## Toyota Corolla 1
## Toyota Corona 0
## Dodge Challenger 0
## AMC Javelin 0
## Camaro Z28 0
## Pontiac Firebird 0
## Fiat X1-9 1
## Porsche 914-2 1
## Lotus Europa 1
## Ford Pantera L 1
## Ferrari Dino 1
## Maserati Bora 1
## Volvo 142E 1
## [1] "data.frame"
## [1] 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1
## [1] "numeric"
## [1] 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1
## [1] 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1
К строкам можно обратиться следующими способами:
## mpg cyl disp hp drat wt qsec vs am gear carb
## Camaro Z28 13.3 8 350 245 3.73 3.84 15.41 0 0 3 4
## mpg cyl disp hp drat wt qsec vs am gear carb
## Datsun 710 22.8 4 108 93 3.85 2.32 18.61 1 1 4 1
## Camaro Z28 13.3 8 350 245 3.73 3.84 15.41 0 0 3 4
## [1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [12] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE
## [23] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## mpg cyl disp hp drat wt qsec vs am gear carb
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Тип Date
представляет календарные даты. Финансовые серии как правило представляют собой временный ряд, упорядоченный во времени. Поэтому эффективная работа с данными важна для финансового анализа
## [1] "Wed Oct 30 13:54:58 2019"
## [1] "2019-10-30"
## [1] "Date"
## [1] 18199
Даты можно представлять различным образом с помощью функции format
## [1] "30 njr 2019"
Символ | Значение | Пример |
---|---|---|
%d | день как число (0-31) | 31 |
%a | сокращенный день недели | вт |
%A | день недели | Вторник |
%m | месяц (00-12) | 00-12 |
%b | сокращенный месяц | ноя |
%B | полный месяц | ноября |
%y | 2-значный год | 18 |
%Y | 4-значный год | 2018 |
Что делать, если мы хотим даты на английском языке?
Нужно поменять параметры языка для вашей системы и потом вернуть их обратно
## [1] "LC_COLLATE=Russian_Russia.1251;LC_CTYPE=Russian_Russia.1251;LC_MONETARY=Russian_Russia.1251;LC_NUMERIC=C;LC_TIME=Russian_Russia.1251"
## [1] "C"
## [1] "30 Oct 2019"
## Warning in Sys.setlocale(locale = "ru_RU.UTF-8"): ОС сообщает,
## что запрос установки локали в "ru_RU.UTF-8" не
## может быть выполнен
## [1] ""
можно создавать вектора дат
## [1] "2019-10-30" "2019-11-06" "2019-11-13" "2019-11-20" "2019-11-27"
## [6] "2019-12-04" "2019-12-11" "2019-12-18" "2019-12-25" "2020-01-01"
## [1] "Wednesday"
## [1] "October"
## [1] "2019-10-29" "2019-11-05" "2019-11-12" "2019-11-19" "2019-11-26"
## [6] "2019-12-03" "2019-12-10" "2019-12-17" "2019-12-24" "2019-12-31"
Можно делать конвертацию между типами character
и Date
c помощью функций as.Date
и as.character
.
## [1] "2019-10-30"
## [1] "2018-11-06"
## [1] NA
преобразуйте в тип Date следующую строку: 16 ноя, 2018
.
В R есть несколько специальных типов данных для работы с временными рядами. Один из них – xts
(extendible time series).
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Registered S3 method overwritten by 'xts':
## method from
## as.zoo.xts zoo
data(sample_matrix)
df_xts <- as.xts(as.data.frame(sample_matrix),
important = 'very important info!')
str(df_xts)
## An 'xts' object on 2007-01-02/2007-06-30 containing:
## Data: num [1:180, 1:4] 50 50.2 50.4 50.4 50.2 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:4] "Open" "High" "Low" "Close"
## Indexed by objects of class: [POSIXct,POSIXt] TZ:
## xts Attributes:
## List of 1
## $ important: chr "very important info!"
## [,1]
## 2019-10-31 1
## 2019-11-01 2
## 2019-11-02 3
## 2019-11-03 4
## 2019-11-04 5
## 2019-11-05 6
## 2019-11-06 7
## 2019-11-07 8
## 2019-11-08 9
## 2019-11-09 10
## [1] "2007-01-02 MSK" "2007-01-03 MSK" "2007-01-04 MSK" "2007-01-05 MSK"
## [5] "2007-01-06 MSK" "2007-01-07 MSK"
## Open High Low Close
## [1,] 50.03978 50.11778 49.95041 50.11778
## [2,] 50.23050 50.42188 50.23050 50.39767
## [3,] 50.42096 50.42096 50.26414 50.33236
## [4,] 50.37347 50.37347 50.22103 50.33459
## [5,] 50.24433 50.24433 50.11121 50.18112
## [6,] 50.13211 50.21561 49.99185 49.99185
Основное удобство работы с объектами типа xts
– удобные способы получать срезы исходных данных и возможность работать с датами:
## Open High Low Close
## 2007-01-06 50.24433 50.24433 50.11121 50.18112
## Open High Low Close
## 2007-03-01 50.81620 50.81620 50.56451 50.57075
## 2007-03-02 50.60980 50.72061 50.50808 50.61559
## 2007-03-03 50.73241 50.73241 50.40929 50.41033
## 2007-03-04 50.39273 50.40881 50.24922 50.32636
## 2007-03-05 50.26501 50.34050 50.26501 50.29567
## 2007-03-06 50.27464 50.32019 50.16380 50.16380
## 2007-03-07 50.14458 50.20278 49.91381 49.91381
## 2007-03-08 49.93149 50.00364 49.84893 49.91839
## 2007-03-09 49.92377 49.92377 49.74242 49.80712
## 2007-03-10 49.79370 49.88984 49.70385 49.88698
## 2007-03-11 49.83062 49.88295 49.76031 49.78806
## 2007-03-12 49.82763 49.90311 49.67049 49.74033
## 2007-03-13 49.69628 49.70863 49.37924 49.37924
## 2007-03-14 49.36270 49.53735 49.30746 49.53735
## 2007-03-15 49.57374 49.62310 49.39876 49.49600
## 2007-03-16 49.44900 49.65285 49.42416 49.59500
## 2007-03-17 49.55666 49.55666 49.33564 49.34714
## 2007-03-18 49.29778 49.67857 49.29778 49.65463
## 2007-03-19 49.62747 49.65407 49.51604 49.54590
## 2007-03-20 49.59529 49.62003 49.42321 49.50690
## 2007-03-21 49.49765 49.53961 49.41610 49.51807
## 2007-03-22 49.42306 49.42306 49.31184 49.39687
## 2007-03-23 49.27281 49.27281 48.93095 48.93095
## 2007-03-24 48.86635 48.86635 48.52684 48.52684
## 2007-03-25 48.50649 48.50649 48.33409 48.33973
## 2007-03-26 48.34210 48.44637 48.28969 48.28969
## 2007-03-27 48.25248 48.41572 48.23648 48.30851
## 2007-03-28 48.33090 48.53595 48.33090 48.53595
## 2007-03-29 48.59236 48.69988 48.57432 48.69988
## 2007-03-30 48.74562 49.00218 48.74562 48.93546
## 2007-03-31 48.95616 49.09728 48.95616 48.97490
## Open High Low Close
## 2007-01-02 50.03978 50.11778 49.95041 50.11778
## 2007-01-03 50.23050 50.42188 50.23050 50.39767
## 2007-01-04 50.42096 50.42096 50.26414 50.33236
## 2007-01-05 50.37347 50.37347 50.22103 50.33459
## 2007-01-06 50.24433 50.24433 50.11121 50.18112
## 2007-01-07 50.13211 50.21561 49.99185 49.99185
## Open High Low Close
## 2007-06-25 47.20471 47.42772 47.13405 47.42772
## 2007-06-26 47.44300 47.61611 47.44300 47.61611
## 2007-06-27 47.62323 47.71673 47.60015 47.62769
## 2007-06-28 47.67604 47.70460 47.57241 47.60716
## 2007-06-29 47.63629 47.77563 47.61733 47.66471
## 2007-06-30 47.67468 47.94127 47.67468 47.76719
## Open High Low Close
## 2007-01-02 50.03978 50.11778 49.95041 50.11778
## 2007-01-03 50.23050 50.42188 50.23050 50.39767
## 2007-01-04 50.42096 50.42096 50.26414 50.33236
## 2007-01-05 50.37347 50.37347 50.22103 50.33459
## 2007-01-06 50.24433 50.24433 50.11121 50.18112
## 2007-01-07 50.13211 50.21561 49.99185 49.99185
## Open High Low Close
## 2007-03-01 50.81620 50.81620 50.56451 50.57075
## 2007-03-02 50.60980 50.72061 50.50808 50.61559
## 2007-03-03 50.73241 50.73241 50.40929 50.41033
## 2007-03-04 50.39273 50.40881 50.24922 50.32636
## 2007-03-05 50.26501 50.34050 50.26501 50.29567
## 2007-03-06 50.27464 50.32019 50.16380 50.16380
## 2007-03-07 50.14458 50.20278 49.91381 49.91381
## 2007-03-08 49.93149 50.00364 49.84893 49.91839
## 2007-03-09 49.92377 49.92377 49.74242 49.80712
## 2007-03-10 49.79370 49.88984 49.70385 49.88698
## 2007-03-11 49.83062 49.88295 49.76031 49.78806
## 2007-03-12 49.82763 49.90311 49.67049 49.74033
## 2007-03-13 49.69628 49.70863 49.37924 49.37924
## 2007-03-14 49.36270 49.53735 49.30746 49.53735
## 2007-03-15 49.57374 49.62310 49.39876 49.49600
## 2007-03-16 49.44900 49.65285 49.42416 49.59500
## 2007-03-17 49.55666 49.55666 49.33564 49.34714
## 2007-03-18 49.29778 49.67857 49.29778 49.65463
## 2007-03-19 49.62747 49.65407 49.51604 49.54590
## 2007-03-20 49.59529 49.62003 49.42321 49.50690
## 2007-03-21 49.49765 49.53961 49.41610 49.51807
## 2007-03-22 49.42306 49.42306 49.31184 49.39687
## 2007-03-23 49.27281 49.27281 48.93095 48.93095
## 2007-03-24 48.86635 48.86635 48.52684 48.52684
## 2007-03-25 48.50649 48.50649 48.33409 48.33973
## 2007-03-26 48.34210 48.44637 48.28969 48.28969
## 2007-03-27 48.25248 48.41572 48.23648 48.30851
## 2007-03-28 48.33090 48.53595 48.33090 48.53595
## 2007-03-29 48.59236 48.69988 48.57432 48.69988
## 2007-03-30 48.74562 49.00218 48.74562 48.93546
## 2007-03-31 48.95616 49.09728 48.95616 48.97490
## Open High Low Close
## 2007-01-02 50.03978 50.11778 49.95041 50.11778
## 2007-01-03 50.23050 50.42188 50.23050 50.39767
## 2007-01-04 50.42096 50.42096 50.26414 50.33236
## 2007-01-05 50.37347 50.37347 50.22103 50.33459
## 2007-01-06 50.24433 50.24433 50.11121 50.18112
## 2007-01-07 50.13211 50.21561 49.99185 49.99185
## 2007-01-08 50.03555 50.10363 49.96971 49.98806
## Open High Low Close
## 2007-06-26 47.44300 47.61611 47.44300 47.61611
## 2007-06-27 47.62323 47.71673 47.60015 47.62769
## 2007-06-28 47.67604 47.70460 47.57241 47.60716
## Open High Low Close
## [1,] 50.03978 50.11778 49.95041 50.11778
## [2,] 50.23050 50.42188 50.23050 50.39767
## [3,] 50.42096 50.42096 50.26414 50.33236
## [4,] 50.37347 50.37347 50.22103 50.33459
## [5,] 50.24433 50.24433 50.11121 50.18112
## [6,] 50.13211 50.21561 49.99185 49.99185
## [1] "2007-01-02 MSK" "2007-01-03 MSK" "2007-01-04 MSK" "2007-01-05 MSK"
## [5] "2007-01-06 MSK" "2007-01-07 MSK"
## [1] ""
## Open High Low Close
## 2007-05-03 49.46328 49.69097 49.46328 49.58677
## 2007-05-23 47.93593 48.08242 47.88763 47.90068
xts
предоставляет возможность менять перидоичность данных
## df_xts.Open df_xts.High df_xts.Low df_xts.Close
## Jan 2007 50.03978 50.77336 49.76308 50.22578
## Feb 2007 50.22448 51.32342 50.19101 50.77091
## Mar 2007 50.81620 50.81620 48.23648 48.97490
## Apr 2007 48.94407 50.33781 48.80962 49.33974
## May 2007 49.34572 49.69097 47.51796 47.73780
## Jun 2007 47.74432 47.94127 47.09144 47.76719
## [1] 6
rnorm
используется для генерировани случайных чисел, распределенных нормально \(~N(0,1)\).## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Version 0.4-0 included new data defaults. See ?getSymbols.
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.