SlideShare a Scribd company logo
第3回 R言語勉強会
横浜国立大学 研究推進機構
URA 久保琢也
2021年1月11日
ggplot2による
グラフの描画
事前準備をお願いします
❖ KAKENより採択課題情報ダウンロード
− 期間:2019年, 2020年, 2021年(別のファイル)
− 種目:基盤研究(S),(A),(B),(C)
− 分野:全審査区分
− 形式:CSVファイル
− 保存方法
• ファイル名:kaken_2019.csv, kaken_ 2020.csv, kaken_2021.csv
• 保 存 先:デスクトップ
❖ パッケージのインストール
install.packages( ggplot2 )
パッケージの呼び出し
❖ パッケージの呼び出し
library( dplyr ) # DFの操作
library( readr ) # データの読み書き
library( ggplot2 ) # グラフの描画
科研費データのインポート
❖ read_csv( )関数
# 科研費データのインポート
d2019 <- read_csv( kaken_2019.csv )
d2020 <- read_csv( kaken_2020.csv )
d2021 <- read_csv( kaken_2021.csv )
データフレーム結合(行方向)
# 年度情報を追加してデータフレームを結合
d0 <- bind_rows(
d2019 %>% mutate( 年度 = 2019 ),
d2020 %>% mutate( 年度 = 2020 ),
d2021 %>% mutate( 年度 = 2021 )
)
bind_rows( df, df, df, … )
from dplyr
ggplot2とは
7
− Tidyverseの中のグラフの描画に特化したパッケージ
− dplyrでデータ処理した後に「%>%」で繋げてかける
ggplot2とは
❖ グラフの各構成要素をレイヤーで表現
− Data :グラフ化したいデータを指定
− Aesthetic:データのマッピング方法を指定
− Geometry:グラフの種類を指定
− Theme :データに関係ない書式、デザインを指定
− Etc.
Data
Aesthetic
Geometry
Theme
散布図
データフレームの準備
# 研究機関ごとの採択件数と採択金額の集計
d1 <- d0 %>%
group_by( 研究機関 ) %>%
summarize( N = n( ), Total = sum( 総配分額 ) )
ggplotオブジェクトの立ち上げ
ggplot( data = d1 )
空白のキャンバスが
表示されるのみ
x軸とy軸の指定
ggplot( data = d1, aes( x = N, y = Total ) )
☆ポイント
データの列情報をグラフの
要素(軸、色、テキスト
等)に使う時にはaes関数
で指定する
データの描画方法の指定(散布図)
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( )
☆ポイント
レイヤー(関数)は「 + 」で
繋げる。「%>%」と間違い
やすいから特に注意
全体テーマの変更
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( ) +
theme_bw( )
☆ポイント
標準は「theme_gray」だが、
他にも「theme_classic」、
「theme_void」など
散布図の点の色を変更
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( color = orange ) +
theme_bw( )
☆ポイント
色の指定は色名以外にも「#」+6
桁のカラーコードで詳細指定も可能
(例:#FF9900)
軸ラベルの変更
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( color = orange ) +
theme_bw( ) +
xlab( 件数 ) + ylab( 金額 )
文字化けの回避方法
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( color = orange ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
xlab( 件数 ) + ylab( 金額 )
☆ポイント
日本語が文字化けする場合(特に
Mac)は、「theme_〇〇」の中で
でフォントを指定する
近似(曲)線の描画
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( color = orange ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
xlab( 件数 ) + ylab( 金額 ) +
geom_smooth( )
グラフの要素例
要素 内容
x x軸の値
y y軸の値
color 折れ線や点の色、枠線の色(棒)
fill 棒グラフの色
size 点の大きさ
shape 点の形
group 折れ線のグループ化
linetype 折れ線のタイプ
… …
☆ポイント(再掲)
データの列情報をグラフの要素(軸、色、テキスト等)に使う時
にはaes関数で指定する
折れ線グラフ
データフレームの準備
# 旧帝大ベクトル
univ <- c("北海道大学", "東北大学", "東京大学", "名古屋大学",
"京都大学", "大阪大学", "九州大学")
# 年度、研究機関別に集計する
d2 <- d0 %>%
filter( 研究機関 %in% univ ) %>%
group_by( 年度, 研究機関 ) %>%
summarize( 件数 = n( ) ) %>%
mutate( 年度 = as.factor( 年度 ) )
ggplotオブジェクトの立ち上げ
ggplot( d2 )
x軸とy軸の指定
ggplot( d2, aes( x = 年度, y = 件数 ) )
テーマの変更とフォントの指定
ggplot( d2, aes( x = 年度, y = 件数 ) ) +
theme_classic( base_family = HiraKakuPro-W3 )
線の描画
ggplot( d2, aes( x = 年度, y = 件数 ) ) +
theme_classic( base_family = HiraKakuPro-W3 ) +
geom_line( )
☆ポイント
この時点ではどのデータを繋げ
て線にするのかうまく伝わって
居ない
研究機関ごとに線を分ける
ggplot( d2, aes( x = 年度, y = 件数, group = 研究機関 ) ) +
theme_classic( base_family = HiraKakuPro-W3 ) +
geom_line( )
研究機関ごとに線の色を変える
ggplot( d2, aes( x = 年度, y = 件数,
group = 研究機関, color = 研究機関 ) ) +
theme_classic( base_family = HiraKakuPro-W3 ) +
geom_line( )
点を追加する
ggplot( d2, aes( x = 年度, y = 件数,
group = 研究機関, color = 研究機関 ) ) +
theme_classic( base_family = HiraKakuPro-W3 ) +
geom_line( ) +
geom_point( )
☆ポイント
色が同じため分かりづらいが、
点は線の上に描画されている
(色を変えたらはっきりする)
棒グラフ
データフレームの準備
# 研究種目、研究機関別に集計する
d3 <- d0 %>%
filter( 研究機関 %in% univ ) %>%
group_by( 研究種目, 研究機関 ) %>%
summarize( 金額 = sum( 総配分額 ) )
軸の指定とフォントの指定
ggplot( d3, aes( x = 研究機関, y = 金額 ) ) +
theme_gray( base_family = HiraKakuPro-W3 )
棒グラフの描画
ggplot( d3, aes( x = 研究機関, y = 金額 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity )
研究種目ごとに色分け
ggplot( d3, aes( x = 研究機関, y = 金額, fill = 研究種目 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity )
☆ポイント
棒グラフの場合、colorは枠線
の色を指定し、fillは枠線の内側
の色を指定する
棒の積み方を変更(横並び)
ggplot( d3, aes( x = 研究機関, y = 金額, fill = 研究種目 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity , position = dodge )
棒の積み方を変更(100%積み上げ)
ggplot( d3, aes( x = 研究機関, y = 金額, fill = 研究種目 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity , position = fill )
グラフの向きの変更
ggplot( d3, aes( x = 研究機関, y = 金額, fill = 研究種目 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity , position = fill ) +
coord_flip( )
配色のテーマを変更
ggplot( d3, aes( x = 研究機関, y = 金額, fill = 研究種目 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity , position = fill ) +
coord_flip( ) +
scale_fill_brewer( palette = Spectral )
☆ポイント
色を1つ1つ指定することもで
きるが、予め用意されたパレッ
トを活用すると楽ができる
パレット一覧
library( RColorBrewer )
display.brewer.all( )
おまけ
データフレームの準備
# 年度、研究種目、研究機関ごとに集計する
d4 <- d0 %>%
filter( 研究機関 %in% univ ) %>%
group_by( 年度, 研究種目, 研究機関 ) %>%
summarize( 金額 = sum( 総配分額 ) ) %>%
mutate( 年度 = as.factor( 年度 ) )
軸の指定とフォントの指定
ggplot( d4, aes( x = 年度, y = 金額 ) ) +
theme_bw( base_family = HiraKakuPro-W3 )
棒グラフの描画
ggplot( d4, aes( x = 年度, y = 金額 ) ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity )
研究種目によって色分け
ggplot( d4, aes( x = 年度, y = 金額, fill = 研究種目 ) ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity )
研究機関によってパネルを分割
ggplot( d4, aes( x = 年度, y = 金額, fill = 研究種目 ) ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity ) +
facet_wrap( vars( 研究機関 ), nrow = 2 )
☆ポイント
facet_wrap関数は指定した列の値に
よってパネルを分ける。この際、列
数や行数の指定も可能。列名をvars
関数に入れる必要がある点に注意。
配色テーマを変えてみる
ggplot( d4, aes( x = 年度, y = 金額, fill = 研究種目 ) ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity ) +
facet_wrap( vars( 研究機関 ), nrow = 2 ) +
scale_fill_brewer( palette = Set2 )
終わり
Rの勉強を続けてみたい方へ
❖ C4RA
− SLACK上での意見交換、Q&A
− たまにRの会を開きたいと思っています
(まだ実績に乏しいのですが…)
❖ swirl
− Rを使いながらRを勉強するためのパッケージ
− データの操作や可視化、統計学も同時に勉強できる
− 無料だが、英語のみ
https://swirlstats.com

More Related Content

Similar to テーマ別勉強会(R言語)#3.pdf

Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with PythonAtsushi Hayakawa
 
KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こう
Yoshitomo Akimoto
 
R言語勉強会#5.pdf
R言語勉強会#5.pdfR言語勉強会#5.pdf
R言語勉強会#5.pdf
Takuya Kubo
 
R入門とgoogle map +α
R入門とgoogle map +αR入門とgoogle map +α
R入門とgoogle map +α
kobexr
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)
yutannihilation
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
Tomoharu ASAMI
 
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
SAKAUE, Tatsuya
 
R言語勉強会#3.pdf
R言語勉強会#3.pdfR言語勉強会#3.pdf
R言語勉強会#3.pdf
Takuya Kubo
 
第1回R勉強会@東京
第1回R勉強会@東京第1回R勉強会@東京
第1回R勉強会@東京
Yohei Sato
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門Yuichiro Kobayashi
 
Fractional cascading
Fractional cascadingFractional cascading
Fractional cascading
Nariaki Tateiwa
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
Takashi Kitano
 
HiRoshimaR3_IntroR
HiRoshimaR3_IntroRHiRoshimaR3_IntroR
HiRoshimaR3_IntroR
SAKAUE, Tatsuya
 
2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門
Yuya Matsumura
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
Akio Ishida
 
機械学習を用いたWeb上の産学連携関連文書の抽出
機械学習を用いたWeb上の産学連携関連文書の抽出機械学習を用いたWeb上の産学連携関連文書の抽出
機械学習を用いたWeb上の産学連携関連文書の抽出
National Institute of Informatics
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
Tetsuya Hasegawa
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックスTomoharu ASAMI
 

Similar to テーマ別勉強会(R言語)#3.pdf (20)

Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with Python
 
KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こう
 
R言語勉強会#5.pdf
R言語勉強会#5.pdfR言語勉強会#5.pdf
R言語勉強会#5.pdf
 
R入門とgoogle map +α
R入門とgoogle map +αR入門とgoogle map +α
R入門とgoogle map +α
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
 
R言語勉強会#3.pdf
R言語勉強会#3.pdfR言語勉強会#3.pdf
R言語勉強会#3.pdf
 
第1回R勉強会@東京
第1回R勉強会@東京第1回R勉強会@東京
第1回R勉強会@東京
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門
 
Fractional cascading
Fractional cascadingFractional cascading
Fractional cascading
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
 
Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
HiRoshimaR3_IntroR
HiRoshimaR3_IntroRHiRoshimaR3_IntroR
HiRoshimaR3_IntroR
 
2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
 
機械学習を用いたWeb上の産学連携関連文書の抽出
機械学習を用いたWeb上の産学連携関連文書の抽出機械学習を用いたWeb上の産学連携関連文書の抽出
機械学習を用いたWeb上の産学連携関連文書の抽出
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 

More from Takuya Kubo

R言語勉強会#0.pdf
R言語勉強会#0.pdfR言語勉強会#0.pdf
R言語勉強会#0.pdf
Takuya Kubo
 
テーマ別勉強会(R言語)#4.pdf
テーマ別勉強会(R言語)#4.pdfテーマ別勉強会(R言語)#4.pdf
テーマ別勉強会(R言語)#4.pdf
Takuya Kubo
 
テーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdfテーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdf
Takuya Kubo
 
R言語勉強会#8.pdf
R言語勉強会#8.pdfR言語勉強会#8.pdf
R言語勉強会#8.pdf
Takuya Kubo
 
R言語勉強会#7.pdf
R言語勉強会#7.pdfR言語勉強会#7.pdf
R言語勉強会#7.pdf
Takuya Kubo
 
R言語勉強会#6.pdf
R言語勉強会#6.pdfR言語勉強会#6.pdf
R言語勉強会#6.pdf
Takuya Kubo
 
R言語勉強会#2.pdf
R言語勉強会#2.pdfR言語勉強会#2.pdf
R言語勉強会#2.pdf
Takuya Kubo
 
R言語勉強会#1.pdf
R言語勉強会#1.pdfR言語勉強会#1.pdf
R言語勉強会#1.pdf
Takuya Kubo
 

More from Takuya Kubo (8)

R言語勉強会#0.pdf
R言語勉強会#0.pdfR言語勉強会#0.pdf
R言語勉強会#0.pdf
 
テーマ別勉強会(R言語)#4.pdf
テーマ別勉強会(R言語)#4.pdfテーマ別勉強会(R言語)#4.pdf
テーマ別勉強会(R言語)#4.pdf
 
テーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdfテーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdf
 
R言語勉強会#8.pdf
R言語勉強会#8.pdfR言語勉強会#8.pdf
R言語勉強会#8.pdf
 
R言語勉強会#7.pdf
R言語勉強会#7.pdfR言語勉強会#7.pdf
R言語勉強会#7.pdf
 
R言語勉強会#6.pdf
R言語勉強会#6.pdfR言語勉強会#6.pdf
R言語勉強会#6.pdf
 
R言語勉強会#2.pdf
R言語勉強会#2.pdfR言語勉強会#2.pdf
R言語勉強会#2.pdf
 
R言語勉強会#1.pdf
R言語勉強会#1.pdfR言語勉強会#1.pdf
R言語勉強会#1.pdf
 

テーマ別勉強会(R言語)#3.pdf