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

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

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

filter ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ customer_id๊ฐ€ "Z"๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ–‰์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

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

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

.groups = "drop" ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•œ ๊ทธ๋ฃน์„ ์‚ญ์ œํ•œ๋‹ค.

sum_amount์˜ ๋กœ๊ทธ์— 0.5๋ฅผ ๋”ํ•œ ๊ฐ’์„ 10์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•œ log_amount๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

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

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

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

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

dplyr ํŒจํ‚ค์ง€์˜ group_by() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜๋จธ์ง€ ํ–‰์„ customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.

๊ธˆ์•ก ์—ด์˜ sum() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๊ณ ๊ฐ์˜ ๊ตฌ๋งค ๊ธˆ์•ก ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” dplyr ํŒจํ‚ค์ง€์˜ summarise() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

sum_amount ์—ด์˜ ์ž์—ฐ๋Œ€์ˆ˜์— 0.5๋ฅผ ๋”ํ•œ log_amount๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” dplyr ํŒจํ‚ค์ง€์˜ mutate() ํ•จ์ˆ˜์™€ ๋ฒ ์ด์Šค R์˜ log() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•œ๋‹ค.

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

์ด ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_product๋ฅผ ๋ฐ›์•„ mutate() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์—ด unit_profit์„ ์ƒ์„ฑํ•˜๊ณ , unit_profit ์—ด์€ df_product์˜ ๊ธฐ์กด ์—ด์ธ unit_price์™€ unit_cost์˜ ์ฐจ์ด๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  slice() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด unit_profit ์—ด์„ ํฌํ•จํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” df_product๋ผ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.

mutate๋Š” unit_profit_rate๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ์ด ์—ด์€ ๋‹จ๊ฐ€์—์„œ ๋‹จ๊ฐ€๋ฅผ ๋นผ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹จ๊ฐ€๋กœ ๋‚˜๋ˆ„์–ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ summarise ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ unit_profit_rate ์—ด์˜ ํ‰๊ท ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋Š” total_mean์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, ์ด ์ฝ”๋“œ๋Š” df_product์—์„œ ํŒ๋งค๋œ ์ œํ’ˆ์˜ ๊ฐ ๋‹จ์œ„๋‹น ํ‰๊ท  ์ˆ˜์ต๋ฅ ์„ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ๋Š” ์…ˆ์ด๋‹ค.

ย 

์„ค๋ช…:

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

๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ "df_product"์—์„œ "product_cd", "unit_price", "unit_cost" ์—ด๋งŒ ์„ ํƒํ•œ๋‹ค.

๋‹จ๊ฐ€๋ฅผ 0.7๋กœ ๋‚˜๋ˆ„๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ 'new_price'๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋Š” ์ƒํ’ˆ ๊ฐ€๊ฒฉ์„ ์ผ์ • ๋น„์œจ๋กœ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•œ ์ž„์˜์˜ ๊ณ„์‚ฐ์ด๋‹ค.

์ƒˆ ๊ฐ€๊ฒฉ์—์„œ ๋‹จ๊ฐ€๋ฅผ ๋นผ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ ๊ฐ€๊ฒฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด 'new_profit_rate'๋ผ๋Š” ๋˜ ๋‹ค๋ฅธ ์ƒˆ ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์˜ ์ด์ต๋ฅ ์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์™„์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ์ƒํ’ˆ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„(df_product)์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋จผ์ € "product_cd", "unit_price", "unit_cost" ์„ธ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” "unit_cost"๋ฅผ 0.7๋กœ ๋‚˜๋ˆˆ ํ›„(์ฆ‰, 30% ๋น„์šฉ ์ ˆ๊ฐ), round() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ 'new_profit_rate'๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋Š” 'new_price'์—์„œ 'unit_cost'๋ฅผ ๋นผ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ 'new_price'๋กœ ๋‚˜๋ˆ„์–ด ๊ณ„์‚ฐํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์™„์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•˜์—ฌ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์‚ฐ ๋น„์šฉ์„ 30% ์ ˆ๊ฐํ–ˆ์„ ๋•Œ ๊ฐ ์ œํ’ˆ์˜ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ๊ณผ ์ˆ˜์ต๋ฅ ์„ ๊ณ„์‚ฐํ•œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ๋‘ ๊ฐœ์˜ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜ new_price์™€ new_profit_rate๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ df_product ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์กฐ์ž‘ํ•œ๋‹ค.

mutate(new_price = ceiling(unit_cost / 0.7))์€ ceiling(unit_cost / 0.7)์ด๋ผ๋Š” ์‹์˜ ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒˆ๋กœ์šด ์—ด new_price๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ceiling() ํ•จ์ˆ˜๋Š” unit_cost / 0.7์ด๋ผ๋Š” ์‹์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ๋‹จ๊ฐ€๋ณด๋‹ค 30% ๋” ๋†’์€ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์ด ๋ฉ๋‹ˆ๋‹ค.

mutate(new_profit_rate = (new_price - unit_cost) / new_price)๋Š” ์ƒˆ๋กœ์šด ์—ด new_profit_rate๋ฅผ ์ƒ์„ฑํ•˜๊ณ  (new_price - unit_cost) / new_price๋ผ๋Š” ์‹์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹์€ ์ƒˆ๋กœ์šด ๊ฐ€๊ฒฉ์—์„œ ์ด์ต์ด ์ฐจ์ง€ํ•˜๋Š” ๋น„์œจ์ธ ์‹ ์ˆ˜์ต๋ฅ ์„ ๊ณ„์‚ฐํ•œ๋‹ค. ์ด๋Š” ์‹ ๊ฐ€๊ฒฉ๊ณผ ๋‹จ๊ฐ€์˜ ์ฐจ์ด๋ฅผ ์‹ ๊ฐ€๊ฒฉ์œผ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.

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

์ด ์ฝ”๋“œ์—์„œ๋Š” cbind ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_product ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ 3๊ฐœ ์—ด, ์ฆ‰ product_cd, unit_price, tax_price๋ฅผ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ๊ฒฐํ•ฉํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ head ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒซ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•œ๋‹ค.

์ƒˆ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒซ ๋ฒˆ์งธ ์—ด์€ product_cd๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, df_product์˜ product_cd ์—ด์˜ ๊ฐ’์„ ํฌํ•จํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ์—ด์€ df_product$unit_price๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, df_product์˜ unit_price ์—ด์˜ ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์—ด์€ tax_price๋ผ๋Š” ๋ ˆ์ด๋ธ”๋กœ, unit_price ์—ด์˜ ๊ฐ ๊ฐ’์— 1.1์„ ๊ณฑํ•œ ๊ฒฐ๊ณผ์— trunc ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ์ด๋Š” 10%์˜ ์„ธ๊ธˆ์ด ํฌํ•จ๋œ ์ œํ’ˆ ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

cbind ํ•จ์ˆ˜๊ฐ€ ์ด๋ฏธ df_product์—์„œ unit_price ์—ด์„ ์ถ”์ถœํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฒˆ์งธ ์—ด ์ด๋ฆ„์— df_product$๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.
ย 
ํ•ด์„ค: 
# ์ฝ”๋“œ ์˜ˆ์‹œ 2

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

df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ฐ ๊ณ ๊ฐ์ด ์‚ฌ์šฉํ•œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ df_tmp_1์— ์ €์žฅํ•œ๋‹ค.

df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ df_product ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ product_cd๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ category_major_cd๊ฐ€ '07'์ธ ํ–‰๋งŒ ํ•„ํ„ฐ๋งํ•œ๋‹ค.

ํ•„ํ„ฐ๋ง๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ฐ ๊ณ ๊ฐ๋ณ„ ๊ธˆ์•ก ์—ด์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ df_tmp_2์— ์ €์žฅํ•œ๋‹ค.

df_tmp_1๊ณผ df_tmp_2 ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ customer_id๋กœ ๊ฒฐํ•ฉํ•œ๋‹ค.

๊ฐ ๊ณ ๊ฐ์˜ ๋ฉ”์ด์ € ์ฝ”๋“œ "07"์˜ ํŒ๋งค์œจ์„ ๊ณ„์‚ฐํ•˜์—ฌ sales_rate๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์— ์ €์žฅํ•œ๋‹ค.

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

inner_join ํ•จ์ˆ˜๋Š” ๊ณตํ†ต ๋ณ€์ˆ˜๋กœ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, mutate ํ•จ์ˆ˜๋Š” ๊ธฐ์กด ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ๋œ ์ƒˆ๋กœ์šด ์—ด์„ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ถ”๊ฐ€ํ•˜๊ณ , slice ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ํ–‰์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์ถ”์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ 07์˜ ์ƒํ’ˆ์— ๋Œ€ํ•ด ํ•ด๋‹น ์ƒํ’ˆ์„ ๊ฐ€์žฅ ๋งŽ์ด ๊ตฌ๋งคํ•œ ์ƒ์œ„ 10๋ช…์˜ ๊ณ ๊ฐ์— ๋Œ€ํ•œ ํŒ๋งค์œจ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ–‰์ด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ๊ทธ ๋‚ด์—ญ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

inner_join(df_receipt, df_product[c("product_cd", "category_major_cd")], by="product_cd"): df_receipt์™€ df_product์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ product_cd ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. cd ์—ด์„ ๊ธฐ์ค€์œผ๋กœ df_product์˜ product_cd์™€ category_major_cd ์—ด๋งŒ ์œ ์ง€ํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, df_receipt์—์„œ ๊ตฌ๋งคํ•œ ๊ฐ ์ƒํ’ˆ์— ๋Œ€ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋œ๋‹ค.

filter(category_major_cd == "07"): 1๋‹จ๊ณ„์˜ ๊ฒฐํ•ฉ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ category_major_cd ์ปฌ๋Ÿผ์ด "07"๊ณผ ๊ฐ™์€ ํ–‰๋งŒ ์œ ์ง€ํ•˜๋„๋ก ํ•œ๋‹ค.

group_by(customer_id) %>% summarise(sum_07 = sum(amount), .groups = "drop"): 2๋‹จ๊ณ„์—์„œ ํ•„ํ„ฐ๋ง๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๊ฐ ๊ทธ๋ฃน์˜ amount ์ปฌ๋Ÿผ์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ๊ฐ ๊ณ ๊ฐ์ด ์นดํ…Œ๊ณ ๋ฆฌ 07์˜ ์ œํ’ˆ์— ์ง€์ถœํ•œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

inner_join(df_receipt, by="customer_id"): customer_id ์—ด์„ ๊ธฐ์ค€์œผ๋กœ 3๋‹จ๊ณ„์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ ์›๋ž˜์˜ df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๊ฒฐํ•ฉํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ๊ฐ ๊ณ ๊ฐ์ด ๋ชจ๋“  ์ƒํ’ˆ์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„๋ฅผ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

group_by(customer_id) %>% summarise(sum_all=sum(amount), sum_07=max(sum_07), .groups = "drop"): ์ด๋Š” 4๋‹จ๊ณ„์—์„œ ๊ฒฐํ•ฉ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ customer_id๋กœ ๊ทธ๋ฃนํ™” ํ•˜๊ณ , ๊ฐ ๊ทธ๋ฃน์˜ amount ์—ด์˜ ํ•ฉ๊ณ„์™€ ๊ฐ ๊ทธ๋ฃน์˜ sum_07 ์—ด์˜ ์ตœ๋Œ€๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ๊ฐ ๊ณ ๊ฐ์ด ์ „์ฒด ์ƒํ’ˆ์— ์ง€์ถœํ•œ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„์™€ ๊ฐ ๊ณ ๊ฐ์ด ์นดํ…Œ๊ณ ๋ฆฌ 07์˜ ์ƒํ’ˆ์— ์ง€์ถœํ•œ ๊ธˆ์•ก์˜ ์ตœ๋Œ€๊ฐ’์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

mutate(sales_rate = sum_07 / sum_all): ์นดํ…Œ๊ณ ๋ฆฌ 07 ์ƒํ’ˆ์— ๋Œ€ํ•œ ์ตœ๋Œ€ ๊ตฌ๋งค ๊ธˆ์•ก(sum_07)์„ ์ „์ฒด ์ƒํ’ˆ์— ๋Œ€ํ•œ ์ด ๊ธˆ์•ก(sum_all)์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ ๊ณ ๊ฐ์˜ ํŒ๋งค์œจ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

%>% slice(1:10) : ํŒ๋งค์œจ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ƒ์œ„ 10๊ฐœ ํ–‰๋งŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์นดํ…Œ๊ณ ๋ฆฌ 07 ์ œํ’ˆ ํŒ๋งค์œจ์ด ๊ฐ€์žฅ ๋†’์€ ์ƒ์œ„ 10๋ช…์˜ ๊ณ ๊ฐ๊ณผ ์ „์ฒด ์ œํ’ˆ์— ์ง€์ถœํ•œ ์ด ๊ธˆ์•ก, ์นดํ…Œ๊ณ ๋ฆฌ 07 ์ œํ’ˆ์— ์ง€์ถœํ•œ ์ตœ๋Œ€ ๊ธˆ์•ก์ด ํ‘œ์‹œ๋˜๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
ย 
์„ค๋ช…:

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

'df_receipt' ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ 'customer_id'์™€ 'sales_ymd' ์ปฌ๋Ÿผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์œ ์ง€ํ•œ ์ฑ„ ์ค‘๋ณต๋œ ํ–‰์„ ์‚ญ์ œํ•œ๋‹ค('distinct').

์™„์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ 'df_customer' ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ 'customer_id'๋กœ ๊ฒฐํ•ฉํ•œ๋‹ค.

'elapsed_days' ์ปฌ๋Ÿผ์„ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋Š” 'sales_ymd' ์ปฌ๋Ÿผ๊ณผ 'application_date' ์ปฌ๋Ÿผ ์‚ฌ์ด์˜ ์ผ์ˆ˜ ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ •์ˆ˜๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

'customer_id', 'sales_ymd', 'application_date', 'elapsed_days' ์ปฌ๋Ÿผ๋งŒ ์„ ํƒํ•œ๋‹ค.

๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10์ค„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฝ”๋“œ์˜ ๋‚ด๋ถ€ ๋™์ž‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

# df_receipt์—์„œ customer_id์™€ sales_ymd ์ปฌ๋Ÿผ ์„ ํƒ df1 <- df_receipt[c("customer_id", "sales_ymd")] # ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์œ ์ง€ํ•œ ์ฑ„ ์ค‘๋ณต๋œ ํ–‰ ์‚ญ์ œ df2 <- distinct(df1, . keep_all = TRUE) # ๊ณ ๊ฐ ID๋กœ df_customer์™€ ๊ฒฐํ•ฉ df3 <- inner_join(df2, df_customer[c("customer_id", "application_date")], by = "customer_id") # ๊ฒฝ๊ณผ์ผ์ˆ˜ ์ƒˆ ์—ด ์ถ”๊ฐ€ df4 <- inner_join(df2, . ์ถ”๊ฐ€ df4 <- mutate(df3, elapsed_days = as. integer(strptime(as.character(sales_ymd), "%Y%m%d") - strptime(application_date, "%Y%m%d")))) # ์—ด์„ ์„ ํƒํ•˜๊ณ  ์ฒ˜์Œ 10ํ–‰ ๋ฐ˜ํ™˜ df5 <- select(df4, customer_id, sales_ymd, application_date, elapsed_days) slice(df5, 1:10)

์ด ์ฝ”๋“œ์—์„œ๋Š” dplyr ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, distinct ํ•จ์ˆ˜๋Š” ๋ชจ๋“  ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ค‘๋ณต๋œ ํ–‰์„ ์‚ญ์ œํ•˜๊ณ , inner_join ํ•จ์ˆ˜๋Š” ๊ณตํ†ต๋œ ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๋‘ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๊ฒฐํ•ฉํ•˜๊ณ , mutate ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•˜๊ณ , select ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•˜๊ณ , select ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ํŠน์ • ์—ด์„ ์„ ํƒํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ slice ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ํ–‰์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
ย 
์„ค๋ช…:

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

df_receipt[c("customer_id", "sales_ymd")] df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ customer_id์™€ sales_ymd ์—ด๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

distinct(. , .keep_all = TRUE)๋Š” ๋ชจ๋“  ์—ด์„ ์œ ์ง€ํ•œ ์ฑ„ ์ค‘๋ณต๋œ ํ–‰์„ ์‚ญ์ œํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด customer_id์™€ sales_ymd์˜ ๊ณ ์œ ํ•œ ์กฐํ•ฉ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ํ–‰๋งŒ ์กด์žฌํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

inner_join(df_customer[c("customer_id", "application_date")], by = "customer_id") ์ด์ „ ๋‹จ๊ณ„์˜ ๊ฒฐ๊ณผ์™€ df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ customer_id ์ปฌ๋Ÿผ์œผ๋กœ ๊ฒฐํ•ฉํ•˜๊ณ  df_ customer์—์„œ customer_id์™€ application_date ์—ด๋งŒ ์„ ํƒํ•œ๋‹ค.

mutate(elapsed_months = trunc(time_length( interval( strptime(application_date, "%Y%m%d"), strptime(as.character(sales_ymd), "%Y%m%d") ), " month")) application_date์™€ sales_ymd ์‚ฌ์ด์˜ ๊ฐœ์›” ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ƒˆ๋กœ์šด ์—ด elapsed_months๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. strptime์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ ์งœ๋ฅผ ์ ์ ˆํ•œ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , interval ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , time_length๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์›” ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , trunc ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•ฉ๋‹ˆ๋‹ค.

select(customer_id, sales_ymd, application_date, elapsed_months) customer_id, sales_ymd, application_date, elapsed_months ์—ด๋งŒ ์„ ํƒํ•œ๋‹ค.

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

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ๊ฐ ๊ณ ๊ฐ์˜ ๊ตฌ๋งค ๋‚ด์—ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ ์ฒญ์ผ๊ณผ ํŒ๋งค์ผ ์‚ฌ์ด์˜ ๊ฐœ์›” ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
ย 
์„ค๋ช…:

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

df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ customer_id์™€ sales_ymd ๋‘ ๊ฐœ์˜ ์—ด์„ ์ถ”์ถœํ•œ๋‹ค.

์œ„ ๋‘ ์—ด์˜ ์ค‘๋ณต๋œ ํ–‰์„ ์‚ญ์ œํ•˜๊ณ  customer_id์™€ sales_ymd์˜ ๊ฐ ๊ณ ์œ  ์Œ์˜ ์ฒซ ๋ฒˆ์งธ ์ถœํ˜„๋ถ„๋งŒ ์œ ์ง€ํ•œ๋‹ค.

์–ป์€ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ customer_id ์ปฌ๋Ÿผ์œผ๋กœ ๊ฒฐํ•ฉํ•œ๋‹ค.

interval ํ•จ์ˆ˜๋กœ ๊ตฌ๊ฐ„์„ ๋งŒ๋“ค๊ณ  time_length ํ•จ์ˆ˜๋กœ ์—ฐ์ˆ˜๋ฅผ ์ถ”์ถœํ•˜์—ฌ ๊ฐ ๊ณ ๊ฐ์˜ application_date์™€ sales_ymd ์‚ฌ์ด์˜ ๊ฒฝ๊ณผ ์—ฐ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , trunc ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ •์ˆ˜ ๊ฐ’์œผ๋กœ ์ž๋ฅธ๋‹ค.

customer_id, sales_ymd, application_date, elapsed_years ์—ด์„ ์„ ํƒํ•œ๋‹ค.

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

์š”์•ฝํ•˜๋ฉด, ์ด ์ฝ”๋“œ๋Š” ๊ณ ๊ฐ์˜ application_date์™€ sales_ymd ๋‚ ์งœ ์‚ฌ์ด์˜ ๊ฒฝ๊ณผ ๋…„์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” ๊ณ ๊ฐ ๋ฐ ๊ตฌ๋งค ๋‚ด์—ญ๊ณผ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

df_receipt[c("customer_id", "sales_ymd")]: "df_receipt" ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ "customer_id"์™€ "sales_ymd" ์—ด์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

distinct(. , .keep_all = TRUE): ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์œ ์ง€ํ•œ ์ฑ„ ์ค‘๋ณต๋œ ํ–‰์„ ์‚ญ์ œํ•œ๋‹ค.

inner_join(df_customer[c("customer_id", "application_date")], by="customer_id"): "df_customer" ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— "customer_id" ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์—ฌํ•œ๋‹ค.

mutate(elapsed_epoch = as.numeric(strptime(as.character(sales_ymd), "%Y%m%d")) - as.numeric(strptime(application_date, "%Y%m%d")): "sales _ymd" ์—ด๊ณผ "application_date" ์—ด ์‚ฌ์ด์˜ ์ดˆ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” "elapsed_epoch" ์—ด์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค.

select(customer_id, sales_ymd, application_date, elapsed_epoch): ๊ฒฐํ•ฉ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ "customer_id", "sales_ymd", "application_date", "elapsed_epoch" ์—ด์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. epoch" ์ปฌ๋Ÿผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

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

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ฐ ํŒ๋งค์ผ์— ๋Œ€ํ•ด ์ฃผ์ดˆ(์›”์š”์ผ)๋ถ€ํ„ฐ์˜ ๊ฒฝ๊ณผ ์ผ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ฝ”๋“œ์˜ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

df_receipt["sales_ymd"]: df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ sales_ymd ์ปฌ๋Ÿผ์„ ์„ ํƒํ•œ๋‹ค.

%>%: ์ด์ „ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์Œ ์ž‘์—…์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ํŒŒ์ดํ”„ ์—ฐ์‚ฐ์ž์ด๋‹ค.

mutate(monday = as.Date(floor_date( strptime(as.character(sales_ymd), "%Y%m%d") - 1 , unit = "week")) + 1): ๊ฐ ํŒ๋งค์ผ์˜ ์ฃผ ์›”์š”์ผ์„ ๋‚˜ํƒ€๋‚ด๋Š” monday๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ์ƒ์„ฑํ•œ๋‹ค. ๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” sales_ymd ์ปฌ๋Ÿผ์„ ๋‚ ์งœ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์ด์ „ ์ฃผ์—์„œ ํ•˜๋ฃจ๋ฅผ ๋นผ๊ณ (์ผ์š”์ผ์ด ์ฃผ ๋), ํ•˜๋ฃจ๋ฅผ ๋”ํ•˜์—ฌ ์ฃผ ์‹œ์ž‘(์›”์š”์ผ)์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

%>%: ๋˜ ๋‹ค๋ฅธ ํŒŒ์ดํ”„ ์—ฐ์‚ฐ์ž.

mutate(elapsed_days = as.integer( as.Date( strptime(as.character(sales_ymd), "%Y%m%d")) - Monday)): elapsed_days๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ ํŒ๋งค์ผ์˜ ์ฃผ ์‹œ์ž‘(์›”์š”์ผ) ์‹œ์ž‘(์›”์š”์ผ)๋ถ€ํ„ฐ ๊ฒฝ๊ณผํ•œ ์ผ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Š” sales_ymd ์ปฌ๋Ÿผ์„ ๋‚ ์งœ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , (monday ์ปฌ๋Ÿผ์—์„œ) ํ•ด๋‹น ์ฃผ์˜ ์›”์š”์ผ์„ ๋บ€ ํ›„ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

%>%: ๋˜ ๋‹ค๋ฅธ ํŒŒ์ดํ”„ ์—ฐ์‚ฐ์ž.

select(sales_ymd, elapsed_days, monday): sales_ymd, elapsed_days, monday ์—ด์„ ์„ ํƒํ•œ๋‹ค.

%>%: ๋˜ ๋‹ค๋ฅธ ํŒŒ์ดํ”„ ์—ฐ์‚ฐ์ž.

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

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” dplyr ํŒจํ‚ค์ง€์˜ sample_frac() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ 1%์˜ ํ–‰์„ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒํ•˜๊ณ  head() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

sample_frac() ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ์ผ๋ถ€ ํ–‰์„ ๋ฌด์ž‘์œ„๋กœ ์ƒ˜ํ”Œ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ tbl ์ธ์ˆ˜๋Š” ์ƒ˜ํ”Œ๋งํ•  ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ง€์ •ํ•˜๊ณ , size ์ธ์ˆ˜๋Š” ์ƒ˜ํ”Œ๋งํ•  ํ–‰์˜ ๋น„์œจ(0.01, ์ฆ‰ 1%)์„ ์ง€์ •ํ•œ๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ head() ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜์–ด ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
ย 
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” dplyr ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์—์„œ ๊ณ ๊ฐ์˜ 10%๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ƒ˜ํ”Œ๋งํ•˜๊ณ  ๊ฐ ์ƒ˜ํ”Œ์˜ ๊ณ ๊ฐ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

set.seed(71)๋Š” ์ƒ˜ํ”Œ๋ง์˜ ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ์˜ ์ข…์„ ์„ค์ •ํ•œ๋‹ค.

df_customer %>%๋Š” df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ํŒŒ์ดํ”„ ์—ฐ์‚ฐ์ž %>%๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ฒ˜๋ฆฌ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

group_by(gender_cd) ์„ฑ๋ณ„ ์ฝ”๋“œ ์—ด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.

sample_frac(0.1)์€ ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์—์„œ ๊ณ ๊ฐ์˜ 10%๋ฅผ ์ƒ˜ํ”Œ๋งํ•˜๋ฉฐ, sample_frac() ํ•จ์ˆ˜๋Š” ๊ทธ๋ฃนํ™”๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ํ–‰์˜ ์ผ๋ถ€๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ƒ˜ํ”Œ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜ 0.1์€ ์ƒ˜ํ”Œ๋งํ•  ๋น„์œจ์„ ์ง€์ •ํ•œ๋‹ค.

summarise(customer_num = n(), .groups = "drop")์€ ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์˜ ๊ณ ๊ฐ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. n() ํ•จ์ˆ˜๋Š” ๊ฐ ๊ทธ๋ฃน์˜ ํ–‰ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฒฐ๊ณผ ์—ด์˜ ์ด๋ฆ„์„ customer_num์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. .groups ์ธ์ˆ˜๋ฅผ "drop"์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์ถœ๋ ฅ์—์„œ ๊ทธ๋ฃนํ™” ์ •๋ณด๊ฐ€ ์‚ญ์ œ๋œ๋‹ค.

์ตœ์ข… ์ถœ๋ ฅ์€ gender_cd์™€ customer_num ๋‘ ๊ฐœ์˜ ์—ด์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ, gender_cd ์—ด์€ ์„ฑ๋ณ„ ์ฝ”๋“œ๋ฅผ ์ง€์ •ํ•˜๊ณ  customer_num ์—ด์€ ๊ฐ ์„ฑ๋ณ„ ๊ทธ๋ฃน์—์„œ ์ƒ˜ํ”Œ๋ง๋œ ๊ณ ๊ฐ ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.
ย 
์„ค๋ช…:

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

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

summarise ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๊ณ ๊ฐ์˜ ๊ธˆ์•ก ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ sum_amount๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์— ์ €์žฅํ•œ๋‹ค.

sum_amount ์—ด์˜ ๋Œ€์ˆ˜๋ฅผ ์ทจํ•˜์—ฌ log_sum_amount๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์— ์ €์žฅํ•œ๋‹ค.

๊ฐ ๊ฐ’์—์„œ log_sum_amount์˜ ํ‰๊ท ๊ฐ’์„ ๋นผ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ log_sum_amount์˜ ํ‘œ์ค€ํŽธ์ฐจ๋กœ ๋‚˜๋ˆ„์–ด log_sum_amount์˜ z-score๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

log_sum_amount์˜ z-score๊ฐ€ 3๋ณด๋‹ค ํฐ ๊ณ ๊ฐ(์ฆ‰, log_sum_amount๊ฐ€ ํ‰๊ท ๊ฐ’์—์„œ ํ‘œ์ค€ํŽธ์ฐจ๋กœ 3 ์ด์ƒ ๋–จ์–ด์ ธ ์žˆ๋Š” ๊ณ ๊ฐ)์„ ํ•„ํ„ฐ๋งํ•œ๋‹ค.

slice ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 10 ์ค„์„ ์„ ํƒํ•œ๋‹ค.

์š”์•ฝํ•˜๋ฉด, ์ด ์ฝ”๋“œ๋Š” Z์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  Z์ ์ˆ˜๊ฐ€ ํŠน์ • ์ž„๊ณ„์น˜๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ณ ๊ฐ์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ด ์ง€์ถœ์•ก์ด ํ‰๊ท ๋ณด๋‹ค ํ›จ์”ฌ ๋†’๊ฑฐ๋‚˜ ๋‚ฎ์€ ๊ณ ๊ฐ์„ ์‹๋ณ„ํ•œ๋‹ค.

ย 

์„ค๋ช…:

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

df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค.

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

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

์‚ฌ๋ถ„์œ„์ˆ˜ ๋ฒ”์œ„(IQR) ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ sum_amount ๊ฐ’์˜ ์ƒ์œ„์™€ ํ•˜์œ„ 1.5%๋ฅผ ํ•„ํ„ฐ๋งํ•œ๋‹ค.

์™„์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒซ 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•œ๋‹ค.

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

์ƒ๊ณ„: quantile(sum_amount)[4] + 1.5 * (quantile(sum_amount)[4] - quantile(sum_amount)[2])

ํ•˜ํ•œ : quantile(sum_amount)[2] - 1.5 * (quantile(sum_amount)[4] - quantile(sum_amount)[2])

์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” sum_amount ๊ฐ’์€ ํ•„ํ„ฐ๋ง๋œ๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—๋Š” ํ•„ํ„ฐ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ฒ˜์Œ 10๊ฐœ์˜ ๊ณ ๊ฐ_id์™€ sum_amount๊ฐ€ ํฌํ•จ๋œ๋‹ค.
ย 
์„ค๋ช…:

์ด ์ฝ”๋“œ๋Š” sapply() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_product ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ฐ ์—ด์˜ ๊ฒฐ์†๊ฐ’ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

sapply()๋Š” df_product ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ฐ ์—ด์— ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋Š” function(x) sum(is.na(x))๋กœ ์ž…๋ ฅ ์—ด x์˜ ๊ฒฐ์†๊ฐ’(NA) ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. is.na()๋Š” ์ž…๋ ฅ ๋ฒกํ„ฐ์™€ ๊ฐ™์€ ๊ธธ์ด์˜ ๋…ผ๋ฆฌ ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ฒฐ์†๊ฐ’(NA)์ด ์žˆ์œผ๋ฉด TRUE, ์—†์œผ๋ฉด FALSE๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , sum()์€ ๋…ผ๋ฆฌ ๋ฒกํ„ฐ์˜ TRUE ๊ฐ’์„ ํ•ฉ์‚ฐํ•˜์—ฌ ์—ด์—์„œ ๋ˆ„๋ฝ๋œ ๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์ด ์ฝ”๋“œ์˜ ์ถœ๋ ฅ์€ df_product์˜ ์—ด ์ด๋ฆ„์„ ์ด๋ฆ„์œผ๋กœ, ํ•ด๋‹น ๊ฒฐ์†๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ํ•˜๋Š” ๋ช…๋ช…๋œ ๋ฒกํ„ฐ์ด๋‹ค.
ย 
์„ค๋ช…:

์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ์—์„œ๋Š” na.omit() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ž˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_product์—์„œ ๊ฒฐ์†๊ฐ’(NA)์ด ์žˆ๋Š” ๋ชจ๋“  ํ–‰์„ ์ œ๊ฑฐํ•œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_product_1์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ฝ”๋“œ์—์„œ๋Š” paste() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NA๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์ „๊ณผ ์ œ๊ฑฐํ•œ ํ›„์˜ df_product์˜ ํ–‰ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ nrow(df_product)๋Š” df_product์˜ ํ–‰ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ฒซ ๋ฒˆ์งธ paste() ํ˜ธ์ถœ์€ ์ด ์ˆซ์ž์™€ '์‚ญ์ œ ์ „:' ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ nrow(df_product_1)๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_product_1์˜ ํ–‰ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ paste() ํ˜ธ์ถœ์€ ์ด ์ˆซ์ž์™€ "After deletion:"์ด๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•œ๋‹ค.

์ด ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ด€์ธก์น˜ ์ˆ˜์— ๋Œ€ํ•œ NA ์‚ญ์ œ ํšจ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
ย 
ย 

Comment