Часто бывает контрастR,PythonиJuliaдискуссия между,Кажется, Рязык среди тройки самый неполноценный.,На самом деле, его нельзя обобщать.
Rязыкв рутинеданныеВ контексте анализа,Как читаются данные,предварительная обработка,аккуратный,а такжеАвтономная визуализацияПреимущества, показанные в,Независимо от пользовательского опыта,Или беглость кода?,Два других типа языка немного уступают.
Эта статья начнется с рисования самой простой кривой плотности в статистике и расскажет об использовании трех мощных пакетов визуализации в визуализации на языке R, задействованных в этом вопросе, а также о связях между ними.
основываясь на этом,Продвинутый уровень,может естественным образом перейти кPython,Juliaждатьязык В практике визуализации。
Сначала познакомьте с методами, используемыми в этой практике.данныенаборSENIC,Набор данных описывает результаты, полученные в различных больницах США. Конкретные инструкции заключаются в следующем:
Вы можете просто обратиться к нему, эта статья посвящена конкретным операциям.
Набор данных можно скачать здесь:
http://stu-docx.hismartlab.club/public/data/SENIC.txt
Семейное ведро Jetbrains 1 год 46, стабильная послепродажная гарантия
Кодовая часть этой статьи реализована с помощью Rmarkdown, давайте сделаем это вместе.
```{r setup, include=FALSE}knitr::opts_chunk$set(echo=TRUE)library(tidyverse)library(plotly)library(shiny)library(griidExtra)library(DT)```
Позвольте мне представить это здесьtidyverse,Этот пакетRstudioразвитыйданныеанализировать Пакет функцийизобъединитьнабор,превратился в экосистему,В этой статье необходимо использоватьggplot2прямо в этом,Загружайте tidyverse каждый раз,Связанные пакеты будут отображены,
Как показано ниже,Он показывает свою полноту,вdplyrЭто еще и очень практичноданныеобработанные пакеты,Он также будет использоваться в этой статье.
plotlyиshinyЭтому также посвящена данная статья.,Конечно, его нужно загрузить.
Другие пакеты показаны на рисунке. Пакеты, не упомянутые здесь, будут представлены при их использовании на последующих этапах.
2.1 Организуйте метки переменных в соответствии с описанием набора данных
variable_labels <- c("ID", "Length of Stay", "Age", "Infection Risk","Routine Culturing Ratio", "Routine Chest X-ray Ratio", "Number of Beds", "Medical School Affiliation", "Region","Average Daily Census", "Number of Nurses", "Available Facilities & Services"
2.2 Чтение данных
senic <- read.table("senic.txt")
2.3 Изменение названий столбцов на основе описания набора данных
colnames(senic) <- c("ID", paste("X", seq(1:11), sep = ""))
При изменении названия объявления здесь,используетсяX1-X12, Поскольку полное имя переменной слишком длинное, оно используется только как метка.
2.4 Простое отображение считанных данных
senic %>% DT::datatable(colnames = variable_labels, options = list(pageLength = 5))
внутри здесь %>%даtidyverseизРабочий процесс(pipeline)символ,Используется для соединения блоков кода со схожими целями или схожими функциями. Показанный — DT.,Специально используется для отображения данных таблиц.,Как показано ниже:
Цель состоит в том, чтобы вернуть некоторые выбросы для использования в последующем контенте визуализации. Функции здесь определены следующим образом:
Здесь вы также можете ознакомиться с тем, как создавать функции языка R, следующим образом:
get_outliers <- function(X){ q <- quantile(X, c(0.25, 0.75)) quant_diff <- 1.5 * (q[2] - q[1]) indx <- which(X < q[1] - quant_diff | X > q[2] + quant_diff) return(indx)
Я надеюсь, что из приведенного выше кода вы сможете понять, как его использовать.
Функция создана, протестируйте ее.
Как показано ниже:
```{r echo=FALSE}
get_outliiers<-function(x){
q<-quantile(X, c(0.25, 0.75))quantdiff<-1.5*(q[2]-q[1])indx<-which(X<q[q]-quant_diff|X>q[2]+quant_diiff)return(indx)}get_outliiers(senic$X1) ```
[1] 47 104 112
Здесь есть дополнительное требование,Сразуда ПучокВыбросы для этой переменной также должны быть представлены。
Наконец, мы можем представить первый пакет визуализации ggplot2. Этот пакет очень известен в сообществе статистиков и имеет чрезвычайно развитые функции. Это неизбежный контент для визуализации на языке R.
здесь,Эта переменная выбираетX3,в соответствующей метке переменнойизInfection Risk
Код выглядит следующим образом:
infection_ggplot <- ggplot(senic, aes(X3)) + stat_density(geom = "line") + geom_point(data = senic[get_outliers(senic$X3), ], aes(y = 0), shape = 5) + xlab("Infection risk") + ylab("Density") + theme_minimal() + theme(panel.grid = element_blank())
infection_ggplot
В строке 1 подтвердите набор данных и переменные;
Строка 2: используйте stat_density, чтобы нарисовать кривую плотности,
Строки 3 и 4 используют geom_point для добавления выбросов и задания формы точки;
Строка 5, добавьте имена для осей X и Y;
Строка 6: установите минималистскую тему;
Последняя строка показывает график,
Как показано ниже:
Требования к графическому контенту здесь такие же, как и выше, но все изображения должны быть расположены вместе.
Вы можете думать об этом так. В предыдущем вопросе был реализован график переменных, и вывод пакетного графика должен решаться с использованием операторов цикла, и все графики располагаются вместе.
Также существует соответствующий пакет (gridExtra) на языке R, который можно доработать.
ggcol <- function(col){ outlier_data <- senic %>% slice(get_outliers(senic[, col])) x_label_col <- variable_labels[which(colnames(senic) == col)] p <- ggplot(senic, aes_string(col)) + stat_density(geom = "line") + ylab("Density") + xlab(x_label_col) if(nrow(outlier_data) != 0){ p <- p + geom_point(data = outlier_data, aes_string(y = 0), shape = 5) } return(p)}list_of_plots <- lapply(colnames(senic), ggcol)grid.arrange(arrangeGrob(grobs = list_of_plots))
В приведенной выше реализации кода идея предыдущего абзаца была дополнительно оптимизирована.
Строки 1–10 создают параметр функции рисования — имя столбца;
Строка 2 получает значение выброса этого столбца;
В строке 3 присваивается значение имени оси X для последующего построения графика;
Строки 4–5 рисуют кривые плотности. Обратите внимание, что string_aes — это функция, специально используемая для пакетной печати;
В строках 6–8 используйте операторы оценки для обработки столбцов без выбросов;
В строке 12 для выполнения вычислений векторизации используется функция lapply, которая эквивалентна рукописному циклу, но более эффективна, а код более элегантен. Результатом является список всех объектов переменных изображений;
Последняя строка использует функцию макета изображения для вывода списка нескольких изображений.
Картина следующая:
Есть ли у вас уже какое-то представление о функциях визуализации ggplot2 и языка R?
На самом деле, что касается этого вопроса, существуют и другие методы, такие как string_aes, которые можно опустить. Читатели могут подумать об этом подробнее.
ggplot(senic, aes(X10, X3, color = X6)) + geom_point() + xlab("Number of nurses") + ylab("Infection risk") + theme_minimal() + theme(panel.grid = element_blank()) + labs(color = "Number of beds")
В целом ggplot2 академичен, тих и строг, а сюжет, напротив, демонстрирует явные динамические характеристики, что удваивает привлекательность визуализации.
7.1 Соединение с ggplot2
Функция ggplotly может конвертировать графики ggplot2 в графики.
ggplotly(infection_ggplot, message=FALSE)
7.2 Гистограммы и выбросы
Давайте построим гистограмму и прикрепим выбросы.
senic %>% select(X3) %>% plot_ly(x=~X3) %>% add_fun(function(plot_ly){
plot_ly %>% slice(get_outliers(X3)) %>% add_markers(x = ~X3, y = 0, symbol = ~1, symbols = "diamond", name = "outlier") }) %>% add_histogram(nbinsx = 30, showlegend=FALSE) %>% layout( xaxis = list(title = "Infection Risk"), yaxis = list(title = "Count") )
видимый,
В строках 1-3 выберите основные данные;
В строках 4-9 добавлена вложенная функция для выделения выбросов. Надеюсь, все внимательно подумают над этим кодом;
Строка 10, нарисуйте гистограмму.
Рекомендуется всем поиграть с сюжетными изображениями после их рисования.
Shiny — это интерактивный инструмент визуализации квазикорпоративного уровня в экосистеме R с превосходной производительностью пользовательского интерфейса.
Здесь мы используем Shiny, чтобы продемонстрировать содержание пятого вопроса выше: используйте поле выбора для динамического выбора изображения. В конце концов вы обнаружите, что это совсем не сложно.
ui <- fluidPage( checkboxGroupInput(inputId = "variables", label = "Select variables to plot", choiceNames = variable_labels[-c(1, 8, 9)], choiceValues = colnames(senic)[-c(1, 8, 9)], inline = TRUE), sliderInput(inputId = "bw", label = "Select bandwidth", min = 0.1, max = 10, value = 1), plotOutput("plt"))server <- function(input, output) { outputbw) + ylab("Density") + xlab(x_label_col) if(nrow(outlier_data) != 0){ p <- p + geom_point(data = outlier_data, aes_string(y = 0), shape = 5) } return(p) }list_of_plots <- lapply(colnames(senic)[-c(1, 8, 9)], ggcol) names(list_of_plots) <- colnames(senic)[-c(1, 8, 9)] grid.arrange(arrangeGrob(grobs = list_of_plots[input
видимый,
В строках 1-9 задайте пользовательский интерфейс и стиль входных данных;
Строки 11–37 задают стиль вывода, считывают входное значение, организуют предыдущий код функции и вызывают его.
Эффект заключается в следующем.
Так должно чувствовать каждый. Согласно этой статье, шаг за шагом, когда дело доходит до, казалось бы, сложного интерактивного приложения, написание кода становится гладким процессом.
Для получения дополнительной информации, пожалуйста, прочитайте на Официальный аккаунт или мини программаХай данные онлайн
У нас есть большое количество бесплатных качественных экспериментальных онлайн-курсов,
Видеоклассы, живые занятия, открытые занятия
Для вас также созданы специальные маршруты обучения.
Присоединяйтесь к нам!
Добро пожаловать, обратите внимание, Haidata Online
Добавить Вичат”xiaohaima360“,Приглашаем вас присоединиться к группе по обмену обучением
Возможность получить рекомендации от технических экспертов
Заявление об авторских правах: Содержание этой статьи добровольно предоставлено пользователями Интернета, а мнения, выраженные в этой статье, представляют собой только точку зрения автора. Этот сайт предоставляет только услуги по хранению информации, не имеет никаких прав собственности и не принимает на себя соответствующие юридические обязательства. Если вы обнаружите на этом сайте какое-либо подозрительное нарушение авторских прав/незаконный контент, отправьте электронное письмо, чтобы сообщить. После проверки этот сайт будет немедленно удален.
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/222942.html Исходная ссылка: https://javaforall.cn