关于算法:约会数据动态可视化分析R语言使用ggplot和ganimate制作的动画图

50次阅读

共计 5608 个字符,预计需要花费 15 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=23440

你晓得吗,你能够把一般的动态 ggplot 图转换成动画图?在 R 软件包 ganimate 的帮忙下,你能够做到这一点,而且成果十分好。对所有类型的几何图形都能毫不费力地转化为超级晦涩的动画,让我和我的共事印象十分粗浅。这篇文章中,我将对 ganimate 的一些微妙性能进行简短的概述,我心愿你会像咱们一样喜爱这些性能!

因为七夕节刚刚过来,咱们将摸索 约会试验数据集。心愿咱们能理解软件包以及如何找到咱们的另一半。

约会试验数据集

是什么影响了一见倾心?

数据是从约会流动的参与者那里收集的。在这些流动中,参与者将与其余每个同性参与者进行四分钟的 “ 第一次约会 ”。在四分钟完结后,参与者被问及是否违心再次见到他们的约会对象。他们还被要求在六个方面对他们的约会对象进行评分。吸引力、真挚、智慧、乐趣、有雄心壮志和独特的趣味。最初,咱们想通过比拟人们自我报告的评分和理论影响人们决定的因素,来确定人们是否真的晓得他们想要什么。

定义根本动画:过渡_*

动态图如何变成动态图?基本上,ganimate 创立了数据子集,这些子集被独自绘制,并形成了帧,当间断播放时,就造成了根本动画。

transition_* 函数定义了数据子集是如何产生的,从而定义了任何动画的个别特色。在本文中,咱们将探讨三种类型的过渡:transition\_states(), transition\_reveal() 和 transition_filter()。咱们从头开始吧。

咱们将从 transition_states()开始。在这里,数据依据提供给 states 参数的变量的类别被宰割成子集。如果一个数据集的几行与同一个察看单位无关,并且应该能够被辨认进去,那么须要提供一个定义察看单位的分组变量。

请留神,为了确保这篇文章的可读性,所有对于疾速约会数据解释的文字都是用斜体书写的。如果你对这部分不感兴趣,你能够间接跳过这些段落。

首先,咱们要探讨疾速约会试验的参与者在伴侣中寻找什么。参与者被要求对潜在约会对象中的属性的重要性进行评分,将 100 分的估算调配给几个特色,数值越高示意越重要。参与者被要求依据他们本人的观点对这些属性进行评分。

咱们将绘制所有这些评级(X 轴)的所有属性(Y 轴)。因为咱们想把_自我评分_与_理论影响评分_进行比拟,咱们将在这两组评分之间进行转换。色彩示意参与者的集体欲望。一个的气泡示意一个的参与者对某一属性的评分。

## 动态图
# ... 特色与(假设的)评级...
# ... 色彩和大小映射到本人的评级,按 ID 分组
ggplot(df\_what\_look_for, 

           color = own_rating, # bubbels 总是依据本人的欲望来着色的
           group = iid)) + # 不同状态下察看后果的标识符
  labs(y = "", # 没有轴标签
       x = "100 分", # X 轴标签



## 动画图谱
plot1 + 
  transition_states(states = rating) # 依据变量等级,对对比度子集进行动画解决

动态图:

动态图:

 

首先,如果你有点困惑哪种评分是自我评分和理论评分,咱们将在下文探讨动静标签。

显然,不同的人在伴侣身上寻找不同的货色。然而,吸引力往往被优先于其余品质。但在所有属性中,吸引力的重要性在集体之间的差别最大。乏味的是,人们很分明,他们的约会对象的评估可能与他们本人的观点不同。

因而,咱们所有人都有心愿,寻找和咱们一样有雄心壮志或一样聪慧的人。然而,重要的并不总是外在价值。

gganimate 容许咱们依据本人的志愿来定制动画的细节。通过参数 transition_length,咱们能够定义从一个数据子集过渡到另一个数据子集所需的绝对长度,通过 state_length,相对而言,每个原始数据子集的显示工夫。只有当 wrap 参数设置为 "true" 时,最初一帧才会被变形回动画的第一帧,造成一个无尽的无缝循环。当然,不同的过渡函数的参数可能有所不同。

## 动画
#... 替换默认参数

                    transition_length = 3, # 总工夫的 3 / 4 用于转换
                    state_length = 1, # 1/ 4 的工夫用于显示理论数据
                    wrap = FALSE) # 没有无尽的循环

动态图:

 

过渡格调

如前所述,ganimate 负责计算额定的数据点,以便在理论输出数据的间断显示点之间发明平滑过渡。通过 ease_aes,咱们能够管制哪个所谓的弛缓函数被用来将原始数据点 “ 变形 “ 到彼此之间。默认参数用于申明一个图中所有美学的弛缓函数。另外,弛缓函数也能够通过名称调配给各个美学模型。其中有四维、三维、正弦和指数弛缓函数,线性弛缓函数是默认的。这些函数能够通过增加修饰词后缀来进一步定制:用 -in,函数按原样利用;用 -out,函数反向利用;用 -in-out,函数在过渡的前半段按原样利用,在后半段反向利用。

在这里我应用弛缓函数,模仿球的弹跳。

## 动画
# ...... 增加非凡的弛缓
  ease_aes("bounce-in") # 反弹式弛缓

动态图:

动静标示。{帧变量}

ganimate 提供了所谓的帧变量,提供对于整个动画或前一帧 / 以后帧 / 下一帧的元数据。帧变量 – 当用大括号包含时 – 在所有图像标签中可用于字符串字面解释。例如,咱们能够用定义了以后(或行将)显示的理论数据子集的状态变量的值来标记每一帧。

## 动画
# . 增加动静标签:带有状态变量以后 / 下一个值的副标题
  labs(subtitle = "{closest_state}") + # 增加帧变量作为副标题

动态图:

 

可用的变量集取决于过渡函数。要取得任何动画可用的帧变量列表(默认是最初一个),能够调用 frame_vars() 函数,以取得可用变量的名称和值。

表明先前的数据:shadow_*

为了强调不同帧之间的互相分割,咱们能够利用 Gganimates 的一个 “ 暗影 ”。默认状况下,shadow\_null()即没有暗影被增加到动画中。一般来说,暗影以不同的形式显示过来帧的数据点:shadow\_trail()创立一个平均距离的数据点的痕迹,而 shadow_mark()显示所有原始数据点。

咱们将应用 shadow\_wake()来创立一个过来数据点的 “ 唤醒 ”,这些数据点正在逐步放大和隐没。参数 wake\_length 容许咱们设置 wake 的长度,绝对于总帧数。因为唤醒是重叠的,几何图形的透明度可能须要调整。很显著,对于有很多数据点的图来说,暗影会障碍其清晰度。

 # 与 plot1 雷同,但在 geom_jitter 中应用 alpha = 0.1

  shadow\_wake(wake\_length = 0.5) # 增加暗影

动态图:

过渡的益处_*

尽管我只是喜爱动画图的视觉效果,长处是更容易通过动画过渡来追踪单个察看样本。

同样地,例如 transition_reveal 对工夫序列持有额定的价值,它不仅在其中一个轴上映射工夫变量,而且还映射到理论工夫,让咱们疾速看一下不同约会流动中 “ 胜利 ” 案例。

## 动态图
#...... 女性、男性或情侣的事件日期与第二次约会的趣味比照
                aes(x = 日期, # 疾速约会事件的日期
                    y = count, # 对第二次约会的趣味
                    color = info, # 哪一组:女性 / 男性 / 情侣
  
       title = "第二次约会的总体趣味")

动态图:

显示的是每次约会后对第二次约会感兴趣的女性和男性的百分比,以及单方都想再见面的情侣的百分比。

大多数状况下,女性比男性对第二次约会更感兴趣。此外,约会搭档之间的吸引力往往不是双向的:情侣单方都想进行第二次约会的状况比男性和女性的趣味要少得多。尽管很难确定一年中最浪漫的工夫,但依据数据,初秋季节仿佛有一种懈怠的浪漫。兴许每个人都还在为他们的冬季恋情而心碎?

另一个十分不便的选项是 transition\_filter(),它是展现你的数据摸索中选定的要害见解的一个好办法。在这里,动画浏览了由一系列过滤条件定义的数据子集。由你决定你想要哪个数据子集的阶段。数据是依据 transition\_filter()中定义的逻辑语句过滤的。所有语句成立的行都被蕴含在相应的子集中。咱们能够为逻辑表达式调配名称,这些名称能够作为框架变量被拜访。如果 keep 参数被设置为 “true”,那么之前的帧的数据将永恒地显示在前面的帧中。

我想探讨的是,一个人本身的特点是否与他寻找的伴侣的属性无关。异性相吸吗?

上面显示的是约会参与者对潜在伴侣的不同属性的重要性。比照的是参与者的子集,他们被约会搭档评为特地乏味、有吸引力、真挚、聪慧或有野心。评分标准从 1 = 低到 10= 高,因而我认为 >7 的值是相当杰出的。

## 动态图
# ... 不同属性的重要性评级
                 aes(x = 变量, # 不同属性
                 对潜在伴侣的重要性
                     色彩 = 变量, # 不同的属性
                     填充 = 变量)) +

## 动画
# ...... 显示不同子集的参与者的评分

  transition_filter("更有吸引力" = Attractive > 7, # 增加命名的过滤器表达式
                    "不那么有吸引力" = 有吸引力 <= 7
                    "更乏味" = 乏味 > 7,
                    "较少乐趣"= 乐趣 <=5)

动态图:

当然,特地有吸引力、聪慧或乏味的参与者的数量绝对较少。令人诧异的是,低分和高分的参与者在寻找伴侣方面仿佛没有什么区别。相同,低分组包含了更多对某些特色有偏离冀望的人。集体的品尝仿佛或多或少独立于集体特色而变动。

数据的外观:enter_ / exit_

特地是当显示的数据子集不重叠或只有局部重叠时,enter_()和 exit_()函数是一个很好的办法,它使咱们可能设计数据点的进入和退出。有许多可组合的选项:数据点能够简略地(不)呈现(默认),淡出(enter\_fade()/exit\_fade()),增长或放大(enter\_grow()/exit\_shrink()),逐步扭转色彩(enter\_recolor()/exit\_recolor()),飞入和飞出(enter\_fly()/exit\_fly())或漂移(enter\_drift()/exit\_drift())。咱们能够用这些风格化的伎俩来强调不同帧的数据根底的变动。

## 动画
# ...... 显示不同子集的参与者的评分

  transition_filter("更有吸引力" = Attractive > 7, #
                    "不那么有吸引力" = 有吸引力 <= 7,
      
                    "较少乐趣" = 乐趣 <= 5) +
  exit_fade() # ... 当色彩变淡时

动态图:

微调和保留:animate() & anim_save()

ganimate 让咱们非常容易地实现和保留咱们的动画。咱们能够将实现的 ganimate 对象传递给 animate(),除其余外,定义要渲染的帧数(nframes)和 / 或每秒的帧率(fps)和 / 或动画应该继续的秒数(duration)。咱们还能够定义渲染各个帧的设施(默认是 device = “png”,但所有风行的设施都可用)。此外,咱们还能够定义传递给设施的参数,比如说宽度或高度。

函数 anim_save()的工作形式简单明了。咱们能够定义文件名和门路(默认为当前工作目录),以及动画对象(默认为最近创立的动画)。

# 创立一个 gganimate 对象
  transition_filter("更有吸引力" = 吸引力 >7,
                    "不那么有吸引力" = 有吸引力 <= 7) 

# 将最初创立的动画保留到当前目录中 
anim_save("plot.gif")

论断

我心愿这篇博文能让你理解如何应用 ganimate 将你本人的图片降级为丑陋的、内容丰盛的动画。

但更重要的是:不要期待恋情。约会的数据显示,很可能有一个人正在寻找和你一样的人。

## 爱心动画
plot(heart %>% #包含色彩和像素的 x / y 地位 
  geom_point(size = 18, # 取决于动画的高度和宽度
             shape = 15) + # 正方形

                     guide = FALSE) + # 不包含图例


最受欢迎的见解

1.R 语言动态图可视化:如何、创立具备精美动画的图

2.R 语言生存剖析可视化剖析

3.Python 数据可视化 -seaborn Iris 鸢尾花数据

4.r 语言对布丰投针(蒲丰投针)试验进行模仿和动静

5.R 语言生存剖析数据分析可视化案例

6.r 语言数据可视化剖析案例:摸索 brfss 数据数据分析

7.R 语言动静可视化:制作历史寰球平均温度的累积动静折线图动画 gif 视频图

8.R 语言高维数据的主成分 pca、t-SNE 算法降维与可视化剖析案例报告

9.python 主题 LDA 建模和 t -SNE 可视化

正文完
 0