Визуализация данных в R

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

Гистограмма (1)

Визуализацию данных мы начнем с гистограммы - графика, показывающего распределение в количественных переменных.

library(haven)
essru <- read_sav("ESS8RU.sav")
hist(essru$agea, col = "blue", border = "white", main = "Гистограмма", xlab = "Возраст")

Гистограмма (2)

graph

Ящиковые диаграммы (Box Plots)

essru$gndr <- factor(essru$gndr, labels = c("Male", "Female"))
boxplot(agea~gndr, data = essru, col = "green", main = "Ящиковая диаграмма возраста по полу")

Бар-чарты (1)

essru$edlvdru <- factor(essru$edlvdru, ordered = T, levels = c(1:11), labels = c("Не учился", "Начальное", "Неполное среднее","Среднее", "Начальное Проф1", "Начальное проф2", "Среднее Проф", "Бакалавр", "Магистр", "Специалист", "Ученая степень" ))

counts <- table(essru$edlvdru)
barplot(counts, cex.names=0.5, las=2)

Бар-чарты (2)

graph

Гистограммы в ggplot2 (1)

ggplot2 - один из наиболее популярных пакетов по визуализации данных. Мы преимущественно будем использовать его и попробуем построить гистограмму

library(ggplot2)
# Basic histogram
ggplot(essru, aes(x=agea))+
geom_histogram(binwidth=2, color="black", fill="cyan")+
    xlab("Возраст")+
    ggtitle("Гистограмма")+
    theme(plot.title = element_text(hjust = 0.5))

Гистограммы в ggplot2 (2)

plot of chunk unnamed-chunk-7

Гистограммы в ggplot2 (3)

Добавим к графику линию, указывающую на среднее

library(ggplot2)
# Basic histogram
ggplot(essru, aes(x=agea))+
geom_histogram(binwidth=2, color="black", fill="steelblue3")+
    xlab("Возраст")+
    ggtitle("Гистограмма")+
    theme(plot.title = element_text(hjust = 0.5))+
    geom_vline(aes(xintercept=mean(agea)),
            color="blue", linetype="dashed", size=1)

Гистограммы в ggplot2 (4)

plot of chunk unnamed-chunk-9

Гистограммы в ggplot2 (5)

ggplot(essru, aes(x=agea))+
    geom_histogram(aes(y=..density..), colour="black", fill="white", binwidth=2)+
    geom_density(alpha=.2, fill="#FF6666") 

Гистограммы в ggplot2 (6)

plot of chunk unnamed-chunk-11

График функции плотности вероятности (Density Plots) в ggplot2 (1)

Подсчитать среднее для каждой группы

library(plyr)
mu <- ddply(essru, "gndr", summarise, grp.mean=mean(agea))
head(mu)
ggplot(essru, aes(x=agea, fill=gndr)) + #разница между color и fill
  geom_density(alpha = 0.4, size = 0.8)+
  geom_vline(data=mu, aes(xintercept=grp.mean, color=gndr))+
    scale_color_brewer(palette="Dark2")

plot of chunk unnamed-chunk-13

График функции плотности вероятности (Density Plots) в ggplot2 (2)

graph

Быстрые публикации в ggpubr (1)

Pisa_Russia_2015 <- read_sav("Pisa Russia 2015.sav")
Pisa_Russia_2015$add_learn_math <- Pisa_Russia_2015$ST071Q02NA
Pisa_Russia_2015$gender <- Pisa_Russia_2015$ST004D01T
Pisa_Russia_2015$gender <- factor(Pisa_Russia_2015$ST004D01T, labels = c("female", "male"), levels = c(1,2))

library(ggpubr)
library(gridExtra)

Быстрые публикации в ggpubr (2)

# Создать Density plot 
density.p <- ggdensity(Pisa_Russia_2015, x = "add_learn_math", 
                       fill = "gender", palette = "jco")

# Произвести расчет дескриптивной статистики по группам
stable <- desc_statby(Pisa_Russia_2015, measure.var = "add_learn_math",
                      grps = "gender")
stable <- stable[, c("gender", "length","min", "mean", "max", "sd")] #извлекаем необходимые элементы дескриптивной статистики из полученного ряда данных
# Summary table plot, medium orange theme
stable.p <- ggtexttable(stable, rows = NULL, 
                        theme = ttheme("mOrange"))

Быстрые публикации в ggpubr (3)

# Написать текст
text <- paste("Данные лонгитюдного исследования PISA",
              "относительно внеаудиторных дополнительных",
              "занятий по математике выявили,",
              "что в России школьники старших классов",
              "мужского пола в среднем тратят на данный вид активности больше", 
              "чем студенты женского пола", sep = " ")
text.p <- ggparagraph(text = text, face = "italic", size = 11, color = "black")
# Расположить график, таблицу и текст на одной странице
grid.arrange(density.p, stable.p, text.p, ncol = 1, nrow = 3, heights = c(1, 0.5, 0.3))

plot of chunk unnamed-chunk-16

Быстрые публикации в ggpubr (4)

graph

Ящиковые диаграммы в ggplot2 (1)

ggplot(data = essru, aes(x = gndr,y = agea, fill = gndr))+
geom_boxplot()

Ящиковые диаграммы в ggplot2 (2)

plot of chunk unnamed-chunk-18

Ящиковые диаграммы в ggplot2 (3)

ggplot(data = essru, aes(x = edlvdru,y = agea, fill = edlvdru))+
geom_boxplot()+
    theme(axis.text.x=element_blank(),plot.title = element_text(hjust = 0.5))+
    xlab("Уровень Образования")+
    ylab("Возраст")+
    ggtitle("Ящиковая Диаграмма")

Ящиковые диаграммы в ggplot2 (4)

graph

Скрипичные диаграммы (Violin Plots) (1)

ggplot(data = Pisa_Russia_2015, aes(x = gender, y = add_learn_math))+
    geom_violin(trim = FALSE, fill = "red", col = "blue", alpha = 0.5, size = 1)

plot of chunk unnamed-chunk-20 Задание: добавьте к данному графику названия для осей х, у и дайте ему название.

Скрипичные диаграммы (Violin Plots) (2)

graph

Бар-чарты в ggplot2

ggplot(data = essru, aes(x = edlvdru, fill = edlvdru)+