데이터 사이언스 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' 패키지에서 결손된 값을 앞서 계산한 평균값으로 대체하는 데 사용된다.

연산자 %>%(파이프 연산자라고도 함)는 두 개의 액션을 함께 연결하는 데 사용되며, 첫 번째 액션의 출력은 두 번째 액션의 입력으로 사용된다.

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' 패키지의 것으로, 결손된 값을 앞서 계산한 중앙값으로 대체하는 데 사용된다.

연산자 %>%(파이프 연산자라고도 함)를 사용하여 두 개의 액션을 연결하고 첫 번째 액션의 출력을 두 번째 액션의 입력으로 사용합니다.

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)

연산자 %>%는 두 개의 액션을 연결하기 위해 사용되며, 첫 번째 액션의 출력은 두 번째 액션의 입력으로 사용된다.

'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의 고유한 값마다 한 줄, 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, y1, x2, y2를 받는다. 이 함수는 두 지리적 위치(위도와 경도로 지정) 사이의 거리를 허버신의 공식을 사용하여 계산한다. 계산된 거리는 킬로미터 단위로 반환된다.

df_customer_1 데이터 프레임은 inner_join() 함수를 사용하여 df_store 데이터 프레임과 결합한다. 결합은 df_customer_1의 application_store_cd 열과 df_store의 store_cd 열에 대해 수행된다.

결과 데이터 프레임은 rename() 함수를 사용하여 두 개의 서로 다른 주소 컬럼을 반영하도록 이름이 변경된다.

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에 비해 더 많을 것이다. 코드 끝에 표시되는 두 카운트의 차이는 결합 작업을 통해 삭제된 중복된 고객 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() 문으로 훈련 데이터와 테스트 데이터의 비율을 확인한다.
 
설명:

이 코드는 care 패키지의 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 데이터 프레임에서 두 개의 열, 특히 "gender_cd"와 "gender"라는 이름의 열을 선택합니다. 그리고 unique() 함수를 사용하여 중복된 행을 제거하여 원래 데이터 프레임에 포함된 성별 코드와 성별 값의 고유한 조합을 모두 포함하는 데이터 프레임을 생성합니다.

df_customer_std = df_customer[, colnames(df_customer) ! = "gender"] - 이 코드 라인은 df_customer_std라는 또 다른 새로운 데이터 프레임을 생성한다. df_customer 데이터 프레임에서 "gender" 열을 제외한 모든 열을 복사합니다. 이는 colnames() 함수와 논리 연산자! =를 사용하여 이름이 "gender"와 같지 않은 모든 열을 선택하면 됩니다. 결과 데이터 프레임은 원래의 df_customer 데이터 프레임과 동일한 행을 갖지만 "gender" 열이 없습니다.

이 두 줄의 코드로 인해 원래의 df_customer 데이터 프레임은 고유한 성별 코드와 값만 포함하는 부분과 성별 열을 제외한 다른 모든 고객 정보를 포함하는 부분으로 나뉘게 되었습니다.
 
설명:

위 코드는 'df_product'와 'df_category'라는 두 개의 데이터 프레임을 조작하고 있다. 다음은 각 코드 라인의 처리 내용을 소개합니다.

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_major_name", "category_medium_name", "category_medium_name", "category_medium_name". "category_medium_name", "category_small_name" 열만 포함하도록 서브셋화되어 있다.

head(df_product_full, n = 3) - 이 코드 행은 df_product_full 데이터 프레임의 내용을 확인하는 데 사용되며, head() 함수를 사용하여 데이터 프레임의 처음 세 줄을 표시한다. 이는 결합 작업이 성공적으로 수행되었는지 확인하고 출력 형식을 확인하기 위해 결과 데이터 프레임을 빠르게 검사하는 데 유용한 방법이다.
 
해설:

위 코드는 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_no.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 데이터 프레임의 처음 세 줄을 콘솔에 표시한다.

요약하면, read.csv() 함수는 R_df_product_full_UTF-8_header.csv 파일을 지정한 열 클래스와 파일 인코딩을 사용하여 df_product_full이라는 데이터 프레임으로 읽는다. 그리고 완성된 데이터 프레임은 head() 함수를 사용하여 콘솔에 출력한다.
 
설명:

위 코드는 R_df_product_full_UTF-8_no.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", "category_small_name", "category_small_name"의 순서로 입력한다.

head(df_product_full, 3) - 이 명령은 df_product_full 데이터 프레임의 처음 세 줄을 콘솔에 표시한다.

요약하면, read.csv() 함수는 R_df_product_full_UTF-8_noh.csv 파일을 지정된 열 클래스, 헤더 설정, 파일 인코딩을 사용하여 df_product_full이라는 데이터 프레임으로 읽는다. 그리고 완성된 데이터 프레임에 새로운 컬럼 이름을 부여하고 head() 함수를 사용하여 콘솔에 출력한다.
 
 
설명:

위 코드는 R_df_product_full_UTF-8_no.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로 설정되어 해당 클래스가 자동으로 결정됨을 나타내며, 두 번째부터 네 번째 열은 character로 설정되어 문자열로 처리됨을 나타내며, 다섯 번째와 여섯 번째 열은 NA로 설정되어 해당 클래스가 자동으로 결정되어야 함을 나타낸다. 마지막 3열은 NA로 설정되어 결손값으로 처리해야 함을 나타낸다.

header = FALSE - 이 인수는 입력 CSV 파일에 헤더 행이 없음을 지정한다.

fileEncoding = "UTF-8" - 이 인수는 입력 CSV 파일의 인코딩을 지정하는데, UTF-8은 다양한 언어의 문자를 광범위하게 지원하는 문자 인코딩이다.

head(df_product_full, 3) - 이 명령은 df_product_full 데이터 프레임의 처음 세 줄을 콘솔에 표시한다.

요약하면, read.csv() 함수는 R_df_product_full_UTF-8_no.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