В данной лекции мы будем работать с базой данных 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")
Питон, который проглотил оценки студентов :)