Upgrade to Pro — share decks privately, control downloads, hide ads and more …

sappoRo.R #12 初心者セッション

sappoRo.R #12 初心者セッション

Rの初心者セッションスライドです。

Koji E. Kosugi

February 16, 2025
Tweet

More Decks by Koji E. Kosugi

Other Decks in Programming

Transcript

  1. Rのはじめかた 1. SPSSやSASなどの統計ソフトをアンイン ストールします。 2. CRAN (しーらん)と検索します。 The Comprehensive R

    Archive Network とい うサイトが出てくるはずです。 3. 自分のOS/CPUに合ったページから,最新 版をダウンロードします。現在はR4.4.2に なります。 4. 指示に従ってインストール!「次へ」を連 打するだけでいいです。簡単ね! 初心者ワークショップ SappoRo.R #12 2025.02.16 2
  2. RStudioも使いましょう 1. RStudio で検索します。 RStudio Desktop あるいはPosit社が出てきます。 2. Install RStudio

    からRStudio Desktopを ダウンロードしてインストールしましょ う。  RStudioはServer版もあるよ! 初心者ワークショップ SappoRo.R #12 2025.02.16 3
  3. オススメ設定(クセ強め) General > Basic のWrokspace, Save Workspace to .RData on

    exit: をnever に General > Graphics > Graphics Deviceの Backend をAGGに Appearance の Editor Font をBizin GothicかHackGenに Appearance の Editor Font size を16に 初心者ワークショップ SappoRo.R #12 2025.02.16 6
  4. オススメ設定(クセ強め) Pane Layoutを SourceとCosoleを横並びに かなりワイドな画面をお使いの方は, Add Column で3列にしてsource pane を一列増やそう

    設定が終わったら Apply(適用) ボタンをお して,OK で閉じる 初心者ワークショップ SappoRo.R #12 2025.02.16 7
  5. はじめの0歩 Rでプロジェクトを作る プロジェクト=フォルダに紐づいた作業環境を作ろう File > New ProjectからNew Directory/Existing Directory/Version Controlを選ぶ

    New Directory; 新しいフォルダで作業開始 Existing Directory; 既存のフォルダをプロジェクトと紐付け Version Control; Githubレポジトリとプロジェクトを紐付け プロジェクトにしておくと,作業フォルダの設定も自動でなされるから,ファイルの 読み込みなどでパスの指定が楽になります。 初心者ワークショップ SappoRo.R #12 2025.02.16 11
  6. パッケージ パッケージは関数のセット。元のRに追加するだけで機能が増える増える! パッケージはCRANを通じて公開され,ペインの Packages タブで管理できます。 tidyverse はパッケージのパッケージ。便利な tidy 宇宙へようこそ pacman

    はパッケージマネージャーパッケージ。 p_load 関数で読み込み。もし環 境に入ってないパッケージがあれば自動的にダウンロードもしてくれます。 関数名が重複する場合,後から読み込まれたものが関数名を上書きします。 Pacakge::function の形で書く( :: を挟む)といいですね 初心者ワークショップ SappoRo.R #12 2025.02.16 14
  7. ベクトル,行列,リスト,データフレーム 複数の数字のセット,ベクトルは c() でくくる 2次元に並ぶ数字のセット,行列は matrix() でつくる 3次元以上の数字のセット,配列は array() で,

    dim オプションを 数字,文字,論理値(T/F)などが混在するもののセット,リストは list() で リストの中でも矩形に整っているデータフレームは, data.frame() で 分析するときはデータフレームがよく使われます データフレームの上位互換, tibble も便利です 初心者ワークショップ SappoRo.R #12 2025.02.16 16
  8. ベクトル(Vector) > # 数値ベクトル > x <- c(1, 2, 3,

    4, 5) > print(x) [1] 1 2 3 4 5 > # 文字列ベクトル > y <- c("りんご", "みかん", "バナナ") > print(y) [1] "りんご" "みかん" "バナナ" > # 論理値ベクトル > z <- c(TRUE, FALSE, TRUE) > print(z) [1] TRUE FALSE TRUE 初心者ワークショップ SappoRo.R #12 2025.02.16 17
  9. 行列(Matrix) > # 1から9までの数字で3×3行列を作成 > m1 <- matrix(1:9, nrow =

    3, ncol = 3) > print(m1) [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > # 行名と列名を付ける > m2 <- matrix(1:9, nrow = 3, ncol = 3, + dimnames = list(c("A", "B", "C"), + c("X", "Y", "Z"))) > print(m2) X Y Z A 1 4 7 B 2 5 8 C 3 6 9 初心者ワークショップ SappoRo.R #12 2025.02.16 18
  10. 配列(Array) # 2×3×2の3次元配列を作成 > arr <- array(1:12, dim = c(2,

    3, 2)) > print(arr) , , 1 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 , , 2 [,1] [,2] [,3] [1,] 7 9 11 [2,] 8 10 12 初心者ワークショップ SappoRo.R #12 2025.02.16 19
  11. リスト(List) > # 様々な型のデータを含むリストを作成 > my_list <- list( + numbers

    = c(1, 2, 3), + text = "Hello", + logical = TRUE, + matrix = matrix(1:4, 2, 2) + ) > print(my_list) $numbers [1] 1 2 3 $text [1] "Hello" $logical [1] TRUE $matrix [,1] [,2] [1,] 1 3 [2,] 2 4 初心者ワークショップ SappoRo.R #12 2025.02.16 20
  12. リストの要素へのアクセス > my_list$numbers [1] 1 2 3 > my_list$numbers[3] [1]

    3 > my_list$matrix[,2] [1] 3 4 > my_list$matrix [,1] [,2] [1,] 1 3 [2,] 2 4 初心者ワークショップ SappoRo.R #12 2025.02.16 21
  13. データフレーム(Data Frame) > # データフレームの作成 > df <- data.frame( +

    name = c("田中", "鈴木", "佐藤"), + age = c(25, 30, 28), + gender = c("M", "F", "M"), + height = c(170, 160, 175) + ) > > print(df) name age gender height 1 田中 25 M 170 2 鈴木 30 F 160 3 佐藤 28 M 175 # データフレームの要素へのアクセス > df$age [1] 25 30 28 初心者ワークショップ SappoRo.R #12 2025.02.16 22
  14. Tibble # tibbleの作成 > tbl <- tibble( + name =

    c("田中", "鈴木", "佐藤"), + age = c(25, 30, 28), + gender = c("M", "F", "M"), + height = c(170, 160, 175) + ) > > print(tbl) # A tibble: 3 × 4 name age gender height <chr> <dbl> <chr> <dbl> 1 田中 25 M 170 2 鈴木 30 F 160 3 佐藤 28 M 175 初心者ワークショップ SappoRo.R #12 2025.02.16 23
  15. データ構造の比較 特徴 ベクトル 行列 配列 リスト df Tibble 次元 1次元

    2次元 n次元 階層構造 2次元 2次元 型の統 一 必要 必要 必要 不要 列ごと 列ごと データ 型 単一 単一 単一 複数可 複数可 複数可 主な用 途 単純な数 列 数値計 算 多次元デー タ 複雑なデー タ データ分 析 データ分 析 初心者ワークショップ SappoRo.R #12 2025.02.16 25
  16. サンプルデータの準備 以下のデータセットを使って実習を進めます: # サンプルデータの作成 employees <- tibble( id = 1:10,

    name = c("田中一郎", "鈴木花子", "佐藤太郎", "山田優子", "中村次郎", "高橋美咲", "伊藤健一", "渡辺春子", "小林和子", "加藤博士"), gender = c("M", "F", "M", "F", "M", "F", "M", "F", "F", "M"), age = c(25, 30, 45, 28, 33, 29, 41, 36, 27, 38), height = c(170, 160, 175, 158, 172, 162, 168, 165, 159, 173), weight = c(65, 50, 80, 48, 70, 52, 63, 53, 49, 75), pre_salary = c(300000, 280000, 400000, 320000, 350000, 310000, 380000, 330000, 290000, 360000), salary = c(320000, 300000, 420000, 350000, 380000, 340000, 400000, 360000, 310000, 390000), department = c("営業", "人事", "技術", "営業", "技術", "人事", "技術", "営業", "人事", "技術") ) 初心者ワークショップ SappoRo.R #12 2025.02.16 27
  17. データの確認 > employees # A tibble: 10 × 9 id

    name gender age height weight pre_salary salary department <int> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> 1 1 田中一郎 M 25 170 65 300000 320000 営業 2 2 鈴木花子 F 30 160 50 280000 300000 人事 3 3 佐藤太郎 M 45 175 80 400000 420000 技術 4 4 山田優子 F 28 158 48 320000 350000 営業 5 5 中村次郎 M 33 172 70 350000 380000 技術 6 6 高橋美咲 F 29 162 52 310000 340000 人事 7 7 伊藤健一 M 41 168 63 380000 400000 技術 8 8 渡辺春子 F 36 165 53 330000 360000 営業 9 9 小林和子 F 27 159 49 290000 310000 人事 10 10 加藤博士 M 38 173 75 360000 390000 技術 初心者ワークショップ SappoRo.R #12 2025.02.16 28
  18. パイプ演算子 %>% パイプ演算子は、データの処理を順番に繋げる 左から右へ、データが流れていくイメージ コードが読みやすく、理解しやすくなる 基本的な使い方 # パイプ演算子を使わない場合 result <-

    sum(sqrt(abs(log(c(1:10))))) # パイプ演算子を使う場合 result <- c(1:10) %>% log() %>% abs() %>% sqrt() %>% sum() 初心者ワークショップ SappoRo.R #12 2025.02.16 29
  19. データフレームでの活用例 # パイプ演算子を使わない場合 result <- select( filter( mutate(employees, bmi =

    weight/(height/100)^2), age >= 20 ), name, age, bmi ) print(result) # パイプ演算子を使う場合 result <- employees %>% mutate(bmi = weight/(height/100)^2) %>% filter(age >= 20) %>% select(name, age, bmi) %>% print 初心者ワークショップ SappoRo.R #12 2025.02.16 30
  20. パイプ演算子を使ったデータ加工 select / filter select():列(変数)の選択 # 基本的な使い方 employees %>% select(name,

    age, department) # 条件による選択 employees %>% select(starts_with("pre")) # pre_salaryが選択される employees %>% select(contains("salary")) # pre_salaryとsalaryが選択される employees %>% select(ends_with("ry")) # pre_salaryとsalaryが選択される 初心者ワークショップ SappoRo.R #12 2025.02.16 31
  21. filter():行(観測)の絞り込み # 基本的な使い方 employees %>% filter(age >= 30) # 複数条件

    employees %>% filter(gender == "F", salary >= 350000) employees %>% filter(department == "技術" & salary > 380000) 出力例 > employees %>% filter(department == "技術" & salary > 380000) # A tibble: 3 × 9 id name gender age height weight pre_salary salary department <int> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> 1 3 佐藤太郎 M 45 175 80 400000 420000 技術 2 7 伊藤健一 M 41 168 63 380000 400000 技術 3 10 加藤博士 M 38 173 75 360000 390000 技術 初心者ワークショップ SappoRo.R #12 2025.02.16 32
  22. mutate 新しい列の作成・既存の列の変更 # 基本的な使い方 employees %>% mutate( bmi = weight

    / (height/100)^2, age_group = case_when( age < 30 ~ "若手", age < 40 ~ "中堅", TRUE ~ "ベテラン" ), salary_increase = salary - pre_salary, increase_rate = (salary - pre_salary) / pre_salary * 100 ) 初心者ワークショップ SappoRo.R #12 2025.02.16 33
  23. 出力 # A tibble: 10 × 13 id name gender

    age height weight pre_salary salary department bmi age_group <int> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <chr> 1 1 田中一郎 M 25 170 65 300000 320000 営業 22.5 若手 2 2 鈴木花子 F 30 160 50 280000 300000 人事 19.5 中堅 3 3 佐藤太郎 M 45 175 80 400000 420000 技術 26.1 ベテラン 4 4 山田優子 F 28 158 48 320000 350000 営業 19.2 若手 5 5 中村次郎 M 33 172 70 350000 380000 技術 23.7 中堅 6 6 高橋美咲 F 29 162 52 310000 340000 人事 19.8 若手 7 7 伊藤健一 M 41 168 63 380000 400000 技術 22.3 ベテラン 8 8 渡辺春子 F 36 165 53 330000 360000 営業 19.5 中堅 9 9 小林和子 F 27 159 49 290000 310000 人事 19.4 若手 10 10 加藤博士 M 38 173 75 360000 390000 技術 25.1 中堅 # ℹ 2 more variables: salary_increase <dbl>, increase_rate <dbl> 初心者ワークショップ SappoRo.R #12 2025.02.16 34
  24. pivot_longer / pivot_wider pivot_longer:縦持ちデータへの変換 # 給与データを長形式(縦持ち)に変換 salary_long <- employees %>%

    select(id, name, pre_salary, salary) %>% pivot_longer( cols = c(pre_salary, salary), names_to = "salary_type", values_to = "amount" ) 初心者ワークショップ SappoRo.R #12 2025.02.16 35
  25. 出力: > salary_long # A tibble: 20 × 4 id

    name salary_type amount <int> <chr> <chr> <dbl> 1 1 田中一郎 pre_salary 300000 2 1 田中一郎 salary 320000 3 2 鈴木花子 pre_salary 280000 4 2 鈴木花子 salary 300000 5 3 佐藤太郎 pre_salary 400000 初心者ワークショップ SappoRo.R #12 2025.02.16 36
  26. pivot_wider:横持ちデータへの変換 # 部署ごとの性別人数を広形式(横持ち)に変換 gender_count <- employees %>% group_by(department, gender) %>%

    summarise(count = n(), .groups = "drop") %>% print %>% # 途中経過表示 pivot_wider( names_from = gender, values_from = count, names_prefix = "gender_" ) # 最終結果表示 gender_count 初心者ワークショップ SappoRo.R #12 2025.02.16 37
  27. 途中経過 # A tibble: 4 × 3 department gender count

    <chr> <chr> <int> 1 人事 F 3 2 営業 F 2 3 営業 M 1 4 技術 M 4 最終結果 # A tibble: 3 × 3 department gender_F gender_M <chr> <int> <int> 1 人事 3 NA 2 営業 2 1 3 技術 NA 4 初心者ワークショップ SappoRo.R #12 2025.02.16 38
  28. right/left/full join データフレームの結合 # left_join:左側のデータをベースに結合 df1 %>% left_join(df2, by =

    "id") # right_join:右側のデータをベースに結合 df1 %>% right_join(df2, by = "id") # full_join:すべてのデータを結合 df1 %>% full_join(df2, by = "id") 初心者ワークショップ SappoRo.R #12 2025.02.16 39
  29. 描画 with ggplot 基本的な使い方 df %>% ggplot(aes(x = X軸,y =

    y軸)) + geom_XXXX() 1. データフレームをパイプで ggplot に渡す 2. aes()でキャンパス全体の設計 3. キャンパスに geom_XXXX で描画要素を置く 4. theme や labs で微調整 初心者ワークショップ SappoRo.R #12 2025.02.16 41
  30. よく使うグラフの例 散布図 # 散布図(身長と体重の関係) employees %>% ggplot(aes(x = height, y

    = weight))+ geom_point() 初心者ワークショップ SappoRo.R #12 2025.02.16 42
  31. 散布図 employees %>% # gender変数ごとに色を変える ggplot(aes(x = height, y =

    weight, color = gender))+ geom_point() + # テーマをミニマルに theme_minimal() + # ラベルも書いてみる labs(title = "身長と体重の関係", x = "身長(cm)", y = "体重(kg)") 初心者ワークショップ SappoRo.R #12 2025.02.16 43
  32. 棒グラフ # 棒グラフ(部署ごとの平均給与) employees %>% group_by(department) %>% summarise(avg_salary = mean(salary))

    %>% print %>% ggplot() + geom_bar(aes(x = department, y = avg_salary), stat = "identity") + theme_classic() + labs(title = "部署別平均給与", x = "部署", y = "平均給与") グラフ用にデータを加工して渡す department avg_salary <chr> <dbl> 1 人事 316667. 2 営業 343333. 3 技術 397500 初心者ワークショップ SappoRo.R #12 2025.02.16 44
  33. 箱ひげ図 # 箱ひげ図(部署ごとの年齢分布) employees %>% ggplot(aes(x = department, y =

    age)) + geom_boxplot() + theme_classic() + labs(title = "部署別年齢分布", x = "部署", y = "年齢") 初心者ワークショップ SappoRo.R #12 2025.02.16 45
  34. RStudioとGithubの連携 プロジェクトでのGit/GitHub利用 新規プロジェクト作成時 New Project → Version Control → Git

    リポジトリURLを入力 これで既存プロジェクトをGit管理下に 初心者ワークショップ SappoRo.R #12 2025.02.16 51
  35. Quarto/Rmarkdown:文芸的プログラミング 基本的な使い方 1. File → New FileでQuarto Document / R

    Markdownを選択 2. TitleやAuthorを入力,出力書式(HTML,PDF,Word)などを選ぶ画面が出ます 3. サンプル文書・コードが書いてあるファイルが生成されます これをRneder/Knitすることでファイルが出力される。簡単! 初心者ワークショップ SappoRo.R #12 2025.02.16 53
  36. ShinyによるインタラクティブなWeb App library(shiny) とするだけで, server.R と ui.R の2つのファイルで構成され るアプリが作れる 生成AIと一緒に作ると,半日もしないうちに素敵なアプリが作れる俺。おーれー♪

    できたアプリは shinyapps.io というサーバにアップすることができる。もちろん 自前のShiny Serverを立ててもよい。 主な活用例 データ可視化のダッシュボード インタラクティブな教材 GUIで使える統計パッケージの提供 初心者ワークショップ SappoRo.R #12 2025.02.16 56