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

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

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

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

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

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์—์„œ ๋‹จ์ผ ๋“ฑํ˜ธ๋Š” ์ฃผ๋กœ ํ•จ์ˆ˜ ์ธ์ˆ˜์— ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ์—์„œ๋Š” ํ• ๋‹น์€ ๋‹จ ํ•˜๋‚˜์˜ ๋“ฑํ˜ธ ๊ธฐํ˜ธ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. obj_name = value.

์ธ๋ฑ์‹ฑ

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

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

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

๋ฐฉ๋ฒ• ๋ฐ OOP

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

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

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

์•„๋งˆ๋„ ์ด๊ฒŒ ๊ทธ ์ด๋ฆ„์ผ ๊ฑฐ์•ผ pandas ์ „์ ์œผ๋กœ ์ •ํ™•ํ•˜์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ, ์˜๋ฏธ๋ฅผ ์„ค๋ช…ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

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

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

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

์•„๋‹ˆ๋ฉด ๋” ๋‚˜์˜๊ธด ํ•˜์ง€๋งŒ 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์—์„œ์˜ ์ด๋ฆ„

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

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

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

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

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

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

๊น”๋”ํ•œ

ะžั„ะธั†ะธะฐะปัŒะฝั‹ะน์˜ ัะฐะนั‚ : tidyverse.org
๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด R ๋˜๋Š” Python ์ค‘ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค! pandas์—์„œ tidyverse ๋ฐ data.table๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
๋„์„œ๊ด€ tidyverse RStudio์˜ ์ˆ˜์„ ์—ฐ๊ตฌ์›์ธ Hadley 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-๋ฐ์ดํ„ฐํ…Œ์ด๋ธ”๋‹ท์ปด

์ €์ž 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 ๋ฏธ๊ตญ์ธ ์›จ์Šค ๋งคํ‚ค๋‹ˆ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํ•  ๋•Œ, 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, readr

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

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

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

๋ธŒ๋ฃธ ๋Œ€ ๋ฆฌ๋”
๋ฆด๋ฆฌ์Šค๋Š” ๋ฌด์Šจ ๋œป์ธ๊ฐ€์š”? 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์— ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ: readr

# 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์—์„œ DataFrame ๋งŒ๋“ค๊ธฐ: 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์—์„œ DataFrame ๋งŒ๋“ค๊ธฐ: pandas

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

Python์—์„œ DataFrame ๋งŒ๋“ค๊ธฐ: 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]

์žฅ์†Œ :
i โ€” ์ฆ‰, ํ–‰์œผ๋กœ ํ•„ํ„ฐ๋ง
j โ€” select|update|do, ์ฆ‰ ์—ด์„ ์„ ํƒํ•˜๊ณ  ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
โ€” ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™”

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]

์žฅ์†Œ :
i โ€” ์ฆ‰, ํ–‰์œผ๋กœ ํ•„ํ„ฐ๋ง
j โ€” select|update|do, ์ฆ‰ ์—ด์„ ์„ ํƒํ•˜๊ณ  ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
โ€” ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™”

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

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

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

R์—์„œ ํ–‰ ํ•„ํ„ฐ๋ง: data.table

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

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

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

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

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

ํŒŒ์ด์ฌ์—์„œ ๋ฌธ์ž์—ด ํ•„ํ„ฐ๋ง: 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, 3๋ฒˆ์งธ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•จ.

์ด ๊ฒฝ์šฐ์˜ ์ง‘๊ณ„ ํ•จ์ˆ˜ ๋ชฉ๋ก์€ ๋‹ค์Œ์— ์„ค๋ช…๋œ ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. 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 ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ง‘๊ณ„ ํ›„์— ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

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

ํŒŒ์ด์ฌ์—์„œ์˜ ๊ทธ๋ฃนํ™”์™€ ์ง‘๊ณ„: ํŒ๋‹ค์Šค

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

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

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

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

์ด๋Š” 11์›”๊ณผ 12์›”์˜ 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)

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

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

ํŒŒ์ด์ฌ์—์„œ ๋ฌธ์ž์—ด ํ•„ํ„ฐ๋ง: 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)

ํŒŒ์ด์ฌ์—์„œ ํ…Œ์ด๋ธ”์˜ ์ˆ˜ํ‰ ์กฐ์ธ: pandas

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

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

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

ํŒŒ์ด์ฌ์—์„œ ํ…Œ์ด๋ธ”์˜ ์ˆ˜ํ‰ ์กฐ์ธ: 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]

ํŒŒ์ด์ฌ์˜ ์œˆ๋„์šฐ ํ•จ์ˆ˜: pandas

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

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

ํŒŒ์ด์ฌ์˜ ์œˆ๋„์šฐ ํ•จ์ˆ˜: 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

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster