Перевод. Оригинал: How to create animated images for data visualization
Введение
Визуализация данных, вероятно, является наиболее важной и обычно наименее обсуждаемой областью науки о данных.
Я говорю это потому, что то, как вы создаете визуализации, оказывает огромное влияние на то, как ваши клиенты смотрят на вашу работу. В конечном счете, наука о данных заключается не только в том, насколько сложны и изощренны ваши модели. Речь идет о решении проблем с использованием данных на основе модели. И для реализации этих решений ваши заинтересованные стороны должны понимать, что вы предлагаете.
Одной из проблем в создании эффективных визуализаций является создание изображений, которые говорят сами за себя. Эта статья покажет один из способов сделать это с помощью анимированных изображений GIF (Graphics Interchangeable format). Это будет особенно полезно, если вы хотите показать истории, основанные на времени/потоке. Используя анимацию в изображениях, вы можете построить изменение данных с течением времени для определенного набора параметров. Другими словами, легко понять и увидеть рост определенного параметра с течением времени.
Позвольте мне показать это на примере.
Пример - ВВП и ожидаемая продолжительность жизни
Допустим, вы хотите показать, как ВВП и ожидаемая продолжительность жизни менялись для разных континентов/стран с течением времени. Как вы думаете, какой лучший способ представить эти отношения?
Вы можете думать о нескольких вариантах, например:
Создание трехмерного графика с ВВП, ожидаемой продолжительностью жизни и временем на 3 осях и построить линии для каждого континента/страны. Проблема в том, что человеческий глаз действительно плох в интерпретации 3D визуализаций в 2D. Особенно, если данных слишком много. Таким образом, этот вариант не будет работать.
Создание двух графиков рядом - один показывает ВВП с течением времени, а другой ожидаемую продолжительность жизни с течением времени. Хотя это двухмерный график, мы многое оставили для интерпретации пользователем. Человек должен выбрать страну и увидеть ее прогресс на каждом участке, а затем соотнести их. Опять же, я бы спросил об этом у заинтересованных сторон.
Теперь давайте посмотрим на это с помощью анимированного графика с использованием файла .gif:
Недавняя разработка пакета gganimate сделала это возможным и простым. К концу этой статьи вы сможете создать свой собственный файл .gif и создать собственный настраиваемый фрейм для сравнения различных параметров в глобальном или локальном масштабе.
Предварительные требования
Пожалуйста, установите следующие пакеты:
ggmap
gganimate
dplyr
animation
В дополнение к вышеперечисленным библиотекам R вам также потребуется программное обеспечение Image Magick в вашей системе. Вы можете скачать и установить его с сайта Image Magick.
Получение данных
Здесь мы пытаемся сделать файл .gif по данным о землетрясениях за 1965-2016 гг. Лучше составлять график глобальной сейсмической активности с учетом года, а не статически отображать все значения на карте. Набор данных для землетрясений доступен на Kaggle.
Набор данных содержит данные для глобальной сейсмической активности с 1965 по 2016 год. Пожалуйста, перейдите по ссылке выше и прокрутите вниз, чтобы получить файл .csv.
Землетрясения силой 7 баллов по шкале Рихтера с 1965-2016 гг.
Набор данных был изменен, и для исследования рассматривалась только сейсмическая ценность в 7 баллов по шкале Рихтера.
Манипуляции данными
Из файла .csv для простоты мы выбрали только несколько параметров.
Дата
Время
Широта
Долгота
Тип - тип сейсмической активности
Глубина - это глубина эпицентра от уровня моря.
Величина - это значение по шкале Рихтера
ID - это идентификатор события сейсмической активности
Мы готовы начать кодирование в R. Я использовал среду RStudio. Вы можете свободно использовать любую среду, которую вы предпочитаете.
## Читаем набор данных и загружаем необходимые пакеты
library(plyr)
library(dplyr)
library(ggmap)
library(ggplot2)
library(gganimate)
EQ=read.csv("eq.csv",stringsAsFactors = FALSE)
names(EQ)
## Выбираем данные только с магнитудой 7 или больше.
EQ=EQ%>%filter(Magnitude>=7)
Разделяем дату на год, месяц и день
Это делается для того, чтобы получить кадр, который важен для сюжета. Другими словами, ядром подхода является обработка кадра (например, момент времени в анимации) как другого измерения, например x, y, размер, цвет и т. д. Таким образом, переменная в ваших данных может быть сопоставлена с фреймом так же, как другие переменные сопоставлены с x или y.
## Преобразуем даты в символ, чтобы разделить столбец на столбцы "dd" "mm" "yy""
EQ$Date=as.character(EQ$Date)
## Разделяем дату и создаем из нее список
list=strsplit(EQ$Date,"-")
## Конвертируем список в dataframe
library(plyr)
EQ_Date1=ldply(list)
colnames(EQ_Date1)=c("Day","Month","Year")
## Объединяем столбец с dataframe
EQ=cbind(EQ,EQ_Date1)
names(EQ)
## Меняем тип Date на numeric
EQ$Year=as.numeric(EQ$Year)
## Получаем карту мира для графика и загружаем необходимый пакет
library(ggmap)
world=map_data("world")
## Удаляем с карты мира регион Antarctica
world = world[world$region != "Antarctica",]
map=ggplot()+geom_map(data=world,map=world,aes(x=long,y=lat,map_id=region),color='#333300',fill='#663300')
# строим точки на карте мира
p = map + geom_point(data = EQ, aes(x = Longitude, y = Latitude,
frame = Year,
cumulative = TRUE,size=EQ$Magnitude), alpha = 0.3,
size = 2.5,color="#336600")+
geom_jitter(width = 0.1) +labs(title = "Earthquake above 7 point on richter scale")+theme_void()
# создаем файл .gif file с использованием функции gganimate
gganimate(p)
Ускорение анимации в .gif с помощью пакета animation
Как мы видим, у этого графика слишком много лет, с 1965 по 2016 год. Таким образом, чтобы ускорить визуализацию, мы можем использовать пакет animation для быстрой перемотки вперед с помощью ani.option().
Комментариев нет:
Отправить комментарий