๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค 100๋ฒˆ์˜ ๋…ธํฌ(๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํŽธ) โ€“ R Part 3 (Q41 to Q60)

๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” R์˜ dplyr ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_receipt๋ผ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์กฐ์ž‘ํ•˜๊ณ  ์žˆ๋‹ค. ์•„๋ž˜๋Š” ์ด ์ฝ”๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•œ๋‹ค.

df_receipt %>% - R์˜ ํŒŒ์ดํ”„ ์—ฐ์‚ฐ์ž๋กœ df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ํŒŒ์ดํ”„ ๋ผ์ธ์˜ ๋‹ค์Œ ํ•จ์ˆ˜์— ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.

group_by(sales_ymd) %>% - sales_ymd ์ปฌ๋Ÿผ์œผ๋กœ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค(๋‚ ์งœ ๋˜๋Š” ๋‚ ์งœ ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํฌํ•จ). ์—ฐ์‚ฐ์ž %>%๋Š” ๊ทธ๋ฃนํ™”๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค์Œ ํ•จ์ˆ˜๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

summarise(sum_amount = sum(amount), .groups = "drop") %>% - ๊ทธ๋ฃนํ™”๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์š”์•ฝํ•˜๊ณ  ๊ณ ์œ ํ•œ sales_ymd ๊ทธ๋ฃน๋ณ„๋กœ ๊ธˆ์•ก ์—ด์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—๋Š” sales_ymd์™€ sum_amount ๋‘ ๊ฐœ์˜ ์—ด์ด ์žˆ๋‹ค. .groups = "drop" ์ธ์ˆ˜๋Š” group_by์—์„œ ์ถ”๊ฐ€ํ•œ ๊ทธ๋ฃนํ™” ์ •๋ณด๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž %>%๋Š” ์ด ์š”์•ฝ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค์Œ ํ•จ์ˆ˜๋กœ ๋‹ค์‹œ ํŒŒ์ดํ”„ํ•œ๋‹ค.

mutate(lag_ymd = lag(sales_ymd), lag_amount = lag(sum_amount), diff_amount = sum_amount - lag_amount) %>% - ์š”์•ฝ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ƒˆ๋กœ์šด 3๊ฐœ์˜ ์—ด์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ฒ˜์Œ ๋‘ ์—ด์ธ lag_ymd์™€ lag_amount๋Š” ๊ฐ๊ฐ sales_ymd์™€ sum_amount ์—ด์˜ ์ง€์—ฐ ๊ฐ’์„ ํฌํ•จํ•˜๊ณ , ์„ธ ๋ฒˆ์งธ ์—ด์ธ diff_amount๋Š” sum_amount์™€ lag_amount ์—ด์˜ ์ฐจ์ด๋ฅผ ์ €์žฅํ•œ๋‹ค. ์—ฐ์‚ฐ์ž %>%๋Š” ์ด ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค์Œ ํ•จ์ˆ˜๋กœ ๋ณด๋‚ธ๋‹ค.

slice(1:10) - ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•œ๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ sales_ymd, sum_amount, lag_ymd, lag_amount, diff_amount ์—ด์„ ๊ฐ€์ง€๋ฉฐ, ์›๋ž˜์˜ df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๊ทธ๋ฃนํ™”, ์š”์•ฝ ๋ฐ ์ˆ˜์ •ํ•œ ํ›„ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ํฌํ•จํ•˜๊ฒŒ ๋œ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ๋งค์ถœ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ผ์ข…์˜ ์‹œ๊ณ„์—ด ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ฐ ๋‚ ์งœ์˜ ๋งค์ถœ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฐ ๋‚ ์งœ์˜ ๋งค์ถœ๊ณผ ์ „๋‚ ์˜ ๋งค์ถœ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ ์ผ์ผ ๋งค์ถœ์˜ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ฅธ ์ถ”์„ธ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋„ R์˜ dplyr ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_receipt๋ผ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์กฐ์ž‘ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

df_sum <-df_receipt %>% group_by(sales_ymd) %>% summarise(sum_amount = sum(amount), .groups = "drop") - ์•ž์˜ ์˜ˆ์ œ ์ฝ”๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„๊ณผ ์œ ์‚ฌํ•˜๋ฉฐ, df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ๋ฅผ sales_ymd ์—ด๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ , ๊ฐ ๊ณ ์œ ํ•œ sales_ymd ๊ทธ๋ฃน๋ณ„๋กœ ๊ธˆ์•ก ์—ด์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ df_sum์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

for (i in 1:3) { - 3์ฐจ๋ก€ ๋ฐ˜๋ณต๋˜๋Š” for ๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

df_tmp <- df_sum %>% mutate(lag_ymd = lag(sales_ymd, n = i), lag_amount = lag(sum_amount, n = i)) - df_sum ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ sales_ymd์™€ sum_amount ์—ด์„ dplyr์˜ lag()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ i์ผ๊ฐ„ ์ง€์—ฐ์‹œํ‚จ ์ƒˆ๋กœ์šด ์ž„์‹œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_tmp๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ sales_ymd, sum_amount, lag_ymd, lag_amount์˜ ์„ธ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

if (i == 1) { df_lag <- df_tmp }. - ์ด๊ฒƒ์ด ๋ฃจํ”„์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์ธ ๊ฒฝ์šฐ, df_lag ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ df_tmp์™€ ๋™์ผํ•˜๊ฒŒ ์„ค์ •๋œ๋‹ค.

else { df_lag <- rbind(df_lag, df_tmp) }. - ๋ฃจํ”„์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์ด ์•„๋‹Œ ๊ฒฝ์šฐ df_tmp๋Š” dplyr์˜ rbind() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด df_lag ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ถ”๊ฐ€๋œ๋‹ค.

} - for ๋ฃจํ”„๋Š” ์—ฌ๊ธฐ์„œ ์ข…๋ฃŒ๋œ๋‹ค.

df_lag %>% drop_na(everything()) %>% arrange(sales_ymd, lag_ymd) %>% slice(1:10) - ๋ฃจํ”„ ๋‚ด์—์„œ ์ƒ์„ฑ๋œ df_lag ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋ฐ›์•„ drop_na()๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„๋ฝ๋œ ํ–‰์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค. ์ œ๊ฑฐํ•˜๊ณ , arrange()๋กœ sales_ymd์™€ lag_ymd๋กœ ํ–‰์„ ์ •๋ ฌํ•˜๊ณ , slice()๋กœ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒซ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•œ๋‹ค.

์ด ์ฝ”๋“œ์˜ ๋ชฉ์ ์€ ์ง€๋‚œ 3์ผ๊ฐ„์˜ sales_ymd์™€ sum_amount ์—ด์˜ ์ง€์—ฐ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” df_lag๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ ์ง€๋‚œ 3์ผ๊ฐ„์˜ ๋งค์ถœ ์ถ”์„ธ๋ฅผ ์กฐ์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ–ฅํ›„ ๋งค์ถœ์„ ์˜ˆ์ธกํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์ฝ”๋“œ๋Š” ํ‘œ์‹œ ๋ฐ ์ถ”๊ฐ€ ๋ถ„์„์„ ์œ„ํ•ด ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
ย 
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋„ R์˜ dplyr ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_receipt๋ผ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์กฐ์ž‘ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.a

df_sum <-df_receipt %>% group_by(sales_ymd) %>% summarise(sum_amount = sum(amount), .groups = "drop") - ์•ž์˜ ์˜ˆ์ œ ์ฝ”๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„๊ณผ ์œ ์‚ฌํ•˜๋ฉฐ, df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ๋ฅผ sales_ymd ์—ด๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ , ๊ฐ ๊ณ ์œ ํ•œ sales_ymd ๊ทธ๋ฃน๋ณ„๋กœ ๊ธˆ์•ก ์—ด์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ df_sum์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

for (i in 1:3) { - 3์ฐจ๋ก€ ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๋Š” for ๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

col_name_1 <- paste("lag_ymd_", i , sep="_") - ์ ‘๋‘์‚ฌ "lag_ymd_"์™€ ํ˜„์žฌ i์˜ ๊ฐ’์„ ์—ฐ๊ฒฐํ•œ col_name_1์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

col_name_2 <- paste("lag_amount", i , sep="_") - ์ ‘๋‘์‚ฌ "lag_amount_"์™€ ํ˜„์žฌ i์˜ ๊ฐ’์„ ์—ฐ๊ฒฐํ•œ col_name_2๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

df_tmp <- df_sum %>% mutate(! !col_name_1 := lag(sales_ymd, n = i), ! col_name_2 := lag(sum_amount, n = i)) - df_sum ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ sales_ymd์™€ sum_amount ์ปฌ๋Ÿผ์„ dplyr์˜ lag() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ i์ผ ์ง€์—ฐ์‹œ์ผœ ์ƒ์„ฑํ•œ ์ƒˆ๋กœ์šด ์ž„์‹œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ df_tmp๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค. ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•ž์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์ •์ ์ธ ์ด๋ฆ„์œผ๋กœ ์ƒˆ๋กœ์šด ์—ด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ด ์ฝ”๋“œ์—์„œ๋Š” 3๊ณผ 4๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•œ ๋ฌธ์ž์—ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ด ์ด๋ฆ„์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ์—ด ์ด๋ฆ„์œผ๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋„๋ก !!! ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋”ฐ์˜ดํ‘œ๋ฅผ ํ•ด์ œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

if (i == 1) { df_lag <- df_tmp }. - ์ด๊ฒƒ์ด ๋ฃจํ”„์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์ธ ๊ฒฝ์šฐ df_lag ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ df_tmp์™€ ๋™์ผํ•˜๊ฒŒ ์„ค์ •๋œ๋‹ค.

else { df_lag <- cbind(df_lag, df_tmp[c(col_name_1, col_name_2)]) } - ๋ฃจํ”„์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์ด ์•„๋‹Œ ๊ฒฝ์šฐ, df_tmp ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ cbind()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด df_lag ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ถ”๊ฐ€๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ฝ”๋“œ์—์„œ๋Š” ์•ž์˜ ์˜ˆ์ฒ˜๋Ÿผ ํŠน์ • ์—ด์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ด๋ฆ„์ด col_name_1๊ณผ col_name_2์˜ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ์—ด์„ ๋™์ ์œผ๋กœ ์„ ํƒํ•œ๋‹ค.

} - ์—ฌ๊ธฐ์„œ for ๋ฃจํ”„๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.

df_lag %>% drop_na(everything()) %>% arrange(sales_ymd) %>% slice(1:10) - ๋ฃจํ”„ ๋‚ด์—์„œ ์ƒ์„ฑ๋œ df_lag ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋ฐ›์•„ drop_na()๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„๋ฝ๋œ ํ–‰์„ ์‚ญ์ œํ•˜๊ณ , arrange ()๋กœ sales_ymd์—์„œ ํ–‰์„ ์ •๋ ฌํ•˜๊ณ , slice()๋กœ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•œ๋‹ค.

์ด ์ฝ”๋“œ์˜ ๋ชฉ์ ์€ df_lag๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•˜๊ณ  sales_ymd์™€ sum_amount ์—ด์˜ ์ง€๋‚œ 3์ผ๊ฐ„์˜ ๊ฐ ์ง€์—ฐ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ฝ”๋“œ์—์„œ๋Š” ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๋Š” ๋Œ€์‹  ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” df_customer์™€ df_receipt ๋‘ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ๊ฐ์˜ ์„ฑ๋ณ„๊ณผ ์—ฐ๋ น๋Œ€(์ฆ‰, 10์„ธ)๋ณ„ ํŒ๋งค ๊ธˆ์•ก ์š”์•ฝ์„ ์ƒ์„ฑํ•œ๋‹ค.

๋จผ์ € df_customer์—์„œ 3๊ฐœ์˜ ์—ด(customer_id, gender_cd, age)์„ ์„ ํƒํ•˜๊ณ , age๋ฅผ ์ตœ๊ทผ 10๋…„์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜ era๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ customer_id๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ณ ๊ฐ์˜ ์„ฑ๋ณ„, ์—ฐ๋ น, ํŒ๋งค ๊ธˆ์•ก์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•œ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ๋ฐ์ดํ„ฐ๋ฅผ gender_cd์™€ era๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  summarise()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋งค์ถœ์•ก์„ ๊ณ„์‚ฐํ•œ๋‹ค.

spread()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ”ผ๋ฒ—ํ•˜์—ฌ ๊ฐ ์‹œ๋Œ€๋ณ„๋กœ ํ•œ ์ค„์”ฉ, ๊ฐ ์„ฑ๋ณ„์˜ ๋งค์ถœ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์—ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ rename()์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚จ์„ฑ, ์—ฌ์„ฑ, ์„ฑ๋ณ„ ๋ฏธ์ง€์ •์„ ๋‚˜ํƒ€๋‚ด๋Š” ์—ด์— ์ข€ ๋” ์„ค๋ช…์ ์ธ ์ด๋ฆ„์„ ๋ถ™์ธ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ df_sales_summary๋ผ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋˜์–ด ์„ฑ๋ณ„๊ณผ ์‹œ๋Œ€๋ณ„ ์ด ํŒ๋งค์•ก์„ ์š”์•ฝํ•œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์ด ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ์ด์ „ ์ฝ”๋“œ ๋ธ”๋ก์—์„œ ์ƒ์„ฑ๋œ df_sales_summary ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ˆ˜์ •ํ•œ๋‹ค.

gather() ํ•จ์ˆ˜๋Š” male, female, unknown ์—ด์„ sum_amount๋ผ๋Š” ํ•˜๋‚˜์˜ ์—ด๋กœ ์ค‘์ฒฉํ•˜์—ฌ gender_cd๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ์ด์ „ ์—ด ์ด๋ฆ„(male, female, unknown)์„ ์ €์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์™€์ด๋“œ ํฌ๋งท์—์„œ ๋กฑ ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

mutate() ํ•จ์ˆ˜๋Š” gender_cd ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๋‹ค์‹œ ์ฝ”๋”ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋Š” case_when() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค. "00"์€ ๋‚จ์„ฑ, "01"์€ ์—ฌ์„ฑ, "99"๋Š” ์„ฑ๋ณ„์„ ์•Œ ์ˆ˜ ์—†๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” df_sales_summary ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๊ธด ํ˜•์‹์œผ๋กœ ํฌ๋งทํ•˜๊ณ  ์„ฑ๋ณ„ ๊ฐ’์„ ํ‘œ์ค€ ํ˜•์‹์œผ๋กœ ๋‹ค์‹œ ์ฝ”๋”ฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ ๋ณ‘ํ•ฉํ•  ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ customer_id์™€ birth_day ์—ด์„ ์„ ํƒํ•˜์—ฌ df_tmp๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

df_customer["customer_id"] ๊ตฌ๋ฌธ์€ customer_id ์—ด์„ ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ์„ ํƒํ•˜๋Š”๋ฐ, ์ด๋Š” cbind()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์—ด๊ณผ ๊ฒฐํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

strftime() ํ•จ์ˆ˜๋Š” birth_day ์—ด์„ %Y%m%d ํ˜•์‹์˜ ๋ฌธ์ž์—ด๋กœ ํฌ๋งทํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

connames() ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ƒˆ๋กœ์šด ์—ด ์ด๋ฆ„์„ ํ• ๋‹นํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์—ด ์ด๋ฆ„์€ "customer_id"์™€ "birth_day"์ด๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ head() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_tmp ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10์ค„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ๊ณ ๊ฐ ID์™€ ์ƒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์—ด์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ customer_id์™€ application_date ์—ด์„ ์„ ํƒํ•˜์—ฌ df_tmp๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•œ๋‹ค.

df_customer["customer_id"] ๊ตฌ๋ฌธ์€ customer_id ์—ด์„ ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ์„ ํƒํ•œ๋‹ค.

strptime() ํ•จ์ˆ˜๋Š” application_date ์—ด์„ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, application_date ์—ด์€ ์—ฐ, ์›”, ์ผ์„ 8์ž๋ฆฌ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•˜๋Š” %Y%m%d ํ˜•์‹์˜ ๋ฌธ์ž์—ด์„ R์—์„œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ‘œํ˜„ํ•˜๋Š” POSIXlt ํด๋ž˜์Šค ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

connames() ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ƒˆ๋กœ์šด ์—ด ์ด๋ฆ„์„ ํ• ๋‹นํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์—ด ์ด๋ฆ„์€ 'customer_id'์™€ 'application_date'๋กœ ์ง€์ •ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ head() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_tmp ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10์ค„์„ ํ‘œ์‹œํ•œ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ๋‘ ๊ฐœ์˜ ์—ด์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•˜๊ณ  ๊ณ ๊ฐ ID์™€ ์‹ ์ฒญ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ receipt_no, receipt_sub_no, sales_ymd ์—ด์„ ์„ ํƒํ•˜๊ณ , sales_ymd ์—ด์„ yyyymmdd ํ˜•์‹์˜ ์ •์ˆ˜์—์„œ R์˜ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” POSIXlt ํด๋ž˜์Šค ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ df_tmp ๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

df_receipt[c("receipt_no", "receipt_sub_no")] ๊ตฌ๋ฌธ์€ cbind()์—์„œ ๋‹ค๋ฅธ ์—ด๊ณผ ๊ฒฐํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ receipt_no์™€ receipt_sub_no ์—ด์„ ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ž…๋‹ˆ๋‹ค.

as.character()๋Š” strptime() ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๊ธฐ ์ „์— sales_ymd ์ปฌ๋Ÿผ์„ ์ •์ˆ˜์—์„œ ๋ฌธ์ž ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

strptime() ํ•จ์ˆ˜๋Š” ๋ฌธ์ž ๋ฒกํ„ฐ sales_ymd๋ฅผ R์˜ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” POSIXlt ํด๋ž˜์Šค ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

colnames() ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ƒˆ๋กœ์šด ์—ด ์ด๋ฆ„์„ ํ• ๋‹นํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์—ด ์ด๋ฆ„์€ "receive_no", "receipt_sub_no", "sales_ymd"๊ฐ€ ๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ head() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_tmp ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10์ค„์„ ํ‘œ์‹œํ•œ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ์˜์ˆ˜์ฆ ๋ฒˆํ˜ธ, ์˜์ˆ˜์ฆ ํ•˜์œ„ ๋ฒˆํ˜ธ ๋˜๋Š” ํŒ๋งค ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” 3๊ฐœ์˜ ์—ด์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ์›๋ณธ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_receipt์—์„œ ์„ ํƒํ•œ ์—ด์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_tmp๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ df_receipt์—์„œ "receive_no", "receipt_sub_no", "sales_epoch" ์—ด์„ ์„ ํƒํ•˜๊ณ  cbind()๋ผ๋Š” ํ•จ์ˆ˜๋กœ ๊ฒฐํ•ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์—ด์ธ "sales_epoch"์—๋Š” ์œ ๋‹‰์Šค์˜ ์—ํฌํฌ๋กœ ์•Œ๋ ค์ง„ 1970๋…„ 1์›” 1์ผ๋ถ€ํ„ฐ์˜ ์ดˆ ๋‹จ์œ„๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ as.POSIXct() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ˆ˜์น˜๋ฅผ R์˜ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” POSIXct ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ธ์ˆ˜์˜ origin์—๋Š” ์—ํฌํฌ๊ฐ€ 1970๋…„ 1์›” 1์ผ 0์‹œ๋ถ€ํ„ฐ ์‹œ์ž‘๋จ์„ ๋‚˜ํƒ€๋‚ด๋Š” '1970-01-01'์ด ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ colnames() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_tmp์˜ ์—ด ์ด๋ฆ„์„ ๊ฐ๊ฐ "receive_no", "receipt_sub_no", "sales_ymd"๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ, df_tmp์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—๋Š” df_receipt์™€ ๋™์ผํ•œ ๋‘ ๊ฐœ์˜ ์—ด("receive_no", "receive_sub_no")๊ณผ "sales_epoch"์—์„œ ๋ณ€ํ™˜ํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ์—ด "sales_ymd"๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. tmp์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด head() ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ์„ธ ๊ฐœ์˜ ์—ด์„ ๊ฒฐํ•ฉํ•˜์—ฌ df_tmp๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•œ๋‹ค. ์ฒ˜์Œ ๋‘ ์—ด์ธ receive_no์™€ receive_sub_no๋Š” df_receipt์—์„œ ์ง์ ‘ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์—ด์ธ sales_year๋Š” sales_epoch ์—ด์„ ๋‚ ์งœ/์‹œ๊ฐ„ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” as.POSIXct()์˜ ์ถœ๋ ฅ์—์„œ ์ฒ˜์Œ 4๊ธ€์ž๋ฅผ ์ถ”์ถœํ•˜๋Š” substring() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ๋‹ค.

as.POSIXct() ํ•จ์ˆ˜๋Š” origin ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ๋‹‰์Šค ์—ํ”ฝ ์‹œ๊ฐ„(1970-01-01)์„ ๊ธฐ์ค€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์ •ํ•œ๋‹ค. ๋‹ค์Œ์œผ๋กœ substring() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋‚ ์งœ/์‹œ๊ฐ„ ํ˜•์‹์—์„œ ์—ฐ๋„๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ colnames()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ํ•ด๋‹น ์—ด์— "receive_no", "receipt_sub_no", "sales_year"๋ผ๋Š” ์—ด ์ด๋ฆ„์„ ํ• ๋‹นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  head() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒซ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ์—์„œ๋Š” "receive_no", "receipt_sub_no", "sales_ymd" ์—ด์„ ํฌํ•จํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_tmp๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, "sales_ymd" ์—ด์€ df_receipt์˜ "sales_epoch" ์—ด์—์„œ ํŒŒ์ƒ๋œ ๊ฒƒ์ด๋‹ค.

๊ตฌ์ฒด์ ์œผ๋กœ substring() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์œ„์น˜๋ฅผ 6(์›” ์„ฑ๋ถ„์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์— ํ•ด๋‹น), ๋ ์œ„์น˜๋ฅผ 7(์›” ์„ฑ๋ถ„์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์— ํ•ด๋‹น)๋กœ ์„ค์ •ํ•˜์—ฌ "sales_epoch" ์ปฌ๋Ÿผ์—์„œ ์›” ์„ฑ๋ถ„์„ ์ถ”์ถœํ•œ๋‹ค. ์ด ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์€ ํŒ๋งค์ผ ์›”์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_tmp๋Š” df_receipt์—์„œ ์„ ํƒํ•œ ์—ด์„ cbind() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ถœํ•œ ์›” ์„ฑ๋ถ„๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ƒ์„ฑ๋œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ df_tmp์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์ด "receive_no", "receipt_sub_no", "sales_ymd"๋กœ ๊ฐฑ์‹ ๋œ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” df_receipt์˜ "sales_epoch" ์—ด์—์„œ ๊ฐ ํŒ๋งค์ผ์˜ ์›”์„ ์ถ”์ถœํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_tmp์— "sales_ymd"๋ผ๋Š” ์ด๋ฆ„์˜ ์ƒˆ๋กœ์šด ์—ด๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ์—์„œ๋Š” "receive_no", "receive_sub_no", "sales_day"๋ผ๋Š” ์„ธ ๊ฐœ์˜ ์—ด์„ ๊ฐ€์ง„ df_tmp๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•˜๊ณ , "receive_no"์™€ "receive_sub_no" ์—ด์€ "df_receipt" ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ๋ณต์‚ฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. receipt" ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ๋ณต์‚ฌํ•œ ๊ฒƒ์ด๋ฉฐ, sales_day ์ปฌ๋Ÿผ์€ df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ sales_epoch ์ปฌ๋Ÿผ์—์„œ ๋‚ ์งœ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค.

sales_epoch" ์ปฌ๋Ÿผ์€ ๋จผ์ € as.POSIXct ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ POSIXct ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์›์ ์„ "1970-01-01"๋กœ ์„ค์ •ํ•œ๋‹ค. ์ด๋Š” ์œ ๋‹‰์Šค ํƒ€์ž„์Šคํƒฌํ”„(1970๋…„ 1์›” 1์ผ๋ถ€ํ„ฐ์˜ ์ดˆ ๋‹จ์œ„)๋ฅผ R์˜ datetime ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ substring ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ datetime ๊ฐ์ฒด์˜ day ๋ถ€๋ถ„์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. substring ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ ๋ฌธ์ž์—ด, ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์œ„์น˜, ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๋ ์œ„์น˜๋ผ๋Š” ์„ธ ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ์ทจํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์€ 9๋ฒˆ ์œ„์น˜(datetime ๋ฌธ์ž์—ด์˜ ์š”์ผ ๋ถ€๋ถ„)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ 10๋ฒˆ ์œ„์น˜์—์„œ ๋๋‚œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ colnames ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ด ์ด๋ฆ„์„ 'recipate_no', 'recipate_sub_no', 'sales_day'๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žˆ๋‹ค. ์™„์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_tmp์—๋Š” ์ฒ˜์Œ 10ํ–‰์˜ ๋ฐ์ดํ„ฐ ์ค‘ "receive_no", "receipt_sub_no", "sales_day" ์—ด์ด ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

customer_id ์ปฌ๋Ÿผ์ด "Z"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ํ–‰์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ํ–‰์„ customer_id๋กœ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ customer_id์˜ ๊ธˆ์•ก ์—ด์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

๊ธˆ์•ก ์—ด์˜ ํ•ฉ๊ณ„๊ฐ€ 2000๋ณด๋‹ค ํฌ๋ฉด 1, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 0์œผ๋กœ ์„ค์ •๋˜๋Š” ์ƒˆ๋กœ์šด ์—ด sales_flg๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์ž '%>%'๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ๋ฅผ ์—ฐ์‡„์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์—์„œ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

filter(!grepl("^Z", customer_id)): filter() ํ•จ์ˆ˜๋Š” customer_id ์—ด์ด "Z"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ํ–‰์„ ์‚ญ์ œํ•˜๊ณ  grepl() ํ•จ์ˆ˜๋Š” customer_id ์—ด์˜ ๊ฐ ์š”์†Œ๊ฐ€ ^Z ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”์ง€(์ฆ‰, "Z"๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”์ง€)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋…ผ๋ฆฌ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Z'๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋…ผ๋ฆฌ ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์—ฐ์‚ฐ์ž ! ์—ฐ์‚ฐ์ž๋Š” ๋…ผ๋ฆฌ ๋ฒกํ„ฐ๋ฅผ ๋ถ€์ •ํ•˜๋ฏ€๋กœ filter()๋Š” ๋ฒกํ„ฐ๊ฐ€ TRUE์ธ ํ–‰๋งŒ ์œ ์ง€ํ•œ๋‹ค.

group_by(customer_id): group_by() ํ•จ์ˆ˜๋Š” ๋‚˜๋จธ์ง€ ํ–‰์„ customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค.

summarise(sum_amount=sum(๊ธˆ์•ก), .groups = "drop"): summarise() ํ•จ์ˆ˜๋Š” ๊ฐ ๊ณ ๊ฐ ID์˜ amount ์—ด์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ sum_amount๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์— ์ €์žฅํ•œ๋‹ค. .groups = "drop" ์ธ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์š”์•ฝํ•œ ํ›„ ๊ทธ๋ฃนํ™” ๊ตฌ์กฐ๋ฅผ ์‚ญ์ œํ•˜๋„๋ก summarise()์— ์ง€์‹œํ•œ๋‹ค.

mutate(sales_flg = ifelse(sum_amount > 2000, 1, 0)): mutate() ํ•จ์ˆ˜๋Š” sales_flg๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  sum_amount ์—ด์ด 2000๋ณด๋‹ค ํฌ๋ฉด 1, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ํ‘œ์ค€ if.... .else ๋ฌธ์žฅ์˜ ๋ฒกํ„ฐํ™” ๋ฒ„์ „์œผ๋กœ, ์กฐ๊ฑด ๋ฒกํ„ฐ์™€ ๋™์ผํ•œ ๊ธธ์ด์˜ ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์กฐ๊ฑด ๋ฒกํ„ฐ์˜ ์š”์†Œ๊ฐ€ TRUE์ธ์ง€ FALSE์ธ์ง€์— ๋”ฐ๋ผ yes ๋˜๋Š” no ๋ฒกํ„ฐ ์ค‘ ํ•˜๋‚˜์˜ ์š”์†Œ๊ฐ€ ์„ ํƒ๋œ๋‹ค.

slice(1:10) : slice() ํ•จ์ˆ˜๋Š” ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•œ๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_customer์—์„œ "customer_id"์™€ "postal_cd" ์—ด์„ ์„ ํƒํ•œ๋‹ค.

"postal_cd"์˜ ์ฒซ 3๊ธ€์ž๊ฐ€ 100์—์„œ 209 ์‚ฌ์ด์˜ ์šฐํŽธ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ 1, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ 0์œผ๋กœ ์„ค์ •๋˜๋Š” ์ƒˆ๋กœ์šด ์—ด "postal_flg"๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๊ฒ€์‚ฌ์—๋Š” ifelse ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

์ˆ˜์ •๋œ df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ "customer_id" ์—ด๋กœ ๊ฒฐํ•ฉํ•œ๋‹ค.

๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ "postal_flg" ์ปฌ๋Ÿผ์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค.

n_distinct ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "postal_flg"์˜ ๊ฐ ๊ฐ’์— ๋Œ€ํ•œ ๊ณ ์œ ํ•œ ๊ณ ๊ฐ ID ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

์ธ์ˆ˜ ".groups = 'drop'"์œผ๋กœ ๊ทธ๋ฃนํ™” ์ •๋ณด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

postal_flg"์™€ "customer_cnt" ์—ด์ด ์žˆ๋Š” ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” df_receipt์— ํฌํ•จ๋œ ์šฐํŽธ๋ฒˆํ˜ธ๊ฐ€ 100~209 ๋ฒ”์œ„์— ์žˆ๋Š” ๊ณ ๊ฐ ์ˆ˜๋ฅผ ํ•ด๋‹น ๋ฒ”์œ„์— ์šฐํŽธ๋ฒˆํ˜ธ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๊ณ„์‚ฐํ•œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_customer๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ƒˆ๋กœ์šด ์—ด prefecture_cd๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

prefecture_cd ์—ด์˜ ๊ฐ’์€ address ์—ด์˜ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.

์ฃผ์†Œ๋ž€์˜ ์ฒซ 3๊ธ€์ž๊ฐ€ "์‚ฌ์ดํƒ€๋งˆํ˜„"์ด๋ผ๋ฉด prefecture_cd ์—ด์˜ ๊ฐ’์€ "11"๋กœ ์„ค์ •๋œ๋‹ค.

์ฃผ์†Œ๋ž€์˜ ์ฒซ 3๊ธ€์ž๊ฐ€ "์น˜๋ฐ”ํ˜„"์ธ ๊ฒฝ์šฐ, prefecture_cd๋ž€์˜ ๊ฐ’์€ "12"๋กœ ์„ค์ •๋œ๋‹ค.

์ฃผ์†Œ๋ž€์˜ ์ฒซ 3๊ธ€์ž๊ฐ€ "๋„์ฟ„๋„"์ธ ๊ฒฝ์šฐ, prefecture_cd๋ž€์˜ ๊ฐ’์€ "13"์œผ๋กœ ์„ค์ •๋œ๋‹ค.

์ฃผ์†Œ ์ปฌ๋Ÿผ์˜ ์ฒซ 3๊ธ€์ž๊ฐ€ "๊ฐ€๋‚˜๊ฐ€์™€"์ธ ๊ฒฝ์šฐ, prefecture_cd ์ปฌ๋Ÿผ์˜ ๊ฐ’์€ "14"๋กœ ์„ค์ •๋œ๋‹ค.

customer_id, address, prefecture_cd์˜ ๊ฐ ์ปฌ๋Ÿผ์ด ์ถœ๋ ฅ ๋Œ€์ƒ์œผ๋กœ ์„ ํƒ๋œ๋‹ค.

slice(1:10) ํ•จ์ˆ˜๋Š” ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” R์˜ dplyr ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ƒˆ๋กœ์šด ์—ด prefecture_cd๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ผ๋ณธ ๋„๋„๋ถ€ํ˜„์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ๋„๋„๋ถ€ํ˜„ ์ด๋ฆ„๊ณผ ๋„๋„๋ถ€ํ˜„ ์ฝ”๋“œ๋ฅผ ๋Œ€์‘์‹œํ‚จ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜๋Š” mutate() ํ•จ์ˆ˜์™€ ์ •๊ทœ ํ‘œํ˜„์‹ ํŒจํ„ด ๋งค์นญ์— ๋”ฐ๋ผ ๋„๋„๋ถ€ํ˜„ ์ด๋ฆ„๊ณผ ์ฝ”๋“œ๋ฅผ ๋Œ€์‘์‹œํ‚ค๋Š” case_when() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

df_customer %>% df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ž…๋ ฅ์œผ๋กœ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

mutate(prefecture_cd = ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ƒˆ๋กœ์šด ์—ด prefecture_cd๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

case_when( ๋„๋„๋ถ€ํ˜„ ์ด๋ฆ„๊ณผ ์ฝ”๋“œ๋ฅผ ๋Œ€์‘์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ์กฐ๊ฑด์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

str_extract(address, pattern = "^. *? [้ƒฝ้“ๅบœ็œŒ]") == "ๅŸผ็މ็œŒ" ~ "11", ์ •๊ทœ ํ‘œํ˜„์‹ ํŒจํ„ด "^. *? [๋„๋„๋ถ€ํ˜„]"์— ๋งค์นญํ•˜์—ฌ ์ฃผ์†Œ์—ด์—์„œ ๋„๋„๋ถ€ํ˜„ ์ด๋ฆ„์„ ์ถ”์ถœํ•˜๊ณ , "์‚ฌ์ดํƒ€๋งˆํ˜„"์„ "11"์— ๋Œ€์‘์‹œํ‚จ๋‹ค.

str_extract(address, pattern = "^. *? [็ธฃ]") == "์น˜๋ฐ”ํ˜„" ~ "12", "์น˜๋ฐ”ํ˜„"์— ๋Œ€ํ•ด์„œ๋„ ๊ฐ™์€ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์—ฌ "12"์— ๋งคํ•‘ํ•œ๋‹ค.

str_extract(address, pattern = "^. *? [๋„๋„๋ถ€ํ˜„]") == "๋„์ฟ„๋„" ~ "13", "๋„์ฟ„๋„"์™€ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ "13"์— ๋Œ€์‘์‹œํ‚จ๋‹ค.

str_extract(address, pattern = "^. *? [้ƒฝ้“ๅบœ็œŒ]") == "๊ฐ€๋‚˜๊ฐ€์™€ํ˜„" ~ "14"))๋Š” "๊ฐ€๋‚˜๊ฐ€์™€ํ˜„"๊ณผ ๋™์ผํ•˜๊ฒŒ "14"์— ๋Œ€์‘์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

select(customer_id, address, prefecture_cd)๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ customer_id, address, prefecture_cd ์—ด๋งŒ ์„ ํƒํ•œ๋‹ค.

slice(1:10)์€ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10ํ–‰๋งŒ ์„ ํƒํ•œ๋‹ค.
ย 
์„ค๋ช…:

๋ณธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_receipt๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

df_receipt์˜ ํ–‰์„ customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ customer_id๋ฅผ ๊ฐ€์ง„ ๊ฐ ํ–‰ ๊ทธ๋ฃน์— ๋Œ€ํ•ด sum() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธˆ์•ก ์—ด์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ sum_amount๋ผ๋Š” ์ƒˆ ์—ด์— ์ €์žฅํ•œ๋‹ค.

.groups = "drop"์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฃนํ™” ๊ตฌ์กฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

case_when() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์—ด pct_group์„ ์ƒ์„ฑํ•˜๊ณ  sum_amount ์—ด์˜ ๊ฐ’์— ๋”ฐ๋ผ ๊ฐ ํ–‰์„ ์‚ฌ๋ถ„์œ„์ˆ˜(quintile number)์— ํ• ๋‹นํ•œ๋‹ค. ์‚ฌ๋ถ„์œ„ ์ˆ˜๋Š” quantile() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ์ •๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•˜์—ฌ df_tmp๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ €์žฅํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, quantile(sum_amount)์ด [100, 200, 300, 400]์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ pct_group ์—ด์€ sum_amount๊ฐ€ 200 ๋ฏธ๋งŒ์ธ ํ–‰์€ '1', 200์—์„œ 299๊นŒ์ง€์˜ ํ–‰์€ '2', 300์—์„œ 399๊นŒ์ง€์˜ ํ–‰์€ '3', 400 ์ด์ƒ์˜ ํ–‰์€ '4'๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ์—๋Š” '4'๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_customer๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค. ์ด ์ฝ”๋“œ์—์„œ๋Š” customer_id, birth_day, age์˜ ์„ธ ๊ฐ€์ง€ ์—ด์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๊ณ ๊ฐ์˜ ๋‚˜์ด๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ mutate ํ•จ์ˆ˜๋Š” ๊ฐ ๊ณ ๊ฐ์˜ ๋‚˜์ด๋ฅผ 10์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ  ๊ทธ ์ •์ˆ˜์— 10์„ ๊ณฑํ•˜์—ฌ ๋‚˜์ด๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ๊ณ ๊ฐ์˜ ๋‚˜์ด๊ฐ€ 43์„ธ๋ผ๋ฉด 40์„ธ๊ฐ€ ๋˜๊ณ , 25์„ธ์ธ ๊ณ ๊ฐ์˜ ๋‚˜์ด๋Š” 20์„ธ๊ฐ€ ๋œ๋‹ค.

๋‘ ๋ฒˆ์งธ mutate ํ•จ์ˆ˜๋Š” 60 ์ด์ƒ์˜ era ๊ฐ’์„ 60์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ์ด๋Š” 60์„ธ ์ด์ƒ์˜ ๋ชจ๋“  ๊ณ ๊ฐ์„ ํ•˜๋‚˜์˜ ์‹œ๋Œ€ ๋ฒ”์ฃผ๋กœ ๋ฌถ๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—๋Š” ๊ฐ ๊ณ ๊ฐ์˜ ๊ณ ๊ฐ ID, ์ƒ๋…„์›”์ผ, ์—ฐ๋ น ๋ฐ ๊ณ„์‚ฐ๋œ ์—ฐ๋ น์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ์ƒ๋…„์›”์ผ๋กœ๋ถ€ํ„ฐ ๊ฐ ๊ณ ๊ฐ์˜ '๋‚˜์ด'๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ฐ ํ–‰์˜ ์ฒ˜๋ฆฌ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ "customer_id", "birth_day", "age" ์ปฌ๋Ÿผ๋งŒ ์„ ํƒํ•œ๋‹ค.

mutate ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "era"๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด ์ปฌ๋Ÿผ์˜ ๊ฐ’์€ "age"์ปฌ๋Ÿผ์„ 10์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ณ„์ˆ˜๋ฅผ ์ทจํ•œ ํ›„ (์ฆ‰, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ) 10์„ ๊ณฑํ•˜์—ฌ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฐ๋ น์ด ํšจ๊ณผ์ ์œผ๋กœ 10์˜ ๋ฐฐ์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋˜์–ด ๊ฐ ๊ณ ๊ฐ์˜ ๋Œ€๋žต์ ์ธ "๋‚˜์ด"๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋‹ค์‹œ 'mutate' ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ era์˜ ๊ฐ’์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. era๊ฐ€ 60๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ทธ๋Œ€๋กœ ๋‘๊ณ , 60๋ณด๋‹ค ํฌ๋ฉด 60์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

slice ํ•จ์ˆ˜๋กœ ์™„์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10์ค„์„ ์„ ํƒํ•œ๋‹ค.

์ด ์ฝ”๋“œ์—์„œ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ฐ ํ–‰์— ๊ณ„์‚ฐ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด "apply" ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ์ด ๋ฐฉ๋ฒ•์€ ํšจ๊ณผ์ ์ด์ง€๋งŒ ๋งค์šฐ ํฐ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์€ ๋Œ€์‹  ๋ฒกํ„ฐํ™” ๋œ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” df_customer๋ผ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์กฐ์ž‘ํ•˜๋Š” ์ฝ”๋“œ์ด๋ฉฐ, ์•„๋งˆ๋„ ๊ณ ๊ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ฐ ํ–‰์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

df_customer[c("customer_id", "gender_cd", "birth_day", "age")]: df_customer[c("customer_id", "gender_cd", "birth_day", "age")]: ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_customer customer์—์„œ "customer_id", "gender_cd", "birth_day", "age" ์—ด์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

%>%: ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋‹ค์Œ ์—ฐ์‚ฐ์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ดํ”„ ์—ฐ์‚ฐ์ž์ด๋‹ค.

mutate(era = trunc(age / 10) * 10). ์ด ์—ด์€ ๊ฐ ๊ณ ๊ฐ์˜ ๋‚˜์ด๋ฅผ 10์œผ๋กœ ๋‚˜๋ˆ„์–ด ์†Œ์ˆ˜์  ์ดํ•˜๋ฅผ ์ž๋ฅด๊ณ  10์„ ๊ณฑํ•˜์—ฌ ๊ณ„์‚ฐํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ณ ๊ฐ์€ 10์„ธ ๋ฒ”์œ„๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค.

mutate(era = case_when( era < 60 ~ formatC(era, width = 2,flag = "0"), era >= 60 ~ formatC(60, width = 2,flag = "0")))): case_when ๋ฌธ์žฅ์„ ์ ์šฉํ•˜์—ฌ 'era' ์ปฌ๋Ÿผ์„ ๋ณ€๊ฒฝํ•˜์—ฌ 60 ๋ฏธ๋งŒ์˜ 'era' ๊ฐ’์— era' ๊ฐ’์„ ์•ž์˜ 0์ด ํฌํ•จ๋œ 2์ž๋ฆฌ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ (์˜ˆ: 10~19์„ธ๋Š” '10'), 60 ์ด์ƒ์˜ 'era' ๊ฐ’์„ '60'์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

mutate(gender_era = paste(gender_cd, era, sep = "")): ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— "gender_era"๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ถ”๊ฐ€ํ•œ๋‹ค." "gender_cd"์™€ "era" ์—ด์„ paste ํ•จ์ˆ˜๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค. sep = "" ์ธ์ˆ˜๋Š” ๋‘ ๊ฐ’ ์‚ฌ์ด์— ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๊ฐ€ ์—†์Œ์„ ์ง€์ •ํ•œ๋‹ค.

slice(1:10) : ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_customer์˜ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ€์ˆ˜ "gender_cd"์— ๋Œ€ํ•ด ๋”๋ฏธ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € "care" ํŒจํ‚ค์ง€์˜ dummyVars ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , fullRank ์ธ์ˆ˜๋ฅผ FALSE๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฒ”์ฃผ ๋ณ€์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ˆ˜์ค€(๋‹ค๋ฅธ ์ˆ˜์ค€์—์„œ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€)์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„์€ ์›๋ณธ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_customer์— ๋ชจ๋ธ์„ ์ ์šฉํ•˜์—ฌ ๋”๋ฏธ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์— dummy_gender_model, ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜์— df_customer๋ฅผ ๊ฐ€์ง„ predict ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ๋ชจ๋ธ์„ ์ ์šฉํ•˜์—ฌ ๋”๋ฏธ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ cbind ํ•จ์ˆ˜๋กœ df_customer์˜ customer_id ์—ด์„ ๋”๋ฏธ ๋ณ€์ˆ˜์™€ ๊ฒฐํ•ฉํ•˜๊ณ  head()๋กœ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•œ๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” care ํŒจํ‚ค์ง€์˜ dummyVars() ๋ฐ predict() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_customer dataframe์˜ gender_cd ์—ด์— ๋Œ€ํ•œ ์›์ƒท ์ธ์ฝ”๋”ฉ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

dummyVars() ํ•จ์ˆ˜๋Š” ์ˆ˜์‹์œผ๋กœ ์ง€์ •๋œ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ€์ˆ˜์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋”๋ฏธ ๋ณ€์ˆ˜ ์„ธํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ~gender_cd ์‹์€ ๋”๋ฏธ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด gender_cd ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜ fullRank = TRUE๋Š” ๋”๋ฏธ ๋ณ€์ˆ˜์˜ ์ธ์ฝ”๋”ฉ์— ์ฐธ์กฐ ๋ ˆ๋ฒจ์„ ํฌํ•จํ•˜๋„๋ก ์ง€์ •ํ•œ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ predict() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ž˜์˜ df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ธ์ฝ”๋”ฉ์„ ์ ์šฉํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ dummy_gender ๋ณ€์ˆ˜์— ์ €์žฅ๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ head() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ dummy_gender ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ ์„ธ ์ค„๊ณผ cbind()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ํ•œ ์›๋ž˜ df_customer ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์˜ customer_id ์ปฌ๋Ÿผ์„ ํ‘œ์‹œํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฒ˜์Œ ๋ช‡ ๋ช…์˜ ๊ณ ๊ฐ์— ๋Œ€ํ•œ ์ธ์ฝ”๋”ฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ณ ๊ฐ์˜ ๋”๋ฏธ ๋ณ€์ˆ˜์˜ ์ธ์ฝ”๋”ฉ์€ ํ•ด๋‹น ์„ฑ๋ณ„์— ํ•ด๋‹นํ•˜๋Š” ์—ด์˜ 1๊ณผ ๋‹ค๋ฅธ ์„ฑ๋ณ„์— ํ•ด๋‹นํ•˜๋Š” ์—ด์˜ 0์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ customer_id ์—ด์ด "Z"๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ํ–‰์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” dplyr ํŒจํ‚ค์ง€์˜ filter ํ•จ์ˆ˜์™€ customer_id ์—ด์— ์ •๊ทœ์‹ ํŒจํ„ด์„ ์ผ์น˜์‹œํ‚ค๋Š” grepl ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

group_by ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ ํ–‰์„ customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค.

dplyr์˜ summarise ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๊ทธ๋ฃน์˜ ๊ธˆ์•ก ์—ด์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

std_amount๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ ๊ณ ๊ฐ์˜ ๊ธˆ์•ก์˜ ํ‘œ์ค€ํ™” ๋œ ํ•ฉ๊ณ„๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. scale ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ‰๊ท ๊ฐ’์œผ๋กœ ์ค‘์‹ฌ์„ ์žก๊ณ (center = TRUE), ํ‘œ์ค€ ํŽธ์ฐจ๊ฐ€ 1์ด ๋˜๋„๋ก ์Šค์ผ€์ผ๋งํ•˜์—ฌ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ํ‘œ์ค€ํ™”ํ•ฉ๋‹ˆ๋‹ค(scale = TRUE). ).

๋งˆ์ง€๋ง‰์œผ๋กœ slice ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ customer_id์™€ std_amount ์—ด์„ ํฌํ•จํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

customer_id๊ฐ€ "Z"๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ–‰์„ ํ•„ํ„ฐ๋งํ•œ๋‹ค.

๋‚˜๋จธ์ง€ ํ–‰์„ customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค.

customer_id์˜ ๊ฐ ๊ทธ๋ฃน๋ณ„ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

์™„์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋ณ€์ด์‹œ์ผœ sum_amount์˜ ์Šค์ผ€์ผ๋ง ๋ฒ„์ „์ธ ์ƒˆ๋กœ์šด ์—ด scale_amount๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. scale ํ•จ์ˆ˜๋Š” sum_amount์˜ ์ตœ์†Œ๊ฐ’์ด 0, ์ตœ๋Œ€๊ฐ’์ด 1์ด ๋˜๋„๋ก ์Šค์ผ€์ผ๋งํ•œ๋‹ค.

์™„์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์Šฌ๋ผ์ด์Šคํ•˜์—ฌ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, ์ด ์ฝ”๋“œ๋Š” df_receipt์˜ ๊ฐ ๊ณ ๊ฐ์ด ์‚ฌ์šฉํ•œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ์ตœ์†Œ๊ฐ’์€ 0, ์ตœ๋Œ€๊ฐ’์€ 1์ด ๋˜๋„๋ก ์Šค์ผ€์ผ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ scale_amount ๊ฐ’์€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ ๊ฐ์˜ ์ƒ๋Œ€์ ์ธ ์ง€์ถœ ํŒจํ„ด์„ ๋น„๊ตํ•˜๊ณ  ์‹ถ์„ ๋•Œ์™€ ๊ฐ™์€ ํŠน์ • ๋ถ„์„์— ์œ ์šฉํ•˜๋‹ค.

ย 

ย 

Comment