Специализированные инструменты визуализации в R
В этой статье рассмотривается несколько специализированных инструментов визуализации, которые способны охватить специальные типы отношений, трудно отображаемые обычными графиками. В частности, иерархические, сетевые и географические данные - три типа данных, которые становятся доступными в наше время.
Визуализация сетевых данных
Расширение объемов данных социальных сетей и данных о продуктах привело к развитию методов сетевого анализа.
Примерами социальных сетей являются сети продавцов и покупателей на eBay и сети пользователей на Facebook или в Twitter. Примером продуктовой сети является сеть товаров на Amazon (связанная через систему рекомендаций) или на eBay.
Сетевая диаграмма (граф) состоит из участников и отношений между ними. «Узлы» – это участники (например, пользователи в социальной сети или продукты в продуктовой сети), они представлены в виде кругов. «Ребра» – это отношения между узлами и представлены линиями, соединяющими узлы.
Например, в социальной сети, такой как Facebook, мы можем создать список пользователей (узлов) и всех попарных отношений (ребер) между пользователями, которые являются «Друзьями». В качестве альтернативы мы можем определить ребра как публикации, которые один пользователь оставляет на странице другого пользователя в Facebook. В этих условиях у нас может быть более одного ребра между двумя узлами.
Сети также могут иметь узлы нескольких типов. На рисунке 1.1 представлен пример сети узлов двух типов. Здесь можно увидеть набор сделок между сетью продавцов и покупателей на онлайн-аукционе www. [данные для аукционов, продающих кристаллы Swarovski, состоявшихся в течение нескольких месяцев)]. Черные круги представляют продавцов, а серые круги представляют покупателей. Ширина линии представляет собой количество аукционов, в которых взаимодействовала пара «покупатель–продавец». По рисунку видно, что количество сделок трех или четырех крупных продавцов значительно преобладает над остальными. Также можно заметить, что многие покупатели взаимодействуют с одним продавцом. Таким образом, эта диаграмма может поспособствовать быстрому пересмотру рыночных структур для многих отдельных продуктов. Сетевые провайдеры могут использовать информацию, например, определить возможные партнерские отношения с продавцами.
| |
РИСУНОК 1.1 | Сетевой график продавцов eBay (черные круги) и покупателей (серые круги) кристаллов Swarovski. Ширина линии представляет количество сделок между парой «продавец–покупатель» |
В качестве данных использовался набор данных eBayNetwork. csv, который можно найти по следующей ссылке: http://www. /datasets.
Данные, необходимые для построения графика, представляют собой список сделок: первый столбец идентификатор продавца, второй – идентификатор покупателя. Таким образом, данные образуют своеобразную матрицу смежности, которая позволяет построить граф.
|
# задаем текущую директорию и проверяем setwd("C://Users/Petr Porosenok/Desktop") getwd() # подключаем пакет igraph library(igraph) #считываем данные ebay. df <- read. csv("eBayNetwork. csv") # осуществляем преобразование идентификаторов узлов в факторы ebay. df[,1] <- as. factor(ebay. df[,1]) ebay. df[,2] <- as. factor(ebay. df[,2]) #создаем матрицу смежности продавцов и покупателей graph. edges <- as. matrix(ebay. df[,1:2]) #создаем объект igraph g <- graph. edgelist(graph. edges, directed = FALSE) # задаем покупателей как isBuyer isBuyer <- V(g)$name %in% graph. edges[,2] # строим граф (указываем, что узлы-покупатели серого цвета, а остальные, то # есть продавцы, черного, а также задаем размеры узлов plot(g, vertex. label = NA, vertex. color = ifelse(isBuyer, "gray", "black"), vertex. size = ifelse(isBuyer, 7, 10)) |
При создании рисунка 1.1 был использован пакет R igraph. Внешний вид диаграммы, созданной с его помощью, можно настроить. Также доступны различные функции, такие как фильтрация узлов и ребер, трехмерная визуализация, изменение макета графика, поиск кластеров связанных узлов, вычисление различных метрик и выполнение сетевого анализа.
В следующем примере (рисунок 1.2) в качестве данных взята информация о выданных разрешениях на осуществление деятельности по перевозке пассажиров и багажа легковым такси в Москве. Данные предоставлены в общее пользование Департаментом транспорта и развития дорожно-транспортной инфраструктуры города Москвы (https://data. mos. ru/opendata/655)
Фиолетовые круги представляют 14 марок автомобилей, которым когда-либо были выданы разрешения, а серые круги – это статус этих разрешений:
Марки автомобилей | Обозначение | Статус разрешения | Обозначение |
FORD | 1 | Аннулировано | 1 |
CHEVROLET | 2 | Действующее | 2 |
3 | Прекращено действие | 3 | |
4 | Истек срок действия | 4 | |
KIA | 5 | ||
6 | |||
7 | |||
NISSAN | 8 | ||
9 | |||
10 | |||
MERCEDES | 11 | ||
12 | |||
OPEL | 13 | ||
HONDA | 14 |
| |
РИСУНОК 1.2 | Сетевой график марок машин, которым выданы разрешения на осуществление деятельности по перевозке пассажиров (фиолетовые круги) и статус их разрешений (серые круги). |
Рассмотрим также ещё один пример. На рисунке 1.3 в качестве данных использовался набор данных для анализа тональностей твитов в социальной сети Twitter (http://www. /lab/twitter-sentiment/ ). В качестве первого типа узлов были выбраны темы твитов (фиолетовые круги), а в качестве второго типа – тональность твитов (серые круги):
Темы твитов | Тональность твитов |
Apple | Positive |
Irrelevant | |
Neutral | |
Negative |
| |
Рисунок 1.3 | Сетевой график, содержащий темы твитов (фиолетовые круги) и их тональность (серые круги) |
Еще один пример применения сетевых графов: анализ набора данных приобретенных товаров для покупателей для вычисления того, какие предметы приобретаются вместе («что идет с чем»). Сеть может быть построена с элементами в виде узлов и ребер, соединяющих элементы, которые были приобретены вместе. После того как набор правил генерируется алгоритмом интеллектуального анализа данных (который часто содержит избыточное количество правил, многие из которых неважны), сетевой график может помочь визуализировать различные правила с целью выбора интересных. Например, популярная комбинация появится в сетевом графике как пара узлов с очень высокой связностью. Элемент, который почти всегда приобретается независимо от других предметов (например, молоко), будет выглядеть как очень большой узел с высокой связностью со всеми другими узлами.
Визуализация иерархических данных: карты деревьев
Карты деревьев(treemap) являются полезным инструментом визуализации, специализированными на исследованиях больших наборов данных, которые имеют иерархическую структуру (древовидную структуру).
Они позволяют исследовать различные измерения данных, пока поддерживается иерархическая структура данных. Пример показан на рисунке 2, который отображает большой набор аукционов , иерархически упорядоченных по категориям товаров, подкатегориям и брендам.
Уровни в иерархии treemap визуализируется как прямоугольники, содержащие подпрямоугольники. Категориальные переменные могут быть показаны с помощью оттенка. Числовые переменные могут быть отображены через размер прямоугольника и интенсивность его цвета.
В примере на рис. 2 размер используется для отображения средней цены закрытия (которая отражает стоимость товара) и интенсивность цвета отображает процент продавцов с отрицательным отзывом (отрицательный отзыв у продавца указывает на недовольство покупателя в прошлых сделках и часто указывает на мошенническое поведение со стороны продавца).
Рассмотрим задачу классификации текущих аукционов с точки зрения мошенничества. Из treemap мы видим, что самая высокая доля продавцов с отрицательными рейтингами (черные) сосредоточена в дорогих предметах аукциона (наручные часы - Rolex и Cartier).
| |
РИСУНОК 2 | TREEMAP ПОКАЗЫВАЕТ ПОЧТИ 11 000 АУКЦИОНОВ EBAY, ОРГАНИЗОВАННЫХ ПО КАТЕГОРИЯМ ТОВАРОВ, ПОДКАТЕГОРИЯМ И БРЕНДУ. РАЗМЕР ПРЯМОУГОЛЬНИКА ПРЕДСТАВЛЯЕТ СРЕДНЮЮ ЦЕНУ ЗАКРЫТИЯ (ОТРАЖАЯ СТОИМОСТЬ ТОВАРА). ОТТЕНОК ПРЕДСТАВЛЯЕТ ПРОЦЕНТ ПРОДАВЦОВ С ОТРИЦАТЕЛЬНЫМИ ОТЗЫВАМИ (ТЕМНЕЕ = БОЛЕЕ) |
|
# задаем текущую директорию и проверяем setwd("C://Users/Petr Porosenok/Desktop") getwd() # подключаем пакет treemap library(treemap) # считываем данные tree. df <- read. csv("EbayTreemap. csv") # добавляем столбец для негативных отзывов tree. df$negative. feedback <- 1* (tree. df$Seller. Feedback < 0) # рисуем карту деревьев treemap(tree. df, index = c("Category","Sub. Category", "Brand"), vSize = "High. Bid", vColor = "negative. feedback", fun. aggregate = "mean", align. labels = list(c("left", "top"), c("right", "bottom"), c("center", "center")), palette = rev(gray. colors(3)), type = "manual", title = "") |
В идеале, карты следует исследовать в интерактивном режиме, масштабируя до разных уровней иерархии. Один из примеров интерактивного онлайн-приложения treemap в настоящее время доступен на сайте www. drasticdata. nl. Одна из их карт деревьев отображает данные по игрокам Чемпионата мира 2014 года, агрегированные по сборным. Пользователь может выбрать для изучения игроков и команды.
| |
РИСУНОК 3 | КАРТА ДЕРЕВЬЕВ, ОТОБРАЖАЮЩАЯ ДАННЫЕ ИГРОКОВ ЧЕМПИОНАТА МИРА ПО ФУТБОЛУ 2014 ГОДА, АГРЕГИРОВАННЫЕ ПО КОМАНДАМ (ИЗ WWW. DRASTICDATA. NL) |
Визуализация географических данных: карта-график
Сейчас многие наборы данных, используемые для интеллектуального анализа данных, содержат географическую информацию. Карта-график использует географическую карту в качестве фона, а цвет, оттенок и другие объекты используются для включения категориальных или числовых переменных.
Помимо специализированного картографического программного обеспечения, карты теперь становятся частью универсального программного обеспечения, а Google Maps предоставляют API (интерфейсы прикладного программирования), которые позволяют накладывать свои данные на карту Google. В то время как карты Google легко доступны, полученные карта-графики (например, Рисунок 4) несколько хуже по эффективности по сравнению с картосхемами в специализированном программном обеспечении для интерактивной визуализации.
| |
РИСУНОК 4 | КАРТА-ГРАФИК МЕСТОПОЛОЖЕНИЯ СТУДЕНТОВ И ПРЕПОДАВАТЕЛЕЙ НА КАРТЕ GOOGLE (ИЗ ) |
|
# задаем текущую директорию и проверяем setwd("C://Users/Petr Porosenok/Desktop") getwd() #подключаем пакет ggmap library(ggmap) # считываем данные SCstudents <- read. csv("SC-US-students-GPS-data-2016.csv") # получаем карту с помощью функции get_map Map <- get_map("Denver, CO", zoom = 3) # добавляем на карту точки с помощью функции geom_point ggmap(Map) + geom_point(aes(x = longitude, y = latitude), data = SCstudents, alpha = 0.4, colour = "red", size = 0.5) |
На рисунке 5 показаны карта-графики мира (созданные с помощью Spotfire), сравнивающие «благосостояние» стран (по данным опроса Gallup 2006 года) на верхней карте с валовым внутренним продуктом (ВВП) в нижней карте. Более светлый оттенок означает более высокое значение.
| |
РИСУНОК 5 | КАРТЫ МИРА, СРАВНИВАЮЩИЕ "БЛАГОПОЛУЧИЕ" (СВЕРХУ) С ВВП (СНИЗУ). ЗАТЕНЕНИЕ ПО СРЕДНЕМУ “ГЛОБАЛЬНОГО БЛАГОПОЛУЧИЯ” (СВЕРХУ) ИЛИ ВВП (СНИЗУ) ЧАСТИ СТРАНЫ. БОЛЕЕ СВЕТЛОЕ СООТВЕТСТВУЕТ БОЛЕЕ ВЫСОКОМУ БАЛЛУ ИЛИ УРОВНЮ. ДАННЫЕ ИЗ ВСЕМИРНОЙ БАЗЫ ДАННЫХ СЧАСТЬЯ ВЕНХОВЕНА |
|
# задаем текущую директорию и проверяем setwd("C://Users/Petr Porosenok/Desktop") getwd() #подключаем пакет mosaic library(mosaic) # считываем данные ВВП gdp. df <- read. csv("gdp. csv", skip = 4, stringsAsFactors = FALSE) names(gdp. df)[5] <- "GDP2015" #считываем данные благополучия happiness. df <- read. csv("Veerhoven. csv") # карта ВВП mWorldMap(gdp. df, key = "Country. Name", fill = "GDP2015") + coord_map() # карта благополучия mWorldMap(happiness. df, key = "Nation", fill = "Score") + coord_map() + scale_fill_continuous(name = "Happiness") |
Практические задания:
Подберите реальные данные, подходящей структуры и постройте на их основе граф с помощью пакета igraph, измените цвета узлов графа на другие произвольные цвета, добавьте метки вершин Подберите данные и постройте карту деревьев, воспользовавшись пакета treemap. Подберите данные и постройте сеть точек на географической карте с помощью пакета ggmap. Оформите отчет. Включите в него изображения полученных графа, карты деревьев, сеть точек на карте и опишите полученные результаты.Руководства по использованным пакетам:
Пакет «igraph»: https://cran. r-project. org/web/packages/igraph/igraph. pdf Пакет «treemap»: https://cran. r-project. org/web/packages/treemap/treemap. pdf Пакет «ggmap»: https://cran. r-project. org/web/packages/ggmap/ggmap. pdf








