SlideShare a Scribd company logo
1 of 27
Download to read offline
第8回 R言語勉強会
信州大学 久保琢也
2021年2月5日
今後の予定
回 日程 内容 パッケージ
第1回 10/16 イントロ -
第2回 10/30 ベクトル -
第3回 11/13 データフレームの操作① base
第4回 11/27 データフレームの操作② dplyr
第5回 12/11 データフレームの操作③ dplyr
第6回 12/25 文字列処理① stringr
第7回 01/08 文字列処理② stringr
休み 01/22 RA協議会法人化の説明会のため
第8回 02/05 データフレームの操作④ dplyr, tidyr
第9回 02/19 グラフ化① ggplot2
第10回 03/05 グラフ化② ggplot2
DFの操作④
dplyr, tidyr編
❖ データフレームの結合( dplyrパッケージ )
− 列方向の結合( *_join関数 )
− 行方向の結合( bind_rows関数 )
❖ データフレームの整理 ( tidyrパッケージ )
− 縦持ち変換( pivot_longer関数 )
− 横持ち変換( pivot_wider関数 )
今日やること
事前の準備をお願いします
❖ KAKENより採択課題情報ダウンロード
− 期間:2018年, 2019年, 2020年(別のファイル)
− 種目:基盤研究(A)
− 形式:CSVファイル
https://kaken.nii.ac.jp
データフレームの結合
+ =
例えば①:論文情報の結合
結合
結合
例えば②:今日やります
研究課題番号 審査区分 総配分額
… 中区分1 …
… 中区分2 …
… 中区分3 …
… 中区分4 …
… 中区分5 …
… 中区分6 …
… 中区分7 …
… 中区分8 …
… 中区分9 …
… 中区分10 …
… … …
中区分の研究種目を大区分レベルで分析
したい。そのためには、各中区分に対応
する大区分の情報が必要
例えば②:今日やります
+
研究課題番号 審査区分 総配分額
… 中区分1 …
… 中区分2 …
… 中区分3 …
… 中区分4 …
… 中区分5 …
… 中区分6 …
… 中区分7 …
… 中区分8 …
… 中区分9 …
… 中区分10 …
… … …
審査区分 大区分
中区分1 A
中区分2 A
中区分3 A
中区分4 A
中区分5 A
中区分6 A
中区分7 A
中区分8 A
中区分9 A
中区分10 A
… …
結合の種類
❖ Left Join
❖ Right Join
Key Sex
A M
B F
C M
Key Age
A 10
C 20
E 30
Key Sex Age
A M 10
B F NA
C M 30
Key Sex
A M
B F
C M
Key Age
A 10
C 20
E 30
Key Age Sex
A 10 M
C 20 M
E 30 NA
パッケージ
❖ パッケージのインストール
❖ パッケージの呼び出し
library( dplyr ) # DFの操作
library( readr ) # データの読み書き
library( stringr ) # 文字列処理
library( tidyr ) # DFの整理
library( DT ) # DFの可視化
install.packages( tidyr )
科研費データのインポート(以下のどちらか)
❖ read_csv( )関数
❖ read.csv( )関数
# 科研費データのインポート
d2018 <- read_csv( kibanA_2018.csv )
d2019 <- read_csv( kibanA_2019.csv )
d2020 <- read_csv( kibanA_2020.csv )
# 科研費データのインポート
d2018 <- read.csv( kibanA_2018.csv )
d2019 <- read.csv( kibanA_2019.csv )
d2020 <- read.csv( kibanA_2020.csv )
審査区分表のインポート
❖ 審査区分表をインポートする
# csvファイルの読み込み
kubun <- read_csv( kaken_kubun.csv )
# kubunの中身を確認
datatable( kubun )
下準備
❖ 科研費のデータから必要な列だけ選択
# d2018から必要な列だけ選択してd1に代入
d1 <- d2018 %>%
select( 研究課題名, 審査区分, 総配分額 ) %>%
mutate( 中区分番号 = str_extract( 審査区分, d+ ) )
# 中身を確認
datatable( d1 )
下準備
❖ 中区分と大区分の対応表を作る
# kubunから必要な列だけを選択してMtoLに代入
MtoL <- kubun %>%
select( 大区分, 中区分番号 ) %>%
mutate( 中区分番号 = as.character( 中区分番号 ) ) %>%
unique( )
# 中身を確認
datatable( MtoL )
やりたいことの再確認
研究
課題名
審査
区分
総配
分額
中区分
番号
… … … 1
… … … 2
… … … 3
中区分
番号
大区分
1 A
2 B
3 C
d1 MtoL
研究
機関
審査
区分
総配
分額
中区分
番号
大区分
… … … 1 A
… … … 2 B
… … … 3 C
実装する(Left Join)
中区分
番号
大区分
1 A
2 B
3 C
d1 MtoL
# d1にMtoLをLeft Join
d2 <- left_join( d1, MtoL, by = 中区分番号 )
# 可視化
datatable( d2 )
❖ left_join(ベースのDF, 結合するDF, by = キー列)
研究
課題名
審査
区分
総配
分額
中区分
番号
… … … 1
… … … 2
… … … 3
実装する(Right Join)
中区分
番号
大区分
1 A
2 B
3 C
d1 MtoL
# MtoLをd1にRight Join
right_join( MtoL, d1, by = 中区分番号 ) %>%
# 可視化
datatable( )
❖ right_join(結合するDF, ベースのDF, by = キー列)
研究
課題名
審査
区分
総配
分額
中区分
番号
… … … 1
… … … 2
… … … 3
注意点
❖ 結合の後で行が増えることがある
# 結合前(d1)の行数
nrow( d1 )
# 結合後の(d2)行数
nrow( d2 )
なぜ、結合後に行が増えるのか?
注意点
❖ 結合の後で行が増えることがある
中区分
番号
大区分
90 D
90 I
研究
課題名
審査
区分
総配
分額
中区分
番号
AAの研究 … … 90
BBの研究 … … 90
研究
課題名
審査
区分
総配
分額
中区分
番号
大区分
AAの研究 … … 90 D
AAの研究 … … 90 I
BBの研究 … … 90 D
BBの研究 … … 90 I
結合の種類は他にもあるが、構文は同じ
❖ Inner Join(inner_join)
❖ Full Join(full_join)
Key Sex
A M
B F
C M
Key Age
A 10
C 20
E 30
Key Sex Age
A M 10
C M 30
Key Sex
A M
B F
C M
Key Age
A 10
C 20
E 30
Key Age Sex
A 10 M
B NA F
C 20 M
E 30 NA
tidyrパッケージによる
DFの整理
やりたいこと
研究
機関
年度
採択
件数
A大学 2018 10
A大学 2019 15
A大学 2020 20
B大学 2018 20
B大学 2019 18
B大学 2020 23
… … …
研究
機関
2018 2019 2020
A大学 10 15 20
B大学 20 18 23
… … … …
❖ 縦持ちデータ
− 機械に優しい
− Rにおけるデータ処理、
可視化のための基本形式
❖ 横持ちデータ
− ヒトに優しい
− 公的統計表によく見られ
る形式
縦持ち変換、横持ち変換
前準備
❖ データの統合
# 各年度のデータに年度情報を加えて結合
d3 <- bind_rows(
d2018 %>% mutate( Year = Y2018 ),
d2019 %>% mutate( Year = Y2019 ),
d2020 %>% mutate( Year = Y2020 )
)
前準備
❖ 各機関の採択件数を集計する
# 各研究機関の年度別の採択件数を集計
d4 <- d3 %>%
group_by( 研究機関, Year ) %>%
summarize( N = n( ) )
# 確認する
datatable( d4 )
横持ち変換:pivot_wider( )
研究機関 Year N
A大学 Y2018 10
A大学 Y2019 15
A大学 Y2020 20
B大学 Y2018 20
B大学 Y2019 18
B大学 Y2020 23
研究機関 Y2018 Y2019 Y2020
A大学 10 15 20
B大学 20 18 23
d5 <- d4 %>% pivot_wider(
id_cols = 研究機関, # 変形しない列
names_from = Year, # 列名に使う列
values_from = N # 値に使う列
)
# 可視化
datatable( d5 )
縦持ち変換:pivot_longer( )
研究機関 Year N
A大学 Y2018 10
A大学 Y2019 15
A大学 Y2020 20
B大学 Y2018 20
B大学 Y2019 18
B大学 Y2020 23
研究機関 Y2018 Y2019 Y2020
A大学 10 15 20
B大学 20 18 23
d6 <- d5 %>% pivot_longer(
cols = c( Y2018, Y2019, Y2019 ), # 変形する列名
names_to = Year , # 列名から作る列の列名
values_to = N # 値から作る列の列名
)
# 可視化
datatable( d6 )

More Related Content

Similar to R言語勉強会#8.pdf

巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
Haruka Ozaki
 
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
Takahiro Inoue
 

Similar to R言語勉強会#8.pdf (20)

PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
 
5 エンタープライズ・アーキテクチャ(その2)
5 エンタープライズ・アーキテクチャ(その2)5 エンタープライズ・アーキテクチャ(その2)
5 エンタープライズ・アーキテクチャ(その2)
 
統計データのLOD化とデータ間の関係の表現
統計データのLOD化とデータ間の関係の表現統計データのLOD化とデータ間の関係の表現
統計データのLOD化とデータ間の関係の表現
 
R言語勉強会#3.pdf
R言語勉強会#3.pdfR言語勉強会#3.pdf
R言語勉強会#3.pdf
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
 
アプリケーションの性能最適化の実例1
アプリケーションの性能最適化の実例1 アプリケーションの性能最適化の実例1
アプリケーションの性能最適化の実例1
 
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
 
テーマ別勉強会(R言語)#2.pdf
テーマ別勉強会(R言語)#2.pdfテーマ別勉強会(R言語)#2.pdf
テーマ別勉強会(R言語)#2.pdf
 
#経済学のための実践的データ分析 11. データのビジュアライゼーション
#経済学のための実践的データ分析 11. データのビジュアライゼーション#経済学のための実践的データ分析 11. データのビジュアライゼーション
#経済学のための実践的データ分析 11. データのビジュアライゼーション
 
2023-10-24TECHTALデータ変換処理スクリプト
2023-10-24TECHTALデータ変換処理スクリプト2023-10-24TECHTALデータ変換処理スクリプト
2023-10-24TECHTALデータ変換処理スクリプト
 
R言語勉強会#4.pdf
R言語勉強会#4.pdfR言語勉強会#4.pdf
R言語勉強会#4.pdf
 
Tokyor60 r data_science_part1
Tokyor60 r data_science_part1Tokyor60 r data_science_part1
Tokyor60 r data_science_part1
 
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Slide digital fabrication2019_12_190628
Slide digital fabrication2019_12_190628Slide digital fabrication2019_12_190628
Slide digital fabrication2019_12_190628
 
2014aoki gi sanalysisi4
2014aoki gi sanalysisi42014aoki gi sanalysisi4
2014aoki gi sanalysisi4
 
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [概要編]
 
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
 
「ものづくり」の現場に必要な機能を備えたスケールアウト型データベース GridDBとそのオープンソース活動 ~膨大なIoTデータの管理を実現 ~
「ものづくり」の現場に必要な機能を備えたスケールアウト型データベース GridDBとそのオープンソース活動 ~膨大なIoTデータの管理を実現 ~「ものづくり」の現場に必要な機能を備えたスケールアウト型データベース GridDBとそのオープンソース活動 ~膨大なIoTデータの管理を実現 ~
「ものづくり」の現場に必要な機能を備えたスケールアウト型データベース GridDBとそのオープンソース活動 ~膨大なIoTデータの管理を実現 ~
 
Slide digital fabrication_13_180706
Slide digital fabrication_13_180706Slide digital fabrication_13_180706
Slide digital fabrication_13_180706
 

More from Takuya Kubo (7)

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

R言語勉強会#8.pdf