๋ฐ์ดํฐ ์ฌ์ด์ธ์ค 100๋ฒ์ ๋ ธํฌ(๊ตฌ์กฐํ ๋ฐ์ดํฐ ์ฒ๋ฆฌํธ) โ R Part 2 (Q21 to Q40)์ ํด์ค์ ๋๋ค.
ย
์ฐธ๊ณ (Reference) : ใ๋ฐ์ดํฐ ์ฌ์ด์ธํฐ์คํธ ํํ ์คํฌ ์ ์ ์์ใ์ ใ๋ฐ์ดํฐ ์ฌ์ด์ธ์ค 100๋ฒ์ ๋ ธํฌ(๊ตฌ์กฐํ ๋ฐ์ดํฐ ์ฒ๋ฆฌํธ)ใ์ ๋๋ค.
์ฒ์์
- ๋จผ์ ๋ค์ ์ ์ ์คํํฉ๋๋ค.
- ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค(PostgreSQL).
- ์ฌ์ฉํ ๊ฒ์ผ๋ก ์์๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์ ์ ์์ ๊ฐ์ ธ์ต๋๋ค.
- ์ฌ์ฉํ๋ ค๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ install.packages()๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ํ๊ฒ ์ค์นํฉ๋๋ค.
- ์ด๋ฆ, ์ฃผ์ ๋ฑ์ ๋๋ฏธ ๋ฐ์ดํฐ์ด๋ฉฐ ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋๋๋ค.
require("RPostgreSQL")
require("tidyr")
require("dplyr")
require("stringr")
require("caret")
require("lubridate")
require("rsample")
require("recipes")
require("themis")
host <- "db"
port <- Sys.getenv()["PG_PORT"]
dbname <- Sys.getenv()["PG_DATABASE"]
user <- Sys.getenv()["PG_USER"]
password <- Sys.getenv()["PG_PASSWORD"]
con <- dbConnect(PostgreSQL(), host=host, port=port, dbname=dbname, user=user, password=password)
df_customer <- dbGetQuery(con,"SELECT * FROM customer")
df_category <- dbGetQuery(con,"SELECT * FROM category")
df_product <- dbGetQuery(con,"SELECT * FROM product")
df_receipt <- dbGetQuery(con,"SELECT * FROM receipt")
df_store <- dbGetQuery(con,"SELECT * FROM store")
df_geocode <- dbGetQuery(con,"SELECT * FROM geocode")
Loading required package: RPostgreSQL Loading required package: DBI Loading required package: tidyr Loading required package: dplyr Attaching package: โdplyrโ The following objects are masked from โpackage:statsโ: filter, lag The following objects are masked from โpackage:baseโ: intersect, setdiff, setequal, union Loading required package: stringr Loading required package: caret Loading required package: ggplot2 Loading required package: lattice Loading required package: lubridate Attaching package: โlubridateโ The following objects are masked from โpackage:baseโ: date, intersect, setdiff, union Loading required package: rsample Loading required package: recipes Attaching package: โrecipesโ The following object is masked from โpackage:stringrโ: fixed The following object is masked from โpackage:statsโ: step Loading required package: themis Registered S3 methods overwritten by 'themis': method from bake.step_downsample recipes bake.step_upsample recipes prep.step_downsample recipes prep.step_upsample recipes tidy.step_downsample recipes tidy.step_upsample recipes tunable.step_downsample recipes tunable.step_upsample recipes Attaching package: โthemisโ The following objects are masked from โpackage:recipesโ: step_downsample, step_upsample
ย
์ฐ์ต๋ฌธ์
R-021: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๊ฑด์๋ฅผ ์ธ์ด๋ผ.
nrow(df_receipt)
104681
์ค๋ช :
"nrow(df_receipt)"๋ผ๋ ์ฝ๋๋ R ๋๋ ์ ์ฌํ ํต๊ณ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋์์ต๋๋ค. ์ด๋ "df_receipt"๋ผ๋ ๋ฐ์ดํฐ ํ๋ ์์ ํ ์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์๋๋ ์ฝ๋์ ๋ด์ฉ์ ์ค๋ช ํ๋ค.
"nrow()"๋ R์ ๋ด์ฅ ํจ์๋ก ๋ฐ์ดํฐ ํ๋ ์์ ํ ์๋ฅผ ๋ฐํํ๋ค.
"df_receipt"๋ ํ ์๋ฅผ ๊ตฌํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ ํ๋ ์์ ์ด๋ฆ์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ ํ๋ ์ "df_receipt"์ 100๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด 100์ด๋ผ๋ ๊ฐ์ด ๋ฐํ๋๋ค. ์ด ์ฝ๋๋ ์ถ๊ฐ ๋ถ์์ด๋ ๋ฐ์ดํฐ ์กฐ์์ ์ํํ๊ธฐ ์ ์ ๋ฐ์ดํฐ ํ๋ ์์ ํฌ๊ธฐ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ธํ์ฌ ์์๋๋ก ํ ์๊ฐ ์๋์ง ํ์ธํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
R-022: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๊ณ ๊ฐ ID(customer_id)์ ๋ํด ๊ณ ์ ๊ฑด์๋ฅผ ์ธ์ด๋ผ.
length(unique(df_receipt$customer_id))
8307
์ค๋ช :
์ฝ๋ "length(unique(df_receipt$customer_id))"๋ R ๋๋ ์ ์ฌํ ํต๊ณ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋์ ๋๋ค. ์ด๋ "df_receipt"๋ผ๋ ๋ฐ์ดํฐ ํ๋ ์์ ํฌํจ๋ ๊ณ ์ ๊ณ ๊ฐ ์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์๋๋ ์ฝ๋์ ์ธ๋ถ ๋ด์ฉ์ ์ค๋ช ํฉ๋๋ค.
"unique()"๋ ํน์ ๋ฒกํฐ์ ๊ณ ์ ํ ์์๋ง์ ํฌํจํ๋ ๋ฒกํฐ๋ฅผ ๋ฐํํ๋ R ํจ์์ ๋๋ค. ์ด ๊ฒฝ์ฐ "unique()" ํจ์์ ์ ๋ฌ๋๋ ๋ฒกํฐ๋ "df_receipt$customer_id"๋ก "df_receipt" ๋ฐ์ดํฐ ํ๋ ์์ ๊ณ ๊ฐ ID๋ฅผ ํฌํจํ๋ ์ด์ด๋ค.
"length()"๋ ๋ฒกํฐ์ ์์ ์๋ฅผ ๋ฐํํ๋ R์ ๋ด์ฅ ํจ์์ด๋ค. ์ด ๊ฒฝ์ฐ "length()"์ ์ ๋ฌ๋๋ ๋ฒกํฐ๋ "unique()" ํจ์์ ์ถ๋ ฅ์ด๋ฉฐ, ๊ณ ์ ํ ๊ณ ๊ฐ ID๋ฅผ ํฌํจํ๋ ๋ฒกํฐ์ด๋ค.
์์ฝํ๋ฉด, ์ด ์ฝ๋๋ ๊ณ ์ ํ ๊ณ ๊ฐ ID๊ฐ ํฌํจ๋ ๋ฒกํฐ์ ๊ธธ์ด๋ฅผ ์ทจํ์ฌ "df_receipt" ๋ฐ์ดํฐ ํ๋ ์์ ๊ณ ์ ํ ๊ณ ๊ฐ ์๋ฅผ ๊ณ์ฐํ๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ ํ๋ ์์ 1000๊ฐ์ ํ์ด ์๊ณ ๊ณ ์ ํ ๊ณ ๊ฐ ID๊ฐ 500๊ฐ๋ฐ์ ์๋ ๊ฒฝ์ฐ, ์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด 500์ด๋ผ๋ ๊ฐ์ด ๋ฐํ๋๋ค. ์ด ์ฝ๋๋ ๋ฐ์ดํฐ ์ธํธ์ ๊ณ ์ ๊ณ ๊ฐ ์๋ฅผ ํ์ ํ๊ฑฐ๋ ๊ณ ๊ฐ ํ์ ๊ฐ์น์ ๊ฐ์ ๊ณ ๊ฐ ์์ค ์งํ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ ์ฉํ๋ค.
R-023: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๋งค์ฅ ์ฝ๋(store_cd)๋ณ ํ๋งค ๊ธ์ก(amount)๊ณผ ํ๋งค ์๋(quantity)์ ํฉ์ฐํ๋ผ.
df_receipt %>% group_by(store_cd) %>% summarise(amount = sum(amount), quantity = sum(quantity), .groups = "drop")
store_cd | amount | quantity |
---|---|---|
<chr> | <int> | <int> |
S12007 | 638761 | 2099 |
S12013 | 787513 | 2425 |
S12014 | 725167 | 2358 |
S12029 | 794741 | 2555 |
S12030 | 684402 | 2403 |
S13001 | 811936 | 2347 |
S13002 | 727821 | 2340 |
S13003 | 764294 | 2197 |
S13004 | 779373 | 2390 |
S13005 | 629876 | 2004 |
S13008 | 809288 | 2491 |
S13009 | 808870 | 2486 |
S13015 | 780873 | 2248 |
S13016 | 793773 | 2432 |
S13017 | 748221 | 2376 |
S13018 | 790535 | 2562 |
S13019 | 827833 | 2541 |
S13020 | 796383 | 2383 |
S13031 | 705968 | 2336 |
S13032 | 790501 | 2491 |
S13035 | 715869 | 2219 |
S13037 | 693087 | 2344 |
S13038 | 708884 | 2337 |
S13039 | 611888 | 1981 |
S13041 | 728266 | 2233 |
S13043 | 587895 | 1881 |
S13044 | 520764 | 1729 |
S13051 | 107452 | 354 |
S13052 | 100314 | 250 |
S14006 | 712839 | 2284 |
S14010 | 790361 | 2290 |
S14011 | 805724 | 2434 |
S14012 | 720600 | 2412 |
S14021 | 699511 | 2231 |
S14022 | 651328 | 2047 |
S14023 | 727630 | 2258 |
S14024 | 736323 | 2417 |
S14025 | 755581 | 2394 |
S14026 | 824537 | 2503 |
S14027 | 714550 | 2303 |
S14028 | 786145 | 2458 |
S14033 | 725318 | 2282 |
S14034 | 653681 | 2024 |
S14036 | 203694 | 635 |
S14040 | 701858 | 2233 |
S14042 | 534689 | 1935 |
S14045 | 458484 | 1398 |
S14046 | 412646 | 1354 |
S14047 | 338329 | 1041 |
S14048 | 234276 | 769 |
S14049 | 230808 | 788 |
S14050 | 167090 | 580 |
ํด์ค:
"df_receipt %>% group_by.
df_receipt %>% group_by(store_cd) %>% summarise(amount = sum(amount), quantity = sum(quantity), .groups = 'drop')"๋ผ๋ ์ฝ๋๋ R ๋๋ ์ด์ ์ ์ฌํ ํต๊ณ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋์ด ์์ต๋๋ค. ์ด๋ "df_receipt" ๋ฐ์ดํฐ ํ๋ ์์ "store_cd"๋ผ๋ ๋ณ์๋ก ๊ทธ๋ฃนํํ์ฌ ๊ฐ ๋งค์ฅ ๊ทธ๋ฃน ๋ด "amount" ๋ฐ "quantity" ๋ณ์์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์๋๋ ์ฝ๋์ ์ธ๋ถ ๋ด์ฉ์ ์ค๋ช ํฉ๋๋ค.
ํ์ดํ ์ฐ์ฐ์('%>%')๋ ์ฌ๋ฌ ํจ์๋ฅผ ์์๋๋ก ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค. ํ์ดํ ์ฐ์ฐ์('%>%')๋ ์ฌ๋ฌ ํจ์๋ฅผ ์ฐ์์ ์ผ๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก, ์ด์ ํจ์์ ์ถ๋ ฅ์ ๋ฐ์ ๋ค์ ํจ์์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด ์์ ์์๋ "group_by()"์ "summarise()" ํจ์๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด ํ์ดํ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
"group_by()"๋ ๋ฐ์ดํฐ ํ๋ ์์ ํ๋ ์ด์์ ๋ณ์๋ก ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋๋ R ํจ์์ ๋๋ค. ์ด๋ฒ์๋ "df_receipt" ๋ฐ์ดํฐ ํ๋ ์์ "store_cd" ๋ณ์๋ก ๊ทธ๋ฃนํํฉ๋๋ค.
"summarise()"๋ ๋ฐ์ดํฐ ํ๋ ์์ ์์ฝ ํต๊ณ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ R ํจ์์ ๋๋ค. ์ด๋ฒ์๋ ๊ฐ ๋งค์ฅ ๊ทธ๋ฃน ๋ด '๊ธ์ก', '์๋' ๋ณ์์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๊ณ ์์ต๋๋ค. ๋ํ, ๋์ ์ฐ์ฐ์ '='๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ๋ณ์์ ์ด๋ฆ์ ์ง์ ํ๊ณ ์์ต๋๋ค.
'summarise()' ํจ์์ '.groups' ์ธ์๋ ์ถ๋ ฅ ํ์์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ "drop"์ผ๋ก ์ค์ ํ๋ฉด ์ถ๋ ฅ์์ ๊ทธ๋ฃนํ ์ ๋ณด๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
์ด ์ฝ๋์ ๊ฒฐ๊ณผ๋ "df_receipt" ๋ฐ์ดํฐ ํ๋ ์์ ๊ฐ ๋งค์ฅ์ ๋ํด ํ๋์ ํ์ ๊ฐ์ง ์๋ก์ด ๋ฐ์ดํฐ ํ๋ ์์ด๋ฉฐ, "amount" ๋ฐ "quantity" ์ด์๋ ๊ฐ ๋งค์ฅ ๊ทธ๋ฃน ๋ด์ ์ด๋ฌํ ๋ณ์์ ํฉ๊ณ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ด ์ฝ๋๋ ์ด๋งค์ถ์ก์ด๋ ํ๋งค ์๋๊ณผ ๊ฐ์ ๋งค์ฅ ๋จ์์ ์งํ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ ์ฉํ๋ค.
R-024: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๊ณ ๊ฐ ID(customer_id)๋ณ๋ก ๊ฐ์ฅ ์ต๊ทผ ๋งค์ถ ๋ ์ง(sales_ymd)๋ฅผ ๊ตฌํ์ฌ 10๊ฑด ํ์ํ๋ผ.
df_receipt %>% group_by(customer_id) %>% summarise(max_ymd = max(sales_ymd), .groups = "drop") %>% slice(1:10)
customer_id | max_ymd |
---|---|
<chr> | <int> |
CS001113000004 | 20190308 |
CS001114000005 | 20190731 |
CS001115000010 | 20190405 |
CS001205000004 | 20190625 |
CS001205000006 | 20190224 |
CS001211000025 | 20190322 |
CS001212000027 | 20170127 |
CS001212000031 | 20180906 |
CS001212000046 | 20170811 |
CS001212000070 | 20191018 |
์ค๋ช :
df_receipt %>% group_by(customer_id) %>% summarise(max_ymd = max(sales_ymd), .groups = 'drop') %>% slice(1:10)"๋ผ๋ ์ฝ๋๋ R ๋๋ ์ ์ฌํ ํต๊ณ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋์ ๋๋ค. ์์ต๋๋ค. ์ด๋ "df_receipt" ๋ฐ์ดํฐ ํ๋ ์์ "customer_id"๋ผ๋ ๋ณ์๋ก ๊ทธ๋ฃนํํ์ฌ ๊ฐ ๊ณ ๊ฐ์ ์ต์ ๊ตฌ๋งค ๋ ์ง๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, ์์ฑ๋ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10์ค์ ์ฌ๋ผ์ด์คํ๊ณ ์์ต๋๋ค.
์๋๋ ์ฝ๋์ ์ธ๋ถ ๋ด์ฉ์ ์ค๋ช ํฉ๋๋ค.
ํ์ดํ ์ฐ์ฐ์("%>%")๋ ์ฌ๋ฌ ํจ์๋ฅผ ์์๋๋ก ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค. ํ์ดํ ์ฐ์ฐ์("%>%")๋ ์ฌ๋ฌ ํจ์๋ฅผ ์์๋๋ก ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด์ ํจ์์ ์ถ๋ ฅ์ ๋ฐ์ ๋ค์ ํจ์์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด ์์์์๋ "group_by()", "summarise()", "slice()" ํจ์๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด ํ์ดํ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
"group_by()"๋ ๋ฐ์ดํฐ ํ๋ ์์ ํ๋ ์ด์์ ๋ณ์๋ก ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋๋ R ํจ์์ด๋ค. ์ด ๊ฒฝ์ฐ "df_receipt" ๋ฐ์ดํฐ ํ๋ ์์ "customer_id" ๋ณ์๋ก ๊ทธ๋ฃนํํ๊ณ ์์ต๋๋ค.
"summarise()"๋ ๋ฐ์ดํฐ ํ๋ ์์ ์์ฝ ํต๊ณ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ R ํจ์์ ๋๋ค. ์ด๋ฒ์๋ "sales_ymd" ๋ณ์์ "max()" ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ณ ๊ฐ์ ์ต์ ๊ตฌ๋งค์ผ์ ๊ณ์ฐํฉ๋๋ค.
"summarise()" ํจ์์ ".groups" ์ธ์๋ ์ถ๋ ฅ ํ์์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ "drop"์ผ๋ก ์ค์ ํ๋ฉด ์ถ๋ ฅ์์ ๊ทธ๋ฃนํ ์ ๋ณด๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
"slice()"๋ ๋ฐ์ดํฐ ํ๋ ์์์ ํ์ ํ์ ์งํฉ์ ์ถ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ R ํจ์์ ๋๋ค. ์ด ๊ฒฝ์ฐ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํฉ๋๋ค.
์ด ์ฝ๋์ ๊ฒฐ๊ณผ๋ "df_receipt" ๋ฐ์ดํฐ ํ๋ ์์ ๊ฐ ๊ณ ๊ฐ์ ๋ํด ํ๋์ ํ์ ๊ฐ์ง ์๋ก์ด ๋ฐ์ดํฐ ํ๋ ์์ด ๋ ๊ฒ์ด๋ฉฐ, "max_ymd" ์ด์๋ ๊ฐ ๊ณ ๊ฐ์ ์ต์ ๊ตฌ๋งค ๋ ์ง๊ฐ ํฌํจ๋ ๊ฒ์ด๋ค. ๋ง์ง๋ง์ผ๋ก ์ด ์ฝ๋๋ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํ๋ค. ์ด ์ฝ๋๋ ๊ฐ ๊ณ ๊ฐ์ ์ต์ ๊ตฌ๋งค ๋ ์ง๋ฅผ ํ์ ํ๋ ๋ฐ ๋์์ด ๋๋ฉฐ, ๋ค์ํ ๊ณ ๊ฐ ์์ค ๋ถ์ ๋ฐ ์ธ๋ถํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
R-025: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๊ณ ๊ฐ ID(customer_id)๋ณ๋ก ๊ฐ์ฅ ์ค๋๋ ๋งค์ถ ๋ ์ง(sales_ymd)๋ฅผ ๊ตฌํ์ฌ 10๊ฑด ํ์ํ๋ผ.
df_receipt %>% group_by(customer_id) %>% summarise(min_ymd = min(sales_ymd), .groups = "drop") %>% slice(1:10)
customer_id | min_ymd |
---|---|
<chr> | <int> |
CS001113000004 | 20190308 |
CS001114000005 | 20180503 |
CS001115000010 | 20171228 |
CS001205000004 | 20170914 |
CS001205000006 | 20180207 |
CS001211000025 | 20190322 |
CS001212000027 | 20170127 |
CS001212000031 | 20180906 |
CS001212000046 | 20170811 |
CS001212000070 | 20191018 |
์ค๋ช :
์ด ์ฝ๋์์๋ %>%(ํ์ดํ) ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ df_receipt๋ผ๋ ๋ฐ์ดํฐ ํ๋ ์์ ๋ํด ์ผ๋ จ์ ์ฐ์์ ์ธ ์ฐ์ฐ์ ์ํํ๋ค.
๋ค์์ ๊ฐ ์ฐ์ฐ์ด ๋ฌด์์ ํ๋์ง ๋จ๊ณ๋ณ๋ก ์ค๋ช ํฉ๋๋ค.
group_by(customer_id): customer_id ์ด๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ฌ ์ดํ ์ฒ๋ฆฌ๋ฅผ ๊ณ ๊ฐ๋ณ๋ก ๋๋์ด ์ํํ๋ค.
summarise(min_ymd = min(sales_ymd), .groups = "drop"): sales_ymd ์ด์ ์ต์๊ฐ์ ๊ณ์ฐํ์ฌ min_ymd๋ผ๋ ์๋ก์ด ์ด์ ์ ์ฅํ์ฌ ๊ฐ ๊ทธ๋ฃน ๋ด ๋ฐ์ดํฐ์ ์์ฝ์ ์์ฑํ๋ค. .groups = "drop" ์ธ์๋ dplyr์๊ฒ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์์ ๊ทธ๋ฃนํ ์ ๋ณด๋ฅผ ์ญ์ ํ๋๋ก ์ง์ํ๋ค(์ถ๊ฐ ๋ถ์์ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์).
slice(1:10): ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํ๋ค. ๋ฐ์ดํฐ๋ customer_id๋ก ๊ทธ๋ฃนํ๋์๊ณ , summary ํจ์๊ฐ ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ธํธ์ ์ฒ์ 10๋ช ์ ๊ณ ๊ฐ์ ๋ํ ๊ฐ์ฅ ๋น ๋ฅธ sales_ymd ๊ฐ์ ์ป์ ์ ์๋ค.
์ ์ฒด์ ์ผ๋ก ์ด ์ฝ๋๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์์ ๊ฐ ๊ณ ๊ฐ์ ๊ฐ์ฅ ๋น ๋ฅธ sales_ymd ๊ฐ์ ์ ํํ๊ณ ๋ฐ์ดํฐ ์ธํธ์ ์ฒซ 10๋ช ์ ๊ณ ๊ฐ ์ค ๊ฐ์ฅ ๋น ๋ฅธ ๋ ์ง๋ฅผ ๋ฐํํ๋ค.
R-026: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๊ณ ๊ฐ ID(customer_id)๋ณ๋ก ๊ฐ์ฅ ์ต๊ทผ ๋งค์ถ ๋ ์ง(sales_ymd)์ ๊ฐ์ฅ ์ค๋๋ ๋งค์ถ ๋ ์ง(sales_ymd)๋ฅผ ๊ตฌํ๊ณ , ์์๊ฐ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ 10๊ฑด์ ํ์ํ๋ผ.
df_receipt %>% group_by(customer_id) %>% summarise(max_ymd = max(sales_ymd) ,min_ymd = min(sales_ymd), .groups = "drop") %>% filter(max_ymd != min_ymd) %>% slice(1:10)
customer_id | max_ymd | min_ymd |
---|---|---|
<chr> | <int> | <int> |
CS001114000005 | 20190731 | 20180503 |
CS001115000010 | 20190405 | 20171228 |
CS001205000004 | 20190625 | 20170914 |
CS001205000006 | 20190224 | 20180207 |
CS001214000009 | 20190902 | 20170306 |
CS001214000017 | 20191006 | 20180828 |
CS001214000048 | 20190929 | 20171109 |
CS001214000052 | 20190617 | 20180208 |
CS001215000005 | 20181021 | 20170206 |
CS001215000040 | 20171022 | 20170214 |
์ค๋ช :
์ด ์ฝ๋์์๋ %>%(ํ์ดํ) ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ df_receipt๋ผ๋ ๋ฐ์ดํฐ ํ๋ ์์ ๋ํด ์ผ๋ จ์ ์ฐ์์ ์ธ ์ฐ์ฐ์ ์ํํ๋ค.
๋ค์์ ๊ฐ ์ฐ์ฐ์ด ๋ฌด์์ ํ๋์ง์ ๋ํ ๋จ๊ณ๋ณ ์ค๋ช ์ ๋๋ค.
group_by(customer_id) : group_by(customer_id) : customer_id ์ด๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ฌ ์ดํ ์ฒ๋ฆฌ๋ฅผ ๊ณ ๊ฐ๋ณ๋ก ๋๋์ด ์ํํ๋ค.
summarise(max_ymd = max(sales_ymd), min_ymd = min(sales_ymd), .groups = "drop"): sales_ymd ์ปฌ๋ผ์ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๊ณ์ฐํ์ฌ ๊ฐ๊ฐ max_ymd์ min_ymd๋ผ๋ ์๋ก์ด ์ปฌ๋ผ์ ์ ์ฅํ๋ค. ๊ฐ ๊ทธ๋ฃน ๋ด ๋ฐ์ดํฐ์ ์์ฝ์ ์์ฑํ๋ค. .groups = "drop" ์ธ์๋ dplyr์๊ฒ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์์ ๊ทธ๋ฃนํ ์ ๋ณด๋ฅผ ์ญ์ ํ๋๋ก ์ง์ํ๋ค(์ถ๊ฐ ๋ถ์์ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์).
filter(max_ymd ! = min_ymd): max_ymd ๊ฐ์ด min_ymd ๊ฐ๊ณผ ๊ฐ์ง ์์ ํ๋ง ํฌํจํ๋๋ก ๋ฐ์ดํฐ ํ๋ ์์ ํํฐ๋งํ๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ์ธํธ์ ๋์ ๊ธฐ๊ฐ ๋์ ๋จ ํ ๋ฒ๋ง ๊ตฌ๋งคํ ๊ณ ๊ฐ์ ์ ์ธ๋๋ค.
slice(1:10): ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํ๋ค. ๋ฐ์ดํฐ๋ customer_id๋ก ๊ทธ๋ฃนํ๋์ด max ํจ์์ min ํจ์๋ก ์์ฝ๋๊ณ ์์ฝ ํต๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํํฐ๋ง๋์ด ๋ฐ์ดํฐ ์ธํธ์ ๋์ ๊ธฐ๊ฐ ๋์ ํ ๋ฒ ์ด์ ๊ตฌ๋งค๋ฅผ ํ ์ฒ์ 10๋ช ์ ๊ณ ๊ฐ์ ์ป์ ์ ์๋ค.
์ ์ฒด์ ์ผ๋ก ์ด ์ฝ๋๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์์ ๋ค๋ฃจ๋ ๊ธฐ๊ฐ ๋์ ํ ๋ฒ ์ด์ ๊ตฌ๋งคํ ๊ณ ๊ฐ์ ์ ํํ๊ณ ๊ฐ์ฅ ๋น ๋ฅธ ๊ตฌ๋งค ๋ ์ง์ ๊ฐ์ฅ ๋ฆ์ ๊ตฌ๋งค ๋ ์ง๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ์ฝ๋๋ ์ด๋ฌํ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ์ฒ์ 10๋ช ์ ๊ณ ๊ฐ์ ๋ํด ๊ฐ์ฅ ๋น ๋ฅธ ๊ตฌ๋งค ๋ ์ง์ ๊ฐ์ฅ ๋ฆ์ ๊ตฌ๋งค ๋ ์ง๋ฅผ ๋ฐํํฉ๋๋ค.
R-027: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๋งค์ฅ ์ฝ๋(store_cd)๋ณ ๋งค์ถ ๊ธ์ก(amount)์ ํ๊ท ์ ๊ณ์ฐํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก TOP5๋ฅผ ํ์ํ๋ผ.
df_receipt %>% group_by(store_cd) %>% summarise(mean_amount = mean(amount), .groups = "drop") %>% arrange(desc(mean_amount)) %>% slice(1:5)
store_cd | mean_amount |
---|---|
<chr> | <dbl> |
S13052 | 402.8675 |
S13015 | 351.1120 |
S13003 | 350.9155 |
S14010 | 348.7913 |
S13001 | 348.4704 |
์ค๋ช :
์ด ์ฝ๋์์๋ %>%(ํ์ดํ) ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ df_receipt๋ผ๋ ๋ฐ์ดํฐ ํ๋ ์์ ๋ํด ์ผ๋ จ์ ์ฐ์์ ์ธ ์ฐ์ฐ์ ์ํํ๋ค.
๋ค์์ ๊ฐ ์ฐ์ฐ์ด ๋ฌด์์ ํ๋์ง ์์๋๋ก ์ค๋ช ํ๋ค.
group_by(store_cd): store_cd ์ด๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ฌ ๊ฐ ๋งค์ฅ๋ณ๋ก ํ์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
summarise(mean_amount = mean(amount), .groups = "drop") : ๊ฐ ๊ทธ๋ฃน ๋ด ๋ฐ์ดํฐ์ ์์ฝ์ ๋ง๋ค๊ณ , amount ์ด์ ํ๊ท ๊ฐ์ ๊ณ์ฐํ์ฌ mean_amount๋ผ๋ ์๋ก์ด ์ด์ ์ ์ฅํ๋ค. .groups = "drop" ์ธ์๋ dplyr์๊ฒ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์์ ๊ทธ๋ฃนํ ์ ๋ณด๋ฅผ ์ญ์ ํ๋๋ก ์ง์ํ๋ค(์ถ๊ฐ ๋ถ์์ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์).
arrange(desc(mean_amount)) : ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ mean_amount ์ด์ ๋ด๋ฆผ์ฐจ์(๋์ ๊ฒ๋ถํฐ ๋ฎ์ ๊ฒ๊น์ง)์ผ๋ก ์ ๋ ฌํ๋ค.
slice(1:5) : ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์์ ์ฒ์ 5๊ฐ ํ์ ์ ํํ๋ค. ๋ฐ์ดํฐ๋ store_cd๋ก ๊ทธ๋ฃนํ๋์ด mean ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฝ๋์์ผ๋ฏ๋ก, ๋ชจ๋ ๊ฑฐ๋์์ ํ๊ท ๊ธ์ก์ด ๊ฐ์ฅ ๋์ ๋งค์ฅ์ ์ป์ ์ ์์ต๋๋ค.
์ ์ฒด์ ์ผ๋ก ์ด ์ฝ๋๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ๋ชจ๋ ํธ๋์ญ์ ์์ ํ๊ท ๊ธ์ก์ด ๊ฐ์ฅ ๋์ ๋งค์ฅ์ ์ ํํ๊ณ , ๊ทธ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์์ 5๊ฐ ๋งค์ฅ์ ๋ฐํํ๊ณ ์์ต๋๋ค.
R-028: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๋งค์ฅ ์ฝ๋(store_cd)๋ณ ๋งค์ถ ๊ธ์ก(amount)์ ์ค์๊ฐ์ ๊ณ์ฐํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก TOP5๋ฅผ ํ์ํ๋ผ.
df_receipt %>% group_by(store_cd) %>% summarise(median_amount = median(amount), .groups = "drop") %>% arrange(desc(median_amount)) %>% slice(1:5)
store_cd | median_amount |
---|---|
<chr> | <dbl> |
S13052 | 190 |
S14010 | 188 |
S14050 | 185 |
S13003 | 180 |
S13018 | 180 |
์ค๋ช :
์ด ์ฝ๋์์๋ %>%(ํ์ดํ) ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ df_receipt๋ผ๋ ๋ฐ์ดํฐ ํ๋ ์์ ๋ํด ์ผ๋ จ์ ์ฐ์์ ์ธ ์ฐ์ฐ์ ์ํํ๋ค.
๋ค์์ ๊ฐ ์ฐ์ฐ์ด ๋ฌด์์ ํ๋์ง ์์๋๋ก ์ค๋ช ํ๋ค.
group_by(store_cd): store_cd ์ด๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ฌ ์ดํ ์ฒ๋ฆฌ๋ฅผ ๋งค์ฅ๋ณ๋ก ๋๋์ด ์ํํ๋๋ก ํฉ๋๋ค.
summarise(median_amount = median(amount), .groups = "drop") : ๊ฐ ๊ทธ๋ฃน ๋ด ๋ฐ์ดํฐ์ ์์ฝ์ ์์ฑํ๊ณ , amount ์ด์ ์ค์๊ฐ์ ๊ณ์ฐํ์ฌ median_amount๋ผ๋ ์๋ก์ด ์ด์ ์ ์ฅํ๋ค. .groups = "drop" ์ธ์๋ dplyr์๊ฒ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์์ ๊ทธ๋ฃนํ ์ ๋ณด๋ฅผ ์ญ์ ํ๋๋ก ์ง์ํ๋ค(์ถ๊ฐ ๋ถ์์ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์).
arrange(desc(median_amount)) : ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ median_amount ์ด์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์(๋์ ๊ฒ๋ถํฐ ๋ฎ์ ๊ฒ๊น์ง)์ผ๋ก ์ ๋ ฌํ๋ค.
slice(1:5) : ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์์ ์ฒ์ 5๊ฐ ํ์ ์ ํํ๋ค. ๋ฐ์ดํฐ๋ store_cd๋ก ๊ทธ๋ฃนํ๋์ด median ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฝ๋์์ผ๋ฏ๋ก, ๋ชจ๋ ํธ๋์ญ์ ์์ ์ค๊ฐ๊ฐ์ด ๊ฐ์ฅ ๋์ ๋งค์ฅ์ ์ป์ ์ ์์ต๋๋ค.
์ ์ฒด์ ์ผ๋ก ์ด ์ฝ๋๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ๋ชจ๋ ํธ๋์ญ์ ์์ ๊ฐ์ฅ ์ค๊ฐ๊ฐ์ด ๋์ ๋งค์ฅ์ ์ ํํ๊ณ , ๊ทธ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์์ 5๊ฐ ๋งค์ฅ์ ๋ฐํํ๊ณ ์์ต๋๋ค. ์ด ์ฝ๋์ ์ง๋๋ฒ ์ค๋ช ํ ์ฝ๋์ ์ฐจ์ด์ ์ ์ด ์ฝ๋์์๋ ๊ฐ ๋งค์ฅ์ ๊ธ์ก ๊ฐ์ ์ค์ฌ ๊ฒฝํฅ์ ๊ณ์ฐํ๊ธฐ ์ํด ํ๊ท ํจ์๊ฐ ์๋ ์ค์๊ฐ ํจ์๋ฅผ ์ฌ์ฉํ๋ค๋ ์ ์ ๋๋ค.
R-029: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๋งค์ฅ ์ฝ๋(store_cd)๋ณ๋ก ์ํ ์ฝ๋(product_cd)์ ์ต๋น๊ฐ์ ๊ตฌํ์ฌ 10๊ฑด์ฉ ํ์ํ๋ผ.
# ์ฝ๋ ์์ 1 df_receipt %>% group_by(store_cd, product_cd) %>% summarise(cnt = n(), .groups = "drop_last") %>%filter(cnt == cnt %>%max()) %>% ungroup() %>%slice(1:10)
store_cd | product_cd | cnt |
---|---|---|
<chr> | <chr> | <int> |
S12007 | P060303001 | 72 |
S12013 | P060303001 | 107 |
S12014 | P060303001 | 65 |
S12029 | P060303001 | 92 |
S12030 | P060303001 | 115 |
S13001 | P060303001 | 67 |
S13002 | P060303001 | 78 |
S13003 | P071401001 | 65 |
S13004 | P060303001 | 88 |
S13005 | P040503001 | 36 |
์ค๋ช :
์ด ์ฝ๋๋ dplyr ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ df_receipt๋ผ๋ ๋ฐ์ดํฐ ํ๋ ์์ ๋ํ ๋ฐ์ดํฐ ์กฐ์์ ์ํํ๋ค. ์๋๋ ์ด ์ฝ๋๊ฐ ์ํํ๋ ์์ ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ๋ค.
ํ์ดํ ์ฐ์ฐ์๋ ํ ํจ์์ ์ถ๋ ฅ์ด ๋ค์ ํจ์์ ์ ๋ ฅ์ด ๋๋๋ก ํจ์๋ฅผ ์ฐ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์ดํ ์ฐ์ฐ์์ด๋ค.
group_by ํจ์๋ ๋ฐ์ดํฐ ํ๋ ์์ store_cd์ product_cd๋ก ๊ทธ๋ฃนํํ๋ ํจ์์ด๋ค.
summarise ํจ์๋ ๊ฐ ๊ทธ๋ฃน์ ์์ฝ ํต๊ณ๋ฅผ ๊ณ์ฐํ๋ค. ์ด ๊ฒฝ์ฐ ๊ฐ ๊ทธ๋ฃน์ ํ ์๋ฅผ ๊ณ์ฐํ๊ณ cnt๋ผ๋ ์๋ก์ด ์ด์ ์์ฑํฉ๋๋ค.
.groups = "drop_last" ์ธ์๋ summarise ํจ์์์ ์์ฑ๋ ๋ง์ง๋ง ๊ทธ๋ฃนํ ์์ค, ์ฆ product_cd ๊ทธ๋ฃนํ๋ฅผ ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๋์ค์ ์ต๋ ์๋ก ์ฝ๊ฒ ํํฐ๋งํ ์ ์๋๋ก ํ๊ธฐ ์ํด ์ํ๋ฉ๋๋ค.
filter ํจ์๋ ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ํ์ ์ ํํ๋ค. ์ด ๊ฒฝ์ฐ cnt ์ด์ด ๋ฐ์ดํฐ ํ๋ ์์ cnt ์ด์ ์ต๋๊ฐ๊ณผ ๋์ผํ ํ์ ์ ํํ๊ฒ ๋๋ค.
ungroup ํจ์๋ ๋ฐ์ดํฐ ํ๋ ์์์ ๋ชจ๋ ๊ทธ๋ฃนํ ์์ค์ ์ ๊ฑฐํ๋ค.
slice ํจ์๋ ์์น์ ๋ฐ๋ผ ํ์ ํ์ ์งํฉ์ ์ ํํ๋ค. ์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํ๋ค.
์ฆ, ์ด ์ฝ๋๋ ์ ์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ ๊ณผ ์ํ๋ณ๋ก ๊ทธ๋ฃนํํ๊ณ , ๊ฐ ๊ทธ๋ฃน์ ๊ฐ์๋ฅผ ๊ณ์ฐํ๊ณ , ๊ฐ์๊ฐ ๊ฐ์ฅ ๋ง์ ๊ทธ๋ฃน์ ํํฐ๋งํ์ฌ ์์ 10๊ฐ๋ฅผ ์ ํํ๋ค.
# ์ฝ๋ ์์ 2: which.max() ์ฌ์ฉ (๊ฐ์ฅ ๋น๋ฒํ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ ๋ฐ์ ์, ์ด๋ ํ ๊ฐ๋ก ์ขํ์ง)
# ๊ฑด์ ํ์ ์๋ต
table_product <-table(df_receipt$store_cd,df_receipt$product_cd)
store <- names(table_product[,1])
mode_product <- c()
for (i in 1:length(store)){
mode_product[i] <- names(which.max(table_product[i,]))
}
data.frame(store_cd = store, product_cd = mode_product) %>%
slice(1:10)
store_cd | product_cd |
---|---|
<chr> | <chr> |
S12007 | P060303001 |
S12013 | P060303001 |
S12014 | P060303001 |
S12029 | P060303001 |
S12030 | P060303001 |
S13001 | P060303001 |
S13002 | P060303001 |
S13003 | P071401001 |
S13004 | P060303001 |
S13005 | P040503001 |
์ค๋ช :
์ด ์ฝ๋๋ table ํจ์์ for ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ df_receipt ๋ฐ์ดํฐ ํ๋ ์์์ ๊ฐ ๋งค์ฅ์ ๊ฐ ์ํ ์ฝ๋์ ๋ชจ๋(๊ฐ์ฅ ๋น๋ฒํ ๊ฐ)๋ฅผ ๊ตฌํฉ๋๋ค.
๋ค์์ ์ด ์ฝ๋๊ฐ ์ํํ๋ ์์ ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํฉ๋๋ค.
table ํจ์๋ df_receipt์ store_cd์ product_cd์ ๊ฐ ์กฐํฉ์ ๋ํ ์นด์ดํธ ๋ถํ ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ table_product๋ผ๋ ๊ฐ์ฒด๋ ํ์ด ๊ฐ ๋งค์ฅ, ์ด์ด ๊ฐ ์ํ ์ฝ๋์ ํด๋นํ๋ ํ๋ ฌ์ด ๋๋ค.
names ํจ์๋ table_product ํ๋ ฌ์ ์ฒซ ๋ฒ์งธ ์ด์์ ๋งค์ฅ ์ฝ๋๋ฅผ ์ถ์ถํ์ฌ store๋ผ๋ ๋ฌธ์ ๋ฒกํฐ๋ก ์ ์ฅํ๋ค.
๊ฐ ์์ ์ ๊ฐ ์ํ ์ฝ๋์ ๋ชจ๋๋ฅผ ์ ์ฅํ๊ธฐ ์ํด mode_product๋ผ๋ ๋น ๋ฒกํฐ๊ฐ ์์ฑ๋๋ค.
for ๋ฃจํ๋ store์ ๊ฐ ๋งค์ฅ์ ๋ฐ๋ณตํ์ฌ ํด๋น ๋งค์ฅ์ ๊ฐ ์ํ ์ฝ๋์ ๋ชจ๋๋ฅผ ๊ตฌํ๊ณ , which.max ํจ์๋ก table_product ํ๋ ฌ์ ๊ฐ ํ์ ์ต๋ ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌํ๊ณ , names ํจ์๋ก ํด๋น ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง ์ํ ์ฝ๋๋ฅผ ์ถ์ถํ๋ค. ์ป์ด์ง ์ํ ์ฝ๋๋ mode_product ๋ฒกํฐ์ ์ ์ฅ๋๋ค.
store_cd์ product_cd ๋ ๊ฐ์ ์ปฌ๋ผ์ ๊ฐ์ง ๋ฐ์ดํฐ ํ๋ ์์ด ์์ฑ๋๋ฉฐ, store_cd ์ปฌ๋ผ์๋ store ๋ฒกํฐ์ ๊ฐ์ด, product_cd ์ปฌ๋ผ์๋ mode_product ๋ฒกํฐ์ ๊ฐ์ด ์ ์ฅ๋๋ค.
๋ํ %>% ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ํ๋ ์์ slice ํจ์๋ก ํ์ดํํ์ฌ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํ๋ค.
์ฆ, ์ด ์ฝ๋๋ ์ ์ฒด์ ์ผ๋ก df_receipt์์ ๊ฐ ๋งค์ฅ์ ๊ฐ ์ํ ์ฝ๋์ ๋ชจ๋๋ฅผ ๊ตฌํ๊ณ , ์ด ๊ฐ์ผ๋ก ๋ฐ์ดํฐ ํ๋ ์์ ๋ง๋ค์ด ์์ 10๊ฐ๋ฅผ ์ ํํ๋ค.
R-030: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๋งค์ฅ ์ฝ๋(store_cd)๋ณ ๋งค์ถ ๊ธ์ก(amount)์ ๋ถ์ฐ์ ๊ณ์ฐํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก 5๊ฐ์ฉ ํ์ํ์์ค.
var_sample <- function(x){ var(x) * (length(x) - 1) / length(x) }
df_receipt %>%
group_by(store_cd) %>%
summarise(var_amount = var_sample(amount), .groups = "drop") %>% arrange(desc(var_amount)) %>%
slice(1:5)
store_cd | var_amount |
---|---|
<chr> | <dbl> |
S13052 | 440088.7 |
S14011 | 306314.6 |
S14034 | 296920.1 |
S13001 | 295432.0 |
S13015 | 295294.4 |
ย
์ค๋ช :
์ด ์ฝ๋๋ dplyr ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ๊ฐ ๋งค์ฅ๋ณ ๊ธ์ก ๋ณ์์ ์ํ ๋ถ์ฐ์ ๊ณ์ฐํ ํ, ๋ถ์ฐ์ด ๊ฐ์ฅ ํฐ ์์ 5๊ฐ ๋งค์ฅ์ ์ ํํฉ๋๋ค.
๋ค์์ ์ด ์ฝ๋๊ฐ ์ํํ๋ ์์ ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ ๊ฒ์ ๋๋ค.
var_sample ํจ์๊ฐ ์ ์๋์ด ์์ผ๋ฉฐ, var(x) * (length(x) - 1) / length(x)๋ผ๋ ์์ ์ฌ์ฉํ์ฌ ๊ฐ x์ ๋ฒกํฐ์ ๋ํ ํ๋ณธ ๋ถ์ฐ์ ๊ณ์ฐํฉ๋๋ค. ์ด ์์ ๋ชจ์ง๋จ์ ๋ถ์ฐ์ ํธ๊ฒฌ ์์ด ์ถ์ ํ๊ธฐ ์ํด length(x) ๋์ length(x)๋ฅผ length(x) - 1๋ก ๋๋์ด ๋ถ์ฐ์ ์กฐ์ ํ๋ค.
์ฐ์ฐ์ %>%๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ์ฒด์ธ์ ๋ค์ ํจ์๋ก ํ์ดํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
group_by ํจ์๋ store_cd๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
summarise ํจ์๋ ๊ฐ ๊ทธ๋ฃน์ ์์ฝ ํต๊ณ๋ฅผ ๊ณ์ฐํ๋ค. ์ด ๊ฒฝ์ฐ var_sample ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ทธ๋ฃน์ ๊ธ์ก ๋ณ์์ ์ํ ๋ถ์ฐ์ ๊ณ์ฐํ๊ณ var_amount๋ผ๋ ์๋ก์ด ์ด์ ์์ฑํฉ๋๋ค.
.groups = "drop" ์ธ์๋ ์ถ๋ ฅ์์ ๊ทธ๋ฃนํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ์ฌ ๊ทธ๋ฃนํ๋ tibble์ด ์๋ ํํํ ๋ฐ์ดํฐ ํ๋ ์์ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
arrange ํจ์๋ var_amount๋ก ๋ฐ์ดํฐ ํ๋ ์์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋์ด ๋ถ์ฐ์ด ๊ฐ์ฅ ๋์ ๋งค์ฅ์ด ๋จผ์ ํ์๋๋๋ก ํ๋ค.
์ฐ์ฐ์ %>%๋ ์ ๋ ฌ๋ ๋ฐ์ดํฐ ํ๋ ์์ slice ํจ์๋ก ํ์ดํํ์ฌ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 5์ค์ ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ฆ, ์ด ์ฝ๋๋ ์ ์ฒด์ ์ผ๋ก ๋งค์ฅ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๊ณ , ๊ทธ๋ฃน๋ณ๋ก ๊ธ์ก ๋ณ์์ ์ํ ๋ถ์ฐ์ ๊ณ์ฐํ๊ณ , ๋ถ์ฐ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ , ์์ 5๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ๋ค.
R-031: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๋งค์ฅ ์ฝ๋(store_cd)๋ณ ๋งค์ถ ๊ธ์ก(amount)์ ํ์คํธ์ฐจ๋ฅผ ๊ณ์ฐํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก 5๊ฑด์ฉ ํ์ํ๋ผ.
var_sample <- function(x){ var(x)*(length(x)-1)/length(x) }
std_sample <- function(x){ sqrt(var_sample(x)) }
head(
df_receipt %>%
group_by(store_cd) %>%
summarise(std_amount = std_sample(amount), .groups = "drop") %>%
arrange(desc(std_amount)) ,
n = 5
)
store_cd | std_amount |
---|---|
<chr> | <dbl> |
S13052 | 663.3918 |
S14011 | 553.4569 |
S14034 | 544.9037 |
S13001 | 543.5366 |
S13015 | 543.4099 |
์ค๋ช :
์ด ์ฝ๋๋ dplyr ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ๊ฐ ๋งค์ฅ์ ๊ธ์ก ๋ณ์์ ์ํ ํ์คํธ์ฐจ๋ฅผ ๊ณ์ฐํ๊ณ ํ์คํธ์ฐจ๊ฐ ๊ฐ์ฅ ๋์ ์์ 5๊ฐ ๋งค์ฅ์ ์ ํํฉ๋๋ค.
๋ค์์ ์ด ์ฝ๋๊ฐ ๋ฌด์์ ํ๋์ง ์์๋๋ก ์ค๋ช ํ๋ค.
var_sample ํจ์๊ฐ ์ ์๋์ด ์์ผ๋ฉฐ, var(x) * (length(x) - 1) / length(x)๋ผ๋ ์์ ์ฌ์ฉํ์ฌ ๊ฐ x์ ๋ฒกํฐ์ ๋ํ ํ๋ณธ ๋ถ์ฐ์ ๊ณ์ฐํ๊ณ ์์ต๋๋ค. ์ด ์์ ๋ชจ์ง๋จ์ ๋ถ์ฐ์ ํธ๊ฒฌ ์์ด ์ถ์ ํ๊ธฐ ์ํด length(x) ๋์ length(x)๋ฅผ length(x) - 1๋ก ๋๋์ด ๋ถ์ฐ์ ์กฐ์ ํ๋ค.
std_sample ํจ์๊ฐ ์ ์๋์ด ์์ผ๋ฉฐ, sqrt(var_sample(x))๋ผ๋ ์์ ์ฌ์ฉํ์ฌ ๊ฐ ๋ฒกํฐ x์ ํ๋ณธ ํ์คํธ์ฐจ๋ฅผ ๊ณ์ฐํ๋ค.
head ํจ์๋ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 5๊ฐ ํ์ ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ฐ์ฐ์ %>%๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ์ฒด์ธ์ ๋ค์ ํจ์๋ก ํ์ดํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
group_by ํจ์๋ ๋ฐ์ดํฐ๋ฅผ store_cd๋ก ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
summarise ํจ์๋ ๊ฐ ๊ทธ๋ฃน์ ์์ฝ ํต๊ณ๋ฅผ ๊ณ์ฐํ๋ค. ์ด ๊ฒฝ์ฐ std_sample ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ทธ๋ฃน์ ๊ธ์ก ๋ณ์์ ์ํ ํ์ค ํธ์ฐจ๋ฅผ ๊ณ์ฐํ๊ณ std_amount๋ผ๋ ์ ์ด์ ์์ฑํฉ๋๋ค.
.groups = "drop" ์ธ์๋ ์ถ๋ ฅ์์ ๊ทธ๋ฃนํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ์ฌ ๊ทธ๋ฃนํ ๋ tibble์ด ์๋ ํํํ ๋ฐ์ดํฐ ํ๋ ์์ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
arrange ํจ์๋ ๋ฐ์ดํฐ ํ๋ ์์ std_amount๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ํ์คํธ์ฐจ๊ฐ ๊ฐ์ฅ ๋์ ๋งค์ฅ์ด ๋จผ์ ํ์๋๋๋ก ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
n = 5 ์ธ์๋ ์ถ๋ ฅ์ ์์ 5 ๊ฐ ํ์ผ๋ก ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฆ, ์ด ์ฝ๋๋ ์ ์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋งค์ฅ๋ณ๋ก ๊ทธ๋ฃนํํ๊ณ , ๊ทธ๋ฃน๋ณ๋ก ๊ธ์ก ๋ณ์์ ์ํ ํ์ค ํธ์ฐจ๋ฅผ ๊ณ์ฐํ๊ณ , ํ์ค ํธ์ฐจ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ ๋ ฌํ๊ณ , ์์ 5๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ๋ค.
R-032: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋งค์ถ ๊ธ์ก(amount)์ ๋ํด 25% ๋จ์๋ก ๋ฐฑ๋ถ์์ ๊ฐ์ ๊ตฌํ๋ผ.
df_receipt %>%
summarise
(amount_25per = quantile(amount, 0.25),
amount_50per = quantile(amount, 0.5),
amount_75per = quantile(amount, 0.75),
amount_100per = quantile(amount, 1.0))
amount_25per | amount_50per | amount_75per | amount_100per |
---|---|---|---|
<dbl> | <dbl> | <dbl> | <dbl> |
102 | 170 | 288 | 10925 |
์ค๋ช :
์ด ์ฝ๋๋ dplyr ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ df_receipt ๋ฐ์ดํฐ ํ๋ ์์์ ๊ธ์ก ๋ณ์์ ์ฌ๋ถ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๋ค์์ ์ด ์ฝ๋๊ฐ ์ํํ๋ ์์ ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํฉ๋๋ค.
์ฐ์ฐ์ %>%๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ์ฒด์ธ์ ๋ค์ ํจ์๋ก ํ์ดํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
summarise ํจ์๋ ๋ฐ์ดํฐ ํ๋ ์์ ์์ฝ ํต๊ณ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ถ์์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ๋ณ์์ 25, 50(์ค์๊ฐ), 75, 100๋ฒ์งธ ๋ฐฑ๋ถ์์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ 1ํ 4์ด์ด๋ฉฐ, ์ด ์ด๋ฆ์ amount_25per, amount_50per, amount_75per, amount_100per์ด๋ฉฐ, ํด๋น ์ฌ๋ถ์์ ๊ฐ๋ ์์ต๋๋ค.
์ฆ, ์ ์ฒด์ ์ผ๋ก ์ด ์ฝ๋๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์์ amount ๋ณ์์ ์ฌ๋ถ์๋ฅผ ๊ณ์ฐํ๊ณ ์ฌ๋ถ์ ๊ฐ์ ํฌํจํ ์์ฝ ๋ฐ์ดํฐ ํ๋ ์์ ๋ฐํํ๋ค.
R-033: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๋งค์ฅ ์ฝ๋(store_cd)๋ณ ๋งค์ถ ๊ธ์ก(amount)์ ํ๊ท ์ ๊ณ์ฐํ์ฌ 330๊ฐ ์ด์์ ์ถ์ถํ๋ผ.
df_receipt %>%
group_by(store_cd) %>%
summarise(mean_amount = mean(amount), .groups = "drop") %>%
filter(mean_amount >= 330)
store_cd | mean_amount |
---|---|
<chr> | <dbl> |
S12013 | 330.1941 |
S13001 | 348.4704 |
S13003 | 350.9155 |
S13004 | 330.9439 |
S13015 | 351.1120 |
S13019 | 330.2086 |
S13020 | 337.8799 |
S13052 | 402.8675 |
S14010 | 348.7913 |
S14011 | 335.7183 |
S14026 | 332.3406 |
S14045 | 330.0821 |
S14047 | 330.0771 |
์ค๋ช :
์ด ์ฝ๋๋ dplyr ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ store_cd๋ก ๊ทธ๋ฃนํํ์ฌ ๊ฐ ๊ทธ๋ฃน์ ํ๊ท ๊ธ์ก์ ๊ณ์ฐํ๊ณ , ํ๊ท ๊ธ์ก์ด 330 ์ด์์ธ ๊ทธ๋ฃน๋ง ํฌํจํ๋๋ก ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ํํฐ๋งํฉ๋๋ค.
๋ค์์ ์ด ์ฝ๋๊ฐ ์ํํ๋ ์์ ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ ๊ฒ์ ๋๋ค.
์ฐ์ฐ์ %>%๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ์ฒด์ธ์ ๋ค์ ํจ์๋ก ํ์ดํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
group_by ํจ์๋ store_cd๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
summarise ํจ์๋ ๊ฐ ๊ทธ๋ฃน์ ์์ฝ ํต๊ณ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ mean ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ทธ๋ฃน์ ํ๊ท ๊ธ์ก์ ๊ณ์ฐํ๊ณ mean_amount๋ผ๋ ์๋ก์ด ์ด์ ์์ฑํฉ๋๋ค.
.groups = "drop" ์ธ์๋ ์ถ๋ ฅ์์ ๊ทธ๋ฃนํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ์ฌ ๊ทธ๋ฃนํ ๋ tibble์ด ์๋ ํํํ ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
filter ํจ์๋ mean_amount๊ฐ 330 ์ด์์ธ ํ๋ง ํฌํจํ๋๋ก ๋ฐ์ดํฐ ํ๋ ์์ ๋ถ๋ถ ์งํฉํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฆ, ์ด ์ฝ๋๋ ์ ์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ store_cd๋ก ๊ทธ๋ฃนํํ์ฌ ๊ฐ ๊ทธ๋ฃน์ ํ๊ท ๊ธ์ก์ ๊ณ์ฐํ๊ณ ํ๊ท ๊ธ์ก์ด 330 ์ด์์ธ ๊ทธ๋ฃน๋ง ์ ํํ๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์๋ ๊ฐ ๋์ ๋งค์ฅ์ ๋ํด ํ๋์ ํ์ด ํฌํจ๋๋ฉฐ, ๋งค์ฅ ์ฝ๋์ ํ๊ท ๊ธ์ก์ด ํ์๋ฉ๋๋ค.
R-034: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๊ณ ๊ฐ ID(customer_id)๋ณ๋ก ๋งค์ถ ๊ธ์ก(amount)์ ํฉ์ฐํ์ฌ ์ ์ฒด ๊ณ ๊ฐ์ ํ๊ท ์ ๊ตฌํ์์ค. ๋จ, ๊ณ ๊ฐ ID๊ฐ โZโ๋ก ์์ํ๋ ๊ฒ์ ๋นํ์์ ์๋ฏธํ๋ฏ๋ก ์ ์ธํ์ฌ ๊ณ์ฐํ๋ค.
df_mean <- df_receipt %>%
filter(!grepl("^Z", customer_id)) %>%
group_by(customer_id) %>%
summarise(sum_amount = sum(amount), .groups = "drop") %>%
summarise(mean_amount = mean(sum_amount))
df_mean$mean_amount
2547.74223452926
์ค๋ช :
์ด ์ฝ๋๋ dplyr ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ customer_id๊ฐ "Z"๋ก ์์ํ๋ ๊ณ ๊ฐ์ ์ ์ธํ ํ ๊ฐ ๊ณ ๊ฐ์ ํ๊ท ์๋น์ก์ ๊ณ์ฐํ๋ค.
์๋๋ ์ด ์ฝ๋๊ฐ ํ๋ ์ผ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ๋ค.
์ฐ์ฐ์ %>%๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ์ฒด์ธ์ ๋ค์ ํจ์๋ก ํ์ดํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
filter ํจ์๋ customer_id๊ฐ ๋ฌธ์ "Z"๋ก ์์ํ๋ ํ์ ์ ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
group_by ํจ์๋ customer_id๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
summarise ํจ์๋ ๊ฐ ๊ทธ๋ฃน์ ์์ฝ ํต๊ณ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ sum ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ๊ธ์ก์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๊ณ sum_amount๋ผ๋ ์๋ก์ด ์ด์ ์์ฑํ๊ณ ์์ต๋๋ค.
.groups = "drop" ์ธ์๋ ์ถ๋ ฅ์์ ๊ทธ๋ฃนํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ์ฌ ๊ทธ๋ฃนํ ๋ ibble์ด ์๋ ํํํ ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋ ๋ค๋ฅธ summarise ํจ์๋ ์ ์ฒด ๊ณ ๊ฐ์ sum_amount์ ํ๊ท ๊ฐ์ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๊ฒฐ๊ณผ mean_amount ๊ฐ์ $mean_amount๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ถ๋ฉ๋๋ค.
์ ์ฒด์ ์ผ๋ก ์ด ์ฝ๋๋ customer_id๊ฐ "Z"๋ก ์์ํ๋ ํ์ ์ ์ธํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํ๊ณ , customer_id๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๊ณ , ๊ฐ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ์ด ๊ธ์ก์ ๊ณ์ฐํ๊ณ , ๋ชจ๋ ๊ณ ๊ฐ์ ๋ํ ํ๊ท sum_amount๋ฅผ ๊ณ์ฐํ๊ณ , ๊ฒฐ๊ณผ์ ํ๊ท ๊ฐ์ ๋ฐํํฉ๋๋ค. ์๋ค. ๊ฒฐ๊ณผ ์ถ๋ ฅ์ ๊ฐ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ํ๊ท ๊ธ์ก์ ๋ํ๋ด๋ ๋จ์ผ ์์น์ด๋ค.
R-035: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋ํด ๊ณ ๊ฐ ID(customer_id)๋ณ๋ก ๋งค์ถ ๊ธ์ก(amount)์ ํฉ์ฐํ์ฌ ์ ์ฒด ๊ณ ๊ฐ์ ํ๊ท ์ ๊ตฌํ๊ณ , ํ๊ท ์ด์ ์ผํ์ ํ ๊ณ ๊ฐ์ ์ถ์ถํ์ฌ 10๊ฑด์ฉ ํ์ํ์์ค. ๋จ, ๊ณ ๊ฐ ID๊ฐ โZโ๋ก ์์ํ๋ ๊ฒ์ ๋นํ์์ ์๋ฏธํ๋ฏ๋ก ์ ์ธํ์ฌ ๊ณ์ฐํ๋ค.
df_sum <- df_receipt %>%
filter(!grepl("^Z", customer_id)) %>%
group_by(customer_id) %>%
summarise(sum_amount = sum(amount), .groups = "drop")
df_mean <- df_sum %>%
summarise(mean_amount = mean(sum_amount))
df_sum %>%
filter(sum_amount >= df_mean$mean_amount) %>%
slice(1:10)
customer_id | sum_amount |
---|---|
<chr> | <int> |
CS001115000010 | 3044 |
CS001205000006 | 3337 |
CS001214000009 | 4685 |
CS001214000017 | 4132 |
CS001214000052 | 5639 |
CS001215000040 | 3496 |
CS001304000006 | 3726 |
CS001305000005 | 3485 |
CS001305000011 | 4370 |
CS001315000180 | 3300 |
์ค๋ช :
์ด ์ฝ๋๋ dplyr ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ customer_id๊ฐ 'Z'๋ก ์์ํ๋ ๊ณ ๊ฐ์ ์ ์ธํ ํ, ์ ์ฒด ๊ณ ๊ฐ์ ํ๊ท ์ฌ์ฉ์ก ์ด์์ ์ฌ์ฉํ ๊ณ ๊ฐ์ ํํฐ๋งํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์ฌ์ฉ๊ธ์ก์ ๊ธฐ์ค์ผ๋ก ์์ 10๋ช ์ ๊ณ ๊ฐ์ ์ ํํฉ๋๋ค.
๋ค์์ ์ด ์ฝ๋๊ฐ ํ๋ ์ผ์ ์์๋๋ก ์ค๋ช ํ ๊ฒ์ ๋๋ค.
์ฐ์ฐ์ %>%๋ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ์ฒด์ธ์ ๋ค์ ํจ์๋ก ํ์ดํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
filter ํจ์๋ customer_id๊ฐ "Z"๋ก ์์ํ๋ ํ์ ์ ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
group_by ํจ์๋ customer_id๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
summarise ํจ์๋ ๊ฐ ๊ทธ๋ฃน์ ์์ฝ ํต๊ณ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ sum ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ๊ธ์ก์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๊ณ sum_amount๋ผ๋ ์๋ก์ด ์ด์ ์์ฑํ๊ณ ์์ต๋๋ค.
.groups = "drop" ์ธ์๋ ์ถ๋ ฅ์์ ๊ทธ๋ฃนํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ์ฌ ๊ทธ๋ฃนํ ๋ ibble์ด ์๋ ํํํ ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
df_sum ๋ฐ์ดํฐ ํ๋ ์์ ์์ ์์ ์ ์ถ๋ ฅ์ ์ ์ฅํ์ฌ ์์ฑ๋ฉ๋๋ค.
summarise ํจ์๋ ๋ค์ df_sum์ ๋ชจ๋ ๊ณ ๊ฐ์ sum_amount์ ํ๊ท ๊ฐ์ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๊ฒฐ๊ณผ mean_amount ๊ฐ์ $mean_amount๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ถํ๋ค.
์ฐ์ฐ์ %>%๋ df_sum์ ์ฒด์ธ์ ๋ค์ ํจ์๋ก ํ์ดํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
ํํฐ ํจ์๋ sum_amount๊ฐ 7๋จ๊ณ์์ ๊ณ์ฐ๋ mean_amount๋ณด๋ค ํฐ ํ๋ง ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ฌ๋ผ์ด์ค ํจ์๋ ์๋ ๋ฐ์ดํฐ ํ๋ ์์ ์์์ ๋ฐ๋ผ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์์ 10 ๊ฐ ํ๋ง ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฆ, ์ด ์ฝ๋๋ ์ ์ฒด์ ์ผ๋ก customer_id๊ฐ "Z"๋ก ์์ํ๋ ํ์ ์ ์ธํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํ๊ณ , customer_id๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๊ณ , ๊ฐ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ์ด ๊ธ์ก์ ๊ณ์ฐํ๊ณ , ์ ์ฒด ๊ณ ๊ฐ์ ํ๊ท sum_amount๋ฅผ ๊ณ์ฐํ๊ณ , ์ฌ์ฉํ ์ด ๊ธ์ก์ด ์ ์ฒด ๊ณ ๊ฐ์ ํ๊ท ๊ธ์ก ์ด์์ ๊ณ ๊ฐ ๋ฐ์ดํฐ ํ๋ ์ ์์ฑ, ์ฌ์ฉํ ์ด ๊ธ์ก์ ๊ธฐ์ค์ผ๋ก ์์ 10๋ช ์ ๊ณ ๊ฐ์ ์ ํํ๋ ๊ฒ์ ๋๋ค.
R-036: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์ ๋งค์ฅ ๋ฐ์ดํฐ(df_store)๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๊ฒฐํฉํ์ฌ ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ์ ๋ชจ๋ ํญ๋ชฉ๊ณผ ๋งค์ฅ ๋ฐ์ดํฐ์ ๋งค์ฅ๋ช (store_name)์ 10๊ฑด์ฉ ํ์ํ๋ผ.
inner_join(df_receipt, df_store[c("store_cd", "store_name")], by = "store_cd") %>% slice(1:10)
sales_ymd | sales_epoch | store_cd | receipt_no | receipt_sub_no | customer_id | product_cd | quantity | amount | store_name |
---|---|---|---|---|---|---|---|---|---|
<int> | <int> | <chr> | <int> | <int> | <chr> | <chr> | <int> | <int> | <chr> |
20181103 | 1541203200 | S14006 | 112 | 1 | CS006214000001 | P070305012 | 1 | 158 | ่ใ่ฐทๅบ |
20181118 | 1542499200 | S13008 | 1132 | 2 | CS008415000097 | P070701017 | 1 | 81 | ๆๅๅบ |
20170712 | 1499817600 | S14028 | 1102 | 1 | CS028414000014 | P060101005 | 1 | 170 | ไบใๆฉๅบ |
20190205 | 1549324800 | S14042 | 1132 | 1 | ZZ000000000000 | P050301001 | 1 | 25 | ๆฐๅฑฑไธๅบ |
20180821 | 1534809600 | S14025 | 1102 | 2 | CS025415000050 | P060102007 | 1 | 90 | ๅคงๅๅบ |
20190605 | 1559692800 | S13003 | 1112 | 1 | CS003515000195 | P050102002 | 1 | 138 | ็ๆฑๅบ |
20181205 | 1543968000 | S14024 | 1102 | 2 | CS024514000042 | P080101005 | 1 | 30 | ไธ็ฐๅบ |
20190922 | 1569110400 | S14040 | 1102 | 1 | CS040415000178 | P070501004 | 1 | 128 | ้ทๆดฅ็ฐๅบ |
20170504 | 1493856000 | S13020 | 1112 | 2 | ZZ000000000000 | P071302010 | 1 | 770 | ๅๆกไปฒๅๅบ |
20191010 | 1570665600 | S14027 | 1102 | 1 | CS027514000015 | P071101003 | 1 | 680 | ๅ่คๆฒขๅบ |
์ค๋ช :
์ด ์ฝ๋๋ df_receipt์ df_store์ ๋ ๋ฐ์ดํฐ ํ๋ ์ ์ฌ์ด์์ ๊ณตํต ์ด "store_cd"๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ถ ๊ฒฐํฉ ์์ ์ ์ํํ๋ค. ์ด ์์ ์ ๊ฒฐ๊ณผ๋ slice() ํจ์๋ก ์ ์ก๋์ด ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10๊ฐ์ ํ์ด ์ ํ๋ฉ๋๋ค.
์ด์ ์ฝ๋๋ฅผ ๋จ๊ณ๋ณ๋ก ๋ถํดํด ๋ณด๊ฒ ์ต๋๋ค.
inner_join(df_receipt, df_store[c("store_cd", "store_name")], by = "store_cd"): df_receipt ๋ฐ์ดํฐ ํ๋ ์๊ณผ "store_cd"์ "store_name" ์ด๋ง ํฌํจํ๋ df_store์ ํ์ ์งํฉ์ ๊ฒฐํฉํฉ๋๋ค. store์ ํ์ ์งํฉ๊ณผ df_store ๋ฐ์ดํฐ ํ๋ ์ ๊ฐ์ ๋ด๋ถ ๋ฐ์ธ๋ฉ์ ์ํํ๋ค. ๊ฒฐํฉ์ ๋ ๋ฐ์ดํฐ ํ๋ ์์ ๋ชจ๋ ์กด์ฌํ๋ "store_cd" ์ด์ ๋ํด ์ํ๋๋ค. ๊ฒฐ๊ณผ๋ ๋ ๋ฐ์ดํฐ ํ๋ ์์ "store_cd" ์ปฌ๋ผ์ด ์ผ์นํ๋ ๋ชจ๋ ํ์ ํฌํจํ๋ ์๋ก์ด ๋ฐ์ดํฐ ํ๋ ์์ด๋ค.
%>%: ์ด์ ๋ช ๋ น์ ์ถ๋ ฅ์ ๋ฐ์ ๋ค์ ๋ช ๋ น์ ์ ๋ ฅ์ผ๋ก ํ์ดํํ๋ ํ์ดํ ์ฐ์ฐ์์ด๋ค.
slice(1:10): ์ด ํจ์๋ ์ด์ ๋ช ๋ น์์ ์ป์ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํ๋ค.
์ฆ, ์ด ์ฝ๋์ ์ ์ฒด ๋ชฉ์ ์ df_receipt์ df_store์ ํ์ ์งํฉ ๊ฐ์ ๋ด๋ถ ๊ฒฐํฉ ์์ ๊ฒฐ๊ณผ์ ์ฒ์ 10 ์ค์ ์ ํํ๋ ๊ฒ์ ๋๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ๋ ๋ฐ์ดํฐ ํ๋ ์์ "store_cd"์ด์ด ์ผ์นํ๋ ํ๋ง ํฌํจํ๋ฉฐ, df_store์ "store_cd"์ "store_name"์ด๊ณผ df_receipt์ ๋ชจ๋ ์ด์ ํฌํจํ๊ฒ ๋๋ค.
ย
R-037: ์ํ ๋ฐ์ดํฐ(df_product)์ ์นดํ ๊ณ ๋ฆฌ ๋ฐ์ดํฐ(df_category)๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๊ฒฐํฉํ์ฌ ์ํ ๋ฐ์ดํฐ์ ์ ์ฒด ํญ๋ชฉ๊ณผ ์นดํ ๊ณ ๋ฆฌ ๋ฐ์ดํฐ์ ์นดํ ๊ณ ๋ฆฌ ์๋ถ๋ฅ ์ด๋ฆ(category_small_name) 10๊ฐ๋ฅผ ํ์ํ๋ผ.
inner_join(df_product, df_category[c("category_small_cd", "category_small_name")], by = "category_small_cd") %>% slice(1:10)
product_cd | category_major_cd | category_medium_cd | category_small_cd | unit_price | unit_cost | category_small_name |
---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <int> | <int> | <chr> |
P040101001 | 04 | 0401 | 040101 | 198 | 149 | ๅผๅฝ้ก |
P040101002 | 04 | 0401 | 040101 | 218 | 164 | ๅผๅฝ้ก |
P040101003 | 04 | 0401 | 040101 | 230 | 173 | ๅผๅฝ้ก |
P040101004 | 04 | 0401 | 040101 | 248 | 186 | ๅผๅฝ้ก |
P040101005 | 04 | 0401 | 040101 | 268 | 201 | ๅผๅฝ้ก |
P040101006 | 04 | 0401 | 040101 | 298 | 224 | ๅผๅฝ้ก |
P040101007 | 04 | 0401 | 040101 | 338 | 254 | ๅผๅฝ้ก |
P040101008 | 04 | 0401 | 040101 | 420 | 315 | ๅผๅฝ้ก |
P040101009 | 04 | 0401 | 040101 | 498 | 374 | ๅผๅฝ้ก |
P040101010 | 04 | 0401 | 040101 | 580 | 435 | ๅผๅฝ้ก |
์ค๋ช
์ด ์ฝ๋๋ df_product์ df_category์ ๋ ๋ฐ์ดํฐ ํ๋ ์ ์ฌ์ด์์ ๊ณตํต ์ด 'category_small_cd'๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ถ ๊ฒฐํฉ ์ฐ์ฐ์ ์ํํ๋ค. ์ด ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ slice() ํจ์๋ก ํ์ดํ๋์ด ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํ๋ค.
์ด์ ์ฝ๋๋ฅผ ๋จ๊ณ๋ณ๋ก ๋ถํดํด ๋ณด์.
inner_join(df_product, df_category[c("category_small_cd", "category_small_name")], by = "category_small_cd"): ์ด๊ฒ์ df_product ๋ฐ์ดํฐ ํ๋ ์๊ณผ " category_small_cd" ๋ฐ "category_small_name" ์ปฌ๋ผ๋ง ํฌํจํ๋ df_category์ ํ์ ์งํฉ ๊ฐ ๋ด๋ถ ๋ฐ์ธ๋ฉ์ ์ํํ๋ค. ๊ฒฐํฉ์ ๋ ๋ฐ์ดํฐ ํ๋ ์์ ์กด์ฌํ๋ "category_small_cd" ์ปฌ๋ผ์ ๋ํด ์ํ๋๋ค. ๊ฒฐ๊ณผ๋ ๋ ๋ฐ์ดํฐ ํ๋ ์์ "category_small_cd" ์ปฌ๋ผ์ด ์ผ์นํ๋ ๋ชจ๋ ํ์ ํฌํจํ๋ ์๋ก์ด ๋ฐ์ดํฐ ํ๋ ์์ด ๋๋ค.
%>%: ์ด์ ๋ช ๋ น์ ์ถ๋ ฅ์ ๋ฐ์ ๋ค์ ๋ช ๋ น์ ์ ๋ ฅ์ผ๋ก ํ์ดํํ๋ ํ์ดํ ์ฐ์ฐ์์ด๋ค.
slice(1:10) : ์ด ํจ์๋ ์ด์ ๋ช ๋ น์์ ์ป์ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํ๋ค.
์ฆ, ์ด ์ฝ๋์ ์ ์ฒด ๋ชฉ์ ์ df_product์ df_category์ ํ์ ์งํฉ ๊ฐ์ ๋ด๋ถ ๊ฒฐํฉ ์์ ๊ฒฐ๊ณผ์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํ๋ ๊ฒ์ด๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ๋ ๋ฐ์ดํฐ ํ๋ ์์ "category_small_cd" ์ด์ด ์ผ์นํ๋ ํ๋ง ํฌํจํ๊ณ , df_category์ "category_small_cd" ๋ฐ "category_small_name" ์ด๊ณผ df_product์ ๋ชจ๋ ์ปฌ๋ผ์ ๊ฐ์ง๊ฒ ๋๋ค.
ย
R-038: ๊ณ ๊ฐ ๋ฐ์ดํฐ(df_customer)์ ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์์ ๊ณ ๊ฐ๋ณ ๋งค์ถ ๊ธ์ก์ ์ดํฉ์ ๊ตฌํ์ฌ 10๊ฑด์ ํ์ํ์์ค. ๋จ, ํ๋งค ์ค์ ์ด ์๋ ๊ณ ๊ฐ์ ๋ํด์๋ ํ๋งค๊ธ์ก์ 0์ผ๋ก ํ์ํ๋ค. ๋ํ, ๊ณ ๊ฐ์ ์ฑ๋ณ ์ฝ๋(gender_cd)๊ฐ ์ฌ์ฑ(1)์ธ ๊ณ ๊ฐ์ ๋์์ผ๋ก ํ๋ฉฐ, ๋นํ์(๊ณ ๊ฐ ID๊ฐ โZโ๋ก ์์ํ๋ ๊ณ ๊ฐ)์ ์ ์ธํ๋ค.
df_sum <- df_receipt %>%
group_by(customer_id) %>%
summarise(sum_amount = sum(amount), .groups = "drop")
df_target <- df_customer %>%
filter(gender_cd == "1" & !grepl("^Z", customer_id))
left_join(df_target["customer_id"], df_sum, by = "customer_id") %>%
replace_na(list(sum_amount = 0)) %>% slice(1:10)
customer_id | sum_amount |
---|---|
<chr> | <dbl> |
CS021313000114 | 0 |
CS031415000172 | 5088 |
CS028811000001 | 0 |
CS001215000145 | 875 |
CS015414000103 | 3122 |
CS033513000180 | 868 |
CS035614000014 | 0 |
CS011215000048 | 3444 |
CS009413000079 | 0 |
CS040412000191 | 210 |
์ค๋ช :
์ด ์ฝ๋์์๋ ๊ณ ๊ฐ ๋ฐ์ดํฐ์ ์์ฝํ๋ฅผ ์ป๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ฒ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ด ๊ฒฐ๊ณผ๋ฅผ slice() ํจ์์ ์ ๋ฌํ์ฌ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํฉ๋๋ค.
์ด์ ์ฝ๋๋ฅผ ๋จ๊ณ๋ณ๋ก ๋ถํดํด ๋ณด๊ฒ ์ต๋๋ค.
df_sum <- df_receipt %>% group_by(customer_id) %>% summise(sum_amount = sum(amount), .groups = "drop"): ์ด ์ฝ๋๋ ๋จผ์ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ "customer_id" ์ด๋ก ๊ทธ๋ฃนํํฉ๋๋ค. id" ์ด๋ก ๊ทธ๋ฃนํํ๊ณ , sum() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ "amount" ์ด์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์ df_sum์๋ ๊ฐ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ๊ธ์ก์ ํฉ๊ณ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. .groups ๋งค๊ฐ ๋ณ์๋ ์ถ๋ ฅ์์ ๊ทธ๋ฃนํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด "drop"์ผ๋ก ์ค์ ๋์ด ์๋ค.
df_target <- df_customer %>% filter(gender_cd == "1" & !grepl("^Z", customer_id)): ์ด ์ฝ๋๋ df_customer ๋ฐ์ดํฐ ํ๋ ์์ ํํฐ๋งํ์ฌ "gender_cd" ์ปฌ๋ผ์ด "1"๊ณผ ๊ฐ๊ณ , "customer_id" ์ปฌ๋ผ์ด "Z"๋ก ์์ํ์ง ์๋ ํ๋ง ํฌํจํ๋๋ก ํํฐ๋งํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฐ์ดํฐ ํ๋ ์ df_target์๋ ID๊ฐ "Z"๋ก ์์ํ์ง ์๋ ๋จ์ฑ ๊ณ ๊ฐ๋ง ํฌํจ๋ฉ๋๋ค.
left_join(df_target["customer_id"], df_sum, by = "customer_id"): df_target["customer_id"]์ df_sum ์ฌ์ด์์ "customer_id" ์ด์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๊ฒฐํฉ ์์ ์ ์ํํ๋ค. ๊ฒฐ๊ณผ๋ df_target์ ๋ชจ๋ ํ๊ณผ df_sum์ ๊ฐ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ํด๋น ์ด์ก์ ํฌํจํ๋ ์๋ก์ด ๋ฐ์ดํฐ ํ๋ ์์ ๋๋ค.
replace_na(list(sum_amount = 0)): "sum_amount" ์ด์ ๋๋ฝ๋ ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ธ 0์ผ๋ก ๋ฐ๊พผ๋ค.
slice(1:10): ์ด ํจ์๋ ์ด์ ๋ช ๋ น์์ ์ป์ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10๊ฐ์ ํ์ ์ ํํ๋ค.
์ฆ, ์ด ์ฝ๋์ ์ ์ฒด ๋ชฉ์ ์ ID๊ฐ "Z"๋ก ์์ํ์ง ์๋ ๋จ์ฑ ๊ณ ๊ฐ์ด ์ง์ถํ ์ด ๊ธ์ก์ ์์ฝํ๋ฅผ ์ป๋ ๊ฒ์ ๋๋ค. ์์ฑ๋ ๋ฐ์ดํฐ ํ๋ ์์ "customer_id"์ "sum_amount"๋ผ๋ ๋ ๊ฐ์ ์ด์ด ์๊ณ , "sum_amount"๋ ๊ฐ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ์ด ๊ธ์ก์ด๋ฉฐ, "sum_amount"์ด์ ๋๋ฝ๋ ๊ฐ์ ๋ชจ๋ 0์ผ๋ก ๋์ฒด๋๋ฉฐ, ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 10์ค๋ก ์ ํ๋๋ค.
R-039: ์์์ฆ ๋ด์ญ ๋ฐ์ดํฐ(df_receipt)์์ ๋งค์ถ ์ผ์๊ฐ ๋ง์ ๊ณ ๊ฐ ์์ 20๊ฑด์ ์ถ์ถํ ๋ฐ์ดํฐ์ ๋งค์ถ ๊ธ์ก ํฉ๊ณ๊ฐ ๋ง์ ๊ณ ๊ฐ ์์ 20๊ฑด์ ์ถ์ถํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ ์์ฑํ๊ณ , ์ด ๋ ๊ฐ์ง๋ฅผ ์์ ํ ์ธ๋ถ ๊ฒฐํฉํ๋ผ. ๋จ, ๋นํ์(๊ณ ๊ฐ ID๊ฐ โZโ๋ก ์์ํ๋ ๊ณ ๊ฐ)์ ์ ์ธํ๋ค.
# ์ฝ๊ทธ ์์ 1
df_data <- df_receipt %>%
filter(!grepl("^Z", customer_id)) %>%
group_by(customer_id)
df_cnt <- df_data %>%
summarise(come_days = n_distinct(sales_ymd), .groups = "drop") %>%
arrange(desc(come_days), customer_id) %>%
slice(1:20)
df_sum <- df_data %>% summarise(sum_amount = sum(amount), .groups = "drop") %>%
arrange(desc(sum_amount)) %>%
slice(1:20)
full_join(df_cnt, df_sum, by = "customer_id")
customer_id | come_days | sum_amount |
---|---|---|
<chr> | <int> | <int> |
CS040214000008 | 23 | NA |
CS010214000010 | 22 | 18585 |
CS015415000185 | 22 | 20153 |
CS010214000002 | 21 | NA |
CS028415000007 | 21 | 19127 |
CS016415000141 | 20 | 18372 |
CS017415000097 | 20 | 23086 |
CS014214000023 | 19 | NA |
CS021514000045 | 19 | NA |
CS021515000172 | 19 | NA |
CS022515000226 | 19 | NA |
CS031414000051 | 19 | 19202 |
CS039414000052 | 19 | NA |
CS007515000107 | 18 | NA |
CS014415000077 | 18 | NA |
CS021515000056 | 18 | NA |
CS021515000211 | 18 | NA |
CS022515000028 | 18 | NA |
CS030214000008 | 18 | NA |
CS031414000073 | 18 | NA |
CS001605000009 | NA | 18925 |
CS006515000023 | NA | 18372 |
CS011414000106 | NA | 18338 |
CS038415000104 | NA | 17847 |
CS035414000024 | NA | 17615 |
CS021515000089 | NA | 17580 |
CS032414000072 | NA | 16563 |
CS016415000101 | NA | 16348 |
CS011415000006 | NA | 16094 |
CS034415000047 | NA | 16083 |
CS007514000094 | NA | 15735 |
CS009414000059 | NA | 15492 |
CS030415000034 | NA | 15468 |
CS015515000034 | NA | 15300 |
์ค๋ช :
์ด ์ฝ๋๋ ๋ ๊ฐ์ ๊ณ ๊ฐ ๋ฐ์ดํฐ ์์ฝ ํ ์ด๋ธ์ ์ป๊ธฐ ์ํด ๋ช ๊ฐ์ง ์์ ์ ์ํํ๊ณ "customer_id" ์ปฌ๋ผ์ ๊ธฐ๋ฐ์ผ๋ก ๋ ํ ์ด๋ธ ๊ฐ์ ์์ ๊ฒฐํฉ ์์ ์ ์ํํ๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์๋ ํ๋งค ๋ ์ง๊ฐ ๊ฐ์ฅ ๋ช ํํ ์์ 20๋ช ์ ๊ณ ๊ฐ๊ณผ ๊ตฌ๋งค ๊ธ์ก ํฉ๊ณ๊ฐ ๊ฐ์ฅ ๋์ ์์ 20๋ช ์ ๊ณ ๊ฐ์ด ํฌํจ๋์ด ์์ต๋๋ค.
์ด์ ์ฝ๋๋ฅผ ๋จ๊ณ๋ณ๋ก ๋ถํดํด ๋ณด๊ฒ ์ต๋๋ค.
df_data <- df_receipt %>% filter(!grepl("^Z", customer_id)) %>% group_by(customer_id): ์ด ์ฝ๋๋ ๋จผ์ df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ํํฐ๋งํ์ฌ "customer_id" ์ด ์ด "Z"๋ก ์์ํ๋ ํ์ ์ ์ธํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฐ์ดํฐ ํ๋ ์์ "customer_id" ์ด๋ก ๊ทธ๋ฃนํ๋ฉ๋๋ค. ๊ฒฐ๊ณผ df_data ๋ฐ์ดํฐ ํ๋ ์์ df_receipt์์ "Z" ๊ณ ๊ฐ ID๋ฅผ ์ ๊ฑฐํ ๋ชจ๋ ํ์ ํฌํจํ๋ฉฐ "customer_id"๋ก ๊ทธ๋ฃนํ๋์ด ์๋ค.
df_cnt <- df_data %>% summarise(come_days = n_distinct(sales_ymd), .groups = "drop") %>% arrange(desc(come_days), customer_id) %>% slice(1:20): ์ด ์ฝ๋์์๋ ๋จผ์ n_distinct() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ณ ๊ฐ์ "sales_ymd" ๊ฐ์ ์๋ฅผ ๊ณ์ฐํ์ฌ df_data ๋ฐ์ดํฐ ํ๋ ์์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์ df_cnt๋ ๊ฐ ๊ณ ๊ฐ์ ์ด ๊ณ ์ ํ๋งค์ผ ์๋ฅผ ํฌํจํฉ๋๋ค. ์ด ๋ฐ์ดํฐ ํ๋ ์์ "come_days"์ ๋ด๋ฆผ์ฐจ์, "customer_id"์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ slice() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 20๊ฐ ํ์ ์ ํํฉ๋๋ค.
df_sum <- df_data %>% summarise(sum_amount = sum(amount), .groups = "drop") %>% arrange(desc(sum_amount)) %>% slice(1:20): ์ด ์ฝ๋๋ sum() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ณ ๊ฐ์ '๊ธ์ก' ์ด์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ์ฌ df_data ๋ฐ์ดํฐ ํ๋ ์์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์ df_sum์๋ ๊ฐ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ๊ธ์ก์ ํฉ๊ณ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๋ฐ์ดํฐ ํ๋ ์์ "sum_amount" ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ , slice() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ฒ์ 20๊ฐ ํ์ ์ ํํฉ๋๋ค.
full_join(df_cnt, df_sum, by = "customer_id"): ์ด ์ฝ๋๋ df_cnt์ df_sum ์ฌ์ด์์ "customer_id" ์ด์ ๊ธฐ์ค์ผ๋ก ์ ์ฒด ๊ฒฐํฉ ์์ ์ ์ํํ๋ค. ๊ฒฐ๊ณผ๋ ๋ ๋ฐ์ดํฐ ํ๋ ์์์ "customer_id"์ ์ผ์นํ๋ ๋ชจ๋ ํ์ ํฌํจํ๋ ์๋ก์ด ๋ฐ์ดํฐ ํ๋ ์์ด ๋ ๊ฒ์ด๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์๋ ํ๋งค ๋ ์ง๊ฐ ๊ฐ์ฅ ๋ช ํํ ์์ 20๋ช ์ ๊ณ ๊ฐ๊ณผ ์ด ์๋น ๊ธ์ก์ด ๊ฐ์ฅ ๋์ ์์ 20๋ช ์ ๊ณ ๊ฐ์ด ํฌํจ๋๋ค.
์ฆ, ์ด ์ฝ๋์ ์ ์ฒด ๋ชฉ์ ์ ๊ณ ๊ฐ ๋ฐ์ดํฐ์ ๋ํ ๋ ๊ฐ์ ์์ฝ ํ ์ด๋ธ์ ๊ฐ์ ธ์ ์ด ๋ ํ ์ด๋ธ ๊ฐ์ ์์ ํ ๊ฒฐํฉ ์์ ์ ์ํํ๋ ๊ฒ์ ๋๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์๋ ํ๋งค ๋ ์ง๊ฐ ๊ฐ์ฅ ๋ค๋ฅธ ์์ 20๋ช ์ ๊ณ ๊ฐ๊ณผ ์ด ๊ฒฐ์ ๊ธ์ก์ด ๊ฐ์ฅ ๋์ ์์ 20๋ช ์ ๊ณ ๊ฐ์ด ํฌํจ๋๋ค.
# ์ฝ๊ทธ ์์ 2
# slice_max๋ฅผ ์ฌ์ฉํ ์ฝ๋ ์์.
# with_ties = FALSE๋ฅผ with_ties = TRUE๋ก ๋ค์ ์์ฑํ์ฌ ๋์ผํ ๋ฑ๊ธ์ ํฌํจํ๋๋ก ์์์ ๋ณ๊ฒฝํฉ๋๋ค.
df_data <- df_receipt %>%
filter(!grepl("^Z", customer_id)) %>%
group_by(customer_id)
df_cnt <- df_data %>%
summarise(come_days = n_distinct(sales_ymd)) %>%
slice_max(come_days, n = 20, with_ties = FALSE)
df_sum <- df_data %>%
summarise(sum_amount = sum(amount)) %>%
slice_max(sum_amount, n = 20, with_ties = FALSE)
full_join(df_cnt, df_sum, by = "customer_id")
customer_id | come_days | sum_amount |
---|---|---|
<chr> | <int> | <int> |
CS040214000008 | 23 | NA |
CS010214000010 | 22 | 18585 |
CS015415000185 | 22 | 20153 |
CS010214000002 | 21 | NA |
CS028415000007 | 21 | 19127 |
CS016415000141 | 20 | 18372 |
CS017415000097 | 20 | 23086 |
CS014214000023 | 19 | NA |
CS021514000045 | 19 | NA |
CS021515000172 | 19 | NA |
CS022515000226 | 19 | NA |
CS031414000051 | 19 | 19202 |
CS039414000052 | 19 | NA |
CS007515000107 | 18 | NA |
CS014415000077 | 18 | NA |
CS021515000056 | 18 | NA |
CS021515000211 | 18 | NA |
CS022515000028 | 18 | NA |
CS030214000008 | 18 | NA |
CS031414000073 | 18 | NA |
CS001605000009 | NA | 18925 |
CS006515000023 | NA | 18372 |
CS011414000106 | NA | 18338 |
CS038415000104 | NA | 17847 |
CS035414000024 | NA | 17615 |
CS021515000089 | NA | 17580 |
CS032414000072 | NA | 16563 |
CS016415000101 | NA | 16348 |
CS011415000006 | NA | 16094 |
CS034415000047 | NA | 16083 |
CS007514000094 | NA | 15735 |
CS009414000059 | NA | 15492 |
CS030415000034 | NA | 15468 |
CS015515000034 | NA | 15300 |
์ค๋ช :
์ด ์ฝ๋๋ ์ง๋๋ฒ ์ค๋ช ํ ์ฝ๋์ ๋น์ทํ์ง๋ง, arrange() ํจ์ ๋์ slice_max() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ๋งค ์ผ์์ ๊ตฌ๋งค ๊ธ์ก์ ํฉ๊ณ์์ ์์ 20๋ช ์ ๊ณ ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค.
์๋๋ ์ฝ๋์ ๋ด์ฉ์ ์๊ฐํฉ๋๋ค.
df_data <- df_receipt %>% filter(!grepl("^Z", customer_id)) %>% group_by(customer_id): ์ด ์ฝ๋๋ ์์ ์ฝ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก df_receipt ๋ฐ์ดํฐ ํ๋ ์์ ํํฐ๋งํ์ฌ "customer_id" ์ด์ด " customer_id" ์ด์ด "Z"๋ก ์์ํ๋ ํ์ ์ ์ธํ๊ณ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฐ์ดํฐ ํ๋ ์์ "customer_id" ์ปฌ๋ผ์ผ๋ก ๊ทธ๋ฃนํ๋ฉ๋๋ค.
df_cnt <- df_data %>% summarise(come_days = n_distinct(sales_ymd)) %>% slice_max(come_days, n = 20, with_ties = FALSE): ์ด ์ฝ๋๋ n_distinct() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ณ ๊ฐ์ "sales_ymd" ๊ฐ์ ์๋ฅผ ๊ณ์ฐํ์ฌ df_data ๋ฐ์ดํฐ ํ๋ ์์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์ df_cnt๋ ๊ฐ ๊ณ ๊ฐ์ ์ด ๊ณ ์ ํ๋งค์ผ ์๋ฅผ ํฌํจํ๋ฉฐ, slice_max() ํจ์๋ "come_days" ์ด์ ๊ธฐ์ค์ผ๋ก ์์ 20๊ฐ ํ์ ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
df_sum <- df_data %>% summarise(sum_amount = sum(amount)) %>% slice_max(sum_amount, n = 20, with_ties = FALSE): ์ด ์ฝ๋๋ sum() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ณ ๊ฐ๋ณ "amount" ์ด์ sum() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ณ ๊ฐ์ "amount" ์ด์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ์ฌ df_data ๋ฐ์ดํฐ ํ๋ ์์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์ df_sum์๋ ๊ฐ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ๊ธ์ก์ ํฉ๊ณ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, slice_max() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ "sum_amount" ์ด์ ๊ธฐ์ค์ผ๋ก ์์ 20๊ฐ์ ํ์ ์ ํํ๋ฉฐ, with_ties = FALSE๋ ์์ 20๊ฐ์ ์๋ก ๋ค๋ฅธ ๊ฐ๋ง ์ ํํ๋๋ก ์ง์ ํ๋ค. ๊ฒ์ ์ง์ ํฉ๋๋ค.
full_join(df_cnt, df_sum, by = "customer_id"): ์ด ์ฝ๋๋ df_cnt์ df_sum ์ฌ์ด์์ "customer_id" ์ด์ ๊ธฐ์ค์ผ๋ก ์ ์ฒด ๊ฒฐํฉ ์์ ์ ์ํํ๋ค. ๊ฒฐ๊ณผ๋ ๋ ๋ฐ์ดํฐ ํ๋ ์์์ "customer_id"๋ก ์ผ์นํ๋ ๋ชจ๋ ํ์ ํฌํจํ๋ ์๋ก์ด ๋ฐ์ดํฐ ํ๋ ์์ด ๋ ๊ฒ์ด๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์๋ ํ๋งค ๋ ์ง๊ฐ ๊ฐ์ฅ ๋ช ํํ ์์ 20๋ช ์ ๊ณ ๊ฐ๊ณผ ์ด ์๋น ๊ธ์ก์ด ๊ฐ์ฅ ๋์ ์์ 20๋ช ์ ๊ณ ๊ฐ์ด ํฌํจ๋๋ค.
์ฆ, ์ด ์ฝ๋์ ์ ์ฒด ๋ชฉ์ ์ ๊ณ ๊ฐ ๋ฐ์ดํฐ์ ๋ํ ๋ ๊ฐ์ ์์ฝ ํ ์ด๋ธ์ ๊ฐ์ ธ์ ์ด ๋ ํ ์ด๋ธ ๊ฐ์ ์์ ํ ๊ฒฐํฉ ์์ ์ ์ํํ๋ ๊ฒ์ ๋๋ค. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์๋ ํ๋งค ๋ ์ง๊ฐ ๊ฐ์ฅ ๋ค๋ฅธ ์์ 20๋ช ์ ๊ณ ๊ฐ๊ณผ ์ด ๊ฒฐ์ ๊ธ์ก์ด ๊ฐ์ฅ ๋์ ์์ 20๋ช ์ ๊ณ ๊ฐ์ด ํฌํจ๋๋ฉฐ, arrange() ํจ์ ๋์ slice_max() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์ต๋๋ค.
R-040: ๋ชจ๋ ๋งค์ฅ๊ณผ ๋ชจ๋ ์ํ์ ์กฐํฉํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ์ถ๋ค. ๋งค์ฅ ๋ฐ์ดํฐ(df_store)์ ์ํ ๋ฐ์ดํฐ(df_product)๋ฅผ ์ง์ ๋ถํ์ฌ ๊ฑด์๋ฅผ ๊ณ์ฐํ๋ผ.
df_store_tmp <- df_store
df_product_tmp <- df_product
df_store_tmp["key"] <- 0
df_product_tmp["key"] <- 0
nrow(full_join(df_store_tmp, df_product_tmp, by = "key"))
531590
์ค๋ช :
์ด ์ฝ๋๋ df_store์ df_product ๋ ๋ฐ์ดํฐ ํ๋ ์์ ์ถ๊ฐ๋ ๊ณตํต 'ํค' ์ด์ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋ฐ์ดํฐ ํ๋ ์ ๊ฐ์ ์์ ํ ๊ฒฐํฉ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ๋ ์์ ์ฌ์ฉํ์ฌ nrow() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์๋๋ ์ฝ๋์ ๋ถ์์ด๋ค.
df_store_tmp <- df_store: ์ด ์ฝ๋์์๋ df_store_tmp๋ผ๋ ์๋ก์ด ๋ฐ์ดํฐ ํ๋ ์์ ์์ฑํ์ฌ df_store ๋ฐ์ดํฐ ํ๋ ์์ ๋ณต์ฌ๋ณธ์ผ๋ก ๋ง๋ญ๋๋ค. ์ด๋ ์๋์ ๋ฐ์ดํฐ ํ๋ ์์ ๋ณ๊ฒฝํ์ง ์๊ธฐ ์ํจ์ด๋ค.
df_product_tmp <- df_product: ์ด ์ฝ๋๋ df_product ๋ฐ์ดํฐ ํ๋ ์์ ๋ณต์ฌ๋ณธ์ธ df_product_tmp๋ผ๋ ์๋ก์ด ๋ฐ์ดํฐ ํ๋ ์์ ์์ฑํ๋ค. ์ด๋ ์๋ณธ ๋ฐ์ดํฐ ํ๋ ์์ด ๋ณ๊ฒฝ๋์ง ์๋๋ก ํ๊ธฐ ์ํ ๊ฒ์ด๋ค.
df_store_tmp["key"] <- 0: ์ด ์ฝ๋๋ df_store_tmp ๋ฐ์ดํฐ ํ๋ ์์ "key"๋ผ๋ ์๋ก์ด ์ด์ ์ถ๊ฐํ๊ณ ๋ชจ๋ ๊ฐ์ 0์ผ๋ก ์ด๊ธฐํํ๋ค. ์ด ์ปฌ๋ผ์ ๊ฒฐํฉ ์์ ์ ์ํ ๊ณตํต ์ปฌ๋ผ์ ์ ๊ณตํ๊ธฐ ์ํด ์ถ๊ฐ๋ฉ๋๋ค.
df_product_tmp["key"] <- 0: ์ด ์ฝ๋๋ df_product_tmp ๋ฐ์ดํฐ ํ๋ ์์ "key"๋ผ๋ ์๋ก์ด ์ด์ ์ถ๊ฐํ๊ณ ๋ชจ๋ ๊ฐ์ 0์ผ๋ก ์ด๊ธฐํํฉ๋๋ค. ์ด ์ปฌ๋ผ์ ๊ฒฐํฉ ์์ ์ ์ํ ๊ณตํต ์ปฌ๋ผ์ ์ ๊ณตํ๊ธฐ ์ํด ์ถ๊ฐ๋ฉ๋๋ค.
full_join(df_store_tmp, df_product_tmp, by = "key"). ์ด ์ฝ๋๋ ๊ณตํต "key" ์ด์ ๊ธฐ๋ฐ์ผ๋ก df_store_tmp์ df_product_tmp ๋ฐ์ดํฐ ํ๋ ์ ๊ฐ์ ์ ์ฒด ๊ฒฐํฉ ์์ ์ ์ํํ๋ค. ๋ ๋ฐ์ดํฐ ํ๋ ์์ ๋ชจ๋ ํ์์ ์ด ์ด์ ๊ฐ์ด ๋์ผํ๋ฏ๋ก ์์ ๊ฒฐํฉ์ ๋ ๋ฐ์ดํฐ ํ๋ ์์ ๋ฐ์นด๋ฅดํธ ๊ณฑ์ด ๋๊ณ , df_store_tmp์ ๋ชจ๋ ํ์ df_product_tmp์ ๋ชจ๋ ํ๊ณผ ์ง์ ์ด๋ฃฌ๋ค.
nrow(full_join(df_store_tmp, df_product_tmp, by = "key")): ์ด ์ฝ๋๋ nrow() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๊ฒฐํฉ ์์ ์์ ์ป์ ๋ฐ์ดํฐ ํ๋ ์์ ํ ์๋ฅผ ๊ณ์ฐํ๋ค. ๊ฒฐ๊ณผ๋ df_store์ df_product ์ฌ์ด์ ์ด ํ ์กฐํฉ ์์ ๋๋ค.
์์ฝํ๋ฉด, ์ด ์ฝ๋๋ df_store์ df_product ๋ฐ์ดํฐ ํ๋ ์์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค๊ณ , ๋ ๋ฐ์ดํฐ ํ๋ ์์ ๊ณตํต "ํค"์ด์ ์ถ๊ฐํ์ฌ ๋ชจ๋ ๊ฐ์ 0์ผ๋ก ์ค์ ํ๊ณ , ๊ณตํต "ํค"์ด์ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋ฐ์ดํฐ ํ๋ ์๊ฐ์ ์์ ๊ฒฐํฉ ์์ ์ ์ํํ์ฌ ๊ฒฐ๊ณผ ํ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๋ฅผ ๊ณ์ฐํ๋ค. ์ด ์ฝ๋์ ๋ชฉ์ ์ df_store์ df_product ๋ฐ์ดํฐ ํ๋ ์ ์ฌ์ด์ ์ด ํ ์กฐํฉ ์๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด๋ค.
Comment