R_dir_ls() / read_csv()複数ファイルの読み込み_20240905

Topic(Purpose / Outcome:目的・期待される成果)

Conductor
Conductor

複数ファイルのCSVファイルの読み込み

Visualization(How / Output:事実整理 / 最終ゴール)

Visualizer
Visualizer

これは実務上は大事かも

file_pathの列を追加。

Script Design / Summary(How:設計図・概要・論理構築)

Wrangler
Wrangler

全体像はこんな感じ

# 1.0 LIBRARIES ----

library(tidyverse)
library(fs)

# 2.0 READING MULTIPLE CSV ----
# - Tip 001 - Revised to specify column types
# - FIXES Error: Can't combine `drv` <character> and `drv` <logical>.

directory_that_holds_files <- "001_read_multiple_files/data/"

car_data_list <- directory_that_holds_files %>%
    dir_ls() %>%
    # dir_ls()とは指定したディレクトリ内のファイルをリストで取得する関数。
    map(
        .f = function(path) {
            #.fとはmap関数の引数で、各要素に適用する関数を指定する。
            # function(path)は各要素に適用する関数を指定している。
            # path は、dir_ls() でリストされた各CSVファイルのパス。
            # リスト化されたpathの先のファイルのカラムの読込指定。
            read_csv(
                path,
                col_types = cols(
                    manufacturer = col_character(),
                    model = col_character(),
                    displ = col_double(),
                    year = col_double(),
                    cyl = col_double(),
                    trans = col_character(),
                    drv = col_character(),
                    cty = col_double(),
                    hwy = col_double(),
                    fl = col_character(),
                    class = col_character()
                )
            )
        }
    )

# 3.0 BINDING DATA FRAMES ----
# - bind_rows() : Taught in DS4B 101-R

car_data_tbl <- car_data_list %>%
    set_names(dir_ls(directory_that_holds_files)) %>%
    # car_data_list の各データフレームに対して、dir_ls(directory_that_holds_files) で取得したファイルパスを名前として付与します。
    # これにより、ファイルパスがリストの名前として設定されます。
    # bind_rows() は、リスト内の複数のデータフレームを行方向に結合します。
    # この際、.id 引数を指定することで、どのデータフレームがどのファイルから読み込まれたかを示す列(ここでは file_path 列)を作成します。
    bind_rows(.id = "file_path")

car_data_tbl


# 4.0 CREATE A DIRECTORY ----
# - fs package

new_directory <- "004_writing_multiple_files/car_data_01/"
# pathを記載。

dir_create(new_directory)
# directory_that_holds_files とは異なるディレクトリを作成します。

# 5.0 SPLITTING & WRITING CSV FILES ----
# - Text (stringr): Taught in DS4B 101-R
# - Iteration (purrr map): Taught in DS4B 101-R

car_data_tbl %>%
    mutate(file_path = file_path %>% str_replace(directory_that_holds_files, new_directory)) %>%
    # file_path に含まれる directory_that_holds_files を new_directory に置換します。
    # str_replace() は、文字列の置換を行います。
    group_by(file_path) %>%
    # file_path でグループ化します。
    group_split() %>%
    # group_split() は、グループ化されたデータフレームをリストに変換します。
    map(
        .f = function(data) {
            write_csv(data, path = unique(data$file_path))
            # write_csv() は、データフレームをCSVファイルとして書き込みます。
            # path 引数には、書き込むファイルのパスを指定します。
            # unique(data$file_path) は、dataのfile_path列のユニークな値を取得します。
        }
    )

Raw data / Wrangling / Feature Engineering(抽出~整形)

Raw data(How:生データ抽出元)

  • Source: CSVファイル格納

Raw data(How:生データ抽出方法)

  • SQL読込: –
  • CSV読込: 〇
  • API読込 : –

Raw data(How:生データの構造 / 種類)

Extractor
Extractor

元々のデータフレーム

Wrangling (How: Loading・生データ読込)

Wrangler
Wrangler

Loading

# Script on Rstudio
# Tips: 読み込み先のファイルは「記載するpath名の始まり」からWorking Directoryとして設定する必要性がある。

`read_csv()` 関数の `path` 引数は、読み込みたいCSVファイルの**ファイルパス**を指定するための引数です。ファイルパスは、コンピュータのどこにそのファイルが存在するかを示すもので、`read_csv()` はそのパスを基にファイルを見つけてデータを読み込みます。

例えば、`read_csv("data/sample.csv")` のように、`path` に `"data/sample.csv"` を渡すと、`read_csv()` はそのパスにある `sample.csv` ファイルを開いて読み込みます。

### ファイルパスの種類
1. **絶対パス**: ルートディレクトリから始まる完全なパス。
   - 例: `C:/Users/username/Documents/data/sample.csv`
   
2. **相対パス**: 現在の作業ディレクトリを基準としたパス。
   - 例: `data/sample.csv` (現在のディレクトリ内の `data` フォルダにある `sample.csv` を指す)

### コード内での `path` の役割
コード内の `map(.f = function(path) {...})` の `path` は、`dir_ls()` で取得されたファイルパスのリストから1つずつ渡されます。そのため、各CSVファイルのパスが `read_csv()` に渡され、それぞれのCSVファイルが順に読み込まれる仕組みです。

```r
map(
    .f = function(path) {
        read_csv(path, ...)
    }
)
```

この `path` は、`dir_ls()` でリストされた各CSVファイルのパスです。

Wrangling (How: before output、Output前のデータ構造)

Wrangler
Wrangler

視える化に合わせて編集

スキップ

メモ

  • 行 (row) :レコード、Observation
  • 列 (column):特徴量、変数、次元数、次元の削減(Dimensionality Reduction): 高次元データを少ない次元に圧縮し、モデルの効率を上げるための手法。
  • 値:data point、Feature

参考リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA