Работа с базами данных в R

Карен Аванесян
Апрель 2018, Ростов-на-Дону

Библиотеки (Packages) (1)

R поддерживает огромное количество форматов данны, однако для их чтения необходимо устанавливать и загружать дополнительные пакеты. Для чтения файлов в формате spss (sav) необходим пакет haven.

install.packages("haven", dependencies = TRUE) #устанавливает пакет, а благодаря аргументу dependencies=T также другие пакеты, необходимые для корректной работы требуемой библиотеки. 

После того как библиотека установлена, для каждой сессии ее необходимо загружать. Это делается следующей командой:

library(haven)

Справка (Help)

Для получения справки по документации библиотеки с перечнем всех доступных функций можно вызвать следующую команду:

help(package = "haven")

Также можно получить справку по отдельной команде и спецификации аргументов в ней:

help("read_sav")
?read_sav #делает то же самое

Можно также вызвать стартовую страницу справки для дальнейшей самостоятельной навигации

help.start()

Загрузка и чтение файлов

Загрузим базу PISA по Ростовской области за 2015 год. Она находится по следующей ссылке: https://github.com/karavan88/sfedu/blob/master/Pisa_Rostov.sav Файл необходимо сохранить в рабочую папку (чаще всего, папка R в “Мои документы”)

df <- read_sav("Pisa_Rostov.sav")

R теперь запомнил данный объект под именем df.

View(df) #откроет полностью базу данных в отдельной вкладке

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

Выборка данных

variables <- c("ST004D01T", "ST011Q03TA", "ST012Q06NA", "ST123Q01NA", "ST118Q04NA", "ST119Q03NA", "ST071Q01NA", "ST071Q02NA", "ST071Q03NA", "ST071Q04NA", "ST071Q05NA" )
pisarostov <- subset(df, select = variables)
summary(pisarostov)

Как видно, с базой данных еще необходимо работать.

  • Нет ярлыков переменных, только их имена, которые мало что значат.
  • Качественные переменные определяются как количественные.

Качественные переменные в R (1)

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

colnames(pisarostov) <- c("Gender", "Study_Place_Home", "PCs_home", "Parents_Interest", "tension", "leadership", "add_learning_science", "add_learning_math", "add_learning_lang", "add_learnin_foreign_lang", "add_learning_other")
View(pisarostov)

Качественные переменные в R (2)

Теперь необходимо перекодировать количественные переменные в качественные

pisarostov$Gender <- factor(pisarostov$Gender, labels = c("female", "male"), levels = c(1,2))

pisarostov$tension <- factor(pisarostov$tension, labels = c("strongly disagree", "disagree", "agree", "strongly agree"), levels = c(1,2,3,4))

pisarostov$leadership <- factor(pisarostov$leadership, labels = c("strongly disagree", "disagree", "agree", "strongly agree"), levels = c(1,2,3,4))

Качественные переменные (3)

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

table(pisarostov$Gender, pisarostov$leadership)

         strongly disagree disagree agree strongly agree
  female                 0        4     9              5
  male                   0        4     6              1

Качественные переменные (4)

Таблица может быть улучшена:

table(Gender = pisarostov$Gender, "I get very tense when I study for a test" = pisarostov$leadership)
        I get very tense when I study for a test
Gender   strongly disagree disagree agree strongly agree
  female                 0        4     9              5
  male                   0        4     6              1

Качественные переменные (5)

Для эстетически более привлекательных визуализаций необходимо установить и загрузить спецаильный пакет

install.packages("sjPlot", dependencies = TRUE)
library(sjPlot)
sjt.frq(pisarostov$Gender)
pisarostov$Gender
value N raw % valid % cumulative %
female 18 58.06 58.06 58.06
male 13 41.94 41.94 100.00
missings 0 0.00
total N=31 · valid N=31 · x̄=1.42 · σ=0.50

Качественные переменные (6)

То же самое применимо к бивариативным отношениям между переменными

sjt.xtab(pisarostov$Gender, pisarostov$leadership, show.row.prc = TRUE, show.obs = FALSE)
Gender leadership Total
strongly disagree disagree agree strongly agree
female 0 % 22.2 % 50 % 27.8 % 100 %
male 0 % 36.4 % 54.5 % 9.1 % 100 %
Total 0 % 27.6 % 51.7 % 20.7 % 100 %
χ2=NaN · df=3 · Cramer’s V=NaN · Fisher’s p=0.445

Количественные переменные и дескриптивная статистика (1)

Самым простым способом получения информации о количественной переменной является команда

summary(pisarostov$add_learning_math)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   1.00    6.00    7.50   10.19   10.00   30.00       5 

Количественные переменные и дескриптивная статистика (2)

Единичными командами можно также получить среднее и среднеквадратическое отклонение

mean(pisarostov$add_learning_science, na.rm = TRUE) #второй аргумент не учитывает в расчете среднего пропущенные значения (NAs), наличие которых делает исполнение команды невозможной
[1] 10.30769
sd(pisarostov$add_learning_science, na.rm = TRUE)
[1] 7.968785

Количественные переменные и дескриптивная статистика (3)

На основе имеющихся переменных можно высчитать новую. В данных PISA по Ростовской области нам может быть интересно знать, сколько в целом школьники тратят часов на дополнительное обучение вне школы по всем предметам. Сохраним это значение как переменную в данных

pisarostov$add_learning_total <- pisarostov$add_learnin_foreign_lang + pisarostov$add_learning_science + pisarostov$add_learning_math + pisarostov$add_learnin_foreign_lang + pisarostov$add_learning_other
summary(pisarostov$add_learning_total)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  14.00   24.50   42.00   53.58   71.75  150.00       7