В данной лекции мы будем работать с базой данных scores2.csv, содержащей оценки студентов-политологов (без имен) по разным курсам. Переменные в таблице:
По ссылке:
Например, с сайта math-info.hse.ru:
df <- read.csv("http://math-info.hse.ru/f/2017-18/ps-ms/scores2.csv")
С компьютера:
Способ 1:
df <- read.csv(file.choose())
Откроется окно, выбрать нужный файл и нажать Открыть.
Способ 2:
Выбрать файл в папке, кликнуть правой кнопкой мыши, выбрать Свойства, скопировать путь к файлу - строку из расположения, например:
C:\Users\student
Поменять обратные слэши на прямые:
C:/Users/student
Вставить полученную строку в кавычках в read.csv():
df <- read.csv("C:/Users/student/scores2.csv")
Полностью, в отдельном окне:
Способ 1:
Кликнуть на название базы (например, df) в окне Environment. Именно на название, не на стрелочку в синем круге рядом (если на нее нажать, ничего драматичного не пройзойдет, просто в окне Environment отобразится список переменных):
Откроется база данных в отдельной вкладке:
Можно двигать вправо-влево, вверх-вниз.
Способ 2:
View(df)
Обратите внимание, буква V заглавная.
Вывести первые несколько строк:
head(df)
##             id catps mstat soc econ eng polth mstat2 phist law phil polsoc
## 1 М141БПЛТЛ024     7     9   8    8   9     8     10     8   7    9      9
## 2 М141БПЛТЛ031     8    10  10   10  10    10     10     9   9   10     10
## 3 М141БПЛТЛ075     9     9   9   10   9    10      9     8   9   10      9
## 4 М141БПЛТЛ017     9     9   8    8   9     9     10     6   9    9      9
## 5 М141БПЛТЛ069    10    10  10   10  10    10      9     8   8   10      9
## 6 М141БПЛТЛ072    10     9   8   10   9     8      9     8   8   10      9
##   ptheo preg compp game wpol male
## 1     7    8     8    6   10    1
## 2     9    8     8    9   10    1
## 3     9    8     8    7    9    1
## 4     8    8     8    8    9    0
## 5     7    6     5    8   10    1
## 6     7    8     8    9    9    0
Последние несколько строк:
tail(df)
##              id catps mstat soc econ eng polth mstat2 phist law phil
## 55 М141БПЛТЛ066     7    10   7    7   9     5      8     4   6    5
## 56 М141БПЛТЛ043     5     5   6    5   8     5      6     5   6    4
## 57 М141БПЛТЛ084     6     7   8    4   8     5      5    NA   8    4
## 58 М141БПЛТЛ005     5     7   5    5   7     4      7     4   5    4
## 59 М141БПЛТЛ044     4     5   7    4   6     4      4     5   4    4
## 60     13051038     5     4   4    4   9     5      5     5   5    4
##    polsoc ptheo preg compp game wpol male
## 55      6     4    6     4    5    6    0
## 56      5     4    5    NA    4    6    0
## 57      4     4    4     4    6    7    1
## 58      5     5    4     4    4    8    1
## 59      4     4    6    NA    5    5    1
## 60      4    NA    7     4    4    4    1
Структура базы данных:
str(df)
## 'data.frame':    60 obs. of  18 variables:
##  $ id    : Factor w/ 60 levels "06114043","130232038",..: 19 23 56 14 50 53 16 20 54 58 ...
##  $ catps : int  7 8 9 9 10 10 8 7 7 6 ...
##  $ mstat : int  9 10 9 9 10 9 7 10 9 6 ...
##  $ soc   : int  8 10 9 8 10 8 7 8 8 9 ...
##  $ econ  : int  8 10 10 8 10 10 6 7 8 5 ...
##  $ eng   : int  9 10 9 9 10 9 9 10 9 6 ...
##  $ polth : int  8 10 10 9 10 8 10 7 8 10 ...
##  $ mstat2: int  10 10 9 10 9 9 8 9 9 7 ...
##  $ phist : int  8 9 8 6 8 8 8 8 8 6 ...
##  $ law   : int  7 9 9 9 8 8 7 8 8 8 ...
##  $ phil  : int  9 10 10 9 10 10 7 8 9 6 ...
##  $ polsoc: int  9 10 9 9 9 9 9 8 9 9 ...
##  $ ptheo : int  7 9 9 8 7 7 7 8 7 6 ...
##  $ preg  : int  8 8 8 8 6 8 8 8 7 8 ...
##  $ compp : int  8 8 8 8 5 8 6 7 6 8 ...
##  $ game  : int  6 9 7 8 8 9 8 7 10 6 ...
##  $ wpol  : int  10 10 9 9 10 9 9 8 9 7 ...
##  $ male  : int  1 1 1 0 1 0 1 0 1 0 ...
Структура таблицы: названия переменных и их тип (numeric - числовой, integer - целочисленный, character - текстовый, factor - факторный).
Факторный тип представляет собой закодированный качественный показатель (текст). Например, у фактора может быть два уровня: 1 - мужчины, 2 - женщины.
Названия переменных:
colnames(df)
##  [1] "id"     "catps"  "mstat"  "soc"    "econ"   "eng"    "polth" 
##  [8] "mstat2" "phist"  "law"    "phil"   "polsoc" "ptheo"  "preg"  
## [15] "compp"  "game"   "wpol"   "male"
# и сохраняем изменения в самой df
df <- na.omit(df)
summary(df)
##             id         catps            mstat             soc        
##  130232038   : 1   Min.   : 5.000   Min.   : 5.000   Min.   : 5.000  
##  М141БПЛТЛ001: 1   1st Qu.: 6.000   1st Qu.: 6.250   1st Qu.: 6.000  
##  М141БПЛТЛ004: 1   Median : 7.000   Median : 7.500   Median : 7.000  
##  М141БПЛТЛ005: 1   Mean   : 6.815   Mean   : 7.593   Mean   : 7.241  
##  М141БПЛТЛ006: 1   3rd Qu.: 7.750   3rd Qu.: 9.000   3rd Qu.: 8.000  
##  М141БПЛТЛ007: 1   Max.   :10.000   Max.   :10.000   Max.   :10.000  
##  (Other)     :48                                                     
##       econ             eng             polth            mstat2      
##  Min.   : 4.000   Min.   : 6.000   Min.   : 4.000   Min.   : 4.000  
##  1st Qu.: 5.000   1st Qu.: 8.000   1st Qu.: 6.000   1st Qu.: 6.000  
##  Median : 6.000   Median : 8.500   Median : 6.000   Median : 7.000  
##  Mean   : 6.259   Mean   : 8.389   Mean   : 6.722   Mean   : 7.148  
##  3rd Qu.: 7.000   3rd Qu.: 9.000   3rd Qu.: 8.000   3rd Qu.: 8.750  
##  Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :10.000  
##                                                                     
##      phist            law             phil            polsoc     
##  Min.   :4.000   Min.   :5.000   Min.   : 4.000   Min.   : 4.00  
##  1st Qu.:4.000   1st Qu.:6.000   1st Qu.: 5.000   1st Qu.: 6.00  
##  Median :6.000   Median :7.000   Median : 6.000   Median : 8.00  
##  Mean   :5.833   Mean   :6.963   Mean   : 6.074   Mean   : 7.37  
##  3rd Qu.:7.000   3rd Qu.:8.000   3rd Qu.: 7.000   3rd Qu.: 8.00  
##  Max.   :9.000   Max.   :9.000   Max.   :10.000   Max.   :10.00  
##                                                                  
##      ptheo            preg           compp            game      
##  Min.   :4.000   Min.   :4.000   Min.   :4.000   Min.   : 4.00  
##  1st Qu.:5.000   1st Qu.:6.000   1st Qu.:5.000   1st Qu.: 5.00  
##  Median :5.000   Median :7.000   Median :5.000   Median : 6.00  
##  Mean   :5.685   Mean   :6.815   Mean   :5.648   Mean   : 6.37  
##  3rd Qu.:6.750   3rd Qu.:8.000   3rd Qu.:6.750   3rd Qu.: 8.00  
##  Max.   :9.000   Max.   :8.000   Max.   :8.000   Max.   :10.00  
##                                                                 
##       wpol             male       
##  Min.   : 4.000   Min.   :0.0000  
##  1st Qu.: 7.000   1st Qu.:0.0000  
##  Median : 8.000   Median :0.0000  
##  Mean   : 7.722   Mean   :0.4259  
##  3rd Qu.: 9.000   3rd Qu.:1.0000  
##  Max.   :10.000   Max.   :1.0000  
## 
Выбор переменной из базы данных осуществляется с помощью символа $:
summary(df$mstat2)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   4.000   6.000   7.000   7.148   8.750  10.000
Выборочное среднее:
mean(df$mstat2)
## [1] 7.148148
Выборочная дисперсия (несмещенная оценка):
var(df$mstat2)
## [1] 2.845563
Выборочное стандартное отклонение (несмещенная оценка):
sd(df$mstat2)
## [1] 1.68688
Медиана выборки:
median(df$mstat2)
## [1] 7
Нижний квартиль выборки:
quantile(df$mstat2, 0.25)
## 25% 
##   6
Верхний квартиль выборки:
quantile(df$mstat2, 0.75)
##  75% 
## 8.75
Выборочный квантиль какого-то уровня:
quantile(df$mstat2, 0.1)
## 10% 
##   5
Минимум:
min(df$mstat2)
## [1] 4
Максимум:
max(df$mstat2)
## [1] 10
Легко!
hist(df$phist)
Поменяем цвет заливки:
# col - цвет заливки
hist(df$phist, col = 'tomato')
Полную палитру цветов см. здесь.
Поменяем цвет границ столбиков:
# border - цвет границ
hist(df$phist, col = 'tomato', border = 'white')
Добавим заголовок:
# main - заголовок (главный)
hist(df$phist, col = 'tomato', main = 'Political history :(')
Добавим подпись к оси \(x\):
# xlab - подпись к оси x (x label)
hist(df$phist, col = 'tomato', main = 'Political history :(', xlab = 'Marks')
Добавим вертикальную линию, которая отчерчивает медиану:
hist(df$phist, col = 'tomato', main = 'Political history :(')
# прогонять строки с hist и abline одновременно (выделить мышкой и Run)
# v - вертикальная черта 
# col - цвет, lwd - ширина линии (line width), lty - тип (line type)
abline(v = median(df$phist), col = "blue", lwd = 2, lty = 2)
Добавим горизонтальную линию, которая отчерчивает определенную частоту значений:
hist(df$phist, col = 'tomato', main = 'Political history :(')
# прогонять строки с hist и abline одновременно (выделить мышкой и Run)
# h - горизонтальная линия на уровне 20
abline(h = 20, col = "green", lwd = 2, lty = 1)
Изменим число столбцов в гистограмме:
# breaks - число разбиений, два разреза - три столбика
hist(df$phist, col = 'tomato', main = 'Political history :(', breaks = 2)
Сделаем так, чтобы по оси y отмечались значения плотности (вероятности), а не абсолютные частоты:
# freq - частоты, frequences, мы их выключаем - FALSE
hist(df$phist, col = 'tomato', freq = FALSE)
Наложим на график кривую плотности соответствующего нормального распределения:
hist(df$phist, col = 'tomato', main = 'Political history :(', freq = FALSE)
curve(dnorm(x, mean(df$phist), sd = sd(df$phist)), add = TRUE)
Внимание:  Обязательно при freq=FALSE, иначе смысла нет, кривая будет проходить примерно в интервале от 0 до 1, на графике с абсолютными частотами ее просто не будет видно. Строки с hist() и curve() нужно прогонять сразу друг за другом, иначе R не поймет, куда накладывать кривую.
Сравним две гистограммы: изобразим их в одинаковом масштабе (одинаковые длины осей \(x\) и \(y\)):
hist(df$phist, col = 'darkred', main = 'Political history :(', xlim = c(1, 11))
hist(df$mstat, col = 'hotpink', main = 'Statistics :)', xlim = c(1, 11))
Нарисуем четыре графика одновременно - два на два (два графика в строке, два в столбце):
par(mfrow = c(2, 2))
hist(df$phist, col = 'darkred', main = 'Political history :(', xlim = c(1, 11))
hist(df$mstat, col = 'hotpink', main = 'Statistics :)', xlim = c(1, 11))
hist(df$phil, col = 'sienna1', main = 'Philosophy :(', xlim = c(1, 11))
hist(df$law, col = 'limegreen', main = 'Law :|', xlim = c(1, 11))
Три на один (один график в строке, три в столбце):
par(mfrow = c(3, 1))
hist(df$phist, col = 'darkred', main = 'Political history :(', xlim = c(1, 11))
hist(df$mstat, col = 'hotpink', main = 'Statistics :)', xlim = c(1, 11))
hist(df$phil, col = 'sienna1', main = 'Philosophy', xlim = c(1, 11))
boxplot(df$econ)
Поменяем цвет ящика с усами:
boxplot(df$econ, col = "yellow")
Построим ящик с усами по группам - группировка по переменной пол:
# через ~ указана переменная, по которой производится группировка
boxplot(df$econ ~ df$male,  col = c("yellow", "green"))
install.packages("vioplot")
library(vioplot)
vioplot(df$catps)
Поменять цвет:
vioplot(df$catps, col = "lightgreen")
Питон, который проглотил оценки студентов :)