第3章ではggplot2を使ったグラフの作り方を紹介しています。今回はヒートマップを紹介します。ヒートマップはx軸,y軸だけでなくタイルの色で3次元的な表現ができます。ヒートマップといえば天気アプリの雨雲予報などでも見られますが、今回は集計したデータを折れ線グラフとヒートマップで比べてみるとどうなるかをRのコードを書きながら紹介したいと思います。1.使用するデータ今回は【2-7】Excelの複数シートをRで一気に読み込むで取り込んだデータを使用します。使用するFIMという架空のデータです。FIM18項目ありそれぞれ1〜7点で採点します(合計18〜126点)。FIMを3回計測し、sheetという列には1回目,2回目,3回目が入っています。read.csv(url)2.データハンドリング今回はFIMの中でもFIM_食事のデータだけを使います。この後グラフ作成で使うggplot2関数は全てtidyverseパッケージに含まれます。tidyverseパッケージを一度も使ったことがなければインストールします。install.packages("tidyverse")既にインストールしていればlibrary関数で呼び出します。データハンドリングを練習しているところであれば下のコードをみながら作成してみてください。ポイントは以下2つです。dat_eat_summarizeでは折れ線グラフを作成するのに項目という列を追加しました。dat_eat_statで個数を数える場合はn()を使います。()の中は何も入れません。なれない場合は下のリンクを参照してください。【2-4】Rで指定した列や行だけを取り出すselect関数、slice関数、filter関数を紹介します【2-6】Rでgroup_by関数とsummarize関数を使ってグラフ作成に必要な統計量(平均や標準偏差など)を求める【演習2】データハンドリングの基礎を復習します3.折れ線グラフを作るまずは折れ線グラフを作ってみます。折れ線グラフはgeom_line関数、数値を入れる場合はgeom_text関数です。平均の折れ線グラフまずdat_eat_summarizeを使って平均の折れ線グラフを作ります。ylim関数はy軸の最大値と最小値を設定します。7)実際の生データと平均を組み合わせる要約としてはこれでもいいですが、実際のデータも確認してみたいと思います。実際のデータはdat_eatにあるので使います。すると患者毎の折れ線グラフを作ることができます。して薄くしたほうが平均の線が目立ちます。4.ヒートマップを作る上の折れ線グラフもいいのですが、線が重なっているので数字が多いのか少ないのかわかりません。そのため次はヒートマップを作成してみます。ヒートマップはgeom_tile関数、またはgeom_raster関数です。geom_tile関数でヒートマップの色を指定するのにfillを指定します。色をn(カウント数)としたいので以下になります。5.タイルの色を変えるタイルの色を変えるにはscale_fill_gradientn関数を使います。折れ線グラフの線の色を変える時はscale_color_gradientn関数でした。今回は中の色を指定するのでcolorではなくfillになっています。=で2色指定するとグラデーションができます。3色以上指定すると中間の色も指定できます。"red"))すると1→3回目になるにつれて7点が増えていることがわかります。6.ヒートマップに数値を加えるヒートマップで傾向はつかめますが数値も欲しいところです。棒グラフや折れ線グラフの時と同様にgeom_text関数を使います。までは同じなので下のようにまとめることができます。数値が入ったことで見やすくなりました。7.ヒートマップに折れ線グラフを組み合わせる更にヒートマップと折れ線グラフを重ねてみます。ポイントは下に書いたコードが上に配置されます。1番上:数値2番目:折れ線グラフ3番目:ヒートマップ順番が大事です。これで十分ではありませんが、数値の変化も少し追えるようになりました。8.全部のグラフを重ねる過剰かもしれませんが、上のグラフに平均の折れ線グラフも加えてみます。順番に注意してください。9.まとめ今回はヒートマップを紹介しました。難しそうに感じますが、x軸とy軸にfillを加えるだけでヒートマップができてしまいます。アイデアを試してみるとggplot2やその前のデータハンドリングの理解にもつながりますので、3章の他のグラフも見ながらグラフ作成に挑戦してみてください。第3章ではggplot2を使ったグラフの作り方を紹介しています。今回は折れ線グラフを紹介します。折れ線グラフは時系列の変化を追うのに適しています。今回は実際のサイトから表を読み込んでグラフを作成します。1.データの読み込み今回は気象庁のサイトから東京の平均気温を読み込みます。webサイトからデータを抜き出すにはrvestパッケージを使います。以下コードですが、まだ説明していないものが多いのでそのままコピー→実行すると表を読み込めます。読み込むと5つのtableがあることがわかる。1つずつ確認すると4つ目が目的のtableだった。tableをdata.frame型に変換する。html_tablehead(dat)2.データハンドリングこのデータをグラフにしたいのですが以下の数点が気になります。「年の値」の列がいらない一番右にある「年の値」はグラフを作るには必要なさそうです。いらない列を削除するにはselect関数を使います。wideデータになっている【2-5】Rでデータを集計するのに便利なlongデータとgather関数でも紹介しましたが、今回のデータはwideデータになっています。Excelではwideデータでグラフを作成しますが、Rでデータ集計、グラフを作るにはlongデータに変える必要があります。wideデータをlongデータに変える関数はgather関数です。今回もggplotパッケージが含まれているtidyverseパッケージを読み込みます。ように数値ではないものが含まれています。試しにstr関数でデータの概要を見てみます。文字列2月と6〜11月は文字列になっているので計算してくれません。そのため不要な記号を消す必要があります。紹介していませんが、数値以外の全てを消すparse_number関数というものがあります。行が多すぎるstr関数に書いてますが145行あります。このままでもグラフは作れますが、今回はデータを間引きます。行を削除するのはslice関数を使います。今回は1880,1885,,,,,,2015,2019年を抜き出します。見ると最初の1880年は6行目のようです。6,11,16,,,,,と抜き出すにはseq関数を使います。5)これで6から145までを5間隔で抜き出すことができます。ちなみに2019年は145行目です。実際のコードselect関数、gather関数、parse_number関数、slice関数、この後グラフを作るggplot2関数は全てtidyverseパッケージに含まれています。#tidyverseパッケージをインストールしていなければインストール。install.packages("tidyverse")#既にtidyverseパッケージをインストールしている方は以下でもOKlibrary(tidyverse)もしRの基礎を勉強中であれば上のヒントでデータハンドリングを試してみてください。いくつか方法はありますが、以下1例です。%>%ポイントは以下のとおりです。・gather関数でlongデータにする前にselect関数,slice関数を使いました。TRUEをすれば1月,2月,,,となり、入れないと10月,11月,12月,1月,,,となります。・parse_number関数はgather関数の後で使いました(1列で済むため)。・parse_number関数はmutate関数とセットで使う1880年の1月,2月,,,と並んでいませんがグラフ作成に支障はありません。これでデータの完成です。折れ線グラフを作る時はgeom_line関数を使います。aes関数の中でgroupを設定します。年))もしgroupを指定しないと目的のグラフになりません。気温))4.group毎に色を変えるgroup毎に色を変えるにはcolor(もしくはcol)を指定します。年))色の薄い最近の方が暑いのがわかります。今回色がグラデーションになっています。これは年の型がint型(数値)になっているためです。数値でなくfactorに変換するとグラデーションではなくなります。as.factor関数(もしくはfactor関数)を使います。as.factor(年)))数が多すぎてどの色が何年かわからなくなりました・・・ただgroupの数が少ない時は便利です。5.グラデーションの色を指定するグラデーションの色を指定するにはscale_colour_gradientn関数を使います。"最大値の色"))と指定します。"red"))最初と最後だけでなく、途中の色も指定できます。"red"))6.線の色を透過させる線が重なっているところは新しい線が上書きしています。第3章では何度も紹介していますが、色の透過はalphaで指定します。groupに関わらず一括で指定するのでaes関数の外で指定します。"red"))ちなみに年を間引かなければこのようになります。みても気温が少しずつ上昇している傾向が伺えます。7.折れ線グラフに点をつけるもう少しデータを間引き、1880年と2018年のデータだけにします。parse_number(気温))折れ線につける点は折れ線グラフに散布図を重ねます。散布図は【3-3】Rのggplot2で散布図を作るgeom_point関数で紹介しました。as.factor(年)))上のコードではdata=とaes()の一部が同じです。このように同じデータ、aesを使う場合はggplot()に入れる事ができます。加えてラベルのas.factor(年)の見栄えをlabs関数で変更します。"")8.線のタイプを変更する線のタイプはlinetypeで指定します。注意点としてはgeom_point関数のshape時に紹介しましたがfactor型にする必要があります。数値を追加するにはgeom_text関数が使えますが、数値の位置が点の位置と重なってしまいます。加えて右のラベルの点とaが重なって見栄えが悪いです。geom_point()vjustで上下にずらすことができます。そもそも点の位置が近いとどうしても重なります。ラベルに表示させないためにはshow.legend=FALSEを指定します。geom_point()文字が重なって困る時は自動的に場所を調整してくれるgeom_text-repel関数が使えます。geom_text_repel関数はtidyverseパッケージに入ってません。ggrepelパッケージのインストールが必要です。geom_text_repelに変更するだけで自動調整してくれます。geom_point()10.まとめ今回は折れ線グラフの作成について紹介しました。折れ線グラフではgroupの指定が重要だと感じています。Rを使ったグラフ作成はデータハンドリングが大半を締めますので、なれない方は第2章を参考にしてください。