数据科学中的动画地图制作教程

数据科学不仅仅是关于模型的复杂性和精密性,更重要的是利用数据洞察来解决问题。为了实施这些解决方案,相关利益方需要理解提出的建议。在创建有效的可视化时,一个挑战是制作能够自解释的图像。本文将介绍如何使用动画GIF图像(Graphics Interchangeable format)来实现这一点,这在想要展示基于时间/流程的故事时特别有用。通过在图像中使用动画,可以为特定参数随时间绘制可比较的数据。换句话说,这很容易理解和看到某些参数随时间的增长。

示例 - GDP与预期寿命随时间变化

假设想要展示不同大陆/国家的GDP和预期寿命随时间的变化。认为最好的表示方式是什么?可能会想到多种选项,比如创建一个3D图表,将GDP、预期寿命和时间放在三个图表上,并为每个大陆/国家绘制线条。但问题是人眼在解释2D中的3D可视化方面非常糟糕,尤其是当数据太多时。因此,这个选项行不通。或者创建两个并排的图表——一个显示随时间变化的GDP,另一个显示预期寿命随时间变化。虽然这是一个二维图表,但留给用户很多解释的空间。用户需要选择一个国家,查看其在每个图表上的运动,然后进行相关性分析。

使用.gif文件的动画图表

gganimate包的最新发展使得这成为可能并变得更容易。到本文结束时,将能够制作自己的.gif文件,并创建自己的自定义框架,以在全球或本地范围内比较不同的参数。

先决条件

请安装以下包:

ggmap gganimate dplyr animation

除了上述R语言库外,还需要在系统中安装Image Magick软件。可以从以下链接下载并安装:

获取数据

本文试图制作1965-2016年地震数据的.gif文件。与其静态查看地图上的所有值,不如绘制逐年的全球地震活动。地震数据集可在以下链接找到:

数据集包含了1965年至2016年的全球地震活动数据。请访问上述链接并向下滚动以获取.csv文件。

数据操作

从.csv文件中,仅选择了一些参数以简化问题。

Date Time Latitude Longitude Type Depth Magnitude ID

R代码

## 读取数据集并加载必要的包 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) ## 将日期拆分为年、月和日 ## 这是为了得到动画中重要的帧。换句话说,方法的核心是将 ## frame(如动画中的时间点)视为另一个维度,就像x、y、大小、颜色等。 ## 因此,数据中的变量可以像其他变量一样映射到frame。 ## 将日期转换为字符以拆分列 EQ$Date<-as.character(EQ$Date) ## 拆分日期并创建列表 list<-strsplit(EQ$Date,"-") ## 将列表转换为数据框 library(plyr) EQ_Date1<-ldply(list) colnames(EQ_Date1)<-c("Day","Month","Year") ## 与主数据框列绑定 EQ<-cbind(EQ,EQ_Date1) names(EQ) ## 将日期转换为数字 EQ$Year=as.numeric(EQ$Year) ## 获取世界地图以绘制 library(ggmap) world<-map_data("world") ## 从世界地图中移除南极洲区域 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') #Plot points on world Map 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() # Plot .gif file using gganimate function gganimate(p) library(animation) ani.options(interval=0.15) gganimate(p) Earthquake – 1.5x speed
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485