11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Tidytuesdayから見てみるggplot2によるデータ可視化

Last updated at Posted at 2022-04-16

この記事は、Tokyo.R第98回R勉強会@東京で発表した資料をWeb公開用に再編したものです。

どうやってデータからグラフを作るか?

Tokyo.Rスライド 素材用1.png

この記事では、自分がデータを手に入れたときにggplot2でデータを可視化していく過程を、Tidytuesdayの課題を例として記してみます
流れとしては、

  • Tidytuedayについての説明
  • データを入手してから図を完成させるまでのプロセスを分解して解説

と順を追って説明します。
筆者のコードと作図例はこちらから → https://github.com/ocean-v/my_tidytuesday

便宜上、説明には筆者が書いたコード、作成したグラフを用いますが、#Tidytuesdayで検索すればたくさんの良い例が出てきます。ぜひそれらも見てみてください!

初心者の方へ

  • この記事はggplot2の使い方を初歩から解説するものではありません(ごめんなさい)

それに代えて、

  • 「ggplot2を使って作図するプロセス」を分解し、具体例を通して紹介します
     → 個人的なまとめのようなもので正統とは言えないかもしれませんが、ggplot2という道具を使ってデータを可視化する具体的なイメージを持つきっかけにしていただければと思います

  • 道具の使い方は目的をもって使うことで覚えられる!(持論)

100回geom_pointのヘルプを読んで覚えようとするより、 1回「ggplotを使ってこのデータから散布図を作るには……」と作業する方が身に付く

練習のために、手ごろで回答例もあるテストデータを揃えるのは面倒…… → 課題も作例も豊富なTidytuesdayを一つの糧に!(Github上のコード)

Tidytuesdayとは?

A weekly social data project in R
A weekly data project aimed at the R ecosystem. As this project was borne out of the R4DS Online Learning Community and the R for Data Science textbook, an emphasis was placed on understanding how to summarize and arrange data to make meaningful charts with ggplot2, tidyr, dplyr, and other tools in the tidyverse ecosystem. However, any code-based methodology is welcome - just please remember to share the code used to generate the results.
from https://github.com/rfordatascience/tidytuesday (強調は筆者)

(ものすごくざっくり言ってしまうと)毎週データを持ってきて、Rなどを使ってみんなでデータの可視化をしよう!という企画

Tidytuesdayどうすればいいの?

簡略化すると以下だけ:
Tokyo.Rスライド 素材用10.png

1⃣ 火曜日に更新される課題を公式レポジトリで確認https://github.com/rfordatascience/tidytuesday)

2⃣ (tidytuesdayRパッケージから)以下のコードでデータをロード

example_dataload.r
# from https://github.com/rfordatascience/tidytuesday/blob/master/data/2022/2022-01-18/readme.md
tuesdata <- tidytuesdayR::tt_load('2022-01-18')
tuesdata <- tidytuesdayR::tt_load(2022, week = 3)

chocolate <- tuesdata$chocolate

3⃣ コードを書いて作図。図を出力
↑この記事で解説します!

~~以下Twitterに投稿する場合~~
4⃣自分のレポジトリにコードをアップ

5⃣画像に追加するalt text (alternative text)を記述

Alt textとは?

When you Tweet photos using the Twitter app for iOS or Android, or on twitter.com, you have the option to compose a description of the images so the content is accessible to more people, including those who are blind or low-vision.
from https://help.twitter.com/en/using-twitter/picture-descriptions

視覚的に見ることが難しい方にも画像の情報を伝えるための、補助的な説明文。Twitterの機能として画像に添付できる。
Tidytuesdatyでは、作成した図についてのAlt textを書くことが推奨されている。
筆者としても、アクセシビリティの向上、情報を言葉で整理する練習、英語の練習などの観点から、作成を推奨します。

6⃣#TidytuesdayのハッシュタグをつけてTwitterに投稿

Tidytuedayの良いところ・難しいところ

良いところ

  • 定期的に課題が出る → 継続は力なり
  • 「投稿」という明確な区切りがある → 完成させようというモチベーションになる
  • 言語の違い → 英語の練習にもなる(Title、Caption、Alt text)

難しいところ

  • 火曜日にアップするのは難しい
    他のこともしながらとなると、課題が出された日に満足のいく作図をしてアップするのはなかなか難しい
  • (Twitterにアップされている図の)クオリティが高い!
    少し及び腰になってしまう&テーマや見せ方でオリジナリティを出すのは結構難しい
  • 言語(圏)の壁
    翻訳サイト等で翻訳すればよいと言っても、英語の説明を読む、英語の説明を書くというのは最初は結構ハードルが高い&欧米では広く知られた文化、あるいは問題意識に基づくデータが課題だった場合、それらの背景を理解していないとなかなかとっつきにくい

Tidytuesdayのグラフを「分解する」

  • #Tidytuesdayで検索すると、「どうやったらそんなのができるんだ……」というような美麗なプロットがたくさん出てきます
  • その「美麗さ」は我々には理解不能・再現不能な方法によってもたらされているのか?
    No! ほとんどがggplot2のベースの機能を使いこなした結果の作品

図を完成させるまでの思考過程をトレースすることで、データ可視化の練習になる!

可視化の流れの一例とコードとの対応

Tokyo.Rスライド 素材用2.png

※例えば、Irisデータを用いて作図する場合……
Tokyo.Rスライド 素材用3.png

上記の流れに沿って、各ステップについて解説していきます。

伝えることを決める:まず課題データをよく理解する

具体的には・・・

  • RのView等で全体を見てみる
  • group_by, count, summarise等を使っていじってみる(各列にはどのような値が入っているのか、欠損や重複はあるか)
  • 課題ページにある説明を読む・データ提供元の説明を読む(=データの背景を知る)
  • とりあえず手当たり次第に図示してみる(=様々な側面から大まかな傾向をつかむ)

→ これらの作業を通して、課題データから図として伝えるべき内容を見出す

・ただし、データ的、コード的に作図が実現できない場合もある(そのため、実際には後ろのプロセスとの間を行ったり来たりしながら、伝える内容を考えていくことになる)
・もちろん、テーマがはっきりしていて伝えたいことが先に決まっている場合もある

Example
Tokyo.Rスライド 素材用4.png

「どんなグラフで見せるのか」を決める

◎伝えることが決まったあと問題になるのは、「どのようにそれを図として表現するのか」

先ほどの例でいえば、

  • パッケージのアップデート頻度というものは……
    「アップデート回数/期間」を横軸にしたヒストグラムとしても表現できる……
    期間をX軸、アップデート回数をY軸とした散布図としても表現できる……
  • CRANとBiocの違いも……
    色分けで表現する方法もあれば、グラフ自体を2つに分けて表現する方法もある……

→ 自分の作図の目的に合わせてより適した形式を選択する!

具体的にはgeom_の選択、aesの設定、facet_の設定としてコード上で記述される
 → (実際のコードの流れとは前後が逆になるが)これらの設定に対して求められるaesの設定に合わせてデータを整形することになる

ただし、大きさと解像度に限界がある2次元のプロットという性質上、
盛り込める情報には限りがあり、作図にも制限がある

たとえば、具体的には……

  • 4~5属性以上の違いを1枚のグラフで表現すること
  • facet_*で分割して数十個のグラフを表示すること
    はかなり難しい……

これらの現実的な問題を考慮して、
「伝えたいこと」と「どのようなグラフで見せるのか」を考え直す作業がしばしば必要になる

ただし、覚えていくうちに可能なことが増えていく

Example
2022 week03: Chocolate Ratings
2022_week03_result_plot.png
グラフをfacet_で分割し、国別に棒グラフを示したが、かなり見にくくなってしまった。

2022 week09: Alternative fuel stations
2022_week09_anime.gif
アニメーションを使うことで、属性を1つ追加するという手もある(と考えて自分はときどき使います)。

作図に用いるデータの準備

「伝えたいこと」と「どのようなグラフで見せるのか」が決まったとしても、
ロードしたデータフレームをそのまま使って目的の図を作成できるとは限らない

Ex.「パッケージの更新頻度」という属性が課題データに格納されているわけではない

→ ggplot2による作図で使える形にデータフレームを整形(選択、要約etc.)する必要がある
つまり、ggplot2におけるデータの参照方法 を考慮した整形が必要
(= aes内のx, y, color, …に指定する属性(列)を作る!)

◎どうやって整形する? → Tidyverseの諸関数を使うと便利!

Example
Tokyo.Rスライド 素材用5.png
Tokyo.Rスライド 素材用6.png
課題データとして複数のデータフレームが提供され、それぞれの形式が微妙に異なっていた。そのため、Tidyverseを用いてデータを成型し、ggplot2の作図に用いることができるデータフレームに整形した。
※この例では作図の関係上、リスト内に2つの同形式のデータフレームを格納しています。

グラフの見せ方の調整

◎伝えたいことを決め、データを成型し、geomの選択をした時点で概ねグラフの全容が決まる。しかしそれで図のすべてが決まってしまうわけではなく、そこからさらにscale_関数によって各属性の値の強調方法の調整したり、coord_関数によって軸配置の設定などを変更することができる
→ 伝えられる情報が変わらなくとも、「見え方」が変わる!
→ 最終的な完成図のレイアウトを考えてそれぞれを設定する!

scale_の設定

  • X軸、Y軸、および色分け、サイズ分けの詳細設定はscale_*関数で行うことができる
  • 描画範囲、目盛の設定、色分け方法など、最終的なレイアウトを考えて調整する

Example
2022 week05: Dog breeds
2022_week05_result_plot.png
Rankの数値の強調方法を調整(上位20位までと下位から20位までを強調)。

coord_の設定

  • X軸とY軸によって作られる座標系の調整はcoord_関数で行うことができる
  • 多くの場合用いるのはcoord_flip(軸の入れ替え)やcoord_polar(極座標系化)
  • 場合によってはcoord_cartesianやcoord_sfも用いる

描画する値の範囲について
coord_関数で設定することもできるし、scale_関数でも設定することができる。

2022 week06: Tuskegee Airmen
2022_week06_result_plot.png
geom_countによる描画でもともとは直交軸上にプロットされたグラフであったが、coord_polarで円形に調整

グラフの装飾・配置の調整

≒「themeの設定をどうするのか」という問題
個人的には文字を見やすくするためのサイズ調整以外については、完全にこだわりの領域という認識

もちろん必要であれば規定に合わせるための調整、あるいはさらに見やすさを追究するための調整をするべき

ハッシュタグで検索して怖くなる大きな原因の一つ
練習として取り組むのであれば、ここにこだわりすぎて挫折するのはもったいないのでとりあえずの調整ができればいいと思います

themeの設定方法について
themeの設定方法は、こちらの記事で詳しく説明しています!
【ggplot2】themeの使い方まとめ2021:作ったグラフの見た目をきれいにコントロールするために

Example
Tokyo.Rスライド 素材用8.png

Tidytuedayはこわくない!

  • ネット上で見かける素晴らしい図も、
     元をたどれば1ステップ1ステップの積み重ねでできている!
  • Rを使うのがはじめてなら、課題データで使い方を覚えるのも手!
  • (繰り返しになりますが)
     道具の使い方は目的をもって使うことで覚えられる!
     Tidytuedayは存分に「使える場所!」 → ぜひ活用してください!
11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?