1 На плечах гигантов :)

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

Чтобы начать использовать любой пакет, скажем, tidyverse, нужно сделать два действия.

Установка пакеты: в меню Rstudio Tools - Install packages.

Подключаем пакет tidyverse, rio и skimr!

library(tidyverse)
## ── Attaching packages ────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 2.2.1.9000     ✔ purrr   0.2.5     
## ✔ tibble  1.4.2          ✔ dplyr   0.7.5     
## ✔ tidyr   0.8.1          ✔ stringr 1.3.1     
## ✔ readr   1.1.1          ✔ forcats 0.3.0
## Warning: package 'tibble' was built under R version 3.4.3
## Warning: package 'purrr' was built under R version 3.4.4
## Warning: package 'forcats' was built under R version 3.4.3
## ── Conflicts ───────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(rio)
## Warning: package 'rio' was built under R version 3.4.4
library(skimr)
## Warning: package 'skimr' was built under R version 3.4.4

Пакет tidyverse - это коллекция из множества пакетов. Например, в tidyverse входят: - dplyr для манипуляций с данными - ggplot2 для построения графиков - lubridate для работы с датами во временных рядах

А два других: - rio импортирует и экспортирует данные практически во все известные форматы; - skimr считает самые разнообразные описательные статистики, которые только можно представить.

Если при подключении пакета возникает ошибка (Error), то скорее всего пакет не установлен и его нужно установить через меню Tools - Install packages.

Подключите пакеты lattice и DataExplorer. Не забудьте раскомментировать строки, убрав решетку #.

library(lattice)
library(DataExplorer)
## Warning: package 'DataExplorer' was built under R version 3.4.3

Что умеют эти пакеты? - lattice пригодится нам для графиков - DataExplorer для быстрого автоматического графического анализа

Предварительно должен быть подключен пакет rio.

После загрузки мы сразу проверяем целостность данных командой glimpse(). Также разумно посмотреть на первые строки набора данных командой head() и на последние командой tail().

some <- import('manipulate.sav')
glimpse(some)
## Observations: 100
## Variables: 7
## Warning in as.POSIXlt.POSIXct(x, tz): unknown timezone 'zone/tz/2018c.1.0/
## zoneinfo/Europe/Moscow'
## $ ID            <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1...
## $ Sex           <chr> "M", "M", "M", "M", "M", "F", "M", "F", "M", "M"...
## $ FundCode      <chr> "HOS", "HOS", "HOS", "TAC", "TAC", "HOS", "HOS",...
## $ ArrivalDate   <dttm> 2005-03-10 03:04:00, 2004-08-27 12:32:00, 2005-...
## $ EmergDate     <dttm> 2005-03-10 05:09:00, 2004-08-27 13:10:00, 2005-...
## $ DischargeDate <dttm> 2005-03-16 13:00:00, 2004-08-27 14:00:00, 2005-...
## $ LengthofStay  <dbl> 6, 0, 5, 0, 10, 16, 2, 0, 5, 7, 9, 3, 1, 5, 8, 0...
head(some)
##   ID Sex FundCode         ArrivalDate           EmergDate
## 1  1   M      HOS 2005-03-10 03:04:00 2005-03-10 05:09:00
## 2  2   M      HOS 2004-08-27 12:32:00 2004-08-27 13:10:00
## 3  3   M      HOS 2005-02-19 19:18:00 2005-02-20 03:39:00
## 4  4   M      TAC 2007-09-24 09:35:00 2007-09-24 11:38:00
## 5  5   M      TAC 2009-01-19 08:39:00 2009-01-19 22:06:00
## 6  6   F      HOS 2008-12-16 08:58:00 2008-12-17 18:59:00
##         DischargeDate LengthofStay
## 1 2005-03-16 13:00:00            6
## 2 2004-08-27 14:00:00            0
## 3 2005-02-25 01:00:00            5
## 4 2007-09-24 17:05:00            0
## 5 2009-01-29 13:01:00           10
## 6 2009-01-02 05:45:00           16
tail(some)
##      ID Sex FundCode         ArrivalDate           EmergDate
## 95   95   M      HOS 2005-09-11 02:41:59 2005-09-11 11:05:00
## 96   96   F      DVA 2005-09-17 15:57:00 2005-09-17 16:17:00
## 97   97   M      HOS 2005-09-26 18:11:00 2005-09-26 23:54:00
## 98   98   F      TAC 2005-10-02 13:44:00 2005-10-02 22:42:00
## 99   99   M      TAC 2005-10-25 00:01:00 2005-10-25 04:16:00
## 100 100   M      HOS 2005-10-30 15:35:00 2005-10-31 11:27:59
##           DischargeDate LengthofStay
## 95  2005-09-14 10:00:00            3
## 96  2005-09-23 13:30:00            5
## 97  2005-10-03 11:38:00            6
## 98  2005-10-06 16:00:00            4
## 99  2005-10-28 12:08:00            3
## 100 2005-11-04 10:49:00            4

Загрузите данные cola.dta из stata. Посмотрите на первые и последние строки. - Сколько переменных в наборе данных? 5 - Сколько наблюдений? 5466

cola <- import('cola.dta')
glimpse(cola)
## Observations: 5,466
## Variables: 5
## $ id      <dbl> 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, ...
## $ choice  <dbl> 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, ...
## $ price   <dbl> 1.79, 1.79, 1.79, 1.79, 1.79, 0.89, 1.41, 0.84, 0.89, ...
## $ feature <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, ...
## $ display <dbl> 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, ...
head(cola)
##   id choice price feature display
## 1  1      0  1.79       0       0
## 2  1      0  1.79       0       0
## 3  1      1  1.79       0       0
## 4  2      0  1.79       0       0
## 5  2      0  1.79       0       0
## 6  2      1  0.89       1       1
tail(cola)
##        id choice price feature display
## 5461 1821      0  1.39       0       0
## 5462 1821      1  0.89       0       0
## 5463 1821      0  1.39       0       0
## 5464 1822      0  1.19       1       0
## 5465 1822      0  0.88       1       1
## 5466 1822      1  0.88       1       1

Исключение составляет только загрузка данных eviews. Пакет rio пока что не умеет их импортировать. Приходится использовать другой пакет :)

library(hexView) # подключаем специальный пакет для чтения данных eviews
housing <- readEViews('housing.wf1')
## Warning in readEViews("housing.wf1"): Skipping boilerplate variable

## Warning in readEViews("housing.wf1"): Skipping boilerplate variable
glimpse(housing)
## Observations: 546
## Variables: 12
## $ AIRCO    <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0,...
## $ BATHRMS  <dbl> 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1,...
## $ BEDROOMS <dbl> 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 3, 4,...
## $ DRIVEWAY <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,...
## $ FULLBASE <dbl> 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,...
## $ GARAGEPL <dbl> 1, 0, 0, 0, 0, 0, 2, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0,...
## $ GASHW    <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
## $ LOTSIZE  <dbl> 5850, 4000, 3060, 6650, 6360, 4160, 3880, 4160, 4800,...
## $ PREFAREA <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
## $ PRICE    <dbl> 42000, 38500, 49500, 60500, 61000, 66000, 66000, 6900...
## $ RECROOM  <dbl> 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,...
## $ STORIES  <dbl> 2, 1, 1, 2, 1, 1, 2, 3, 1, 4, 1, 1, 2, 1, 1, 1, 2, 3,...

2 Первый взгляд

df <- diamonds

Для описательных статистик понадобится подключённый ранее пакет skimr.

skim(df)
## Skim summary statistics
##  n obs: 53940 
##  n variables: 10
## Warning: package 'bindrcpp' was built under R version 3.4.4
## 
## Variable type: factor 
##  variable missing complete     n n_unique
##   clarity       0    53940 53940        8
##     color       0    53940 53940        7
##       cut       0    53940 53940        5
##                                     top_counts ordered
##   SI1: 13065, VS2: 12258, SI2: 9194, VS1: 8171    TRUE
##            G: 11292, E: 9797, F: 9542, H: 8304    TRUE
##  Ide: 21551, Pre: 13791, Ver: 12082, Goo: 4906    TRUE
## 
## Variable type: integer 
##  variable missing complete     n   mean      sd  p0 p25  p50     p75  p100
##     price       0    53940 53940 3932.8 3989.44 326 950 2401 5324.25 18823
##      hist
##  ▇▃▂▁▁▁▁▁
## 
## Variable type: numeric 
##  variable missing complete     n  mean   sd   p0   p25   p50   p75  p100
##     carat       0    53940 53940  0.8  0.47  0.2  0.4   0.7   1.04  5.01
##     depth       0    53940 53940 61.75 1.43 43   61    61.8  62.5  79   
##     table       0    53940 53940 57.46 2.23 43   56    57    59    95   
##         x       0    53940 53940  5.73 1.12  0    4.71  5.7   6.54 10.74
##         y       0    53940 53940  5.73 1.14  0    4.72  5.71  6.54 58.9 
##         z       0    53940 53940  3.54 0.71  0    2.91  3.53  4.04 31.8 
##      hist
##  ▇▅▁▁▁▁▁▁
##  ▁▁▁▃▇▁▁▁
##  ▁▅▇▁▁▁▁▁
##  ▁▁▁▇▇▃▁▁
##  ▇▁▁▁▁▁▁▁
##  ▇▃▁▁▁▁▁▁

Дальше будем строить гистограммы! Если нужно посмотреть по-быстрому, то можно сделать так:

qplot(data = df, x = carat)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Но вообще на графиках должны быть подписаны оси и название.

qplot(data = df, x = carat) +
  labs(x = 'Вес', y = 'Количество', title = 'Распределение бриллиантов по весу')
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Потренируемся с качественными переменными и нарисуем гистограмму для качества огранки бриллианта.

qplot(data = df, x = cut)  +
  labs(x = 'Качество огранка', y = 'Количество', title = 'Распределение бриллиантов по огранке')

C помощью qplot можно создавать и диаграммы рассеяния. Посмотрим сразу на цену бриллианта и его вес.

qplot(data = df, x = carat, y = price)

А можно визуализировать сразу несколько диаграмм! Для этого, например, используется пакет lattice и функция splom.

library(lattice) # загружаем пакет
splom(df[1:1000, c('carat', 'depth', 'table')]) # строим диаграммы рассеяния для 1000 наблюдений

Постройте гистограмму для цены бриллианта. Она находится в столбце price набора данных под названием df. Не забудьте подписать оси и придумать название.

qplot(data = df, x = price) +
 labs(x = 'Цена', y = 'Количесвто', title = 'Гистограмма')  
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Постройте диаграмму рассеяния: по оси абсцисс изобразите параметры бриллианта (столбец depth), по оси ординат — цену (price).

qplot(data = df, x = depth, y = price) +
 labs(x = 'Параметры бриллианта', y = 'Цена', title = 'Диаграмма рассеяния')

3 Одним махом!

Есть и пакеты для автоматического графического анализа данных, например, DataExplorer.

Если до прихода гостей осталось 5 минут и нужно быстро глянуть на данные:

library(DataExplorer)
create_report(diamonds)
## 
## 
## processing file: report.rmd
## 
  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |.....                                                            |   7%
##   ordinary text without R code
## 
## 
  |                                                                       
  |.........                                                        |  14%
## label: global_options (with options) 
## List of 1
##  $ include: logi FALSE
## 
## 
  |                                                                       
  |..............                                                   |  21%
##    inline R code fragments
## 
## 
  |                                                                       
  |...................                                              |  29%
## label: data_structure
## 
  |                                                                       
  |.......................                                          |  36%
##   ordinary text without R code
## 
## 
  |                                                                       
  |............................                                     |  43%
## label: plot_data_structure
## 
  |                                                                       
  |................................                                 |  50%
##   ordinary text without R code
## 
## 
  |                                                                       
  |.....................................                            |  57%
## label: missing_values
## 
  |                                                                       
  |..........................................                       |  64%
##   ordinary text without R code
## 
## 
  |                                                                       
  |..............................................                   |  71%
## label: histogram
## 
  |                                                                       
  |...................................................              |  79%
##   ordinary text without R code
## 
## 
  |                                                                       
  |........................................................         |  86%
## label: bar
## 
  |                                                                       
  |............................................................     |  93%
##   ordinary text without R code
## 
## 
  |                                                                       
  |.................................................................| 100%
## label: correlation
## output file: /Users/ola/Documents/r_intro_2/docs/report.knit.md
## /Applications/RStudio.app/Contents/MacOS/pandoc/pandoc +RTS -K512m -RTS /Users/ola/Documents/r_intro_2/docs/report.utf8.md --to html4 --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output /Users/ola/Documents/r_intro_2/docs/report.html --smart --email-obfuscation none --self-contained --standalone --section-divs --table-of-contents --toc-depth 6 --template /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rmarkdown/rmd/h/default.html --no-highlight --variable highlightjs=1 --variable 'theme:cerulean' --include-in-header /var/folders/5f/kqgc20s95m9_xjdf66mk50q80000gn/T//RtmpZSljzm/rmarkdown-str3434d292f71.html --mathjax --variable 'mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'
## 
## Output created: report.html
## 
## 
## Report is generated at "/Users/ola/Documents/r_intro_2/docs/report.html".

4 Возня с данными

Отобрать наблюдения по нескольким критериям можно с помощью команды filter()

diamonds2 <- filter(diamonds, price > mean(price), carat < mean(carat))
skim(diamonds2)
## Skim summary statistics
##  n obs: 198 
##  n variables: 10 
## 
## Variable type: factor 
##  variable missing complete   n n_unique                         top_counts
##   clarity       0      198 198        5  VVS: 79, VVS: 48, VS1: 29, IF: 26
##     color       0      198 198        6          D: 93, E: 47, F: 47, G: 6
##       cut       0      198 198        5 Ide: 140, Ver: 39, Pre: 11, Goo: 6
##  ordered
##     TRUE
##     TRUE
##     TRUE
## 
## Variable type: integer 
##  variable missing complete   n   mean     sd   p0    p25    p50  p75 p100
##     price       0      198 198 4395.4 464.43 3936 4048.5 4240.5 4504 6607
##      hist
##  ▇▃▂▁▁▁▁▁
## 
## Variable type: numeric 
##  variable missing complete   n  mean    sd    p0   p25   p50   p75  p100
##     carat       0      198 198  0.71 0.052  0.51  0.7   0.71  0.74  0.79
##     depth       0      198 198 61.51 0.93  58.4  61.1  61.6  62    65.4 
##     table       0      198 198 56.64 1.89  53    56    56    57    66   
##         x       0      198 198  5.73 0.15   5.21  5.7   5.75  5.83  6.03
##         y       0      198 198  5.76 0.15   5.11  5.73  5.78  5.85  6.06
##         z       0      198 198  3.53 0.095  3.13  3.51  3.55  3.58  3.74
##      hist
##  ▁▁▁▁▁▇▃▃
##  ▁▁▃▇▅▁▁▁
##  ▂▇▃▂▁▁▁▁
##  ▁▁▁▁▅▇▅▁
##  ▁▁▁▁▁▇▅▁
##  ▁▁▁▁▂▇▃▁

Отберите бриллианты с длиной, переменная x, больше 5 мм. - Чему равна их средняя цена? 5455.1

diamonds3 <- filter(df, x > 5)
skim(diamonds3)
## Skim summary statistics
##  n obs: 36321 
##  n variables: 10 
## 
## Variable type: factor 
##  variable missing complete     n n_unique
##   clarity       0    36321 36321        8
##     color       0    36321 36321        7
##       cut       0    36321 36321        5
##                                   top_counts ordered
##   SI1: 9895, VS2: 8185, SI2: 8174, VS1: 5093    TRUE
##           G: 7395, F: 6390, H: 6005, E: 5895    TRUE
##  Ide: 12825, Pre: 9812, Ver: 8528, Goo: 3696    TRUE
## 
## Variable type: integer 
##  variable missing complete     n   mean      sd  p0  p25  p50  p75  p100
##     price       0    36321 36321 5455.1 4061.05 701 2370 4253 7108 18823
##      hist
##  ▇▆▃▂▁▁▁▁
## 
## Variable type: numeric 
##  variable missing complete     n  mean   sd    p0   p25   p50   p75  p100
##     carat       0    36321 36321  1.02 0.43  0.25  0.7   1     1.21  5.01
##     depth       0    36321 36321 61.76 1.55 43    61    61.9  62.6  79   
##     table       0    36321 36321 57.71 2.28 43    56    57    59    95   
##         x       0    36321 36321  6.33 0.85  5.01  5.68  6.34  6.83 10.74
##         y       0    36321 36321  6.33 0.9   4.11  5.7   6.34  6.82 58.9 
##         z       0    36321 36321  3.91 0.55  0     3.52  3.92  4.21 31.8 
##      hist
##  ▇▇▂▁▁▁▁▁
##  ▁▁▁▃▇▁▁▁
##  ▁▃▇▁▁▁▁▁
##  ▇▇▇▃▂▁▁▁
##  ▇▁▁▁▁▁▁▁
##  ▇▆▁▁▁▁▁▁

Перейдём к созданию новых переменных!

Мы добавим в набор данных логарифм цены каждого бриллианта. - Под каким названием добавлена переменная в набор данных? lprice

diamonds4 <- mutate(diamonds, lprice = log(price))
skim(diamonds4)
## Skim summary statistics
##  n obs: 53940 
##  n variables: 11 
## 
## Variable type: factor 
##  variable missing complete     n n_unique
##   clarity       0    53940 53940        8
##     color       0    53940 53940        7
##       cut       0    53940 53940        5
##                                     top_counts ordered
##   SI1: 13065, VS2: 12258, SI2: 9194, VS1: 8171    TRUE
##            G: 11292, E: 9797, F: 9542, H: 8304    TRUE
##  Ide: 21551, Pre: 13791, Ver: 12082, Goo: 4906    TRUE
## 
## Variable type: integer 
##  variable missing complete     n   mean      sd  p0 p25  p50     p75  p100
##     price       0    53940 53940 3932.8 3989.44 326 950 2401 5324.25 18823
##      hist
##  ▇▃▂▁▁▁▁▁
## 
## Variable type: numeric 
##  variable missing complete     n  mean   sd    p0   p25   p50   p75  p100
##     carat       0    53940 53940  0.8  0.47  0.2   0.4   0.7   1.04  5.01
##     depth       0    53940 53940 61.75 1.43 43    61    61.8  62.5  79   
##    lprice       0    53940 53940  7.79 1.01  5.79  6.86  7.78  8.58  9.84
##     table       0    53940 53940 57.46 2.23 43    56    57    59    95   
##         x       0    53940 53940  5.73 1.12  0     4.71  5.7   6.54 10.74
##         y       0    53940 53940  5.73 1.14  0     4.72  5.71  6.54 58.9 
##         z       0    53940 53940  3.54 0.71  0     2.91  3.53  4.04 31.8 
##      hist
##  ▇▅▁▁▁▁▁▁
##  ▁▁▁▃▇▁▁▁
##  ▂▇▆▆▆▇▅▃
##  ▁▅▇▁▁▁▁▁
##  ▁▁▁▇▇▃▁▁
##  ▇▁▁▁▁▁▁▁
##  ▇▃▁▁▁▁▁▁

Добавьте в набор данных для каждого бриллианта стоимость одного карата. - Чему равна медианная стоимость одного карата? 3495.2

diamonds5 <- mutate(diamonds, carat_price = price/carat)
skim(diamonds5)
## Skim summary statistics
##  n obs: 53940 
##  n variables: 11 
## 
## Variable type: factor 
##  variable missing complete     n n_unique
##   clarity       0    53940 53940        8
##     color       0    53940 53940        7
##       cut       0    53940 53940        5
##                                     top_counts ordered
##   SI1: 13065, VS2: 12258, SI2: 9194, VS1: 8171    TRUE
##            G: 11292, E: 9797, F: 9542, H: 8304    TRUE
##  Ide: 21551, Pre: 13791, Ver: 12082, Goo: 4906    TRUE
## 
## Variable type: integer 
##  variable missing complete     n   mean      sd  p0 p25  p50     p75  p100
##     price       0    53940 53940 3932.8 3989.44 326 950 2401 5324.25 18823
##      hist
##  ▇▃▂▁▁▁▁▁
## 
## Variable type: numeric 
##     variable missing complete     n    mean      sd      p0     p25
##        carat       0    53940 53940    0.8     0.47    0.2     0.4 
##  carat_price       0    53940 53940 4008.39 2012.67 1051.16 2477.94
##        depth       0    53940 53940   61.75    1.43   43      61   
##        table       0    53940 53940   57.46    2.23   43      56   
##            x       0    53940 53940    5.73    1.12    0       4.71
##            y       0    53940 53940    5.73    1.14    0       4.72
##            z       0    53940 53940    3.54    0.71    0       2.91
##      p50     p75     p100     hist
##     0.7     1.04     5.01 ▇▅▁▁▁▁▁▁
##  3495.2  4949.6  17828.85 ▇▇▂▁▁▁▁▁
##    61.8    62.5     79    ▁▁▁▃▇▁▁▁
##    57      59       95    ▁▅▇▁▁▁▁▁
##     5.7     6.54    10.74 ▁▁▁▇▇▃▁▁
##     5.71    6.54    58.9  ▇▁▁▁▁▁▁▁
##     3.53    4.04    31.8  ▇▃▁▁▁▁▁▁

Табличку с данными иногда приходится сортировать!

Мы последовательно выполним два действия, сортировку и отбор самых верхних строк.

diamonds6 <- arrange(diamonds, price) %>% head(3)
diamonds6
## # A tibble: 3 x 10
##   carat cut     color clarity depth table price     x     y     z
##   <dbl> <ord>   <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1  0.23 Ideal   E     SI2      61.5    55   326  3.95  3.98  2.43
## 2  0.21 Premium E     SI1      59.8    61   326  3.89  3.84  2.31
## 3  0.23 Good    E     VS1      56.9    65   327  4.05  4.07  2.31

Отсортируйте бриллианты по массе и отберите самые нижние пять строк.

diamonds7 <- arrange(df, carat) %>% tail(5)
diamonds7
## # A tibble: 5 x 10
##   carat cut     color clarity depth table price     x     y     z
##   <dbl> <ord>   <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1  4.01 Premium I     I1       61      61 15223  10.1 10.1   6.17
## 2  4.01 Premium J     I1       62.5    62 15223  10.0  9.94  6.24
## 3  4.13 Fair    H     I1       64.8    61 17329  10    9.85  6.43
## 4  4.5  Fair    J     I1       65.8    58 18531  10.2 10.2   6.72
## 5  5.01 Fair    J     I1       65.5    59 18018  10.7 10.5   6.98

5 Россия - родина слонов!

С данными на русском языке иногда приходится повозиться: пакет rio может не справляться с импортом русским букв.

Сейчас распространено две кодировки для русского текста: UTF-8 и CP1251. Более современной является UTF-8 и сохранять свои файлы разумно именно в ней. Однако приходится работать и с CP1251.

Перед нами два csv файла с русскими буквами rus_utf8.csv и rus_cp1251.csv.

Проверьте, читаются ли эти файлы командой import()

data_utf <- import('rus_utf8.csv')
glimpse(data_utf)
## Observations: 3
## Variables: 3
## $ one   <chr> "привет", "дорогой", "друг"
## $ two   <int> 5, 5, 5
## $ three <int> 6, 7, 9
data_cp <- import('rus_cp1251.csv')
glimpse(data_cp)
## Observations: 3
## Variables: 3
## $ one   <chr> "\xef\xf0\xe8\xe2\xe5\xf2", "\xe4\xee\xf0\xee\xe3\xee\xe...
## $ two   <int> 5, 5, 5
## $ three <int> 6, 7, 9

Здесь на помощь приходят другие пакеты, например, функция read_csv из пакета readr:

data_cp2 <- read_csv('rus_cp1251.csv', locale = locale(encoding = 'CP1251'))
## Parsed with column specification:
## cols(
##   one = col_character(),
##   two = col_integer(),
##   three = col_integer()
## )
glimpse(data_cp2)
## Observations: 3
## Variables: 3
## $ one   <chr> "привет", "дорогой", "друг"
## $ two   <int> 5, 5, 5
## $ three <int> 6, 7, 9
data_utf2 <- read_csv('rus_utf8.csv', locale = locale(encoding = 'UTF8'))
## Parsed with column specification:
## cols(
##   one = col_character(),
##   two = col_integer(),
##   three = col_integer()
## )
glimpse(data_utf2)
## Observations: 3
## Variables: 3
## $ one   <chr> "привет", "дорогой", "друг"
## $ two   <int> 5, 5, 5
## $ three <int> 6, 7, 9

6 Не пропадёт наш скорбный труд :)

Есть много форматов данных. Самым простым и потому универсальным является формат csv, comma separated values. Этот формат понимают все программы, работающие с данными.

Экспортируем набор данных про бриллианты в csv:

export(diamonds, 'diamonds.csv')

Теперь эти данные можно прочитать в большинстве программ! Ровно таким же образом можно экспортировать и в другие форматы: - xlsx для MS Excel - dta для stata - sav для spss

Экспортируйте набор данных diamonds в эксельчик.

export(df, 'diamonds.xlsx')

Не забудьте, что имя файла должно быть в кавычках. Двойных или одинарных - не важно.

7 Спасите-помогите

?filter
help(package = 'skimr')

Можно посмотреть, какие виньетки содержит пакет,

vignette(package = 'skimr')

А дальше, узнав название виньеток, прочитать любую из них, например,

vignette('Using_skimr')

8 Как обойтись без этого курса и платных программ? :)

Открытые и бесплатные программы для работы с данными, в которых можно кликать мышкой!

Ура :)