์ธํฐ๋ท์์ R ๋๋ Python์ ๊ฒ์ํ๋ฉด ๋ฐ์ดํฐ ์์ ์ ๋ ์ข๊ณ , ๋น ๋ฅด๊ณ , ํธ๋ฆฌํ ์ฃผ์ ์ ๋ํ ์๋ฐฑ๋ง ๊ฐ์ ๊ธฐ์ฌ์ ์ ํฌ๋ก๋ฏธํฐ์ ๋ฌํ๋ ํ ๋ก ์ ์ฐพ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ถํํ๋ ์ด๋ฌํ ๋ชจ๋ ๊ธฐ์ฌ์ ๋ถ์์ ํน๋ณํ ์ ์ฉํ์ง ์์ต๋๋ค.
์ด ๊ธฐ์ฌ์ ๋ชฉ์ ์ ๋ ์ธ์ด ์ค ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํจํค์ง์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ์ ์ ๋น๊ตํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์๋ค์ด ์์ง ๋ชจ๋ฅด๋ ๊ฒ์ ๋นจ๋ฆฌ ์ตํ๋๋ก ๋์์ฃผ์ธ์. Python์ผ๋ก ๊ธ์ ์ฐ๋ ์ฌ๋๋ค์ R์์ ๋์ผํ ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ทธ ๋ฐ๋๋ก ์ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
์ด ๊ธฐ์ฌ์์๋ R์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํจํค์ง์ ๊ตฌ๋ฌธ์ ๋ถ์ํ ๊ฒ์
๋๋ค. ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋ ํจํค์ง์
๋๋ค. tidyverse
๊ทธ๋ฆฌ๊ณ ํจํค์ง๋ data.table
. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๋น๊ตํ์ญ์์ค. pandas
, Python์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ฐ์ดํฐ ๋ถ์ ํจํค์ง์
๋๋ค.
Python๊ณผ R์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ถ์์ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ๋ก๋ฉ๋ถํฐ ๋ถ์ ์ฐฝ ๊ธฐ๋ฅ ์ํ๊น์ง ๋จ๊ณ๋ณ๋ก ์งํํ๊ฒ ์ต๋๋ค.
๋ด์ฉ
๊ณ ๋ ค ์ค์ธ ํจํค์ง ์ค ํ๋์์ ์ผ๋ถ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์์ด๋ฒ๋ฆฐ ๊ฒฝ์ฐ ์ด ๋ฌธ์๋ฅผ ์นํธ ์ํธ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
R๊ณผ Python์ ์ฃผ์ ๊ตฌ๋ฌธ ์ฐจ์ด์
1.1.ํจํค์ง ๊ธฐ๋ฅ์ ์ก์ธ์ค
1.2.๊ณผ์
1.3.์ธ๋ฑ์ฑ
1.4.๋ฐฉ๋ฒ๊ณผ OOP
1.5.ํ์ดํ๋ผ์ธ
1.6.๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ํจํค์ง์ ๋ํ ๋ช ๋ง๋
2.1.๊น๋ํ
2.2.๋ฐ์ดํฐ ํ ์ด๋ธ
2.3.ํฌ๋ ํจํค์ง ์ค์น ๋ฐ์ดํฐ ๋ก๋ ๋ฐ์ดํฐํ๋ ์ ์์ฑ ํ์ํ ์ด ์ ํ ํ ํํฐ๋ง ๊ทธ๋ฃนํ ๋ฐ ์ง๊ณ ํ ์ด๋ธ์ ์์ง ํฉ์งํฉ(UNION) ํ ์ด๋ธ์ ์ํ ์กฐ์ธ(JOIN) ๊ธฐ๋ณธ ์ฐฝ ๊ธฐ๋ฅ ๋ฐ ๊ณ์ฐ๋ ์ด R๊ณผ Python์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๊ฐ์ ๋์ํ ๊ฒฐ๋ก ์ด๋ค ํจํค์ง๋ฅผ ์ฌ์ฉํ๋์ง์ ๋ํ ๊ฐ๋จํ ์ค๋ฌธ์กฐ์ฌ
๋ฐ์ดํฐ ๋ถ์์ ๊ด์ฌ์ด ์์ผ์๋ฉด ์ ๊ธ์ ์ฐพ์๋ณด์ธ์.
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๋ฅผ ๊ตฌํํฉ๋๋ค. ์ด์ ๋ํด ๊ธฐ์ฌ์์ ์ผ์ต๋๋ค. 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 <-
.
์์ ๋ชจ๋ ๋ด์ฉ์ ์ด ๋ฐ์ ๋ง๋ณด๋ค ๋ ์ ์ค๋ช
๋ฉ๋๋ค.
ะ 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
RStudio์ ์์ ์ฐ๊ตฌ ๊ณผํ์์ธ Hedley 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
๋ฏธ๊ตญ์ธ ์จ์ค ๋งฅํค๋(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 ๋ชจ๋ ๋ก์ปฌ ํ์ผ, ์ธํฐ๋ท ํ์ผ, ์น ์ฌ์ดํธ, ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ ๋ชจ๋ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์๋ ๊ด๋ฒ์ํ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ๊ธฐ์ฌ ์ ์ฒด์์ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Google Analytics์์ ๋ ๊ฐ์ง ๋ค์ด๋ก๋.
- ํ์ดํ๋ ์น๊ฐ ๋ฐ์ดํฐ์ธํธ.
๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ด ์์ ์์ด์
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์์ ์ด ์ ํ: 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์ ํ ํํฐ๋ง: 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์ ๋ฐ์ดํฐ ๊ทธ๋ฃนํ ๋ฐ ์ง๊ณ: 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. ์ด ํ ์ด๋ธ์ ๊ตฌ์กฐ๊ฐ ๋์ผํฉ๋๋ค. ๋์ผํ ์ด๊ณผ ์ด๋ฌํ ์ด์ ๋ฐ์ดํฐ ์ ํ์ด ์์ต๋๋ค.
์ด๋ 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])
ํ ์ด๋ธ์ ์ํ ์กฐ์ธ
ํค๋ฅผ ํตํด ๋ ๋ฒ์งธ ํ ์ด๋ธ์ ์ด์ ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์ ์ถ๊ฐํ๋ ์์ ์ ๋๋ค. ์ด๋ ์ผ๋ถ ์ฐธ์กฐ ๋ฐ์ดํฐ(์: ์ ํ ๋น์ฉ)๋ฅผ ์ฌ์ฉํ์ฌ ํฉํธ ํ ์ด๋ธ(์: ํ๋งค ๋ฐ์ดํฐ๊ฐ ์๋ ํ ์ด๋ธ)์ ๊ฐํํ ๋ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
์กฐ์ธ์๋ ์ฌ๋ฌ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค.
์ด์ ์ ๋ก๋๋ ํ ์ด๋ธ์์ ๊ฑฐ๋ํ ์ฐ๋ฆฌ์๊ฒ ์นผ๋ผ์ด ์์ด์ ์ฑ๋ณ, ์ด๋ ์น๊ฐ์ ์ฑ๋ณ ์ฝ๋์ ํด๋นํฉ๋๋ค:
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์ ์ฐฝ ํจ์: 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