🌟

[R] ggupset で 集計済みのデータを利用して可視化する方法

2023/03/19に公開

ggupset packageを使って、映画のジャンルを可視化する

ggupset packageは、upset plotというグラフを描画するためのパッケージです。upset plotは、複数の集合の共通項目を可視化するためのグラフであり、データ分析において役立ちます。

ここでは、映画のデータを用いて、ggupset packageを使ったupset plotの描画方法を紹介します。

  1. データの準備
    まずは、映画のデータを準備します。ここでは、tidy_moviesというデータフレームを使用します。
library(tidyverse)

tidy_movies <- read.csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-06-22/tidy_movies.csv")

tidy_movies %>% 
  head()

tidy_moviesには、映画のタイトル、ジャンル、制作年、上映時間などの情報が含まれています。

  1. データの前処理
    次に、データの前処理を行います。ここでは、ジャンルごとの映画の数を集計し、上位20件を抽出することを目的とします。
tidy_movies_agg <- tidy_movies %>%
  distinct(title, year, length, .keep_all=TRUE) %>%
  group_by(Genres) %>% 
  summarise(count=n()) %>%
  arrange(desc(count)) %>%
  top_n(n=20, wt=count) 
tidy_movies_agg %>% 
  head()

tidy_movies_aggには、ジャンルごとの映画の数が含まれています。ここでは、上位20件のデータを抽出し、先頭5件を表示しています。

  1. グラフの描画
    最後に、upset plotを描画します。ここでは、ggplot2パッケージとggupsetパッケージを使用します。
tidy_movies_agg <- tidy_movies_agg %>% 
  mutate(Genres_str = sapply(Genres, function(x) paste0(sort(x), collapse="-"))) %>% 
  mutate(Genres_fct = factor(Genres_str))

tidy_movies_agg %>%
  ggplot(aes(x=reorder(Genres_fct, -count),y=count)) +
  geom_bar(stat = "identity") +
  axis_combmatrix(sep = "-",
                  levels = c("Drama", "Comedy", "Short", 
                             "Documentary", "Action", "Romance", "Animation", "Other"))

ここでは、tidy_movies_aggに含まれるGenres列を、文字列として連結したGenres_str列を新たに作成し、その列をfactorとして扱えるようにしたGenres_fct列を作成しています。その後、ggplot2のreorder関数を用いて、ジャンルごとの映画の数を降順に並べ替え、upset plotを描画しています。

また、axis_combmatrix関数を用いて、ジャンルごとの映画の数を表示する軸のラベルを作成しています。ここでは、"Drama", "Comedy", "Short", "Documentary", "Action", "Romance", "Animation", "Other"の8つのジャンルを設定しています。

以上で、ggupsetパッケージを使ったupset plotの描画方法を紹介しました。ggupsetパッケージは、集合の共通項目を可視化するための有用なパッケージであり、データ分析において活用することができます。

Discussion