データサイエンス100本ノック(構造化データ加工編)- R Part 5 (Q81 to Q100)

データサイエンス
解説:

このコードは以下の動作を行う。

データフレーム 'df_product' の 'unit_price' と 'unit_cost' 列の平均を計算し、結果を最も近い整数に丸める。
price_mean <- round(mean(df_product$unit_price, na.rm = TRUE)) cost_mean <- round(mean(df_product$unit_cost, na.rm = TRUE))

round() 関数は、平均値を最も近い整数に丸めるために使用される。
na.rm=TRUE は、計算から欠損値を取り除くために使用される。

df_product' の 'unit_price' と 'unit_cost' 列の欠損値をそれぞれの平均値で置き換えます。
df_product_2 <- df_product %>% replace_na(list(unit_price = price_mean, unit_cost = cost_mean))

replace_na() は 'tidyr' パッケージから、欠損値を先に計算した平均値に置き換えるために使用されます。

演算子 %>% (パイプ演算子としても知られている) は、2つのアクションを一緒に連鎖させるために使用され、最初のアクションの出力は、2番目のアクションの入力として使用されます。

sapply()関数を使用して、修正した「df_product_2」データフレームの各列における欠損値の数を計算します。

sapply(df_product_2, function(x) sum(is.na(x)))
sapply()関数は、'df_product_2'データフレームの各列に関数(function(x) sum(is.na(x)) )を適用するために使用されます。

関数のsum(is.na(x))の部分は、'df_product_2'データフレームの各列(x)において、欠損値(NA)の数をカウントする。
 
解説:

このコードは以下の動作を行います。

データフレーム 'df_product' の 'unit_price' と 'unit_cost' 列の中央値を計算し、結果を最も近い整数に丸める。
price_median <- round(median(df_product$unit_price, na.rm = TRUE)) cost_median <- round(median(df_product$unit_cost, na.rm = TRUE))

median()関数は、'unit_price' および 'unit_cost' 列の中央値を計算するために使用される。

round() 関数は、中央値を最も近い整数に丸めるために使用されます。

na.rm=TRUE は、計算から欠損値を取り除くために使用されます。

df_product' の 'unit_price' と 'unit_cost' カラムの欠損値をそれぞれの中央値で置き換えます。
df_product_3 <- df_product %>% replace_na(list(unit_price = price_median, unit_cost = cost_median))

replace_na() は 'tidyr' パッケージのもので、欠損値を先に計算した中央値で置き換えるために使用される

演算子%>%(パイプ演算子としても知られている)を使用して、2つのアクションを連鎖させ、最初のアクションの出力を2番目のアクションの入力として使用します。

sapply()関数を使用して、修正した「df_product_3」データフレームの各列における欠損値の数を計算します。
sapply(df_product_3, function(x) sum(is.na(x)))

sapply()関数は、'df_product_3'データフレームの各列に関数(function(x) sum(is.na(x)) )を適用するために使用されます。

関数のsum(is.na(x))の部分は、'df_product_3'データフレームの各列(x)において、欠損値(NA)の数をカウントする。
解説:

このコードは、以下の動作を行います。

df_product'データフレームを'category_small_cd'カラムでグループ化する。
df_product_4 <- df_product %>% group_by(category_small_cd)

演算子%>%は、2つのアクションを連鎖させるために使用され、最初のアクションの出力は、2番目のアクションの入力として使用されます。

dplyr' パッケージの 'group_by()' 関数を使用して、'df_product' データフレームを 'category_small_cd' 列でグループ化する。

グループ化されたデータフレームの各グループの 'unit_price' と 'unit_cost' 列の中央値を計算し、結果を最も近い整数に丸め、結果を新しいデータフレームに要約します。
summarise(price_median = round(median(unit_price, na.rm = TRUE)), cost_median = round(median(unit_cost, na.rm = TRUE)), .groups = "drop")

'summarise()'関数は'dplyr'パッケージから使用し、グループ化したデータフレームの各グループの'unit_price'と'unit_cost'の列の中央値を算出する。

'round()'関数は、中央値を最も近い整数に丸めるために使用される。

na.rm=TRUEは、計算から欠損値を取り除くために使用されます。

.groups="drop" 引数は、出力からグループ化情報を削除するために使用されます。

要約されたデータフレームと元の 'df_product' データフレームを 'category_small_cd' カラムで結合する。
inner_join(df_product, by = "category_small_cd")

inner_join()」関数は、「dplyr」パッケージから使用され、「category_small_cd」列によって、要約データフレームと元の「df_product」データフレームを結合します。

結果として得られるデータフレームは、両方のデータフレームからすべての列を持つことになります。

結合したデータフレームの 'unit_price' と 'unit_cost' 列の欠損値を、対応する 'category_small_cd' グループのそれぞれの中央値で置き換えます。
mutate(unit_price = ifelse(is.na(unit_price), price_median, unit_price), unit_cost = ifelse(is.na(unit_cost), cost_median, unit_cost))

mutate()' 関数は、'dplyr' パッケージから、結合したデータフレームに値を変更した新しい列を作成するために使用されます。

ifelse() 関数は、'unit_price' と 'unit_cost' 列で値が欠損(NA)しているかどうかをチェックし、その値が属する 'category_small_cd' グループの対応する中央値で置き換えるために使用される。

sapply()関数を使用して、変更後の'df_product_4'データフレームの各列における欠損値の数を計算する。
sapply(df_product_4, function(x) sum(is.na(x)))

sapply()関数は、'df_product_4'データフレームの各列に関数(function(x) sum(is.na(x)) )を適用するために使用されます。

関数のsum(is.na(x))の部分は、'df_product_4'データフレームの各列(x)において、欠損値(NA)の数をカウントする。
解説:

このコードでは、df_receiptというデータ・フレームに対していくつかのデータ操作を行なっていますが、このデータ・フレームには売上取引に関する情報が含まれていると思われます。以下は、各コードの行が何を行っているのかの内訳です。

df_receipt_2019 <- df_receipt %>% filter(20190101 <= sales_ymd & sales_ymd <= 20191231) %>% group_by(customer_id) %>% summise(amount_2019 = sum(amount), .groups = "drop")

このコード行は、df_receipt_2019という新しいデータフレームを作成し、元のdf_receiptデータフレームをフィルタリングして2019年1月1日から2019年12月31日の間に発生した販売取引のみを含むようにします。そして、customer_idでデータをグループ化し、その期間に各顧客が使った金額の合計を計算し、結果をamount_2019という新しい列に格納します。

df_receipt_all <- df_receipt %>% group_by(customer_id) %>% summise(amount_all = sum(amount), .groups = "drop")

このコードでは、df_receipt_allという新しいデータフレームを作成し、df_receiptデータフレームをcustomer_idでグループ化して、各顧客がすべての取引で使った合計金額を計算し、結果をamount_allという新しい列に保存しています。

df_sales_rate <- left_join(df_customer["customer_id"], df_receipt_2019, by = "customer_id") %>% left_join(df_receipt_all, by = "customer_id") %>% replace_na(list(quantity_2019 = 0, amount_all = 0)) %>% mutate(amount_rate = ifelse(amount_all == 0, 0, amount_2019 / amount_all)) %>% filter(amount_rate > 0) %>% slice(1: 10)

このコードでは、df_customer データフレーム(顧客の属性に関する情報が含まれている可能性が高い)と df_receipt_2019 および df_receipt_all データフレームを customer_id 列で結合して df_sales_rate という新しいデータフレームを作成しています。次に、amount_2019とamount_all列の欠損値を0に置き換え、2019年に発生した顧客の総支出の割合を表すamount_rateという新しい列を計算し(すなわちamount_2019 / amount_all)、2019年にお金を使った顧客のみを含むようにデータをフィルタリングし(すなわちamount_rate > 0)、最後にamount_rate値によって上位10名の顧客を選択する(すなわちslice(1:10) )。

全体として、このコードは、2019年に総支出の割合が最も高い上位10名の顧客を特定しており、ターゲットマーケティングや顧客維持の取り組みに役立つと考えられます。
 
解説:

このコードは以下のタスクを実行します。

df_geocodeデータフレームから3つの列(postal_cd, longitude, latitude)を選択し、df_geocode_1という新しいデータフレームを作成する。

df_geocode_1データフレームはpostal_cdでグループ化され、各グループの経度と緯度の平均値がsummarise()関数で計算される。結果として得られるデータフレームは、postal_cdのユニークな値ごとに1行、postal_cd、m_longitude、m_latitudeのカラムを含みます。

df_customer データフレームは、共通の postal_cd 列に基づいて行をマッチングする inner_join() 関数を使用して df_geocode_1 データフレームと結合されます。結果として得られるデータフレームは、両方のデータフレームからのすべての列を含んでいます。

head()関数を使用して、結果のデータフレーム(df_customer_1)の最初の10行を表示します。これらの行には、顧客に関する情報と地理的な位置(緯度と経度)が含まれています。
 
解説:

このコードは、以下のタスクを実行します。

calc_distance()というカスタム関数を定義し、4つのパラメータx1、y1、x2、およびy2を受け取ります。この関数は、2つの地理的な場所(緯度と経度で指定)間の距離を、ハバーシンの公式を使用して計算する。計算された距離はキロメートル単位で返される。

df_customer_1 データフレームは、inner_join()関数を使用して df_store データフレームと結合します。結合は、df_customer_1 の application_store_cd 列と df_store の store_cd 列に対して実行されます。

結果として得られるデータフレームは、rename()関数を使用して、2つの異なるアドレスカラムを反映するように名前が変更されます。

mutate() 関数を使用して、distance という新しい列が結果のデータフレームに追加されます。calc_distance()関数は、顧客と店舗との間の距離を計算するために使用されます。この関数は、df_customer_1 の緯度と経度の平均値(m_latitude と m_longitude)と df_store の緯度と経度の値という 4 つの引数で呼ばれる。得られた距離値は、distance 列に格納される。

次に、select()関数を用いて、customer_id、customer_address、store_address、およびdistance列のみを含むように、結果のデータフレームをサブセットする。

最後に、slice()関数を使用して、結果のデータフレームの最初の10行を表示します。これらの行には、顧客に関する情報、顧客の住所、店舗の住所、顧客と店舗間の距離が含まれています。
 
解説:

このコードは、以下のステップを実行します。

df_receiptデータフレーム内の各顧客の売上金額の合計を計算し、group_by()とsummarise()関数を使用して新しいデータフレームdf_sales_amountに結果を保存します。

df_sales_amount <- df_receipt %>% group_by(customer_id) %>% summise(sum_amount = sum(amount), .groups = "drop")

customer_idカラムに基づいてdf_customerとdf_sales_amountデータフレーム間で左結合を行い、mutate()関数を使用してsum_amountカラムのNA値を0に置き換え、結果のデータフレームをsum_amountとcustomer_idの降順で並び替え、customer_nameとportal_cdカラムに基づいてユニーク行のみを保持します。

df_customer_u <- left_join(df_customer, df_sales_amount, by = "customer_id") %>% mutate(sum_amount = ifelse(is.na(sum_amount), 0, sum_amount) %>% arrange(desc(sum_amount), customer_id) %>% distinct(customer_name, postal_cd, .keep_all = TRUE)

元のdf_customerデータフレーム、結果のdf_customer_uデータフレームの行数とその差を出力し、重複した行がどれだけ削除されたかを確認する。

print(paste( "df_customer_cnt:", nrow(df_customer), "df_customer_u_cnt:", nrow(df_customer_u), "diff:", nrow(df_customer) - nrow(df_customer_u)))
 
解説:

このコードは以下の処理を実行します。

df_customerとdf_customer_uの間で、"customer_name "と "postal_cd "というカラムを結合キーとして使用した内部結合を実行します。
結果のデータフレームはdf_customer_nに割り当てられます。

df_customer_nの列 "customer_id.x "は "customer_id "にリネームされます。

df_customer_uのカラム "customer_id.y "は、"integration_id "にリネームされる。

df_customer_nの "customer_id "と "integration_id "カラムのユニークな値の数が計算され、これらの数の差が出力される。

このコードの目的は、元のdf_customerデータフレーム内のユニークな顧客IDの数と、df_customerと顧客ごとの総売上金額(df_sales_amount)を結合して作成したdf_customer_uデータフレーム内のユニークな顧客IDの数とを比較することです。前提として、df_customerには顧客名と郵便番号が重複している可能性があり、その結果、df_customerのユニークな顧客IDの数はdf_customer_uと比較して多くなります。コードの最後に表示される2つのカウントの差は、結合操作によって削除された重複する顧客IDの数を表します。
 
解説:

このコードは、Rのrsampleパッケージを使用して、データセットをトレーニングセットとテストセットに分割しています。

set.seed(71)は、結果の再現性を確保するためのランダムシードを設定しています。

df_sales_customerは、df_receiptをcustomer_idでグループ化し、各顧客の金額の合計を計算することで作成されています。そして、合計がプラスになる顧客だけを残す。

df_tmpはdf_customerとdf_sales_customerをcustomer_idで結合することで作成されます。

splitはrsampleパッケージのinitial_split()関数を用いて作成する。propパラメータは0.8に設定されており、データセットが80%のトレーニングデータと20%のテストデータに分割されることを意味します。

df_customer_trainとdf_customer_testはそれぞれ、分割によって得られたトレーニングセットとテストセットである。

最後に、print()文を使って、トレーニングデータとテストデータの割合を確認する。
 
解説:

このコードは、caretパッケージのcreateTimeSlices関数を使って、時間ベースのクロスバリデーションフォールドを作成する方法の例である。

このコードの最初のステップは、group_by関数とsummarise関数を使って、データセット全体の月別の売上金額を要約することです。そして、出来上がったデータフレームは、より意味のあるカラム名にリネームされます。

次に、createTimeSlices関数を使用して、データに対して3つの時間ベースの折りたたみを作成します。この関数は、時点のベクトル(この場合は販売月)を受け取り、各フォールドのトレーニングインデックスとテストインデックスのセットに分割する。initialWindowパラメータは最初のトレーニングウィンドウのサイズを、horizonパラメータはテストウィンドウのサイズを、skipパラメータは各折り返し間のスキップ時間量を、fixedWindowパラメータはテストウィンドウのサイズを固定するかどうかを指定するものである。

最後に、createTimeSlicesで生成されたインデックスを使用して、df_trainとdf_testのデータフレームが各折り返しで作成されます。これらのデータフレームは、モデルの時間ベースのクロスバリデーションに使用することができます。

 

解説:

Rのrecipesパッケージを使ってダウンサンプリングを実行しているコードです。

まず、各顧客の売上金額の合計を計算し、顧客情報と結合します。そして、is_buy_flagというバイナリ変数を作成し、売上金額の有無から顧客が購入したか否かを示しています。

次に、recipe()関数を用いてレシピオブジェクトを作成する。次に、step_downsample()関数を使用して、71のランダムシードを使用して、多数派クラス(購入をしなかった顧客)を少数派クラス(購入をした顧客)の観測数に合わせてダウンサンプリングします。

prep()関数はレシピの準備に、juice()関数は処理されたデータセットの抽出に使用される。最後に、is_buy_flagでデータをグループ化し、各グループのオブザベーション数をカウントすることで、結果のダウンサンプリングを検証する。
 
解説:

上のコードは、顧客情報を格納した「df_customer」というデータフレームを操作しています。以下、各コード行の処理内容を紹介します。

df_gender_std = unique(df_customer[c("gender_cd", "gender")]) - このコードでは、df_gender_std という新しいデータフレームを作成します。これは、df_customer データフレームから 2 つの列、特に "gender_cd" と "gender" という名前の列を選択します。そして、unique()関数を使って重複する行を削除し、元のデータフレームに含まれる性別コードと性別値のユニークな組み合わせをすべて含むデータフレームを作成します。

df_customer_std = df_customer[, colnames(df_customer) != "gender"] - このコードの行はdf_customer_stdという別の新しいデータフレームを作成します。 これはdf_customerデータフレームから「性別」列を除くすべての列をコピーします。これは、colnames()関数と論理演算子!=を使って、名前が "gender "と等しくない全ての列を選択することで行われます。 結果のデータフレームは、元のdf_customerデータフレームと同じ行を持ちますが、"gender "列はありません。

この2行のコードにより、元のdf_customerデータフレームは、ユニークな性別コードと値のみを含む部分と、性別列を除く他のすべての顧客情報を含む部分に分割されました。
 
解説:

上のコードは、「df_product」と「df_category」という2つのデータフレームを操作しています。以下、各コード行の処理内容を紹介します。

df_product_full <- inner_join(df_product, df_category[c("category_small_cd", "category_major_name", "category_medium_name", "category_small_name")], by = "category_small_cd") - このコードでは df_product_full という新しいデータフレームを作っています。これは、inner_join()関数を使用して、"category_small_cd "という共通の列に基づいてdf_productとdf_categoryデータフレームを結合しています。その結果、"category_small_cd "の値が一致する両方のデータフレームからすべてのカラムを含むデータフレームが生成されます。df_categoryデータフレームは、"category_small_cd", "category_major_name", "category_medium_name", "category_small_name" 列のみを含むようにサブセットされています。

head(df_product_full, n = 3) - このコードの行は、df_product_fullデータフレームの内容をチェックするために使用されます。head()関数を使用して、データ・フレームの最初の3行を表示します。これは、結合操作が成功したことを確認し、出力の形式をチェックするために、結果のデータ・フレームを素早く検査するのに便利な方法です。
 
解説:

上のコードは、df_product_fullというデータフレームをUTF-8エンコーディングでCSVファイルに書き込んでいます。write.csv()関数の各引数の役割は以下の通りです。

df_product_full - CSVファイルに書き出したいデータフレームです。

"../data/R_df_product_full_UTF-8_header.csv" - 出力CSVファイルのファイルパスとファイル名です。パスの先頭にある.は、ファイルが現在の作業ディレクトリの親ディレクトリに保存されることを意味します。R_df_product_full_UTF-8_header.csv は、出力ファイルの名前です。

row.names=FALSE - この引数は、出力CSVファイルに行名を含めないことを指定します。

fileEncoding = "UTF-8" - この引数は、出力CSVファイルのエンコーディングを指定します。UTF-8は、さまざまな言語の文字を幅広くサポートする文字エンコーディングであるため、英語以外の文字を扱うのに適しています。

まとめると、write.csv()関数はdf_product_fullデータフレームをUTF-8エンコーディングでCSVファイルに書き込み、指定したファイルパスとファイル名に保存します。出来上がったCSVファイルには、行名は含まれません。
 
解説:

上記のコードは、df_product_fullというデータフレームをCP932エンコーディングでCSVファイルに書き込んでいます。write.csv()関数の各引数が何をするのか、以下に示します。

df_product_full - CSVファイルに書き出したいデータフレームです。

"../data/R_df_product_full_CP932_header.csv" - 出力CSVファイルのファイルパスとファイル名です。パスの先頭にある.は、ファイルが現在の作業ディレクトリの親ディレクトリに保存されることを意味します。R_df_product_full_CP932_header.csv は、出力ファイルの名前です。

row.names=FALSE - この引数は、出力CSVファイルに行名を含めないことを指定します。

fileEncoding = "CP932" - この引数は、出力CSVファイルのエンコーディングを指定します。CP932は、日本語テキストに使用される文字エンコーディングで、日本語で使用される様々な文字に対応しています。

要約すると、write.csv()関数は、df_product_fullデータフレームをCP932エンコーディングでCSVファイルに書き込み、指定されたファイルパスとファイル名に保存する。出来上がったCSVファイルには、行名は含まれません。このエンコーディングは、日本語のテキストデータを扱う際に便利です。

 

解説:

上のコードは、df_product_fullというデータフレームをUTF-8エンコーディングでテキストファイルに書き込んでいます。write.table()関数の各引数が何をするのか、以下に示します。

df_product_full - テキスト・ファイルに書き込むデータ・フレームです。

"../data/R_df_product_full_UTF-8_noh.csv" - 出力テキストファイルのファイルパスとファイル名です。パスの先頭にある.は、ファイルが現在の作業ディレクトリの親ディレクトリに保存されることを意味します。R_df_product_full_UTF-8_noh.csvは、出力ファイルの名前です。

row.names = FALSE - この引数は、出力テキスト・ファイルに行名を含めないことを指定します。

col.names = FALSE - この引数は、出力テキスト・ファイルに列名を含めないことを指定します。

sep = "," - この引数は、出力テキストファイルの列の間に使用するデリミターを指定します。この場合、デリミターとしてカンマが使用されます。

fileEncoding = "UTF-8" - この引数は、出力テキストファイルのエンコーディングを指定する。UTF-8は、さまざまな言語の文字を幅広くサポートする文字エンコーディングであるため、英語以外の文字を扱うのに適しています。

要約すると、write.table()関数は、df_product_fullデータフレームをUTF-8エンコーディングでテキストファイルに書き込み、指定したファイルパスとファイル名に保存します。出来上がったテキストファイルは、行名や列名を含まず、区切り文字としてカンマを使用します。
 
解説:

上記のコードは、R_df_product_full_UTF-8_header.csvというCSVファイルをdf_product_fullというデータフレームに読み込んでいます。read.csv()関数の各引数が何をするかは以下の通りです。

"../data/R_df_product_full_UTF-8_header.csv" - これは入力CSVファイルのファイルパスとファイル名である。パスの先頭の.は、ファイルが現在の作業ディレクトリの親ディレクトリにあることを意味します。

colClasses = c_class - この引数は、データフレーム内の各列のクラスを指定するベクトルである。この場合、1列目と5〜9列目はNAに設定され、クラスが自動的に決定されることが示されている。2列目から4列目まではcharacterに設定され、文字列として扱われることが示される。

fileEncoding = "UTF-8" - この引数は、入力CSVファイルのエンコーディングを指定する。UTF-8は、さまざまな言語の文字を幅広くサポートする文字エンコーディングである。

head(df_product_full, 3) - このコマンドは、df_product_fullデータフレームの最初の3行をコンソールに表示します。

要約すると、read.csv() 関数は R_df_product_full_UTF-8_header.csv ファイルを、指定した列クラスとファイルエンコーディングを使って df_product_full というデータフレームに読み込む。そして、出来上がったデータフレームは、head()関数を用いてコンソールに出力されます。
 
解説:

上記のコードは、R_df_product_full_UTF-8_noh.csvというCSVファイルをdf_product_fullというデータフレームに読み込み、新しい列名をデータフレームに割り当てています。read.csv()関数の各引数が何をするかは以下の通りです。

"../data/R_df_product_full_UTF-8_noh.csv" - これは入力CSVファイルのファイルパスとファイル名である。パスの先頭の.は、ファイルが現在の作業ディレクトリの親ディレクトリにあることを意味します。

colClasses = c_class - この引数は、データフレーム内の各列のクラスを指定するベクトルである。この場合、1列目と5~9列目はNAに設定され、クラスが自動的に決定されることが示されている。2列目から4列目はcharacterに設定され、文字列として扱われるべきことを示す。

header = FALSE - この引数は、入力CSVファイルにヘッダー行がないことを指定する。

fileEncoding = "UTF-8" - この引数は、入力CSVファイルのエンコーディングを指定する。UTF-8は、さまざまな言語の文字を幅広くサポートする文字エンコーディングである。

colnames(df_product_full) <- c("product_cd", "category_major_cd", "category_medium_cd", "category_small_cd", "unit_price", "unit_cost", "category_major_name", "category_medium_name", "category_small_name") - データフレームに新しいコラム名を付与するコマンドです.新しい列名は "product_cd", "category_major_cd", "category_medium_cd", "category_small_cd", "unit_price", "unit_cost", "category_major_name", "category_medium_name", and "category_small_name", the order of the same column name is.

head(df_product_full, 3) - このコマンドは、df_product_fullデータフレームの最初の3行をコンソールに表示します。

要約すると、read.csv() 関数は R_df_product_full_UTF-8_noh.csv ファイルを、指定された列クラス、ヘッダー設定、ファイルエンコーディングを用いて df_product_full というデータフレームに読み込む。そして、出来上がったデータフレームに新しいカラム名を付け、head()関数を用いてコンソールに出力する。
 
 
解説:

上記のコードは、R_df_product_full_UTF-8_noh.csvというCSVファイルをdf_product_fullというデータフレームに読み込み、新しい列名をデータフレームに割り当てています。read.csv()関数の各引数が何をするかは以下の通りです。

"../data/R_df_product_full_UTF-8_noh.csv" - これは入力CSVファイルのファイルパスとファイル名である。パスの先頭の.は、ファイルが現在の作業ディレクトリの親ディレクトリにあることを意味します。

col.names = c_names - この引数は、データフレームで使用する列名を指定します。c_namesは、新しい列名を入力ファイルに現れるのと同じ順序で列挙する文字ベクトルです。

colClasses = c_class - この引数は、データフレーム内の各列のクラスを指定します。c_classは、データフレーム内の各列のクラスを指定するベクトルです。この場合、最初の列はNAに設定され、そのクラスが自動的に決定されることを示す。2列目から4列目まではcharacterに設定され、文字列として扱われることが示される。5番目と6番目の列はNAに設定され、そのクラスが自動的に決定されるべきことを示す。最後の3つの列はNAに設定され、欠損値として扱われるべきことを示す。

header = FALSE - この引数は、入力CSVファイルにヘッダー行がないことを指定する。

fileEncoding = "UTF-8" - この引数は、入力CSVファイルのエンコーディングを指定する。UTF-8は、さまざまな言語の文字を幅広くサポートする文字エンコーディングである。

head(df_product_full, 3) - このコマンドは、df_product_fullデータフレームの最初の3行をコンソールに表示します。

要約すると、read.csv()関数は、R_df_product_full_UTF-8_noh.csv ファイルを、指定した列名、列クラス、ヘッダー設定、ファイルエンコーディングを用いて df_product_full というデータフレームに読み込む。そして、出来上がったデータフレームは、head()関数を用いてコンソールに出力されます。
 
解説:

上記のコードは、データフレームdf_product_fullの内容を、R_df_product_full_UTF-8_header.tsvというタブ区切り値(TSV)ファイルに書き込んでいます。以下、write.table()関数の各引数が何をするのかを説明します。

df_product_full - TSVファイルに書き込まれるデータフレームです。

"../data/R_df_product_full_UTF-8_header.tsv" - 出力TSVファイルのファイルパスとファイル名です。パスの先頭にある...は、ファイルが現在の作業ディレクトリの親ディレクトリに配置されることを意味します。

row.names = FALSE - この引数は、出力ファイルに行名を含めないことを指定します。

sep = "\t" - この引数は、列の間に使用される区切り文字を指定します。この場合、区切り記号はタブ文字です。

fileEncoding = "UTF-8" - この引数は、出力TSVファイルのエンコーディングを指定します。UTF-8は、さまざまな言語のさまざまな文字をサポートする文字エンコーディングです。

まとめると、write.table()関数は、df_product_fullデータフレームの内容を、区切り文字にタブ、ファイルエンコードにUTF-8を使って、R_df_product_full_UTF-8_header.tsvというTSVファイルに書き込んでいます。
 
解説:

上記のコードは、R_df_product_full_UTF-8_header.tsvというタブ区切り値(TSV)ファイルを読み込み、その内容をdf_product_tmpというデータフレームに格納しています。read.table()関数の各引数の役割は以下の通りです。

c_class - TSVファイル内の各列のクラスを指定するベクトルです。この場合、最初の列はNAのままで、他の列は "character "というクラスで指定されています。

"../data/R_df_product_full_UTF-8_header.tsv" - 入力TSVファイルのファイルパスとファイル名です。

colClasses = c_class - この引数は、入力TSVファイルの列クラスを指定します。

header = TRUE - この引数は、入力ファイルの最初の行が列名を含むことを指定します。

fileEncoding = "UTF-8" - この引数は、入力TSVファイルの文字エンコーディングを指定する。

TSV ファイルを読み込んだ後、head() 関数を使用して、結果の df_product_tmp データフレームの最初の 3 行を表示します。

全体として、このコードは、CSVファイルを読み込んでその内容をdf_product_fullデータフレームに格納する前のコードと似ています。しかし、このコードではTSVファイルを読み込み、その内容をdf_product_tmpという一時的なデータ・フレームに格納します。一時的なデータ・フレームを使用する目的は、最終結果を別の名前のデータ・フレームに格納する前に、データのクリーニングや操作を行うためかもしれません。
 

Comment