第3回:プロジェクトの整理とデータの読み込み

2024-04-16

https://data-science-chiba-2024.github.io/day3/

スクリプトについて

  • 今までは直接Rにコマンドを出していたけど、毎回そうするのは効率が良くない。

  • 作業を繰り返す場合や再現する場合はスクリプト(テキストファイル)が必要。

  • Rスクリプトの拡張は.R.r

スクリプトの作成と保存

  • 作成
    • File ➡︎ New File ➡︎ R Scriptをクリック
  • 保存
    • File ➡︎ Save As...をクリックかファイルのアイコンをクリック。
  • スクリプトの名前はなるべくローマ字を使うように(あとあと公開する時のため)

スクリプトからコードを使う

以下のコードをスクリプトに書いて、script.Rとしてデスクトップに保存しましょう(コードの詳細はまた後で学ぶ)。

library(tidyverse)

ggplot(diamonds, aes(x = carat, y = price)) + 
  geom_hex()

スクリプトからコードを使う

  • カーソルが現在位置している行をコンソールに送る:Ctrl(あるいは) + Enter

  • 今開いているスクリプトの行を全てコンソールに送る:Ctrl(あるいは) + Shift+ Enter

RStudioによる警告

スクリプトに間違いが入っている場合、RStudioはそれを教えてくれる(バツマークと赤い線):

スクリプトの書き方

  • 読みやすさ覚えやすさを優先しましょう。

  • Rは大文字と小文字を区別するので、小文字に揃えた方が覚えやく、間違いが少ない(例えば、Dataではなく、data)。

  • 変数名にはスペースが使えないので、_を使いましょう(例えば、data_set_1など)。

スクリプトの書き方

  • コメント(Rが無視する場所)を#で書く
    • 例えば、# this is a comment
  • コメントは自分用のメモ
    • 未来の自分が、今の自分が何をやったのか、分かるように書く。
    • まだ慣れていないうちには特にたくさん書きましょう。

ファイル名も整えましょう

NG ❌

alternative model.R
code for exploratory analysis.r
finalreport.qmd
FinalReport.qmd
fig 1.png
Figure_02.png
model_first_try.R
run-first.r
temp.txt

OK ✅

01_load_data.R
02_exploratory_analysis.R
03_model_approach_1.R
04_model_approach_2.R
fig_01.png
fig_02.png
report_2022_03_20.qmd
report_2022_04_02.qmd
report_draft_notes.txt

プロジェクトについて

  • スクリプトとしてコードを保存をするのはいいけど、解析が進むと複数のスクリプトとデータを整理する必要が生じる

  • RStudioの「Project」機能によって、スクリプトとデータ(など)の整理ができる

新しいプロジェクトを作る

  • File ➡︎ New Project ➡︎ New Directory ➡︎ New Project をクリック
    • プロジェクト名場所を入力(今回はr4dsにしましょう)
    • 分かりやすい場所がおすすめ(デスクトップにしましょう)
  • 今回は”Create a git repository”をクリックしないけど、本当はgitも使った方がいい(またあとで説明します)

新しいプロジェクトを作る

  • プロジェクト名の入力が終わると、RStudioが再度立ち上がる

  • ファイルパネル(右下)をよく見てください。今はRがどこに「います」か?

新しいプロジェクトを作る

  • 右下の「ファイル」パネルを使って、dataというフォルダーを作りましょう
    • あとで、このフォルダーにこれから解析するデータを置く

.Rprojファイルについて

  • 新しいプロジェクトには、r4ds.Rprojファイルが入っている

  • .Rprojファイルの中身はは基本的に触らない

    • 中身はRStudioの設定(RStudioに任せましょう)
    • 再度プロジェクトを開く時に使う(ダブルクリック)

作業ディレクトリについて

  • 「作業ディレクトリ」(“working directory”)というのは、今Rが今「いる」場所のこと

  • getwd()で確認できる:

getwd()
[1] "/Users/joelnitta/Desktop/r4ds"

作業ディレクトリについて

  • 時々、他のスクリプトを見ると、set.wd()という関数を目にする
    • 例:set.wd("/Users/joelnitta/analysis/")
    • 後ろの部分は「パス」と言う(パソコンの中の住所のような物)

作業ディレクトリについて

  • でも、多くの場合、他の人のパソコンにあるパスは自分のパソコンに存在しない
    • .Rprojを使えば、set.wd()を使う必要がない
  • なので、set.wd()は使わないようにしましょう。

プロジェクトにスクリプトを置きましょう

以下のコードを書いて、スクリプトをdiamonds.Rとしてr4dsプロジェクトに保存して、実行しましょう:

library(tidyverse)

ggplot(diamonds, aes(x = carat, y = price)) + 
  geom_hex()
ggsave("diamonds.png")

write_csv(diamonds, "data/diamonds.csv")

このスクリプトは何をするのでしょうか?

コードによる再現性

  • diamonds.Rdiamonds.pngというグラフを作る。
  • diamonds.pngを消しましょう。
  • 解析結果が消えてしまった!どうしよう!?

コードによる再現性

  • ご心配なく!
    • 再度diamonds.Rを実行してください(Ctrl(あるいは) + Shift+ Enter
  • 全く同じグラフが再度できた!つまり、再現しました。
  • コードとデータがあれば、解析結果はいつでも再現できる
  • 絶対に必要なのは、コードデータ。結果は「使い捨て」と考えて良い。

ディスカッション


データ整理やプロジェクトの管理はどうしていますか?

データの読み込み

  • Moodleからstudents.csvをダウンロードして、data/に置きましょう。

  • .csvcomma separated valuesの略です

    • エクセルで扱うようなデータ形式(エクセルでも開くことができる)
    • .xslxとの違いは、.csvはそのままどのテキストエディターでも開ける(エクセルがいらない)

データの読み込み

  • read_csv()関数で読み込む

まずは、読み込んでから直接に中身を見てみましょう:

read_csv("data/students.csv")
# A tibble: 6 × 5
  `Student ID` `Full Name`      favourite.food     mealPlan            AGE  
         <dbl> <chr>            <chr>              <chr>               <chr>
1            1 Sunil Huffmann   Strawberry yoghurt Lunch only          4    
2            2 Barclay Lynn     French fries       Lunch only          5    
3            3 Jayendra Lyne    N/A                Breakfast and lunch 7    
4            4 Leon Rossini     Anchovies          Lunch only          <NA> 
5            5 Chidiegwu Dunkel Pizza              Breakfast and lunch five 
6            6 Güvenç Attila    Ice cream          Lunch only          6    

読み込んだデータの保存

  • でも、これだけではRの環境にそのデータが入っていません

  • 変数(オブジェクト)として保存する必要がある:

students <- read_csv("data/students.csv")
  • このようにRに読み込んだデータをデータフレーム(“dataframe”)、あるいは「tibble」と呼ぶ
    • 2次元データ。エクセルのデータシートみたいな物。

読み込んだデータの中身の確認(1)

  • 変数として保存する時は中身が見えない(オブジェクトに渡された)

  • 中身を見たい時は変数名を直接コンソールに入力すればいい

students
# A tibble: 6 × 5
  `Student ID` `Full Name`      favourite.food     mealPlan            AGE  
         <dbl> <chr>            <chr>              <chr>               <chr>
1            1 Sunil Huffmann   Strawberry yoghurt Lunch only          4    
2            2 Barclay Lynn     French fries       Lunch only          5    
3            3 Jayendra Lyne    N/A                Breakfast and lunch 7    
4            4 Leon Rossini     Anchovies          Lunch only          <NA> 
5            5 Chidiegwu Dunkel Pizza              Breakfast and lunch five 
6            6 Güvenç Attila    Ice cream          Lunch only          6    

コンソールの使い方(使うとき)

  • このような時に使う:データの中身を確認したい、ヘルプファイルを開きたい、など。

  • つまり、データ解析に必要ではない(関係のない)コマンド。

読み込んだデータの中身の確認(2)

  • もう一つのデータの確認の仕方がある:「Environment」パネルでそのオブジェクトをクリック

  • すると、エクセルのようなレイアウトになる

    • エクセルと大きな違い:直接にデータをいじることができない!
  • エクセルはデータ入力に使う。Rはデータ解析に使う

データの種類(型)について

  • studentsをコンソール(左下のパネル)でもう一回打ってみてください

  • データの上に<dbl>とか<chr>とかと出ているけど、これは何でしょうか?

  • A: データの種類です

データの種類(型)について

  • dbl: 数字(“double”の略。なぜ”double”でしょう・・)
  • chr: 文字(“character”の略。この方がしっくり来るね)

このほかに、

  • lgl:ロジカル(TRUEFALSEか、そのどっちか)
  • int:整数(“integer”の略)

がある

ベクトルについて

  • ベクトル(vector)とは、同じ型を持つ一連のデータの集まり(一次元の配列)

  • ベクトルに含まれている一つ一つのデータを要素(element)という

  • 例えば、letters

    • "a"lettersの1個目の要素

ベクトルの作り方

  • ベクトルを関数はc()
    • “combine”(「くっつける」)の略
c(1, 2, 3)
[1] 1 2 3

ベクトルの作り方

  • 文字列(文字でできているベクトル)を作るときは、引用符をつけないといけない
c("a", "b", "c")
[1] "a" "b" "c"

ベクトルの型の確認

  • typeof()関数でベクトルの型を確認することができる
typeof(letters)
[1] "character"

チャレンジ

  • 以下のコードでベクトルを作ると、そのベクトルの型は何でしょうか?
c(1, 2, "c")

ベクトル変換

  • 先も言いましたが、あるベクトルの要素は全て同じ型を持たないといけない

  • なので、入力が複数の型を含む場合、Rはそれを同じ型に合わせる

x <- c(1, 2, "c")
typeof(x)
[1] "character"
  • 先のベクトルは文字に変換された

ベクトル型とデータフレーム

  • データフレームの列は、本当はベクトルになっている

  • なので、データフレームの列はそれぞれ、型が決まっている

    • これはエクセルと大きな違い

まとめ

  • スクリプト(.Rファイル)に解析に必要なコードを書く

  • スクリプトとデータがあれば、解析結果を再現できる

  • プロジェクトを使うと、解析の管理が大幅にやりやすくなる

  • データフレームはベクトルからなっている

  • ベクトルは一つの型しか持てない

宿題

締め切り:2024-04-23 12:50

  • クイズ(moodle)
  • 自分のデータを読み込む。
    二つのファイルmoodleにアップロード:
    • データのファイル(csv)
    • 読み込むスクリプト
  • もしcsvではないファイルを読み込みたければ、連絡してください