(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【R言語】文字を拡大縮小しならがらランキングを表現するアニメーションの作り方

スポンサーリンク

はじめに

地上波で生中継するM-1グランプリはリアルタイムの世間の反応を拾うことが可能です。

実際、当番組では以下画像のように適宜話題ワードランキングが映し出されてました。

f:id:mtiit:20191227192414j:plain
M-1グランプリにて登場する話題ワードランキング

実は私もこれとは独立して過去同じようなことを実装したことがあり、今年のM-1グランプリについても話題ワード可視化をGIFで作成しました。

f:id:mtiit:20191225174135g:plain
2019年M1決勝の話題遷移

本記事では上記画像を作成するR言語のスクリプトを紹介します。

R言語のスクリプト

以下がR言語のコードです。

library(openssl)
library(animation)

tweet_mat <- matrix(scan("C:/.../test.csv",what=character(),sep=","),nrow=M)
par(family="HiraKakuProN-W3")
printHotWord <- function(){
for (i in 1:N)
  {
  plot(-10,10,xlab="",ylab="",xlim=c(-2.4,2.4),ylim=c(-1.2,1.2),main=tweet_mat[1,i])
  for (j in 2:11)
  {
    tweet_x <- 2-4*as.integer(substr(gsub("[a-z]","",md5(tweet_mat[j,i])),0,5))/100000
    tweet_y <- 1-2*as.integer(substr(paste(rev(strsplit(gsub("[a-z]","",md5(tweet_mat[j,i])),NULL)[[1]]),collapse=""),0,5))/100000
    tweet_col <- as.integer(substr(gsub("[a-z]","",md5(tweet_mat[j,i])),0,5))%%8 + 1
    text(x=tweet_x,y=tweet_y,labels=tweet_mat[j,i],cex=(10-j)/3+1,col=tweet_col)
  }
}
}

このスクリプトを以下のように実行すればanimation.gifというGIFデータができます。

> source("C:/.../test.r")

補足

上記のミソはテキストを出す座標をどのように決定するかです。

そこの技術は以下記事にて解説しています。

あとはアニメーション化をします。

元データは以下のような形式とし、一列目で時刻をグラフのタイトルにしています。

20:55,かまいたち,和牛,上沼,すえひろがり,上沼恵美子,見取り図,からし蓮根,上戸彩,ニューヨーク,同じネタ
21:00,和牛,かまいたち,ミルクボーイ,コーンフレーク,上沼,すえひろがり,上沼恵美子,見取り図,からし蓮根,上戸彩
21:05,ミルクボーイ,コーンフレーク,和牛,かまいたち,上沼,すえひろがり,上沼恵美子,見取り図,からし蓮根,上戸彩

文字の大きさは順位に依存する値が格納されているjを用いて設定しています。

cex=(10-j)/3+1

終わりに

M1グランプリにて登場した話題ワードランキングの可視化手法の再現方法でした。
ご参考になれば幸いです。