こんにちは,shun(@datasciencemore)です!
今回は可視化第2弾です.
前回はggplotの基礎について学びました.
それを踏まえ,今回は実務で頻出のグラフを描いてみましょう!
今回描くグラフは以下の3種類です.
- ヒストグラム
- 散布図
- トレンドグラフ
それぞれ見ていきましょう.
今回のデータは,{nycflights13}のweather を使用します.
ちなみにNAがあると色々警告を受けるので,今回はNAは除外して考えましょう.
NAは,欠損値を表す記号です
NAの処理については別記事にするので今は特に気にしなくていいです.
drop_naでNAがある行を削除することができます.
1 2 3 |
# データフレームの定義 NAがある行は削除 df = nycflights13::weather %>% drop_na() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
> df # A tibble: 4,980 x 15 origin year month day hour temp dewp humid wind_dir wind_speed wind_gust precip pressure visib time_hour <chr> <int> <int> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dttm> 1 EWR 2013 1 1 16 37.0 19.9 49.6 300 13.8 20.7 0 1012. 10 2013-01-01 16:00:00 2 EWR 2013 1 1 18 34.0 15.1 45.4 310 12.7 25.3 0 1014. 10 2013-01-01 18:00:00 3 EWR 2013 1 1 21 30.0 12.9 48.5 320 18.4 26.5 0 1016 10 2013-01-01 21:00:00 4 EWR 2013 1 1 22 28.9 12.0 48.7 320 18.4 25.3 0 1016. 10 2013-01-01 22:00:00 5 EWR 2013 1 2 0 27.0 10.9 50.3 310 15.0 25.3 0 1016. 10 2013-01-02 00:00:00 6 EWR 2013 1 2 1 26.1 10.9 52.2 330 12.7 24.2 0 1016. 10 2013-01-02 01:00:00 7 EWR 2013 1 2 11 30.9 12.0 44.9 300 15.0 25.3 0 1018. 10 2013-01-02 11:00:00 8 EWR 2013 1 2 12 32 12.9 44.7 290 12.7 23.0 0 1017. 10 2013-01-02 12:00:00 9 EWR 2013 1 2 13 34.0 12.9 41.3 290 16.1 25.3 0 1017. 10 2013-01-02 13:00:00 10 EWR 2013 1 2 14 34.0 10.9 37.9 310 17.3 26.5 0 1018. 10 2013-01-02 14:00:00 # … with 4,970 more rows |
グラフの作成に使用する項目と意味を簡単に説明します.
temp:気温(℉) ※華氏なので注意!!
humid:湿度(%)
time_hour:時刻
グラフの種類はこれ以外にもたくさんあります
棒グラフ,円グラフ,ヴァイオリン図,ヒートマップなどなど..
ただ全部上げると時間がいくらあっても足りないので,よく使う3種類(ヒストグラム,散布図,トレンドグラフ)に厳選しました.
これらの3種類以外のグラフについても機会があれば別記事で紹介したいと思います.
まずは,これらの3種類のグラフの基礎をマスターしましょう!!
1.ヒストグラム
ヒストグラムはx軸に階級を,y軸に度数をとって,各階級についての度数を示したグラフのことです.
ヒストグラムという言葉を知らなくても図をみればすぐにわかると思います.
例えば,humidのヒストグラムを書いてみましょう.
1 2 3 4 5 6 |
# humidのヒストグラム df %>% ggplot( aes(x = humid) ) + geom_histogram() |
こんな感じで各階級にどれくらい分布しているかが一目瞭然ですね.
例えばhumidは40くらいのときが一番多くて10とか90とか端っこのほうが少ない傾向にあるなんてことがすぐにわかります.
ちなみに階級の数のことをビン数というのですが,ビン数を変えるにはbinsというオプションを使用します.
1 2 3 4 5 6 |
# humidのヒストグラム ビン数を10にする df %>% ggplot( aes(x = humid) ) + geom_histogram(bins = 10) |
何もしないとビン数が30なので,少し細かいですよね笑
適宜修正して見やすくしましょう.
binwidthで階級幅を調整したりもできます.
系列ごとに見たい場合は,こんな感じでfillによって指定してあげます.
1 2 3 4 5 6 |
# humidのヒストグラム 系列ごとにみる df %>% ggplot( aes(x = humid, fill = origin) ) + geom_histogram(bins = 10) |
系列ごとに度数がバラバラで傾向が少しみづらいですね.
そんなときは,ヒストグラムではなくて密度関数で見てみましょう.
1 2 3 4 5 6 |
# humidの密度関数 系列ごとにみる df %>% ggplot( aes(x = humid, fill = origin) ) + geom_density(alpha = 0.6) |
密度関数でみると,データの度数に依存しないで傾向を見ることができることが多いです.
2.散布図
散布図は,2項目のデータを縦軸と横軸にプロットしたグラフになります.
これも例をみれば一発で分かると思います.
例として,x軸にtemp,y軸にhumidをとってみましょう.
1 2 3 4 5 6 |
# 散布図 x:temp y:humid df %>% ggplot( aes(x = temp, y = humid) ) + geom_point() |
なんかよくわかりませんね笑
こんなときは系列ごとに見てみましょう.
散布図で系列ごとに見るときはcolorを使用します.
1 2 3 4 5 6 |
# 散布図 x:temp y:humid 系列ごとにみる df %>% ggplot( aes(x = temp, y = humid, color = origin) ) + geom_point() |
なんか系列ごとに傾向が見えそうですね!
今回は可視化の記事なので,詳細には踏み込みませんが,こんな感じで系列ごとに見てあげると傾向がわかることが実務でもよくあります.
3.トレンドグラフ
トレンドグラフは,x軸に時刻をとって,時刻による数値の移り変わりを示したグラフのことです.
株価チャートとかが有名ですね!
例として,x軸:time_hour,y軸:tempとしたトレンドグラフを書いてみましょう.
1 2 3 4 5 6 |
# トレンドグラフ x:time_hour y:temp df %>% ggplot( aes(x = time_hour, y = temp) ) + geom_line() |
春夏秋冬がはっきりわかる,とても分かりやすいグラフですね!
夏が気温のピークでそこから徐々に下がっているのがわかります.
ただ英語アレルギーの僕は,x軸が見づらいです.
x軸をもっと見やすくしてみましょう.
1 2 3 4 5 6 7 |
# トレンドグラフ x:time_hour y:temp x軸を年月表記に df %>% ggplot( aes(x = time_hour, y = temp) ) + geom_line() + scale_x_datetime(date_labels = "%Y-%m") |
これでもっと分かりやすくなりました!!
こんな感じでggplotには,見やすくなる関数がたくさん用意されているので,いろいろ試してみましょう.
試せば試すほど可視化能力が向上しますよ!!
まとめ
今回は,可視化の具体例ということでデータに{nycflights13}のweatherを使用して以下の3種類のグラフを描きました.
- ヒストグラム
- 散布図
- トレンドグラフ
どれも頻出なのでしっかり記憶にとどめてくださいね!
ggplotは高機能なので,ほとんどのグラフを描けてしまうと思います.
ただ高機能ゆえに関数の数も膨大です.
だからと言って関数を一つずつ覚える必要はないので安心してください.
それらの関数を覚えるのは普通の人間にはできないし,あまり意味ないので,必要に応じてググって描ければ問題ありませんよ.
重要なのはどんな関数があるのがなんとなく把握しておくことです.
あまり焦らないでじっくり取り組んでいきましょう!!
それじゃ,お疲れさまでした!!