์ธํฐ๋ท์์ R์ด๋ Python์ ๊ฒ์ํ๋ฉด ๋ฐ์ดํฐ ์์ ์ ์ด๋ค ๊ฒ์ด ๋ ์ข๊ณ , ๋ ๋น ๋ฅด๊ณ , ๋ ํธ๋ฆฌํ์ง์ ๋ํ ์๋ฐฑ๋ง ๊ฐ์ ๊ธ๊ณผ ์ ํฌ๋ก๋ฏธํฐ์ ๋ฌํ๋ ํ ๋ก ์ ์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ํ๊น๊ฒ๋ ์ด๋ฌํ ๋ชจ๋ ๊ธ๊ณผ ๋ ผ์์ ํน๋ณํ ์ด์ ์ ๊ฐ์ ธ๋ค์ฃผ์ง ๋ชปํฉ๋๋ค.

์ด ๊ธ์ ๋ชฉ์ ์ ๋ ์ธ์ด์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํจํค์ง์ ์ฃผ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฒ์ ๋น๊ตํ๋ ๊ฒ์ ๋๋ค. ๋ํ, ์์ง ๋ชจ๋ฅด๋ ๊ธฐ๋ฒ์ ์ต๋ํ ๋นจ๋ฆฌ ์ตํ ์ ์๋๋ก ๋๊ณ ์ ํฉ๋๋ค. Python์ผ๋ก ์ฝ๋ฉํ๋ ์ฌ๋๋ค์๊ฒ๋ R์์ ๋์ผํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๊ณ , ๋ฐ๋๋ก R์์ Python์ผ๋ก ์ฝ๋ฉํ๋ ์ฌ๋๋ค์๊ฒ๋ R์์ ๋์ผํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋๋ค.
์ด ๊ธฐ์ฌ์์๋ R์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํจํค์ง์ ๊ตฌ๋ฌธ์ ๋ถ์ํฉ๋๋ค. ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋ ํจํค์ง์
๋๋ค. tidyverse, ํจํค์ง๋ ํฌํจ data.table. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ ๊ตฌ๋ฌธ์ ๋น๊ตํด ๋ณด์ pandas, ํ์ด์ฌ์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ฐ์ดํฐ ๋ถ์ ํจํค์ง์
๋๋ค.
Python๊ณผ R์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ก๋๋ถํฐ ๋ถ์ ๋ฐ ์๋์ฐ ํจ์ ์ํ๊น์ง ์ ์ฒด ๋ฐ์ดํฐ ๋ถ์ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ด์ฉ
์ด ๋ฌธ์๋ ๊ณ ๋ ค ์ค์ธ ํจํค์ง ์ค ํ๋์์ ์ผ๋ถ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์์ด๋ฒ๋ฆฐ ๊ฒฝ์ฐ ์์ฝ์ง๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.

1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
2.1.
2.2.
2.3.
๋ฐ์ดํฐ ๋ถ์์ ๊ด์ฌ์ด ์์ผ์๋ค๋ฉด ๋ค์์ ์ฐพ์ผ์ค ์ ์์ต๋๋ค. ะธ ์ฑ๋. ๋๋ถ๋ถ์ ์ฝํ ์ธ ๋ 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์ ํจ์ํ ์ธ์ด์ด๋ฉฐ, ๋ชจ๋ ๊ธฐ๋ฅ์ ํจ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ๋ฐ๋ผ์ 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 <-.
์ด ๋ฐ์ ์์์ ์ค๋ช
ํ ๋ชจ๋ ๋ด์ฉ์ ๋ง๋ก ํํํ๋ ๊ฒ๋ณด๋ค ๋ ์ ๋ณด์ฌ์ค๋๋ค.

ะ 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 RStudio์ ์์ ์ฐ๊ตฌ์์ธ Hadley Wickham์ด ์์ฑํ์ต๋๋ค. tidyverse ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ํํ๋ ์ธ์์ ์ธ ํจํค์ง ์ธํธ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ทธ ์ค 5๊ฐ๋ CRAN ์ ์ฅ์์์ ๊ฐ์ฅ ๋ง์ด ๋ค์ด๋ก๋๋ 10๊ฐ ํจํค์ง์ ํฌํจ๋ฉ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํต์ฌ์ ๋ค์ ํจํค์ง๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. ์ด๋ฌํ ๊ฐ ํจํค์ง๋ ํน์ ๋ฌธ์ ํด๊ฒฐ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด dplyr ๋ฐ์ดํฐ ์กฐ์์ ์ํด ์ค๊ณ๋จ tidyr ๋ฐ์ดํฐ๋ฅผ ๊น๋ํ ํํ๋ก ๊ฐ์ ธ์ค๋ ค๋ฉด, stringr ๋ฌธ์์ด ์์
์ด ๋ ์ฌ์์ง๋๋ค. ggplot2 ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ฐ์ดํฐ ์๊ฐํ ๋๊ตฌ ์ค ํ๋์
๋๋ค.
์ด์ tidyverse ๊ตฌ๋ฌธ์ด ๊ฐ๋จํ๊ณ ๊ฐ๋
์ฑ์ด ๋ฐ์ด๋๋ฉฐ, ์ฌ๋ฌ ๋ฉด์์ SQL ์ฟผ๋ฆฌ ์ธ์ด์ ์ ์ฌํฉ๋๋ค.
๋ฐ์ดํฐ ํ ์ด๋ธ
ะัะธัะธะฐะปัะฝัะน์ ัะฐะนั :
์ ์ data.table H2O.ai์ Matt Dole์
๋๋ค.
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ 2006๋ ์ ์ฒ์ ๊ณต๊ฐ๋์์ต๋๋ค.
ํจํค์ง ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ํธ๋ฆฌํ์ง ์์ต๋๋ค. tidyverse R์ ๊ธฐ์กด ๋ฐ์ดํฐํ๋ ์๊ณผ ๋ ๋น์ทํ์ง๋ง, ๋์์ ๊ธฐ๋ฅ์ด ์๋นํ ํ์ฅ๋์์ต๋๋ค.
์ด ํจํค์ง์ ํ
์ด๋ธ์ ๋ํ ๋ชจ๋ ์กฐ์์ ๋๊ดํธ๋ก ์ค๋ช
๋์ด ์์ผ๋ฉฐ ๊ตฌ๋ฌธ์ ๋ฒ์ญํ๋ฉด data.table SQL์์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. data.table[ WHERE, SELECT, GROUP BY ]
์ด ํจํค์ง์ ์ฅ์ ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์๋์ ๋๋ค.
ํฌ๋
ะัะธัะธะฐะปัะฝัะน์ ัะฐะนั :
์ด ๋์๊ด์ ์ด๋ฆ์ ๋ค์ฐจ์์ ์ผ๋ก ๊ตฌ์กฐํ๋ ์ ๋ณด ์ธํธ๋ฅผ ์ค๋ช ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ ์ฉ์ด์ธ "ํจ๋ ๋ฐ์ดํฐ"์์ ์ ๋๋์์ต๋๋ค.
์ ์ 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์ ๋ก์ปฌ ํ์ผ, ์ธํฐ๋ท ํ์ผ, ์น์ฌ์ดํธ, ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ ์ด๋ค ์์ค์์๋ ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ ์๋ ๊ด๋ฒ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.

์ด ๋ฌธ์์์๋ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Google Analytics์์ ๋ ๋ฒ ๋ค์ด๋ก๋ํ์ต๋๋ค.
- ํ์ดํ๋ ์น๊ฐ ๋ฐ์ดํฐ ์ธํธ.
๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ด ๊ฒ์ ๋๋ค 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์์ ์ด ์ ํ: 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์์ ํ ํํฐ๋ง: 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์์ ๋ฐ์ดํฐ ๊ทธ๋ฃนํ ๋ฐ ์ง๊ณ: 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()์์ง ํ ์ด๋ธ ์กฐ์ธ
๋์ผํ ๊ตฌ์กฐ์ ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ ๊ฒฐํฉํ๋ ์์ ์ ๋๋ค. ๋ก๋ํ ๋ฐ์ดํฐ์๋ ํ ์ด๋ธ์ด ํฌํจ๋์ด ์์ต๋๋ค. ๊ฐ_๋ ธ๋ธ ะธ ๊ฐ_๋ฐํฌ์ด๋ฌํ ํ ์ด๋ธ์ ๊ตฌ์กฐ๊ฐ ๋์ผํฉ๋๋ค. ์ฆ, ํด๋น ์ด๊ณผ ์ด์ ๋ฐ์ดํฐ ์ ํ์ด ๋์ผํฉ๋๋ค.

์ด๋ 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])์ํ ํ ์ด๋ธ ์กฐ์ธ
๋ ๋ฒ์งธ ํ ์ด๋ธ์ ์ด์ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์ ์ถ๊ฐํ๋ ์ฐ์ฐ์ ๋๋ค. ํฉํธ ํ ์ด๋ธ(์: ํ๋งค ๋ฐ์ดํฐ๊ฐ ์๋ ํ ์ด๋ธ)์ ์ฐธ์กฐ ๋ฐ์ดํฐ(์: ์ํ ์๊ฐ)๋ฅผ ์ถ๊ฐํ ๋ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.

ํตํฉ์๋ ์ฌ๋ฌ ์ ํ์ด ์์ต๋๋ค.

์ด์ ์ ๋ก๋๋ ํ ์ด๋ธ์์ ๊ฑฐ๋ํ ์ฐ๋ฆฌ๋ ์ด์ด ์์ด์ ์ฑ๋ณ์ด๋ ์น๊ฐ์ ์ฑ๋ณ ์ฝ๋์ ํด๋นํฉ๋๋ค.
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์ ์๋์ฐ ํจ์: 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
