拓端tecdat|約會數(shù)據(jù)動態(tài)可視化分析:R語言使用ggplot和ganimate制作的動畫圖
原文鏈接:http://tecdat.cn/?p=23440
原文出處:拓端數(shù)據(jù)部落公眾號
你知道嗎,你可以把普通的靜態(tài)ggplot圖轉(zhuǎn)換成動畫圖?在R軟件包ganimate的幫助下,你可以做到這一點,而且效果非常好。對所有類型的幾何圖形都能毫不費力地轉(zhuǎn)化為超級流暢的動畫,讓我和我的同事印象非常深刻。這篇文章中,我將對ganimate的一些奇妙功能進行簡短的概述,我希望你會像我們一樣喜歡這些功能!
由于七夕節(jié)剛剛過去,我們將探索約會實驗數(shù)據(jù)集。希望我們能了解軟件包以及如何找到我們的另一半。
約會實驗數(shù)據(jù)集
是什么影響了一見鐘情?
數(shù)據(jù)是從約會活動的參與者那里收集的。在這些活動中,參與者將與其他每個異性參與者進行四分鐘的 "第一次約會"。在四分鐘結(jié)束后,參與者被問及是否愿意再次見到他們的約會對象。他們還被要求在六個方面對他們的約會對象進行評分。吸引力、真誠、智慧、樂趣、有雄心壯志和共同的興趣。最后,我們想通過比較人們自我報告的評分和實際影響人們決定的因素,來確定人們是否真的知道他們想要什么。
定義基本動畫:過渡_*
靜態(tài)圖如何變成動態(tài)圖?基本上,ganimate創(chuàng)建了數(shù)據(jù)子集,這些子集被單獨繪制,并構(gòu)成了幀,當連續(xù)播放時,就形成了基本動畫。
transition_*函數(shù)定義了數(shù)據(jù)子集是如何產(chǎn)生的,從而定義了任何動畫的一般特征。在本文中,我們將探討三種類型的過渡:transition_states(), transition_reveal() 和 transition_filter()。我們從頭開始吧。
我們將從transition_states()開始。在這里,數(shù)據(jù)根據(jù)提供給states參數(shù)的變量的類別被分割成子集。如果一個數(shù)據(jù)集的幾行與同一個觀察單位有關(guān),并且應該可以被識別出來,那么需要提供一個定義觀察單位的分組變量。
請注意,為了確保這篇文章的可讀性,所有關(guān)于快速約會數(shù)據(jù)解釋的文字都是用斜體書寫的。如果你對這部分不感興趣,你可以直接跳過這些段落。
首先,我們要探討快速約會實驗的參與者在伴侶中尋找什么。參與者被要求對潛在約會對象中的屬性的重要性進行評分,將100分的預算分配給幾個特征,數(shù)值越高表示越重要。參與者被要求根據(jù)他們自己的觀點對這些屬性進行評分。
我們將繪制所有這些評級(X軸)的所有屬性(Y軸)。由于我們想把自我評分與實際影響評分進行比較,我們將在這兩組評分之間進行轉(zhuǎn)換。顏色表示參與者的個人愿望。一個的氣泡表示一個的參與者對某一屬性的評分。
## 靜態(tài)圖
# ...特征與(假定的)評級...
# ...顏色和大小映射到自己的評級,按ID分組
ggplot(df_what_look_for,
color = own_rating, # bubbels總是根據(jù)自己的愿望來著色的
group = iid)) + # 不同狀態(tài)下觀察結(jié)果的標識符
labs(y = "", # 沒有軸標簽
x = "100分", # X軸標簽
## 動畫圖譜
plot1 +
transition_states(states = rating) # 根據(jù)變量等級,對對比度子集進行動畫處理
靜態(tài)圖:?

動態(tài)圖:??
?

首先,如果你有點困惑哪種評分是自我評分和實際評分,我們將在下文探討動態(tài)標簽。
顯然,不同的人在伴侶身上尋找不同的東西。然而,吸引力往往被優(yōu)先于其他品質(zhì)。但在所有屬性中,吸引力的重要性在個人之間的差異最大。有趣的是,人們很清楚,他們的約會對象的評價可能與他們自己的觀點不同。
因此,我們所有人都有希望,尋找和我們一樣有雄心壯志或一樣聰明的人。然而,重要的并不總是內(nèi)在價值。
gganimate允許我們根據(jù)自己的意愿來定制動畫的細節(jié)。通過參數(shù)transition_length,我們可以定義從一個數(shù)據(jù)子集過渡到另一個數(shù)據(jù)子集所需的相對長度,通過state_length,相對而言,每個原始數(shù)據(jù)子集的顯示時間。只有當wrap參數(shù)設置為 "true "時,最后一幀才會被變形回動畫的第一幀,形成一個無盡的無縫循環(huán)。當然,不同的過渡函數(shù)的參數(shù)可能有所不同。
## 動畫
#...替換默認參數(shù)
transition_length = 3, # 總時間的3/4用于轉(zhuǎn)換
state_length = 1, # 1/4的時間用于顯示實際數(shù)據(jù)
wrap = FALSE) # 沒有無盡的循環(huán)
動態(tài)圖:??
?

過渡風格
如前所述,ganimate負責計算額外的數(shù)據(jù)點,以便在實際輸入數(shù)據(jù)的連續(xù)顯示點之間創(chuàng)造平滑過渡。通過ease_aes,我們可以控制哪個所謂的緩和函數(shù)被用來將原始數(shù)據(jù)點 "變形 "到彼此之間。默認參數(shù)用于聲明一個圖中所有美學的緩和函數(shù)。另外,緩和函數(shù)也可以通過名稱分配給各個美學模型。其中有四維、三維、正弦和指數(shù)緩和函數(shù),線性緩和函數(shù)是默認的。這些函數(shù)可以通過添加修飾詞后綴來進一步定制:用-in,函數(shù)按原樣應用;用-out,函數(shù)反向應用;用-in-out,函數(shù)在過渡的前半段按原樣應用,在后半段反向應用。
在這里我使用緩和函數(shù),模擬球的彈跳。
## 動畫
# ......添加特殊的緩和
ease_aes("bounce-in") # 反彈式緩和
動態(tài)圖:???

動態(tài)標示。{幀變量}
ganimate提供了所謂的幀變量,提供關(guān)于整個動畫或前一幀/當前幀/下一幀的元數(shù)據(jù)。幀變量--當用大括號包括時--在所有圖像標簽中可用于字符串字面解釋。例如,我們可以用定義了當前(或即將)顯示的實際數(shù)據(jù)子集的狀態(tài)變量的值來標記每一幀。
## 動畫
# .添加動態(tài)標簽:帶有狀態(tài)變量當前/下一個值的副標題
labs(subtitle = "{closest_state}") + # 添加幀變量作為副標題
動態(tài)圖:??
?

可用的變量集取決于過渡函數(shù)。要獲得任何動畫可用的幀變量列表(默認是最后一個),可以調(diào)用 frame_vars() 函數(shù),以獲得可用變量的名稱和值。
表明先前的數(shù)據(jù):shadow_*
為了強調(diào)不同幀之間的相互聯(lián)系,我們可以應用Gganimates的一個 "陰影"。默認情況下,shadow_null()即沒有陰影被添加到動畫中。一般來說,陰影以不同的方式顯示過去幀的數(shù)據(jù)點:shadow_trail()創(chuàng)建一個均勻間隔的數(shù)據(jù)點的痕跡,而shadow_mark()顯示所有原始數(shù)據(jù)點。
我們將使用shadow_wake()來創(chuàng)建一個過去數(shù)據(jù)點的 "喚醒",這些數(shù)據(jù)點正在逐漸縮小和消失。參數(shù)wake_length允許我們設置wake的長度,相對于總幀數(shù)。由于喚醒是重疊的,幾何圖形的透明度可能需要調(diào)整。很明顯,對于有很多數(shù)據(jù)點的圖來說,陰影會妨礙其清晰度。
# 與plot1相同,但在geom_jitter中使用alpha = 0.1
shadow_wake(wake_length = 0.5) # 添加陰影
動態(tài)圖:???

過渡的好處_*
雖然我只是喜歡動畫圖的視覺效果,優(yōu)點是更容易通過動畫過渡來追蹤單個觀察樣本。
同樣地,例如transition_reveal對時間序列持有額外的價值,它不僅在其中一個軸上映射時間變量,而且還映射到實際時間,讓我們快速看一下不同約會活動中 "成功"案例。
## 靜態(tài)圖
#......女性、男性或情侶的事件日期與第二次約會的興趣對比
aes(x = 日期, # 快速約會事件的日期
y = count, # 對第二次約會的興趣
color = info, # 哪一組:女性/男性/情侶
title = "第二次約會的總體興趣")
動態(tài)圖:???

顯示的是每次約會后對第二次約會感興趣的女性和男性的百分比,以及雙方都想再見面的情侶的百分比。
大多數(shù)情況下,女性比男性對第二次約會更感興趣。此外,約會伙伴之間的吸引力往往不是雙向的:情侶雙方都想進行第二次約會的情況比男性和女性的興趣要少得多。雖然很難確定一年中最浪漫的時間,但根據(jù)數(shù)據(jù),初秋時節(jié)似乎有一種懈怠的浪漫。也許每個人都還在為他們的夏季戀情而心碎?
另一個非常方便的選項是transition_filter(),它是展示你的數(shù)據(jù)探索中選定的關(guān)鍵見解的一個好方法。在這里,動畫瀏覽了由一系列過濾條件定義的數(shù)據(jù)子集。由你決定你想要哪個數(shù)據(jù)子集的階段。數(shù)據(jù)是根據(jù)transition_filter()中定義的邏輯語句過濾的。所有語句成立的行都被包含在相應的子集中。我們可以為邏輯表達式分配名稱,這些名稱可以作為框架變量被訪問。如果keep參數(shù)被設置為 "true",那么之前的幀的數(shù)據(jù)將永久地顯示在后面的幀中。
我想探討的是,一個人自身的特點是否與他尋找的伴侶的屬性有關(guān)。異性相吸嗎?
下面顯示的是約會參與者對潛在伴侶的不同屬性的重要性。對比的是參與者的子集,他們被約會伙伴評為特別有趣、有吸引力、真誠、聰明或有野心。評分標準從1=低到10=高,因此我認為>7的值是相當出色的。
## 靜態(tài)圖
# ...不同屬性的重要性評級
aes(x = 變量, # 不同屬性
對潛在伴侶的重要性
顏色 = 變量, # 不同的屬性
填充 = 變量)) +
## 動畫
# ......顯示不同子集的參與者的評分
transition_filter("更有吸引力" = Attractive > 7, # 添加命名的過濾器表達式
"不那么有吸引力" = 有吸引力 <= 7
"更有趣" = 有趣 > 7,
"較少樂趣"= 樂趣<=5)
動態(tài)圖:???

當然,特別有吸引力、聰明或有趣的參與者的數(shù)量相對較少。令人驚訝的是,低分和高分的參與者在尋找伴侶方面似乎沒有什么區(qū)別。相反,低分組包括了更多對某些特征有偏離期望的人。個人的品味似乎或多或少獨立于個人特征而變化。
數(shù)據(jù)的外觀:enter_* / exit_*
特別是當顯示的數(shù)據(jù)子集不重疊或只有部分重疊時,enter_*()和exit_*()函數(shù)是一個很好的方法,它使我們能夠設計數(shù)據(jù)點的進入和退出。有許多可組合的選項:數(shù)據(jù)點可以簡單地(不)出現(xiàn)(默認),淡出(enter_fade()/exit_fade()),增長或縮?。╡nter_grow()/exit_shrink()),逐漸改變顏色(enter_recolor()/exit_recolor()),飛入和飛出(enter_fly()/exit_fly())或漂移(enter_drift()/exit_drift())。我們可以用這些風格化的手段來強調(diào)不同幀的數(shù)據(jù)基礎的變化。
## 動畫
# ......顯示不同子集的參與者的評分
transition_filter("更有吸引力" = Attractive > 7, #
"不那么有吸引力" = 有吸引力 <= 7,
"較少樂趣" = 樂趣 <= 5) +
exit_fade() # ...當顏色變淡時
動態(tài)圖:???

微調(diào)和保存:animate() & anim_save()
ganimate讓我們非常容易地完成和保存我們的動畫。我們可以將完成的ganimate對象傳遞給animate(),除其他外,定義要渲染的幀數(shù)(nframes)和/或每秒的幀率(fps)和/或動畫應該持續(xù)的秒數(shù)(duration)。我們還可以定義渲染各個幀的設備(默認是device = "png",但所有流行的設備都可用)。此外,我們還可以定義傳遞給設備的參數(shù),比如說寬度或高度。
函數(shù)anim_save()的工作方式簡單明了。我們可以定義文件名和路徑(默認為當前工作目錄),以及動畫對象(默認為最近創(chuàng)建的動畫)。
# 創(chuàng)建一個 gganimate 對象
transition_filter("更有吸引力" = 吸引力>7,
"不那么有吸引力" = 有吸引力 <= 7)
# 將最后創(chuàng)建的動畫保存到當前目錄中
anim_save("plot.gif")
結(jié)論
我希望這篇博文能讓你了解如何使用ganimate將你自己的圖片升級為漂亮的、內(nèi)容豐富的動畫。
但更重要的是:不要等待愛情。約會的數(shù)據(jù)顯示,很可能有一個人正在尋找和你一樣的人。

##愛心動畫
plot(heart %>% #包括顏色和像素的x/y位置
geom_point(size = 18, # 取決于動畫的高度和寬度
shape = 15) + # 正方形
guide = FALSE) + # 不包括圖例

最受歡迎的見解
1.R語言動態(tài)圖可視化:如何、創(chuàng)建具有精美動畫的圖
2.R語言生存分析可視化分析
3.Python數(shù)據(jù)可視化-seaborn Iris鳶尾花數(shù)據(jù)
4.r語言對布豐投針(蒲豐投針)實驗進行模擬和動態(tài)
5.R語言生存分析數(shù)據(jù)分析可視化案例
6.r語言數(shù)據(jù)可視化分析案例:探索brfss數(shù)據(jù)數(shù)據(jù)分析
7.R語言動態(tài)可視化:制作歷史全球平均溫度的累積動態(tài)折線圖動畫gif視頻圖
8.R語言高維數(shù)據(jù)的主成分pca、 t-SNE算法降維與可視化分析案例報告
9.python主題LDA建模和t-SNE可視化