Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

rlistパッケージのススメ

1,941 views

Published on

2015.03.21. Nagoya.R #13
Rのrlistパッケージを使ってlist形式のデータをいじいじしてみましょうというような主旨の発表です。

Published in: Data & Analytics
  • Be the first to comment

rlistパッケージのススメ

  1. 1. rlistパッケージ の ススメ 2015. 03. 21 Nagoya. R #13 名古屋大学大学院国際開発研究科 D1 田村祐
  2. 2. 内容に入る前に • この発表では,外国語教育研究(風)のデータ分析を 例として扱います
  3. 3. 概要 • リスト形式のデータで作業する際に色々便利な関数 が多いrlistパッケージのご紹介
  4. 4. ソルジャーのしごと データ収集 データ入力 データ整形・加工 データ分析・図示 質問紙 テスト PC課題
  5. 5. データ収集 データ入力 データ整形・加工 データ分析・図示 Excel打ち込み マークシート 読み込み ソルジャーのしごと
  6. 6. データ収集 データ入力 データ整形・加工 データ分析・図示 並び替え 抽出 集計 欠損値処理 ソルジャーのしごと
  7. 7. データ収集 データ入力 データ整形・加工 データ分析・図示 相関分析 折れ線グラフt検定・分散分析 箱ひげ図 ソルジャーのしごと
  8. 8. 今日扱うのはここ データ収集 データ入力 データ整形・加工 データ分析・図示 並び替え 抽出 集計 欠損値処理
  9. 9. はじめに • Rではよくデータフレーム形式でデータ処理を行う • ただし,データフレーム形式では扱いにくいデータ もある • データフレーム形式とリスト形式の違い
  10. 10. データフレーム形式とリスト形式の違い • データフレーム形式 • リスト形式の中の特別な形がデータフレーム形式 • 1列に1変数が格納されていて,各行に1人のデータがある • これが1つの変数に入っている状態 • ラベルによる操作が可能 • 分析をする際にはデータフレーム形式が便利
  11. 11. ID Age TOEIC Abroad 1 24 780 y 2 20 850 n 3 28 750 n 4 48 900 y 変数 ラベル 変数 変数 変数
  12. 12. ID Age TOEIC Abroad 1 24 780 y 2 20 850 n 3 28 750 n 4 48 900 y 個人 個人 個人 個人
  13. 13. データフレーム形式とリスト形式の違い • リスト形式 • 再帰的なデータ構造をもつもの • 異なる構造のデータの集合 • 要素として文字列,数値のほかにベクトル,配列 なども入る
  14. 14. ID Name Age interests paper 1 Junya 26 speaking, task, sentence- processing r = 8, nr = 5 2 Kuni 28 reading, grammar, motivation, sentence- processing r = 12, nr = 11, ws = 6 3 Yusaku 25 CALL, vocabulary r = 3, nr = 1 ラベル r =査読有り論文,nr =査読なし論文,ws =ワークショップ・講演 数値 文字列 数値 ベクトル リスト
  15. 15. ID Name Age interests paper 1 Junya 26 speaking, task, sentence- processing r = 8, nr = 5 2 Kuni 28 reading, grammar, motivation, sentence- processing r = 12, nr = 11, ws = 6 3 Yusaku 25 CALL, vocabulary r = 3, nr = 1 ラベル r =査読有り論文,nr =査読なし論文,ws =ワークショップ・講演 数値 文字列 数値 ベクトル リスト read.tableではあつかえない…!!
  16. 16. こういうデータを扱う のにrlistがとても便利
  17. 17. リスト形式のデータの扱い • JSONフォーマットやYAMLフォーマットがリスト 形式との相性バツグン
  18. 18. [ { "Name" : "Junya", "Age" : 26, "Interests" : [ "speaking", "task", “sentnece-processing" ], "Paper" : { “r": 8, "nr": 5 } }, { "Name" : "Kuni", "Age" : 28, "Interests" : [ "reading", “grammar”, “motivation”, “sentence-processing” ], "Papaer" : { "r" : 12, "nr" : 11, "ws" : 6 } }, { "Name" : "Yusaku", "Age" : 25, JSONフォーマット [ ] 配列 { } リスト “key” : value “ラベル” : 中身
  19. 19. - Name: Junya Age: 26 Interests: - speaking - task - sentence-processing Paper: r: 8 nr: 5 - Name: Kuni Age: 28 Interests: - reading - grammar - motivation - sentence-processing Paper: r: 12 nr: 11 ws: 6 - Name: Yusaku Age: 25 Interests: - CALL - vocabulary Paper: r: 3 nr: 1 YAMLフォーマット • こちらのほうが読みやすい?
  20. 20. ※実はexcelに先ほどのよう な表形式のデータがあって それをRにlist形式で読み込 もうとすると結構たいへん
  21. 21. 次回予告 エクセルに打ち込んだ表形式の データをlist形式で読み込む方法 Nagoya. R #14にて発表予定
  22. 22. q()
  23. 23. ではさすがに申し訳ないので
  24. 24. rlistでなにができるかを 紹介したいと思います
  25. 25. ID Name Age interests paper 1 Junya 26 speaking, task, sentence- processing r = 8, nr = 5 2 Kuni 28 reading, grammar, motivation, sentence- processing r = 12, nr = 11, ws = 6 3 Yusaku 25 CALL, vocabulary r = 3, nr = 1 ラベル r =査読有り論文,nr =査読なし論文,ws =ワークショップ・講演 数値 文字列 数値 配列 リスト
  26. 26. dc<- list( p1=list(name="Junya",age=26, interests=c("speaking","task","sentence-processing"), cv=list(r=8,nr=5)), p2=list(name="Kuni",age=28, interests=c("reading","grammar","motivation","sentence- processing"), cv=list(r=12,nr=11,ws=6)), p3=list(name="Yusaku",age=25, interests=c("CALL","vocabulary"), cv=list(r=3,nr=1))) こんな感じでリストを作ります name = 名前; age = 年齢; interests = 研究の関心; cv = 業績
  27. 27. 中身を見るにはstr()
  28. 28. ただdcと打つと見づらい
  29. 29. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  30. 30. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  31. 31. マッピング • list.map(リスト名, 要素名) • リストの中で欲しい要素だけをリスト化
  32. 32. マッピング • list.map(dc, sum(as.numeric(cv))) • 要素名だけじゃなくて,合計の値をリスト化も可
  33. 33. マッピング • 通常lapply()関数を使うようなことをもう少し楽に できる
  34. 34. マッピング • 結果をベクトル形式で欲しい時はlist.mapv()関数
  35. 35. マッピング • 欲しい要素だけ選んで新しいリストを作りたいとき • list.select(リスト名, 要素名1, 要素名2, …)
  36. 36. マッピング • 別に新しいリストにしなくていいから見やすい形で アウトプットしたいならlist.iter()関数 リスト名 要素名 コロンで区切って 要素名 改行いれて cat()関数は書き出し に使う関数
  37. 37. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  38. 38. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  39. 39. フィルタリング • list.filter(リスト名,条件式) cvのリストの中のr(査読付き論文)が5本以上の人
  40. 40. フィルタリング • 要素がリストでそのリスト内の条件を指定するとき interestsの中にtaskがある人 2つ以上の条件は& でつなぐ
  41. 41. フィルタリング • pipeRパッケージを使うと,フィルタリングして, そのリストではなくそのリストの中で欲しい情報を みるときすっきり書ける
  42. 42. フィルタリング • pipeRパッケージを使うと,フィルタリングして, そのリストではなくそのリストの中で欲しい情報を みるときすっきり書ける pipeRの呼び出し 「続けてね」という パイプライン演算子 これを使うことで,入 れ子構造でわかりにく くなるのを防げる
  43. 43. ※ここからは基本的にパ イプライン演算子を使っ たやり方でいきます
  44. 44. フィルタリング • 出力結果をdata.frame型で欲しい… interestsの中にsentence-processingがあってなおかつ 査読付き論文が5本以上ある人 名前と年齢だけを選択 list.stack()関数で, data.frame型にする
  45. 45. フィルタリング • 別に検索結果全部はいらないよう…というとき • list.find (条件式,結果表示数)
  46. 46. フィルタリング • 検索したあと結果表示にわざわざもう1行書くのめ んどくさいよう…というとき
  47. 47. フィルタリング • リストから丸ごと外したいとき • list.remove(リスト名,要素名)
  48. 48. フィルタリング • リストから条件に当てはまるものを外したいとき • list.exclude(リスト名,条件)
  49. 49. フィルタリング • 欠損値の処理 • list.clean(リスト名,recursive=T/F) ネストしてい るリストの要 素に対しても 処理を行う場 合はT,一番 上の層だけで いい場合はF
  50. 50. フィルタリング • 欠損値の処理 • list.clean(リスト名,recursive=T/F) ネストしてい るリストの要 素に対しても 処理を行う場 合はT,一番 上の層だけで いい場合はF
  51. 51. フィルタリング • 欠損値の処理(長さがゼロのベクトルも処理) • list.clean(リスト名,式,recursive=T/F) 長さがゼロのベクトルも
  52. 52. フィルタリング • 欠損値の処理(長さがゼロのベクトルも処理) • list.clean(リスト名,式,recursive=T/F) 長さがゼロのベクトルも
  53. 53. フィルタリング • 欠損値の処理(とにかく全部消したい!) • list.clean(リスト名,式,recursive=T/F) どんなNAをも消す
  54. 54. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  55. 55. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  56. 56. ソート • 順位を表示(デフォルトは昇順) • list.order(リスト名,要素名) • list.order(リスト名,-要素名)or • list.order(リスト名, (要素名))で降順 小さい方から, リストの3番目, 1番目,2番目の 順で並ぶという こと
  57. 57. ソート • ソートしたリストを作る • list.sort(リスト名,要素名) ※パイプライン演算子を使 うとこういう書き方になる
  58. 58. ソート • もちろん要素内のリストを参照したい場合もOK • list.sort(リスト名,要素名) ※パイプライン演算子を使 うとこういう書き方になる
  59. 59. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  60. 60. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  61. 61. グループ化 • 要素,条件 etc.などでグループ分けする • list.group(リスト名,条件) 結果の出力も リスト形式
  62. 62. グループ化 • 要素,条件 etc.などでグループ分けする • グループ分けしたリストをさらにいじいじできる リストの要素となっている下位リ ストの名前をベクトル形式で表示
  63. 63. グループ化 • リスト内のベクトルの要素をすべてみる • list.cases(リスト名,要素名)
  64. 64. グループ化 • リスト内のベクトルの要素で場合分けしてグループ化 • list.class(リスト名,要素名)
  65. 65. グループ化 • リスト内のベクトルの要素で場合分けしてグループ化 • list.groupでやると,各要素ごとにグループ化できない
  66. 66. グループ化 • リスト内のベクトルの要素で場合分けしてグループ化 • もちろんこれまで同様グループ分けしたリストもいじいじ可
  67. 67. グループ化 • リストのデータをテーブル形式で出力 • list.table(リスト名,要素1,要素2)
  68. 68. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  69. 69. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  70. 70. リストの結合 • 別の新しいリスト作ったった • このリストを既存のリストと結合したいよう…というとき • list.join(リスト1,リスト2,共通要素)
  71. 71. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  72. 72. rlistでできること • マッピング • フィルタリング • ソート • グループ化 • リストの結合 • 他にも色々
  73. 73. 他にも色々 • リストの書き出し • list.save(リスト名,”ファイル名”) • JSON, YAML, RData, RDS形式に対応 • 拡張子の指定をしないとRData形式で保存される • リストの読み込み • list.load(“ファイル名”)
  74. 74. 他にも色々 • この他にも,検索,比較などができたり,ここで紹介でき なかった関数もかなりあります • ラムダ式も使えます(※ぼくがいまいちわかってない)
  75. 75. まとめ • どうしてもテーブル形式では扱いにくいような階層的なデー タなどを扱うのにリスト形式が便利 • リスト形式のデータをいじいじするのにrlistパッケージが とっても便利 • マッピング,フィルタリング,グループ分け,リストの結合, 情報の更新など,いじいじしたいことが基本的になんでもで きる
  76. 76. まとめ • 今回の発表で紹介した関数などは,webのrlist tutorialのペー ジに詳しく書かれていますので,そちらをご参照ください
  77. 77. 参考URL • Leihcrev’s memo 入門本編6章 リストとデータフレーム― https:// sites.google.com/site/leihcrev/r/lists-and-data-frames • rlist Tutorial ― http://renkun.me/rlist-tutorial/index.html • rlist Tutorial (日本語訳)― http://renkun.me/rlist/ja/ • R-Source 19. 行列の作成―http://cse.naro.affrc.go.jp/takezawa/r-tips/r/ 19.html • R-Source 23.リスト― http://cse.naro.affrc.go.jp/takezawa/r-tips/r/ 23.html • R-Source 39.データフレーム事始― http://cse.naro.affrc.go.jp/takezawa/ r-tips/r/39.html • 【超訳】pipeR の使い方 #rstatsj ― http://qiita.com/hoxo_m/items/ b80778d46684b818abd2
  78. 78. rlistパッケージの ススメ contact info 田村 祐 名古屋大学大学院国際開発研究科 yutamura@nagoya-u.jp http://tamurayu.wordpress.com/ • 階層的なデータはリ スト形式と相性◎ • ⃝⃝の中の☓☓と書 きたいときは%in% • %>>%使えばとって も読みやすい • 問題は,JSONや YAML形式のデータ ではなく表形式の データをどうやっ てリスト形式として Rに読み込むか

×