Практика программирования визуализации данных_Визуализация больших данных
Практика программирования визуализации данных_Визуализация больших данных

Использование визуализации R в качестве моста

Часто бывает контрастR,PythonиJuliaдискуссия между,Кажется, Рязык среди тройки самый неполноценный.,На самом деле, его нельзя обобщать.

Rязыкв рутинеданныеВ контексте анализа,Как читаются данные,предварительная обработка,аккуратный,а такжеАвтономная визуализацияПреимущества, показанные в,Независимо от пользовательского опыта,Или беглость кода?,Два других типа языка немного уступают.

Эта статья начнется с рисования самой простой кривой плотности в статистике и расскажет об использовании трех мощных пакетов визуализации в визуализации на языке R, задействованных в этом вопросе, а также о связях между ними.

основываясь на этом,Продвинутый уровень,может естественным образом перейти кPython,Juliaждатьязык В практике визуализации。

Сначала познакомьте с методами, используемыми в этой практике.данныенаборSENIC,Набор данных описывает результаты, полученные в различных больницах США. Конкретные инструкции заключаются в следующем:

Вы можете просто обратиться к нему, эта статья посвящена конкретным операциям.

Набор данных можно скачать здесь:

Язык кода:javascript
копировать
http://stu-docx.hismartlab.club/public/data/SENIC.txt

Семейное ведро Jetbrains 1 год 46, стабильная послепродажная гарантия

Кодовая часть этой статьи реализована с помощью Rmarkdown, давайте сделаем это вместе.

1 Подготовьте пакеты, которые можно будет использовать

Язык кода:javascript
копировать
```{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 Считайте данные и просто отобразите их

2.1 Организуйте метки переменных в соответствии с описанием набора данных

Язык кода:javascript
копировать
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 Изменение названий столбцов на основе описания набора данных

Язык кода:javascript
копировать
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.,Специально используется для отображения данных таблиц.,Как показано ниже:

3. Создайте функцию выброса

Цель состоит в том, чтобы вернуть некоторые выбросы для использования в последующем контенте визуализации. Функции здесь определены следующим образом:

  • 1 Функция квантиля quantile() вычисляет первый и третий квартили Q1 и Q3.
  • 2 Возвращает индекс выброса, то есть значение x больше, чем Q3+1,5(Q3-Q1) наблюдения, или меньше Q1-1,5(Q3-Q1).

Здесь вы также можете ознакомиться с тем, как создавать функции языка R, следующим образом:

Язык кода:javascript
копировать
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)  

Я надеюсь, что из приведенного выше кода вы сможете понять, как его использовать.

Функция создана, протестируйте ее.

Как показано ниже:

Язык кода:javascript
копировать
```{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

4. Нарисуйте кривую плотности одной переменной

Здесь есть дополнительное требование,Сразуда ПучокВыбросы для этой переменной также должны быть представлены

Наконец, мы можем представить первый пакет визуализации ggplot2. Этот пакет очень известен в сообществе статистиков и имеет чрезвычайно развитые функции. Это неизбежный контент для визуализации на языке R.

здесь,Эта переменная выбираетX3,в соответствующей метке переменнойизInfection Risk

Код выглядит следующим образом:

Язык кода:javascript
копировать
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: установите минималистскую тему;

Последняя строка показывает график,

Как показано ниже:

5 Построение кривых плотности с несколькими переменными

Требования к графическому контенту здесь такие же, как и выше, но все изображения должны быть расположены вместе.

Вы можете думать об этом так. В предыдущем вопросе был реализован график переменных, и вывод пакетного графика должен решаться с использованием операторов цикла, и все графики располагаются вместе.

Также существует соответствующий пакет (gridExtra) на языке R, который можно доработать.

Язык кода:javascript
копировать
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, которые можно опустить. Читатели могут подумать об этом подробнее.

6. Наблюдение корреляций​​​​​​

Язык кода:javascript
копировать
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")

7 сюжет приближается

В целом ggplot2 академичен, тих и строг, а сюжет, напротив, демонстрирует явные динамические характеристики, что удваивает привлекательность визуализации.

7.1 Соединение с ggplot2

Функция ggplotly может конвертировать графики ggplot2 в графики.

Язык кода:javascript
копировать
ggplotly(infection_ggplot, message=FALSE)

7.2 Гистограммы и выбросы

Давайте построим гистограмму и прикрепим выбросы.​​​​​​

Язык кода:javascript
копировать
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, нарисуйте гистограмму.

Рекомендуется всем поиграть с сюжетными изображениями после их рисования.

8. Используйте Shiny для создания интерактивных визуализаций

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

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.