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

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

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

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

Avatar for Koji E. Kosugi

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