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

Использование визуализации 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose