๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

์ธํ„ฐ๋„ท์—์„œ R ๋˜๋Š” Python์„ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์ž‘์—…์— ๋” ์ข‹๊ณ , ๋น ๋ฅด๊ณ , ํŽธ๋ฆฌํ•œ ์ฃผ์ œ์— ๋Œ€ํ•œ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ๊ธฐ์‚ฌ์™€ ์ˆ˜ ํ‚ฌ๋กœ๋ฏธํ„ฐ์— ๋‹ฌํ•˜๋Š” ํ† ๋ก ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ถˆํ–‰ํžˆ๋„ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ธฐ์‚ฌ์™€ ๋ถ„์Ÿ์€ ํŠน๋ณ„ํžˆ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

์ด ๊ธฐ์‚ฌ์˜ ๋ชฉ์ ์€ ๋‘ ์–ธ์–ด ์ค‘ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ‚ค์ง€์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ธฐ์ˆ ์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋…์ž๋“ค์ด ์•„์ง ๋ชจ๋ฅด๋Š” ๊ฒƒ์„ ๋นจ๋ฆฌ ์ตํžˆ๋„๋ก ๋„์™€์ฃผ์„ธ์š”. Python์œผ๋กœ ๊ธ€์„ ์“ฐ๋Š” ์‚ฌ๋žŒ๋“ค์€ R์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ๋ฐ˜๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”.

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” R์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํŒจํ‚ค์ง€์˜ ๊ตฌ๋ฌธ์„ ๋ถ„์„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋œ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. tidyverse๊ทธ๋ฆฌ๊ณ  ํŒจํ‚ค์ง€๋„ data.table. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์˜ ๊ตฌ๋ฌธ์„ ๋‹ค์Œ๊ณผ ๋น„๊ตํ•˜์‹ญ์‹œ์˜ค. pandas, Python์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ถ„์„ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.

Python๊ณผ R์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ถ„์„์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ๋กœ๋”ฉ๋ถ€ํ„ฐ ๋ถ„์„ ์ฐฝ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰๊นŒ์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚ด์šฉ

๊ณ ๋ ค ์ค‘์ธ ํŒจํ‚ค์ง€ ์ค‘ ํ•˜๋‚˜์—์„œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์žŠ์–ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ ์ด ๋ฌธ์„œ๋ฅผ ์น˜ํŠธ ์‹œํŠธ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

  1. R๊ณผ Python์˜ ์ฃผ์š” ๊ตฌ๋ฌธ ์ฐจ์ด์ 
    1.1. ํŒจํ‚ค์ง€ ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šค
    1.2. ๊ณผ์ œ
    1.3. ์ธ๋ฑ์‹ฑ
    1.4. ๋ฐฉ๋ฒ•๊ณผ OOP
    1.5. ํŒŒ์ดํ”„๋ผ์ธ
    1.6. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
  2. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๋ช‡ ๋งˆ๋””
    2.1. ๊น”๋”ํ•œ
    2.2. ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”
    2.3. ํŒฌ๋”
  3. ํŒจํ‚ค์ง€ ์„ค์น˜
  4. ๋ฐ์ดํ„ฐ ๋กœ๋“œ
  5. ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ
  6. ํ•„์š”ํ•œ ์—ด ์„ ํƒ
  7. ํ–‰ ํ•„ํ„ฐ๋ง
  8. ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„
  9. ํ…Œ์ด๋ธ”์˜ ์ˆ˜์ง ํ•ฉ์ง‘ํ•ฉ(UNION)
  10. ํ…Œ์ด๋ธ”์˜ ์ˆ˜ํ‰ ์กฐ์ธ(JOIN)
  11. ๊ธฐ๋ณธ ์ฐฝ ๊ธฐ๋Šฅ ๋ฐ ๊ณ„์‚ฐ๋œ ์—ด
  12. R๊ณผ Python์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• ๊ฐ„์˜ ๋Œ€์‘ํ‘œ
  13. ๊ฒฐ๋ก 
  14. ์–ด๋–ค ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ฌธ์กฐ์‚ฌ

๋ฐ์ดํ„ฐ ๋ถ„์„์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด ์ œ ๊ธ€์„ ์ฐพ์•„๋ณด์„ธ์š”. ์ „๋ณด ะธ ์œ ํŠœ๋ธŒ ์ฑ„๋„. ๋Œ€๋ถ€๋ถ„์˜ ์ฝ˜ํ…์ธ ๋Š” R ์–ธ์–ด์— ์ „๋…ํ•ฉ๋‹ˆ๋‹ค.

R๊ณผ Python์˜ ์ฃผ์š” ๊ตฌ๋ฌธ ์ฐจ์ด์ 

Python์—์„œ R๋กœ ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ฃผ์˜ํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ์‚ฌํ•ญ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šค

ํŒจํ‚ค์ง€๊ฐ€ R์— ๋กœ๋“œ๋˜๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๋Š” R์—์„œ๋Š” ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์ง€๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์— ํ•ด๋‹น ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€ ์ „ํ˜€ ์—†์œผ๋ฉฐ, ํŒจํ‚ค์ง€ ์ด๋ฆ„๊ณผ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์—ฌ ํ˜ธ์ถœํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. R์—์„œ ํŒจํ‚ค์ง€ ์ด๋ฆ„๊ณผ ํ•จ์ˆ˜ ์ด๋ฆ„ ์‚ฌ์ด์˜ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋Š” ์ด์ค‘ ์ฝœ๋ก ์ž…๋‹ˆ๋‹ค. package_name::function_name().

๋ฐ˜๋ฉด Python์—์„œ๋Š” ์ด๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ํŒจํ‚ค์ง€์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ณ ์ „์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ถ•๋œ ์ด๋ฆ„์ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค. pandas ๋ณดํ†ต ๊ฐ€๋ช…์„ ์‚ฌ์šฉํ•œ๋‹ค pd. ํŒจํ‚ค์ง€ ํ•จ์ˆ˜๋Š” ์ ์„ ํ†ตํ•ด ์•ก์„ธ์Šค๋ฉ๋‹ˆ๋‹ค. package_name.function_name().

๊ณผ์ œ

R์—์„œ๋Š” ๊ฐ์ฒด์— ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ํ™”์‚ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. obj_name <- value, ๋‹จ์ผ ๋“ฑํ˜ธ ๊ธฐํ˜ธ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€๋งŒ R์˜ ๋‹จ์ผ ๋“ฑํ˜ธ๋Š” ์ฃผ๋กœ ํ•จ์ˆ˜ ์ธ์ˆ˜์— ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Python์—์„œ๋Š” ๋‹จ์ผ ๋“ฑํ˜ธ๋งŒ์œผ๋กœ ํ• ๋‹น์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. obj_name = value.

์ธ๋ฑ์‹ฑ

์—ฌ๊ธฐ์—๋„ ์ƒ๋‹นํžˆ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. R์—์„œ ์ธ๋ฑ์‹ฑ์€ XNUMX๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ๊ฒฐ๊ณผ ๋ฒ”์œ„์— ์ง€์ •๋œ ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

Python์—์„œ ์ธ๋ฑ์‹ฑ์€ XNUMX๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉฐ ์„ ํƒํ•œ ๋ฒ”์œ„์—๋Š” ์ธ๋ฑ์Šค์— ์ง€์ •๋œ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋””์ž์ธ x[i:j] Python์—์„œ๋Š” j ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

R ํ‘œ๊ธฐ๋ฒ•์—์„œ๋Š” ์Œ์ˆ˜ ์ธ๋ฑ์‹ฑ์—๋„ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. x[-1] ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ œ์™ธํ•œ ๋ฒกํ„ฐ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Python์—์„œ๋Š” ์œ ์‚ฌํ•œ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ•๊ณผ OOP

R์€ ์ž์‹ ๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ OOP๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ๊ธฐ์‚ฌ์—์„œ ์ผ์Šต๋‹ˆ๋‹ค. "R ์–ธ์–ด์˜ OOP(1๋ถ€): S3 ํด๋ž˜์Šค". ์ผ๋ฐ˜์ ์œผ๋กœ R์€ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์ด๋ฉฐ ๊ทธ ์•ˆ์— ํฌํ•จ๋œ ๋ชจ๋“  ๊ฒƒ์€ ํ•จ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ๋ฅผ ๋“ค์–ด Excel ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ tydiverse ๊ทธ๊ฒƒ๋ณด๋‹ค ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค pandas. ์ด๊ฑด ๋‚ด ์ฃผ๊ด€์ ์ธ ์ƒ๊ฐ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ R์˜ ๊ฐœ์ฒด์—๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(S3 ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜์ง€๋งŒ ํ›จ์”ฌ ๋œ ์ผ๋ฐ˜์ ์ธ ๋‹ค๋ฅธ OOP ๊ตฌํ˜„์ด ์žˆ๋Š” ๊ฒฝ์šฐ). ๊ฐ์ฒด์˜ ํด๋ž˜์Šค์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ์ผ๋ฐ˜ํ™”๋œ ํ•จ์ˆ˜๋งŒ ์žˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ

์•„๋งˆ๋„ ์ด๊ฒƒ์ด ์ด๋ฆ„์ผ ๊ฒƒ์ด๋‹ค. pandas ์™„์ „ํžˆ ์ •ํ™•ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์˜๋ฏธ๋ฅผ ์„ค๋ช…ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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

์ค‘๊ฐ„ ๊ณ„์‚ฐ์„ ๋ณ„๋„์˜ ๊ฐœ์ฒด์— ์ €์žฅํ•˜๋Š” ๋‹ค์Œ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

temp_object <- func1()
temp_object2 <- func2(temp_object )
obj <- func3(temp_object2 )

3๊ฐ€์ง€ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ๊ฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋Š” ๋ณ„๋„์˜ ๊ฐœ์ฒด์— ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์ด๋Ÿฌํ•œ ์ค‘๊ฐ„ ๊ฐœ์ฒด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜๋Š” ๋” ๋‚˜์˜์ง€๋งŒ Excel ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋” ์นœ์ˆ™ํ•ฉ๋‹ˆ๋‹ค.

obj  <- func3(func2(func1()))

์ด ๊ฒฝ์šฐ์—๋Š” ์ค‘๊ฐ„ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ค‘์ฒฉ๋œ ํ•จ์ˆ˜๊ฐ€ ํฌํ•จ๋œ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” R์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ดํŽด๋ณด๊ณ  ์œ ์‚ฌํ•œ ์ž‘์—…์„ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŒŒ์ดํ”„๋ผ์ธ tidyverse ์šด์˜์ž๊ฐ€ ๊ตฌํ˜„ %>%.

obj <- func1() %>% 
            func2() %>%
            func3()

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ž‘์—… ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. func1() ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. func2(), ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. func3(). ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” ์ˆ˜ํ–‰๋œ ๋ชจ๋“  ๊ณ„์‚ฐ์„ ๊ฐ์ฒด์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. obj <-.

์œ„์˜ ๋ชจ๋“  ๋‚ด์šฉ์€ ์ด ๋ฐˆ์˜ ๋ง๋ณด๋‹ค ๋” ์ž˜ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

ะ’ data.table ์ฒด์ธ๋„ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

newDT <- DT[where, select|update|do, by][where, select|update|do, by][where, select|update|do, by]

๊ฐ ๋Œ€๊ด„ํ˜ธ์—๋Š” ์ด์ „ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ะ’ pandas ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ์ ์œผ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.

obj = df.fun1().fun2().fun3()

์ €๊ฒƒ๋“ค. ์šฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ์ฐจ์ง€ํ•ด df ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋…€์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ fun1(), ๊ทธ๋Ÿฐ ๋‹ค์Œ ์–ป์€ ๊ฒฐ๊ณผ์— ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. fun2()ํ›„์— fun3(). ๊ฒฐ๊ณผ ๊ฒฐ๊ณผ๋Š” ๊ฐ์ฒด์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค obj .

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

R๊ณผ Python์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ์œ ์‚ฌํ•˜์ง€๋งŒ ์ด๋ฆ„์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๊ธฐ์ˆ 
R์˜ ์ด๋ฆ„
Python/pandas์˜ ์ด๋ฆ„

ํ…Œ์ด๋ธ” ๊ตฌ์กฐ
๋ฐ์ดํ„ฐ.ํ”„๋ ˆ์ž„, ๋ฐ์ดํ„ฐ.ํ…Œ์ด๋ธ”, ํ‹ฐ๋ธ”
๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„

XNUMX์ฐจ์› ๊ฐ’ ๋ชฉ๋ก
๋ฒกํ„ฐ
ํŒฌ๋”์˜ ์‹œ๋ฆฌ์ฆˆ ๋˜๋Š” ์ˆœ์ˆ˜ Python์˜ ๋ชฉ๋ก

๋‹ค๋‹จ๊ณ„ ๋น„ํ‘œ ํ˜•์‹ ๊ตฌ์กฐ
๋ชฉ๋ก
์‚ฌ์ „(dict)

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

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๋ช‡ ๋งˆ๋””

๋จผ์ €, ์ด ๊ธฐ์‚ฌ๋ฅผ ํ†ตํ•ด ์ต์ˆ™ํ•ด์งˆ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ์กฐ๊ธˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊น”๋”ํ•œ

ะžั„ะธั†ะธะฐะปัŒะฝั‹ะน์˜ ัะฐะนั‚ : tidyverse.org
๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
๋„์„œ๊ด€ tidyverse RStudio์˜ ์ˆ˜์„ ์—ฐ๊ตฌ ๊ณผํ•™์ž์ธ Hedley Wickham์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. tidyverse ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ์ธ์ƒ์ ์ธ ํŒจํ‚ค์ง€ ์„ธํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ทธ ์ค‘ 5๊ฐœ๋Š” CRAN ์ €์žฅ์†Œ์˜ ์ƒ์œ„ 10๊ฐœ ๋‹ค์šด๋กœ๋“œ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•ต์‹ฌ์€ ๋‹ค์Œ ํŒจํ‚ค์ง€๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. ์ด๋Ÿฌํ•œ ๊ฐ ํŒจํ‚ค์ง€๋Š” ํŠน์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด dplyr ๋ฐ์ดํ„ฐ ์กฐ์ž‘์„ ์œ„ํ•ด ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฉฐ, tidyr ๋ฐ์ดํ„ฐ๋ฅผ ๊น”๋”ํ•œ ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์˜ค๊ณ , stringr ๋ฌธ์ž์—ด ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ggplot2 ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์žฅ์  tidyverse ๋‹จ์ˆœํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ๊ตฌ๋ฌธ์œผ๋กœ, ์—ฌ๋Ÿฌ ๋ฉด์—์„œ SQL ์ฟผ๋ฆฌ ์–ธ์–ด์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ะžั„ะธั†ะธะฐะปัŒะฝั‹ะน์˜ ัะฐะนั‚ : r-datatable.com

์ €์ž data.table H2O.ai์˜ Matt Dole์ž…๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค๋Š” 2006๋…„์— ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. tidyverse R์˜ ํด๋ž˜์‹ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„๊ณผ ๋” ์œ ์‚ฌํ•˜์ง€๋งŒ ๋™์‹œ์— ๊ธฐ๋Šฅ์ด ํฌ๊ฒŒ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŒจํ‚ค์ง€์˜ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•œ ๋ชจ๋“  ์กฐ์ž‘์€ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์„ค๋ช…๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ตฌ๋ฌธ์„ ๋ฒˆ์—ญํ•˜๋ฉด data.table SQL์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. data.table[ WHERE, SELECT, GROUP BY ]

์ด ํŒจํ‚ค์ง€์˜ ์žฅ์ ์€ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์†๋„์ž…๋‹ˆ๋‹ค.

ํŒฌ๋”

ะžั„ะธั†ะธะฐะปัŒะฝั‹ะน์˜ ัะฐะนั‚ : pandas.pydata.org ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ด๋ฆ„์€ ๋‹ค์ฐจ์›์ ์œผ๋กœ ๊ตฌ์กฐํ™”๋œ ์ •๋ณด ์„ธํŠธ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ณ„๋Ÿ‰ ๊ฒฝ์ œํ•™ ์šฉ์–ด์ธ "ํŒจ๋„ ๋ฐ์ดํ„ฐ"์—์„œ ์œ ๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ €์ž pandas ๋ฏธ๊ตญ์ธ ์›จ์Šค ๋งฅํ‚ค๋‹ˆ(Wes McKinney)์ž…๋‹ˆ๋‹ค.

Python์˜ ๋ฐ์ดํ„ฐ ๋ถ„์„์— ๊ด€ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. pandas ์•„๋‹ˆ์š”. ๋ชจ๋“  ์†Œ์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ๊ฐํ™”ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์šฐ ๋‹ค๊ธฐ๋Šฅ์ ์ธ ๊ณ ๊ธ‰ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ํŒจํ‚ค์ง€ ์„ค์น˜

์ด ๋ฌธ์„œ์—์„œ ์„ค๋ช…ํ•˜๋Š” ํŒจํ‚ค์ง€๋Š” ๊ธฐ๋ณธ R ๋ฐ Python ๋ฐฐํฌํŒ์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ์ฃผ์˜์‚ฌํ•ญ์ด ์žˆ์ง€๋งŒ Anaconda ๋ฐฐํฌํŒ์„ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ์—๋Š” ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค. pandas ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

R์— ํŒจํ‚ค์ง€ ์„ค์น˜

RStudio ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ํ•œ ๋ฒˆ ์ด์ƒ ์—ด์—ˆ๋‹ค๋ฉด R์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ํ‘œ์ค€ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. install.packages() R ์ž์ฒด์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

# ัƒัั‚ะฐะฝะพะฒะบะฐ ะฟะฐะบะตั‚ะพะฒ
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")

์„ค์น˜ ํ›„ ํŒจํ‚ค์ง€๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ช…๋ น์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. library().

# ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะธะปะธ ะธะผะฟะพั€ั‚ ะฟะฐะบะตั‚ะพะฒ ะฒ ั€ะฐะฑะพั‡ะตะต ะพะบั€ัƒะถะตะฝะธะต
library(vroom)
library(readr)
library(dplyr)
library(data.table)

Python์— ํŒจํ‚ค์ง€ ์„ค์น˜

๋”ฐ๋ผ์„œ ์ˆœ์ˆ˜ Python์ด ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด pandas ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šด์˜ ์ฒด์ œ์— ๋”ฐ๋ผ ๋ช…๋ น์ค„ ๋˜๋Š” ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

pip install pandas

๊ทธ๋Ÿฐ ๋‹ค์Œ Python์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. import.

import pandas as pd

๋ฐ์ดํ„ฐ ๋กœ๋“œ

๋ฐ์ดํ„ฐ ๋งˆ์ด๋‹์€ ๋ฐ์ดํ„ฐ ๋ถ„์„์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋‹จ๊ณ„ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ์šฐ Python๊ณผ R ๋ชจ๋‘ ๋กœ์ปฌ ํŒŒ์ผ, ์ธํ„ฐ๋„ท ํŒŒ์ผ, ์›น ์‚ฌ์ดํŠธ, ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ ๋ชจ๋“  ์†Œ์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

์ด ๊ธฐ์‚ฌ ์ „์ฒด์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. Google Analytics์—์„œ ๋‘ ๊ฐ€์ง€ ๋‹ค์šด๋กœ๋“œ.
  2. ํƒ€์ดํƒ€๋‹‰ ์Šน๊ฐ ๋ฐ์ดํ„ฐ์„ธํŠธ.

๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋‚ด ์•ˆ์— ์žˆ์–ด์š” GitHub์˜ csv ๋ฐ tsv ํŒŒ์ผ ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์–ด๋””์„œ ์š”์ฒญํ•˜๋‚˜์š”?

R์— ๋ฐ์ดํ„ฐ ๋กœ๋“œ: tidyverse, vroom, readerr

๋ฐ์ดํ„ฐ๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋กœ๋“œํ•˜๋ ค๋ฉด tidyverse ๋‘ ๊ฐ€์ง€ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: vroom, readr. vroom ๋” ํ˜„๋Œ€์ ์ด์ง€๋งŒ ๋ฏธ๋ž˜์—๋Š” ํŒจํ‚ค์ง€๊ฐ€ ๊ฒฐํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฌ์  ๊ณต์‹ ๋ฌธ์„œ vroom.

๋ถ€๋ฆ‰ vs ๋ฆฌ๋”
์ถœ์‹œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? vroom ์˜๋ฏธํ•˜๋‹ค readr? ์ง€๊ธˆ์€ ๋‘ ํŒจํ‚ค์ง€๋ฅผ ๋ณ„๋„๋กœ ๋ฐœ์ „์‹œํ‚ฌ ๊ณ„ํš์ด์ง€๋งŒ ์•ž์œผ๋กœ๋Š” ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. vroom์˜ ๊ฒŒ์œผ๋ฅธ ์ฝ๊ธฐ์˜ ํ•œ ๊ฐ€์ง€ ๋‹จ์ ์€ ํŠน์ • ๋ฐ์ดํ„ฐ ๋ฌธ์ œ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด๊ณ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์€ ์•ฝ๊ฐ„์˜ ์ƒ๊ฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€๋ฆ‰ vs ๋ฆฌ๋”
๋ฆด๋ฆฌ์Šค๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? vroom ์— readr? ํ˜„์žฌ๋กœ์„œ๋Š” ๋‘ ํŒจํ‚ค์ง€๋ฅผ ๋ณ„๋„๋กœ ๊ฐœ๋ฐœํ•  ๊ณ„ํš์ด์ง€๋งŒ ๋‚˜์ค‘์—๋Š” ๋‘ ํŒจํ‚ค์ง€๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์œผ๋ฅธ ๋…์„œ์˜ ๋‹จ์  ์ค‘ ํ•˜๋‚˜ vroom ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€ ๋ฌธ์ œ๋Š” ์‚ฌ์ „์— ๋ณด๊ณ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ด๋ฅผ ๊ฐ€์žฅ ์ž˜ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ํŒจํ‚ค์ง€๋ฅผ ๋ชจ๋‘ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

R์— ๋ฐ์ดํ„ฐ ๋กœ๋“œ: vroom ํŒจํ‚ค์ง€

# install.packages("vroom")
library(vroom)

# ะงั‚ะตะฝะธะต ะดะฐะฝะฝั‹ั…
## vroom
ga_nov  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

R์— ๋ฐ์ดํ„ฐ ๋กœ๋“œ: reader

# install.packages("readr")
library(readr)

# ะงั‚ะตะฝะธะต ะดะฐะฝะฝั‹ั…
## readr
ga_nov  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

ํŒจํ‚ค์ง€ vroom, csv / tsv ๋ฐ์ดํ„ฐ ํ˜•์‹์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ์ด๋ฆ„์˜ ๊ธฐ๋Šฅ์œผ๋กœ ๋กœ๋”ฉ์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. vroom(), ํŒจํ‚ค์ง€์— readr ๊ฐ ํ˜•์‹๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. read_tsv() ะธ read_csv().

R์— ๋ฐ์ดํ„ฐ ๋กœ๋“œ: data.table

ะ’ data.table ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค fread().

R์— ๋ฐ์ดํ„ฐ ๋กœ๋“œ: data.table ํŒจํ‚ค์ง€

# install.packages("data.table")
library(data.table)

## data.table
ga_nov  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Python์—์„œ ๋ฐ์ดํ„ฐ ๋กœ๋“œ: pandas

R ํŒจํ‚ค์ง€์™€ ๋น„๊ตํ•˜๋ฉด ์ด ๊ฒฝ์šฐ ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. pandas ์˜์ง€ readr๋•Œ๋ฌธ์— pandas ์–ด๋””์—์„œ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ํŒจํ‚ค์ง€์—๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. read_*().

  • read_csv()
  • read_excel()
  • read_sql()
  • read_json()
  • read_html()

๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋„๋ก ์„ค๊ณ„๋œ ๋‹ค๋ฅธ ๋งŽ์€ ๊ธฐ๋Šฅ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ์˜ ๋ชฉ์ ์—๋Š” ๊ทธ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค read_table() ๋˜๋Š” read_csv() ์ธ์ˆ˜ ์‚ฌ์šฉ 9์›” ์—ด ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

Python์—์„œ ๋ฐ์ดํ„ฐ ๋กœ๋“œ: pandas

import pandas as pd

ga_nov  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_nowember.csv", sep = "t")
ga_dec  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_december.csv", sep = "t")
titanic = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/titanic.csv")

๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ

ํ…Œ์ด๋ธ” ๊ฑฐ๋Œ€ํ•œ, ์šฐ๋ฆฌ๊ฐ€ ๋กœ๋“œํ•œ ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋ณ„, ์Šน๊ฐ์˜ ์„ฑ๋ณ„ ์‹๋ณ„์ž๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์Šน๊ฐ ์„ฑ๋ณ„์— ๊ด€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๋ ค๋ฉด ์„ฑ๋ณ„ ์ฝ”๋“œ๋ณด๋‹ค๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๊ฐ๊ฐ 2๊ฐœ์˜ ์—ด(์ฝ”๋“œ ๋ฐ ์„ฑ๋ณ„ ์ด๋ฆ„)๊ณผ 2๊ฐœ์˜ ํ–‰๋งŒ ์žˆ๋Š” ํ…Œ์ด๋ธ”์ธ ์ž‘์€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

R์—์„œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ: tidyverse, dplyr

์•„๋ž˜ ์ฝ”๋“œ ์˜ˆ์ œ์—์„œ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. tibble() .

R์—์„œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ: dplyr

## dplyr
### ัะพะทะดะฐั‘ะผ ัะฟั€ะฐะฒะพั‡ะฝะธะบ
gender <- tibble(id = c(1, 2),
                 gender = c("female", "male"))

R์—์„œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ: data.table

R์—์„œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ: data.table

## data.table
### ัะพะทะดะฐั‘ะผ ัะฟั€ะฐะฒะพั‡ะฝะธะบ
gender <- data.table(id = c(1, 2),
                    gender = c("female", "male"))

Python์—์„œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ๋งŒ๋“ค๊ธฐ: pandas

ะ’ pandas ํ”„๋ ˆ์ž„ ์ƒ์„ฑ์€ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋จผ์ € ์‚ฌ์ „์„ ๋งŒ๋“  ๋‹ค์Œ ์‚ฌ์ „์„ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Python์—์„œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ๋งŒ๋“ค๊ธฐ: pandas

# ัะพะทะดะฐั‘ะผ ะดะฐั‚ะฐ ั„ั€ะตะนะผ
gender_dict = {'id': [1, 2],
               'gender': ["female", "male"]}
# ะฟั€ะตะพะฑั€ะฐะทัƒะตะผ ัะปะพะฒะฐั€ัŒ ะฒ ะดะฐั‚ะฐั„ั€ะตะนะผ
gender = pd.DataFrame.from_dict(gender_dict)

์—ด ์„ ํƒ

์ž‘์—…ํ•˜๋Š” ํ…Œ์ด๋ธ”์—๋Š” ์ˆ˜์‹ญ ๋˜๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์—ด์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ์†Œ์Šค ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์—ด์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

๋”ฐ๋ผ์„œ ์†Œ์Šค ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ฒซ ๋ฒˆ์งธ ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋Š” ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ง€์šฐ๊ณ  ์ด ์ •๋ณด๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

R์—์„œ ์—ด ์„ ํƒ: tidyverse, dplyr

๊ตฌ๋ฌธ dplyr SQL ์ฟผ๋ฆฌ ์–ธ์–ด์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋ฏ€๋กœ ์ต์ˆ™ํ•˜๋‹ค๋ฉด ์ด ํŒจํ‚ค์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งˆ์Šคํ„ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ด์„ ์„ ํƒํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. select().

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

  • ํ•„์ˆ˜ ์—ด์˜ ์ด๋ฆ„ ๋‚˜์—ด
  • ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ด ์ด๋ฆ„ ์ฐธ์กฐ
  • ๋ฐ์ดํ„ฐ ์œ ํ˜• ๋˜๋Š” ์—ด์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ธฐํƒ€ ์†์„ฑ๋ณ„

R์—์„œ ์—ด ์„ ํƒ: dplyr

# ะ’ั‹ะฑะพั€ ะฝัƒะถะฝั‹ั… ัั‚ะพะปะฑั†ะพะฒ
## dplyr
### ะฒั‹ะฑั€ะฐั‚ัŒ ะฟะพ ะฝะฐะทะฒะฐะฝะธัŽ ัั‚ะพะปะฑั†ะพะฒ
select(ga_nov, date, source, sessions)
### ะธัะบะปัŽั‡ัŒ ะฟะพ ะฝะฐะทะฒะฐะฝะธัŽ ัั‚ะพะปะฑั†ะพะฒ
select(ga_nov, -medium, -bounces)
### ะฒั‹ะฑั€ะฐั‚ัŒ ะฟะพ ั€ะตะณัƒะปัั€ะฝะพะผัƒ ะฒั‹ั€ะฐะถะตะฝะธัŽ, ัั‚ะพะฑั†ั‹ ะธะผะตะฝะฐ ะบะพั‚ะพั€ั‹ั… ะทะฐะบะฐะฝั‡ะธะฒะฐัŽั‚ัั ะฝะฐ s
select(ga_nov, matches("s$"))
### ะฒั‹ะฑั€ะฐั‚ัŒ ะฟะพ ัƒัะปะพะฒะธัŽ, ะฒั‹ะฑะธั€ะฐะตะผ ั‚ะพะปัŒะบะพ ั†ะตะปะพั‡ะธัะปะตะฝะฝั‹ะต ัั‚ะพะปะฑั†ั‹
select_if(ga_nov, is.integer)

R์—์„œ ์—ด ์„ ํƒ: data.table

์—์„œ ๋™์ผํ•œ ์ž‘์—… data.table ์•ฝ๊ฐ„ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ๊ธฐ์‚ฌ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์–ด๋–ค ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. data.table.

DT[i,j,by]

์žฅ์†Œ :
๋‚˜ - ์–ด๋””, ์ฆ‰ ํ–‰์œผ๋กœ ํ•„ํ„ฐ๋ง
j - ์„ ํƒ|์—…๋ฐ์ดํŠธ|์‹คํ–‰, ์ฆ‰ ์—ด ์„ ํƒ ๋ฐ ๋ณ€ํ™˜
๊ธฐ์ค€ - ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™”

R์—์„œ ์—ด ์„ ํƒ: data.table

## data.table
### ะฒั‹ะฑั€ะฐั‚ัŒ ะฟะพ ะฝะฐะทะฒะฐะฝะธัŽ ัั‚ะพะปะฑั†ะพะฒ
ga_nov[ , .(date, source, sessions) ]
### ะธัะบะปัŽั‡ัŒ ะฟะพ ะฝะฐะทะฒะฐะฝะธัŽ ัั‚ะพะปะฑั†ะพะฒ
ga_nov[ , .SD, .SDcols = ! names(ga_nov) %like% "medium|bounces" ]
### ะฒั‹ะฑั€ะฐั‚ัŒ ะฟะพ ั€ะตะณัƒะปัั€ะฝะพะผัƒ ะฒั‹ั€ะฐะถะตะฝะธัŽ
ga_nov[, .SD, .SDcols = patterns("s$")]

๋ณ€์ˆ˜ .SD ๋ชจ๋“  ์—ด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ .SDcols ์ •๊ทœ์‹ ๋˜๋Š” ๊ธฐํƒ€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ์—ด์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ ํ•„์š”ํ•œ ์—ด์˜ ์ด๋ฆ„์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

Python, pandas์—์„œ ์—ด ์„ ํƒ

์ด๋ฆ„์œผ๋กœ ์—ด์„ ์„ ํƒํ•˜๋ ค๋ฉด pandas ๊ทธ๋“ค์˜ ์ด๋ฆ„ ๋ชฉ๋ก์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„๋ณ„๋กœ ์—ด์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์ œ์™ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. drop() ะธ filter(), ๋ฐ ์ธ์ˆ˜ ์ถ• = 1, ์ด๋Š” ํ–‰์ด ์•„๋‹Œ ์—ด์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์œ ํ˜•๋ณ„๋กœ ํ•„๋“œ๋ฅผ ์„ ํƒํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. select_dtypes(), ๊ทธ๋ฆฌ๊ณ  ์ธ์ˆ˜๋กœ ํฌํ•จ ๋˜๋Š” ์ œ์™ธ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ํ•„๋“œ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜• ๋ชฉ๋ก์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

Python์—์„œ ์—ด ์„ ํƒ: pandas

# ะ’ั‹ะฑะพั€ ะฟะพะปะตะน ะฟะพ ะฝะฐะทะฒะฐะฝะธัŽ
ga_nov[['date', 'source', 'sessions']]
# ะ˜ัะบะปัŽั‡ะธั‚ัŒ ะฟะพ ะฝะฐะทะฒะฐะฝะธัŽ
ga_nov.drop(['medium', 'bounces'], axis=1)
# ะ’ั‹ะฑั€ะฐั‚ัŒ ะฟะพ ั€ะตะณัƒะปัั€ะฝะพะผัƒ ะฒั‹ั€ะฐะถะตะฝะธัŽ
ga_nov.filter(regex="s$", axis=1)
# ะ’ั‹ะฑั€ะฐั‚ัŒ ั‡ะธัะปะพะฒั‹ะต ะฟะพะปั
ga_nov.select_dtypes(include=['number'])
# ะ’ั‹ะฑั€ะฐั‚ัŒ ั‚ะตะบัั‚ะพะฒั‹ะต ะฟะพะปั
ga_nov.select_dtypes(include=['object'])

ํ–‰ ํ•„ํ„ฐ๋ง

์˜ˆ๋ฅผ ๋“ค์–ด ์†Œ์Šค ํ…Œ์ด๋ธ”์— ์ˆ˜๋…„๊ฐ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ง€๋‚œ ๋‹ฌ๋งŒ ๋ถ„์„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋„ ์ถ”๊ฐ€ ๋ผ์ธ์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค ์†๋„๋ฅผ ๋Šฆ์ถ”๊ณ  PC ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

R์˜ ํ–‰ ํ•„ํ„ฐ๋ง: tydyverse, dplyr

ะ’ dplyr ์ด ํ•จ์ˆ˜๋Š” ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. filter(). ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ณ  ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋…ผ๋ฆฌ์‹์„ ์ž‘์„ฑํ•  ๋•Œ ์ด ๊ฒฝ์šฐ ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ  ๋”ฐ์˜ดํ‘œ ์—†์ด ์—ด ์ด๋ฆ„์„ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๋Ÿฌ ๋…ผ๋ฆฌ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • & ๋˜๋Š” ์‰ผํ‘œ - ๋…ผ๋ฆฌ AND
  • | - ๋…ผ๋ฆฌ์  OR

R์˜ ํ–‰ ํ•„ํ„ฐ๋ง: dplyr

# ั„ะธะปัŒั‚ั€ะฐั†ะธั ัั‚ั€ะพะบ
## dplyr
### ั„ะธะปัŒั‚ั€ะฐั†ะธั ัั‚ั€ะพะบ ะฟะพ ะพะดะฝะพะผัƒ ัƒัะปะพะฒะธัŽ
filter(ga_nov, source == "google")
### ั„ะธะปัŒั‚ั€ ะฟะพ ะดะฒัƒะผ ัƒัะปะพะฒะธัะผ ัะพะตะดะธะฝั‘ะฝะฝั‹ะผ ะปะพะณะธั‡ะตัะบะธะผ ะธ
filter(ga_nov, source == "google" & sessions >= 10)
### ั„ะธะปัŒั‚ั€ ะฟะพ ะดะฒัƒะผ ัƒัะปะพะฒะธัะผ ัะพะตะดะธะฝั‘ะฝะฝั‹ะผ ะปะพะณะธั‡ะตัะบะธะผ ะธะปะธ
filter(ga_nov, source == "google" | sessions >= 10)

R์˜ ํ–‰ ํ•„ํ„ฐ๋ง: data.table

์œ„์—์„œ ์ด๋ฏธ ์ผ๋“ฏ์ด, data.table ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๊ตฌ๋ฌธ์€ ๋Œ€๊ด„ํ˜ธ๋กœ ๋ฌถ์ž…๋‹ˆ๋‹ค.

DT[i,j,by]

์žฅ์†Œ :
๋‚˜ - ์–ด๋””, ์ฆ‰ ํ–‰์œผ๋กœ ํ•„ํ„ฐ๋ง
j - ์„ ํƒ|์—…๋ฐ์ดํŠธ|์‹คํ–‰, ์ฆ‰ ์—ด ์„ ํƒ ๋ฐ ๋ณ€ํ™˜
๊ธฐ์ค€ - ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™”

์ธ์ˆ˜๋Š” ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. i, ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์ฒซ ๋ฒˆ์งธ ์œ„์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ด์€ ๋”ฐ์˜ดํ‘œ ์—†์ด ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ๋…ผ๋ฆฌ์‹์œผ๋กœ ์•ก์„ธ์Šค๋ฉ๋‹ˆ๋‹ค.

๋…ผ๋ฆฌ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์„œ๋กœ ๊ด€๋ จ๋ฉ๋‹ˆ๋‹ค. dplyr & ๋ฐ | ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด

R์˜ ํ–‰ ํ•„ํ„ฐ๋ง: data.table

## data.table
### ั„ะธะปัŒั‚ั€ะฐั†ะธั ัั‚ั€ะพะบ ะฟะพ ะพะดะฝะพะผัƒ ัƒัะปะพะฒะธัŽ
ga_nov[source == "google"]
### ั„ะธะปัŒั‚ั€ ะฟะพ ะดะฒัƒะผ ัƒัะปะพะฒะธัะผ ัะพะตะดะธะฝั‘ะฝะฝั‹ะผ ะปะพะณะธั‡ะตัะบะธะผ ะธ
ga_nov[source == "google" & sessions >= 10]
### ั„ะธะปัŒั‚ั€ ะฟะพ ะดะฒัƒะผ ัƒัะปะพะฒะธัะผ ัะพะตะดะธะฝั‘ะฝะฝั‹ะผ ะปะพะณะธั‡ะตัะบะธะผ ะธะปะธ
ga_nov[source == "google" | sessions >= 10]

Python์—์„œ ๋ฌธ์ž์—ด ํ•„ํ„ฐ๋ง: pandas

ํ–‰๋ณ„๋กœ ํ•„ํ„ฐ๋ง pandas ํ•„ํ„ฐ๋ง๊ณผ ์œ ์‚ฌ data.table, ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์—ด์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ์ด๋ฆ„์„ ํ‘œ์‹œํ•˜์—ฌ ์ˆ˜ํ–‰๋˜๋ฉฐ ์—ด ์ด๋ฆ„์€ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ๋”ฐ์˜ดํ‘œ๋กœ ํ‘œ์‹œ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ df['col_name']) ๋˜๋Š” ๋งˆ์นจํ‘œ ๋’ค์— ๋”ฐ์˜ดํ‘œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์˜ˆ df.col_name).

์—ฌ๋Ÿฌ ์กฐ๊ฑด์œผ๋กœ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ํ•„ํ„ฐ๋งํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ ์กฐ๊ฑด์„ ๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์  ์กฐ๊ฑด์€ ์—ฐ์‚ฐ์ž์— ์˜ํ•ด ์„œ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. & ะธ |.

Python์—์„œ ๋ฌธ์ž์—ด ํ•„ํ„ฐ๋ง: pandas

# ะคะธะปัŒั‚ั€ะฐั†ะธั ัั‚ั€ะพะบ ั‚ะฐะฑะปะธั†ั‹
### ั„ะธะปัŒั‚ั€ะฐั†ะธั ัั‚ั€ะพะบ ะฟะพ ะพะดะฝะพะผัƒ ัƒัะปะพะฒะธัŽ
ga_nov[ ga_nov['source'] == "google" ]
### ั„ะธะปัŒั‚ั€ ะฟะพ ะดะฒัƒะผ ัƒัะปะพะฒะธัะผ ัะพะตะดะธะฝั‘ะฝะฝั‹ะผ ะปะพะณะธั‡ะตัะบะธะผ ะธ
ga_nov[(ga_nov['source'] == "google") & (ga_nov['sessions'] >= 10)]
### ั„ะธะปัŒั‚ั€ ะฟะพ ะดะฒัƒะผ ัƒัะปะพะฒะธัะผ ัะพะตะดะธะฝั‘ะฝะฝั‹ะผ ะปะพะณะธั‡ะตัะบะธะผ ะธะปะธ
ga_nov[(ga_nov['source'] == "google") | (ga_nov['sessions'] >= 10)]

๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„

๋ฐ์ดํ„ฐ ๋ถ„์„์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋Š” ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ๋ฌธ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ฒ€ํ† ํ•˜๋Š” ๋ชจ๋“  ํŒจํ‚ค์ง€์— ๋ถ„์‚ฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ์˜ˆ๋กœ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋Œ€ํ•œ, ๊ฐ์‹ค ํด๋ž˜์Šค์— ๋”ฐ๋ฅธ ํ•ญ๊ณต๊ถŒ ์ˆ˜์™€ ํ‰๊ท  ๋น„์šฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

R์˜ ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„: tidyverse, dplyr

ะ’ dplyr ์ด ๊ธฐ๋Šฅ์€ ๊ทธ๋ฃนํ™”์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. group_by(), ๊ทธ๋ฆฌ๊ณ  ์ง‘๊ณ„๋ฅผ ์œ„ํ•ด summarise(). ์‚ฌ์‹ค์€, dplyr ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค summarise_*(), ํ•˜์ง€๋งŒ ์ด ๊ธ€์˜ ๋ชฉ์ ์€ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ทธ๋Ÿฌํ•œ ์ •๊ธ€์— ๋“ค์–ด๊ฐ€์ง€๋Š” ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ง‘๊ณ„ ํ•จ์ˆ˜:

  • sum() โ€” ์š”์•ฝ
  • min() / max() โ€“ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’
  • mean() - ํ‰๊ท 
  • median() โ€” ์ค‘์•™๊ฐ’
  • length() - ์ˆ˜๋Ÿ‰

R์˜ ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„: dplyr

## dplyr
### ะณั€ัƒะฟะฟะธั€ะพะฒะบะฐ ะธ ะฐะณั€ะตะณะฐั†ะธั ัั‚ั€ะพะบ
group_by(titanic, Pclass) %>%
  summarise(passangers = length(PassengerId),
            avg_price  = mean(Fare))

๊ธฐ๋Šฅ์—์„œ group_by() ์šฐ๋ฆฌ๋Š” ํ…Œ์ด๋ธ”์„ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋Œ€ํ•œ์„ ๋ˆ„๋ฅธ ๋‹ค์Œ ํ•„๋“œ๋ฅผ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”ผํด๋ž˜์Šค, ์ด๋ฅผ ํ†ตํ•ด ํ…Œ์ด๋ธ”์„ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ์ด ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ %>% ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋จ summarise(), ํ•„๋“œ 2๊ฐœ๋ฅผ ๋” ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ†ตํ–‰์ธ ะธ ํ‰๊ท  ๊ฐ€๊ฒฉ. ๋จผ์ € ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ length() ํ‹ฐ์ผ“ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ์—๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ mean() ํ‰๊ท  ํ‹ฐ์ผ“ ๊ฐ€๊ฒฉ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

R์˜ ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„: data.table

ะ’ data.table ์ธ์ˆ˜๊ฐ€ ์ง‘๊ณ„์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. j ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ๋‘ ๋ฒˆ์งธ ์œ„์น˜๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ทธ๋ฃนํ™”๋ฅผ ์œ„ํ•ด by ๋˜๋Š” keyby, ์„ธ ๋ฒˆ์งธ ์œ„์น˜๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์ง‘๊ณ„ ํ•จ์ˆ˜ ๋ชฉ๋ก์€ ์— ์„ค๋ช…๋œ ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. dplyr, ์™œ๋ƒํ•˜๋ฉด ์ด๋Š” ๊ธฐ๋ณธ R ๊ตฌ๋ฌธ์˜ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

R์˜ ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„: data.table

## data.table
### ั„ะธะปัŒั‚ั€ะฐั†ะธั ัั‚ั€ะพะบ ะฟะพ ะพะดะฝะพะผัƒ ัƒัะปะพะฒะธัŽ
titanic[, .(passangers = length(PassengerId),
            avg_price  = mean(Fare)),
        by = Pclass]

Python์˜ ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„: pandas

๊ทธ๋ฃนํ™” pandas ๋น„์Šทํ•˜๋‹ค dplyrํ•˜์ง€๋งŒ ์ง‘๊ณ„๋Š” ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. dplyr ๋ณ„๋ง์”€์„์š” data.table.

๊ทธ๋ฃนํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. groupby(), ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ๊ทธ๋ฃนํ™”ํ•  ์—ด ๋ชฉ๋ก์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง‘๊ณ„๋ฅผ ์œ„ํ•ด ๋‹ค์Œ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. agg()์‚ฌ์ „์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ „ ํ‚ค๋Š” ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ปฌ๋Ÿผ์ด๊ณ , ๊ฐ’์€ ์ง‘๊ณ„ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

์ง‘๊ณ„ ํ•จ์ˆ˜:

  • sum() โ€” ์š”์•ฝ
  • min() / max() โ€“ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’
  • mean() - ํ‰๊ท 
  • median() โ€” ์ค‘์•™๊ฐ’
  • count() - ์ˆ˜๋Ÿ‰

๊ธฐ๋Šฅ reset_index() ์•„๋ž˜ ์˜ˆ์—์„œ๋Š” ์ค‘์ฒฉ๋œ ์ธ๋ฑ์Šค๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. pandas ๊ธฐ๋ณธ๊ฐ’์€ ๋ฐ์ดํ„ฐ ์ง‘๊ณ„ ํ›„์ž…๋‹ˆ๋‹ค.

์ƒ์ง• ๋‹ค์Œ ์ค„๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

Python์˜ ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„: pandas

# ะณั€ัƒะฟะฟะธั€ะพะฒะบะฐ ะธ ะฐะณั€ะตะณะฐั†ะธั ะดะฐะฝะฝั‹ั…
titanic.groupby(["Pclass"]).
    agg({'PassengerId': 'count', 'Fare': 'mean'}).
        reset_index()

ํ…Œ์ด๋ธ”์˜ ์ˆ˜์ง ์กฐ์ธ

๋™์ผํ•œ ๊ตฌ์กฐ์˜ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋กœ๋“œํ•œ ๋ฐ์ดํ„ฐ์—๋Š” ํ…Œ์ด๋ธ”์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ga_nov ะธ ga_dec. ์ด ํ…Œ์ด๋ธ”์€ ๊ตฌ์กฐ๊ฐ€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์—ด๊ณผ ์ด๋Ÿฌํ•œ ์—ด์˜ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

์ด๋Š” XNUMX์›”๊ณผ XNUMX์›”์— ๋Œ€ํ•œ Google Analytics์˜ ์—…๋กœ๋“œ์ž…๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ํ‘œ๋กœ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

R์˜ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ง์œผ๋กœ ๊ฒฐํ•ฉ: tidyverse, dplyr

ะ’ dplyr ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. bind_rows(), ํ…Œ์ด๋ธ”์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

R์˜ ํ–‰ ํ•„ํ„ฐ๋ง: dplyr

# ะ’ะตั€ั‚ะธะบะฐะปัŒะฝะพะต ะพะฑัŠะตะดะธะฝะตะฝะธะต ั‚ะฐะฑะปะธั†
## dplyr
bind_rows(ga_nov, ga_dec)

R์˜ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ง์œผ๋กœ ์กฐ์ธ: data.table

๋ณต์žกํ•˜์ง€๋„ ์•Š์œผ๋‹ˆ ํ™œ์šฉํ•ด ๋ณผ๊นŒ์š” rbind().

R์˜ ํ–‰ ํ•„ํ„ฐ๋ง: data.table

## data.table
rbind(ga_nov, ga_dec)

Python์—์„œ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ง์œผ๋กœ ์กฐ์ธ: pandas

ะ’ pandas ์ด ํ•จ์ˆ˜๋Š” ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. concat(), ์ด๋ฅผ ๊ฒฐํ•ฉํ•˜๋ ค๋ฉด ํ”„๋ ˆ์ž„ ๋ชฉ๋ก์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Python์—์„œ ๋ฌธ์ž์—ด ํ•„ํ„ฐ๋ง: pandas

# ะฒะตั€ั‚ะธะบะฐะปัŒะฝะพะต ะพะฑัŠะตะดะธะฝะตะฝะธะต ั‚ะฐะฑะปะธั†
pd.concat([ga_nov, ga_dec])

ํ…Œ์ด๋ธ”์˜ ์ˆ˜ํ‰ ์กฐ์ธ

ํ‚ค๋ฅผ ํ†ตํ•ด ๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ์—ด์„ ์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ถ€ ์ฐธ์กฐ ๋ฐ์ดํ„ฐ(์˜ˆ: ์ œํ’ˆ ๋น„์šฉ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒฉํŠธ ํ…Œ์ด๋ธ”(์˜ˆ: ํŒ๋งค ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํ…Œ์ด๋ธ”)์„ ๊ฐ•ํ™”ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

์กฐ์ธ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

์ด์ „์— ๋กœ๋“œ๋œ ํ…Œ์ด๋ธ”์—์„œ ๊ฑฐ๋Œ€ํ•œ ์šฐ๋ฆฌ์—๊ฒ ์นผ๋Ÿผ์ด ์žˆ์–ด์š” ์„ฑ๋ณ„, ์ด๋Š” ์Šน๊ฐ์˜ ์„ฑ๋ณ„ ์ฝ”๋“œ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค:

1 - ์—ฌ์„ฑ
2 - ๋‚จ์„ฑ

๋˜ํ•œ ์ฐธ๊ณ ์„œ์ธ ํ‘œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋ณ„. ์Šน๊ฐ์˜ ์„ฑ๋ณ„์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๋ ค๋ฉด ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์„ฑ๋ณ„ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋ณ„ ํ…Œ์ด๋ธ”๋กœ ๊ฑฐ๋Œ€ํ•œ.

R์˜ ์ˆ˜ํ‰ ํ…Œ์ด๋ธ” ์กฐ์ธ: tidyverse, dplyr

ะ’ dplyr ์ˆ˜ํ‰ ๊ฒฐํ•ฉ์—๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • inner_join()
  • left_join()
  • right_join()
  • full_join()
  • semi_join()
  • nest_join()
  • anti_join()

๋‚ด ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ left_join().

์ฒ˜์Œ ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๋กœ ์œ„์— ๋‚˜์—ด๋œ ํ•จ์ˆ˜๋Š” ์กฐ์ธํ•  ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๊ณ  ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ by ์กฐ์ธํ•  ์—ด์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

R์˜ ์ˆ˜ํ‰ ํ…Œ์ด๋ธ” ์กฐ์ธ: dplyr

# ะพะฑัŠะตะดะธะฝัะตะผ ั‚ะฐะฑะปะธั†ั‹
left_join(titanic, gender,
          by = c("Sex" = "id"))

R์˜ ํ…Œ์ด๋ธ” ์ˆ˜ํ‰ ์กฐ์ธ: data.table

ะ’ data.table ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค๋กœ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. merge().

data.table์˜ merge() ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ธ์ˆ˜

  • x, y โ€” ์กฐ์ธํ•  ํ…Œ์ด๋ธ”
  • by โ€” ๋‘ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์ด ๊ฐ™์€ ๊ฒฝ์šฐ ์กฐ์ธํ•  ํ‚ค๊ฐ€ ๋˜๋Š” ์—ด
  • by.x, by.y โ€” ํ…Œ์ด๋ธ”์— ์„œ๋กœ ๋‹ค๋ฅธ ์ด๋ฆ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณ‘ํ•ฉํ•  ์—ด ์ด๋ฆ„
  • all, all.x, all.y โ€” ์กฐ์ธ ์œ ํ˜•, all์€ ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. all.x๋Š” LEFT JOIN ์ž‘์—…์— ํ•ด๋‹นํ•˜๊ณ (์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋จ) all.y โ€” RIGHT JOIN ์ž‘์—…(๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ๊ทธ๋Œ€๋กœ ๋‘ก๋‹ˆ๋‹ค).

R์˜ ํ…Œ์ด๋ธ” ์ˆ˜ํ‰ ์กฐ์ธ: data.table

# ะพะฑัŠะตะดะธะฝัะตะผ ั‚ะฐะฑะปะธั†ั‹
merge(titanic, gender, by.x = "Sex", by.y = "id", all.x = T)

Python์˜ ์ˆ˜ํ‰ ํ…Œ์ด๋ธ” ์กฐ์ธ: pandas

๋ฟ๋งŒ ์•„๋‹ˆ๋ผ data.table์— pandas ์ด ํ•จ์ˆ˜๋Š” ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. merge().

Pandas์˜ merge() ํ•จ์ˆ˜ ์ธ์ˆ˜

  • ๋ฐฉ๋ฒ• โ€” ์—ฐ๊ฒฐ ์œ ํ˜•: ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ, ์™ธ๋ถ€, ๋‚ด๋ถ€
  • on โ€” ๋‘ ํ…Œ์ด๋ธ”์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ ํ‚ค์ธ ์—ด
  • left_on, right_on โ€” ํ…Œ์ด๋ธ”์— ๋‹ค๋ฅธ ์ด๋ฆ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ‚ค ์—ด์˜ ์ด๋ฆ„

Python์˜ ์ˆ˜ํ‰ ํ…Œ์ด๋ธ” ์กฐ์ธ: pandas

# ะพะฑัŠะตะดะธะฝัะตะผ ะฟะพ ะบะปัŽั‡ัƒ
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")

๊ธฐ๋ณธ ์ฐฝ ๊ธฐ๋Šฅ ๋ฐ ๊ณ„์‚ฐ๋œ ์—ด

์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ์ง‘๊ณ„ ํ•จ์ˆ˜์™€ ์˜๋ฏธ๊ฐ€ ์œ ์‚ฌํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ถ„์„์—๋„ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง‘๊ณ„ ํ•จ์ˆ˜์™€ ๋‹ฌ๋ฆฌ ์ฐฝ ํ•จ์ˆ˜๋Š” ๋‚˜๊ฐ€๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ํ–‰ ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐฝ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ผ๋ถ€ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ•„๋“œ ๋˜๋Š” ์—ฌ๋Ÿฌ ํ•„๋“œ์˜ ๊ฐ’์œผ๋กœ. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ์ฐฝ์—์„œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋Š” ๊ฐ ์ค„์— ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์˜ ์ด ํ–‰ ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ .

์˜ˆ๋ฅผ ๋“ค์–ด ํ…Œ์ด๋ธ”์„ ๋ณด์ž ๊ฑฐ๋Œ€ํ•œ. ๊ฐ์‹ค ํด๋ž˜์Šค ๋‚ด์—์„œ ๊ฐ ํ•ญ๊ณต๊ถŒ์˜ ๊ฐ€๊ฒฉ์ด ๋ช‡ ํผ์„ผํŠธ์ธ์ง€ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๊ฐ ์ค„์— ์ด ์ค„์˜ ํ‹ฐ์ผ“์ด ์†ํ•œ ํ˜„์žฌ ๊ฐ์‹ค ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํ‹ฐ์ผ“์˜ ์ด ๋น„์šฉ์„ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ ๊ฐ ํ‹ฐ์ผ“์˜ ๋น„์šฉ์„ ๋™์ผํ•œ ๊ฐ์‹ค ํด๋ž˜์Šค์˜ ๋ชจ๋“  ํ‹ฐ์ผ“์˜ ์ด ๋น„์šฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. .

R์˜ ์ฐฝ ํ•จ์ˆ˜: tidyverse, dplyr

ํ–‰ ๊ทธ๋ฃนํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ƒˆ ์—ด์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด dplyr ๊ธฐ๋Šฅ์„ ์ œ๊ณต mutate().

๋ฐ์ดํ„ฐ๋ฅผ ํ•„๋“œ๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜๋ฉด ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”ผํด๋ž˜์Šค ์ƒˆ ์—ด์˜ ํ•„๋“œ๋ฅผ ํ•ฉ์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์š”๊ธˆ. ๋‹ค์Œ์œผ๋กœ ํ…Œ์ด๋ธ”์˜ ๊ทธ๋ฃน์„ ํ•ด์ œํ•˜๊ณ  ํ•„๋“œ ๊ฐ’์„ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์š”๊ธˆ ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•œ ์ผ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

R์˜ ์ฐฝ ํ•จ์ˆ˜: dplyr

group_by(titanic, Pclass) %>%
  mutate(Pclass_cost = sum(Fare)) %>%
  ungroup() %>%
  mutate(ticket_fare_rate = Fare / Pclass_cost)

R์˜ ์ฐฝ ํ•จ์ˆ˜: data.table

์†”๋ฃจ์…˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. dplyr, ํ…Œ์ด๋ธ”์„ ํ•„๋“œ๋ณ„๋กœ ์ฐฝ์œผ๋กœ ๋ถ„ํ• ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”ผํด๋ž˜์Šค. ๊ฐ ํ–‰์— ํ•ด๋‹นํ•˜๋Š” ๊ทธ๋ฃน์˜ ๊ธˆ์•ก์„ ์ƒˆ ์—ด์— ์ถœ๋ ฅํ•˜๊ณ  ํ•ด๋‹น ๊ทธ๋ฃน์˜ ๊ฐ ํ‹ฐ์ผ“ ๋น„์šฉ์˜ ๋ชซ์„ ๊ณ„์‚ฐํ•˜๋Š” ์—ด์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ์—ด์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด data.table ๊ตํ™˜์› ์žˆ์Œ :=. ์•„๋ž˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค. data.table

R์˜ ์ฐฝ ํ•จ์ˆ˜: data.table

titanic[,c("Pclass_cost","ticket_fare_rate") := .(sum(Fare), Fare / Pclass_cost), 
        by = Pclass]

Python์˜ ์ฐฝ ํ•จ์ˆ˜: pandas

์ƒˆ ์—ด์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• pandas - ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ assign(). ํ–‰์„ ๊ทธ๋ฃนํ™”ํ•˜์ง€ ์•Š๊ณ  ๊ฐ์‹ค ํด๋ž˜์Šค๋ณ„ ํ‹ฐ์ผ“ ๋น„์šฉ์„ ์š”์•ฝํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. transform().

๋‹ค์Œ์€ ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€ํ•˜๋Š” ์†”๋ฃจ์…˜์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๋Œ€ํ•œ ๊ฐ™์€ 2์—ด.

Python์˜ ์ฐฝ ํ•จ์ˆ˜: pandas

titanic.assign(Pclass_cost      =  titanic.groupby('Pclass').Fare.transform(sum),
               ticket_fare_rate = lambda x: x['Fare'] / x['Pclass_cost'])

๊ธฐ๋Šฅ ๋ฐ ๋ฉ”์†Œ๋“œ ๋Œ€์‘ํ‘œ

๋‹ค์Œ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ณ ๋ คํ•œ ํŒจํ‚ค์ง€์˜ ๋ฐ์ดํ„ฐ๋กœ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ๊ฐ„์˜ ๋Œ€์‘ ํ‘œ์ž…๋‹ˆ๋‹ค.

๊ธฐ์ˆ 
๊น”๋”ํ•œ
๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”
ํŒฌ๋”

๋ฐ์ดํ„ฐ ๋กœ๋“œ
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ
tibble()
data.table()
dict() + from_dict()

์—ด ์„ ํƒ
select()
๋…ผ์Ÿ j, ๋Œ€๊ด„ํ˜ธ ์•ˆ์˜ ๋‘ ๋ฒˆ์งธ ์œ„์น˜
๋Œ€๊ด„ํ˜ธ ์•ˆ์— ํ•„์ˆ˜ ์—ด ๋ชฉ๋ก์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. / drop() / filter() / select_dtypes()

ํ–‰ ํ•„ํ„ฐ๋ง
filter()
๋…ผ์Ÿ i, ๋Œ€๊ด„ํ˜ธ ์•ˆ์˜ ์ฒซ ๋ฒˆ์งธ ์œ„์น˜
๋Œ€๊ด„ํ˜ธ ์•ˆ์— ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค / filter()

๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„
group_by() + summarise()
์ธ์ˆ˜๋“ค j + by
groupby() + agg()

ํ…Œ์ด๋ธ”์˜ ์ˆ˜์ง ํ•ฉ์ง‘ํ•ฉ(UNION)
bind_rows()
rbind()
concat()

ํ…Œ์ด๋ธ”์˜ ์ˆ˜ํ‰ ์กฐ์ธ(JOIN)
left_join() / *_join()
merge()
merge()

๊ธฐ๋ณธ ์ฐฝ ๊ธฐ๋Šฅ ๋ฐ ๊ณ„์‚ฐ๋œ ์—ด ์ถ”๊ฐ€
group_by() + mutate()
๋…ผ์Ÿ j ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ := + ์ธ์ˆ˜ by
transform() + assign()

๊ฒฐ๋ก 

์•„๋งˆ๋„ ๊ธฐ์‚ฌ์—์„œ ๋‚˜๋Š” ๊ฐ€์žฅ ์ตœ์ ์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ตฌํ˜„์„ ์„ค๋ช…ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์˜๊ฒฌ์—์„œ ๋‚ด ์‹ค์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์‚ฌ์— ์ œ๊ณต๋œ ์ •๋ณด๋ฅผ R/Python์—์„œ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•œ ๋‹ค๋ฅธ ๊ธฐ์ˆ ๋กœ ๋ณด์™„ํ•˜๋ฉด ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๊ธฐ์‚ฌ๊ฐ€ ๋งˆ์Œ์— ๋“œ์…จ๋‹ค๋ฉด ์ œ ์ƒˆ๋กœ์šด ๊ตฌ๋…์ž๊ฐ€ ์ƒ๊ฒจ์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์œ ํŠœ๋ธŒ ะธ ์ด์•ผ๊ธฐ ์ฑ„๋„.

ะžะฟั€ะพั

๋‹ค์Œ ์ค‘ ์–ด๋–ค ํŒจํ‚ค์ง€๋ฅผ ์ž‘์—…์— ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”?

๋Œ“๊ธ€์— ์„ ํƒ ์ด์œ ๋ฅผ ์ ์–ด์ฃผ์„ธ์š”.

๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž๋งŒ ์„ค๋ฌธ ์กฐ์‚ฌ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ์ œ๋ฐœ

์–ด๋–ค ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ๋‹ˆ๊นŒ(์—ฌ๋Ÿฌ ์˜ต์…˜ ์„ ํƒ ๊ฐ€๋Šฅ)

  • 45,2%tidyverse19

  • 33,3%๋ฐ์ดํ„ฐ.ํ…Œ์ด๋ธ”14

  • 54,8%ํŒฌ๋”23

42๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํˆฌํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. 9๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๊ถŒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€