ํ ๊ณณ์์ ์๊ตฌ ์ฌํญ์ ์์งํ๊ณ _๋กค๋ง ๊ธฐ๋ฅ_ ๊ธฐ๋ฅ(_๋กค๋ง ์ง๊ณ_, _์ฌ๋ผ์ด๋ฉ ์ฐฝ_ ๋๋ _์ด๋ ํ๊ท _/_์ด๋ ์ง๊ณ_๋ผ๊ณ ๋ ํจ)์ ๋ค๋ฃจ๊ธฐ ์ํด ์ด ๋ฌธ์ ๋ฅผ ์์ฑํ ~4๋ ๋ ํ ๋ก ์ ์๋ก ๊ณ ์น๊ธฐ ์ํด.
์ ์๋ rollmean
๊ตฌํ, ๋จ์ํ.
x = data.table(v1=1:5, v2=1:5)
k = c(2, 3)
i - single column
j - single window
m - int referring to single row
w - current row's sum of rolling window
r - answer for each i, j
md5-be70673ef4a3bb883d4f334bd8fadec9
for i in x
for j in k
r = NA_real_
w = 0
for m in 1:length(i)
w = w + i[m]
w = w - i[m-j]
r[m] = w / j
์, ๋ ๋ง์ ๋กค๋ง ๊ธฐ๋ฅ์ด ๋์ผํ ๊ธฐ๋ณธ ์์ด๋์ด๋ฅผ ๋ฐ๋ฆ
๋๋ค(
๋กค๋ง ํ์ค ํธ์ฐจ/๊ธฐ๋ ๊ธฐ๋ฐ ๋ชจ๋ฉํธ ๋ฐ ๋ชจ๋ ํจ์
+ ๋์ ๋ฐ์ ๊ฐ๋ฅํ *๋ฅผ ์ฌ์ฉํ์ฌ ๋ด์์ ์ง๊ณํ๋ ๋กค ์ ํ๊ณผ ๊ฐ์
์ฐฝ
์ ๋ ํญ์ ๋กค๋ง ์ฐฝ ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๊ฒน์น๋ ๊ทธ๋ฃน(์ฐฝ)์ผ๋ก ๊ทธ๋ฃนํ ํ๋ ๊ฒ์ผ๋ก ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด API๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ์ ๋๋ค.
DT[i, j,
by = roll(width=5, align="center")]
๊ทธ๋ฐ ๋ค์ j
์ mean(A)
๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ๋ด๋ถ์ ์ผ๋ก rollmean(A)
๋ฐ๊ฟ ์ ์์ต๋๋ค. ๋ฐ๋ก ์ง๊ธ gmean()
๋ก ํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋๋ j
๋ ์์๋ก ๋ณต์กํ ๊ธฐ๋ฅ์ ํฌํจํ ์ ์์ต๋๋ค(์: ๊ฐ ์ฐฝ์ ๋ํด ํ๊ท ์คํ). ์ด ๊ฒฝ์ฐ .SD
data.table์ ์ ๊ณตํฉ๋๋ค. -- ์ ํํ๋ ๊ทธ๋ฃน๊ณผ ๋์ผํฉ๋๋ค. ์ง๊ธ ๋ฐ๋ก.
์ด๋ ๊ฒ ํ๋ฉด 10๊ฐ ์ด์์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋์ ํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ data.table-y์ ์ ์ ๋ ๋๊ปด์ง๋๋ค.
๋ค ๋์ํฉ๋๋ค
2018๋
4์ 21์ผ ํ ์์ผ ์คํ 3:38 Pasha Stetsenko [email protected]
์ผ๋ค:
๋๋ ํญ์ ๋กค๋ง ์ฐฝ ๊ธฐ๋ฅ์ ๊ทธ๋ฃนํ ํ๋ ๊ฒ์ผ๋ก ์์ํ์ต๋๋ค.
๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ๋ฌ ๊ฒน์น๋ ๊ทธ๋ฃน(์ฐฝ)์ผ๋ก ๋ง๋ญ๋๋ค. ๊ทธ๋ฌ๋ฉด API๊ฐ ๋ณด์ผ ๊ฒ์ ๋๋ค.
์ด ๊ฐ์:DT[i,j,
by = ๋กค(๋๋น=5, ์ ๋ ฌ="์ค์")]๊ทธ๋ฐ ๋ค์ j์ mean(A)๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ๋ด๋ถ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊ฟ ์ ์์ต๋๋ค.
rollmean(A) -- ์ฐ๋ฆฌ๊ฐ ์ง๊ธ gmean()์ผ๋ก ํ๋ ๊ฒ๊ณผ ๋๊ฐ์ต๋๋ค. ๋๋ j ์
์์๋ก ๋ณต์กํ ๊ธฐ๋ฅ์ ํฌํจํฉ๋๋ค(์:
๊ฐ ์ฐฝ), ์ด ๊ฒฝ์ฐ .SD data.table์ ์ ๊ณตํฉ๋๋ค. ์ ํํ
์ฐ๋ฆฌ๊ฐ ์ง๊ธ ๊ทธ๋ฃน์์ ํ๋ ๊ฒ์ฒ๋ผ.์ด๋ ๊ฒ ํ๋ฉด 10๊ฐ ์ด์์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋์ ํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์
data.table-y์ ์ ์ ๋ ๋๊ปด์ง๋๋ค.โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/Rdatatable/data.table/issues/2778#issuecomment-383275134 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AHQQdbADiE4aAI1qPxPnFXUM5gR-0w2Tks5tquH8gaJpZM4TeTQf
.
@st-pasha ํฅ๋ฏธ๋ก์ด ์์ด๋์ด๋ data.table-y ์ ์ ์ฒ๋ผ ๋ณด์ด์ง๋ง ๋ง์ ์ ํ์ด ์์ผ๋ฉฐ ์ด ๋ฒ์ฃผ์ ๊ธฐ๋ฅ์๋ ์ ํฉํ์ง ์์ต๋๋ค.
DT[, rollmean(V1, 3), by=V2]
DT[, .(rollmean(V1, 3), rollmean(V2, 100))]
[.data.table
์ธ๋ถ์์ ๋กค ํ๊ท ์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒrollmean(rnorm(10), 3)
DT[, .(rollmean(list(V1, V2), c(5, 20)), rollmean(list(V2, V3), c(10, 30)))]
j
ํธ์ถ์์ mean
๋ฐ rollmean
j
ํธ์ถํ๋ ๋ฐฉ๋ฒDT[, .(rollmean(V1, 3), mean(V1)), by=V2]
์ผ๋ฐ์ ์ผ๋ก by
์ฌ์ฉํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ ์ ์ ์์ ํ์ผ๋ก ์ง๊ณํ๋ ๋ฐ๋ฉด ๋กค๋ง ํจ์๋ ํญ์ ์
๋ ฅ๊ณผ ๋์ผํ ๊ธธ์ด์ ๋ฒกํฐ๋ฅผ ๋ฐํํฉ๋๋ค. SQL์์ ์ด๋ฌํ ์ ํ์ ํจ์์๋ ๋ค์ ์คํ์ผ์ API๊ฐ ์์ต๋๋ค.
SELECT AVG(value) OVER (ROWS BETWEEN 99 PRECEDING AND CURRENT ROW)
FROM tablename;
์ฌ์ ํ ๋ค์๊ณผ ๊ฐ์ด GROUP BY์ ๊ฒฐํฉํ ์ ์์ต๋๋ค.
SELECT AVG(value) OVER (ROWS BETWEEN 99 PRECEDING AND CURRENT ROW)
FROM tablename
GROUP BY group_columns;
๊ทธ๋์ SQL์์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฒด๋ฅ SELECT
๋ฅผ ์๋ฏธํ๋ j
DT์.
DT์์๋ ๋ค์์ ํตํด ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
DT[, rollmean(value, 100)]
DT[, rollmean(value, 100), group_columns]
๋กค๋ง ํจ์๋ shift
์ ๋์ผํ ๋ฒ์ฃผ์ ํจ์์ ์ ํฉํ๋ฉฐ ์
๋ ฅ ์ ๋์ผํ ์์ ํ์ ๋ฐํํฉ๋๋ค.
SQL์ ์ํํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT LAG(value, 1) OVER ()
FROM tablename;
mean
๋ฐ rollmean
๋ ๋จ์ํ ๋ค๋ฅธ ๊ธฐ๋ฅ์ด ์๋๋ผ ๋ค๋ฅธ ๋ฒ์ฃผ์ ๊ธฐ๋ฅ์
๋๋ค. ํ๋๋ ๊ทธ๋ฃน์ ๋ฐ๋ผ ์ง๊ณํ๋ ๊ฒ์ ์๋ฏธํ๊ณ ๋ค๋ฅธ ํ๋๋ ์ ํ ์ง๊ณํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ๋กค๋ง ํจ์ ์ ํ์ GROUP BY
๋ฅผ ์ฌ์ฉํ์ง ์๋ SQL์์ ์ฝ๊ฒ ๋ณผ ์ ์์ง๋ง mean
์ ๊ฐ์ ์ง๊ณ์๋ GROUP BY
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค(๊ทธ๋ฃนํํ ๋ ์ต์ข
์ ์ผ๋ก ์ด ๋ถ์ฌ ๊ธ์ก์ ์ป์). ์ ์ด ์กด์ฌํ์ง ์์).
mean
๋ํด ์ ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ์ต์ ํ ๊ท์น์ ์ ์ฉํ๋ ค๋ ๊ฐ๋ ฅํ ์ด์ ๋ ๋ณด์ด์ง ์์ต๋๋ค. ํนํ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ์ง ์์ ๋์ ๋ชจ๋ ๊ฒ์ data.table-y๋ฅผ ์ํด์์
๋๋ค. ์ํผ. ํ์ฌ ์ ์๋ data.table-y ์ ์ ์ด๋ฉฐ :=
์ ๋ง์ฐฌ๊ฐ์ง๋ก shift
:=
์ ์ฝ๊ฒ ๊ฒฐํฉํ ์ ์์ต๋๋ค. ํ์ฌ data.table์์ ์ฌ์ฉํ ์ ์๋ ์๋ก์ด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
@jangorecki ๊ฐ์ฌํฉ๋๋ค. ๋ชจ๋ ์ ํจํ ๊ณ ๋ ค ์ฌํญ์ ๋๋ค. ๋ฌผ๋ก ์ฌ๋๋ง๋ค ๊ฒฝํ์ด ๋ค๋ฅด๊ณ ๋ฌด์์ด "์์ฐ์ "์ผ๋ก ๊ฐ์ฃผ๋์ด์ผ ํ๋์ง์ ๋ํ ๊ด์ ์ด ๋ค๋ฆ ๋๋ค.
๊ทธ๋ฃน๋ณ๋ก ๋กค ํ๊ท ์ ์ํํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๊ฒ์ DT[, mean(V1), by=.(V2, roll(3))]
2-๋ ๋ฒจ ๊ทธ๋ฃนํ์ผ ๋ฟ์
๋๋ค. ๊ทธ๋ฌ๋ ๋ด ๊ตฌ๋ฌธ์ผ๋ก ๋ค๋ฅธ ์ด์์ ๋ค๋ฅธ ์ฐฝ ํฌ๊ธฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์์ง ๋ชปํฉ๋๋ค ...
์ด์ ์ ๋กค๋ง ์กฐ์ธ์ ๋ํ SQL ๊ตฌ๋ฌธ์ ๋ณธ ์ ์ด ์์์ ์ธ์ ํด์ผ ํฉ๋๋ค. AVG
์ ๊ฐ์ ํ์ค ์ง๊ณ์๋ฅผ ์ฌ์ฉํ๋ฉด์๋ ์๋์ฐ ์ฌ์์ ์ ์ฉํ๋ค๋ ์ ์ ํฅ๋ฏธ๋กญ์ต๋๋ค. Transact-SQL ์ค๋ช
์๋ฅผ ๋ณด๋ฉด ๋
ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์ ํ ์ ํ ๊ฐ์ ๊ตฌ๋ณ๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ์์ด๋์ด๊ฐ ์์ต๋๋ค. ๊ทธ๋ค์ ์๋ก ๋ค๋ฅธ ์ด์ ๋ํด ์๋ก ๋ค๋ฅธ "OVER" ์ฐ์ฐ์๋ฅผ ํ์ฉํ์ง๋ง ์ ๊ณตํ๋ ๋ชจ๋ ์์์ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต๋๋ ๋์ผํ OVER ์ ์
๋๋ค. ๋ฐ๋ผ์ ์ด ์ฌ์ฉ ์ฌ๋ก๊ฐ ํจ์ฌ ๋ ์ผ๋ฐ์ ์ด๋ฏ๋ก ๋จ์ผ roll()
๊ทธ๋ฃน์ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต ํ์๊ฐ ์ค์ด๋ญ๋๋ค.
๋ํ ์ด SO ์ง๋ฌธ ์ OVER ๊ตฌ๋ฌธ์ด SQL์ ๋์ ๋ ์ด์ ์ ๋ํ ํฅ๋ฏธ๋ก์ด ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
GROUP BY SalesOrderID๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฐจ์ด์ ์ GROUP BY๋ฅผ ์ฌ์ฉํ๋ฉด GROUP BY์ ํฌํจ๋์ง ์์ ์ด์ ๋ํ ์ง๊ณ ๊ฐ๋ง ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋์กฐ์ ์ผ๋ก, GROUP BY ๋์ ์ฐฝ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ง๊ณ๋ ๊ฐ๊ณผ ์ง๊ณ๋์ง ์์ ๊ฐ์ ๋ชจ๋ ๊ฒ์ํ ์ ์์ต๋๋ค. ์ฆ, ์์ ์ฟผ๋ฆฌ์์ ๊ทธ๋ ๊ฒ ํ์ง ์๋๋ผ๋ ๋์ผํ SalesOrderID ๊ทธ๋ฃน์ ๋ํด ๊ฐ๋ณ OrderQty ๊ฐ๊ณผ ํด๋น ํฉ๊ณ, ๊ฐ์, ํ๊ท ๋ฑ์ ๋ชจ๋ ๊ฒ์ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ตฌ๋ฌธ์ group-by ๊ฒฐ๊ณผ๊ฐ ์ง๊ณ๋์ง ์์ ๊ฐ๊ณผ ๊ฒฐํฉ๋ ์ ์๋ ํ์ค SQL์ ์ ํ์ ์ฐํํ๋๋ก ์ค๊ณ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค(์ฆ, ๋์ผํ ํํ์์์ A
๋ฐ mean(A)
๋ฅผ ๋ชจ๋ ์ ํ). ๊ทธ๋ฌ๋ data.table
์๋ ์ด๋ฌํ ์ ํ์ด ์์ผ๋ฏ๋ก ๊ตฌ๋ฌธ ์ ํ์ ๋ ๋ง์ ์์ ๊ฐ ์์ต๋๋ค.
์ด์ ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ์ปค๋ธ๋ณด๋ค ์์๊ณ ์ถ๋ค๋ฉด ๋ ๋์ ๊ด์ ์์ ์๊ฐํด์ผ ํฉ๋๋ค. "๋กค๋ง" ๊ธฐ๋ฅ์ด ๋ฌด์์ธ์ง, ์ฉ๋๊ฐ ๋ฌด์์ธ์ง, ํ์ฅํ ์ ์๋ ๋ฐฉ๋ฒ ๋ฑ์ ๋๋ค. ํต๊ณํ์์ ๊ด์ ์์:
"๋กค๋ง ํ๊ท " ๊ธฐ๋ฅ์ ์ผ๋ถ ๋ ธ์ด์ฆ ์ ๋ ฅ์ ๋ถ๋๋ฝ๊ฒ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ๊ด์ฐฐ์ด ์๊ณ "ํ๊ท ์๋"์ ๋ํ ๊ฐ๋ ์ด ํ์ํ์ง๋ง ๋งค์ฐ ๋๋ฆฌ์ง๋ง ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ฒฝ์ฐ "์ง๋ 100๊ฐ ๊ด์ธก์น์ ๋ํ ์ด๋ ํ๊ท " ๋๋ "๋ชจ๋ ์ด์ ๊ด์ธก์น์ ๋ํ ์ด๋ ํ๊ท "์ ๊ณ ๋ คํ ์ ์์ต๋๋ค. ์ ์ฌํ๊ฒ, ์ ๋ ฅ ๋ฒ์์์ ํน์ ์๋์ ๊ด์ฐฐํ๋ ๊ฒฝ์ฐ "ยฑ50 ๊ด์ฐฐ์ ๋ํ ๋กค๋ง ํ๊ท "์ ์ ์ฉํ์ฌ ํํํํ ์ ์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ํ์ฅ๋ ๊ทธ๋ฃนํ ์ฐ์ฐ์๋ก ๊ตฌํ๋ ์ ์์ผ๋ฉฐ ๋กค๋ง ์ฐฝ์ ์ด ๋ชฉ๋ก์ ์์ ์ค ํ๋์ผ ๋ฟ์ ๋๋ค. ์ฆ, ๋๋ ์ฐ๋ฆฌ๊ฐ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ทธ๊ฒ์ ๊ฐ์ง ์์๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ด์ ์ ๋กค๋ง ์กฐ์ธ์ ๋ํ SQL ๊ตฌ๋ฌธ์ ๋ณธ ์ ์ด ์์์ ์ธ์ ํด์ผ ํฉ๋๋ค.
๋กค๋ง ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค๊ณ ๊ฐ์ ํ๊ณ ๋ฌธ์ ๋ ๋กค๋ง ์กฐ์ธ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
๊ทธ๋ค์ ์๋ก ๋ค๋ฅธ ์ด์ ๋ํด ์๋ก ๋ค๋ฅธ "OVER" ์ฐ์ฐ์๋ฅผ ํ์ฉํ์ง๋ง ์ ๊ณตํ๋ ๋ชจ๋ ์์์ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต๋๋ ๋์ผํ OVER ์ ์ ๋๋ค. ๋ฐ๋ผ์ ์ด ์ฌ์ฉ ์ฌ๋ก๊ฐ ํจ์ฌ ๋ ์ผ๋ฐ์ ์ด๋ฉฐ ๋ฐ๋ผ์ ๋จ์ผ roll() ๊ทธ๋ฃน์ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต์ด ์ค์ด๋ค ๊ฒ์ ๋๋ค.
๋์ผํ OVER() ๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ ๊ฒฝ์ฐ GROUP BY
๋ฅผ ์ฌ์ฉํ๊ณ ์กฐํ ํ
์ด๋ธ์ ์์ฑํ๊ณ ๋ค๋ฅธ ์ฟผ๋ฆฌ์์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ฑ๋ฅ์ด ์ข๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์๊ฐ ๋ฌด์์ด๋ ์ ๊ณต๋ ๊ฐ ์ธก์ ๊ฐ์ ๋ํด ์ง์ญ ํน์ฑ์ ์ ์งํ๋ ค๋ฉด OVER()๋ฅผ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ์ฌ์ฉ ์ฌ๋ก๋ Microsoft ๋ฌธ์๋งํผ ๊ฐ๋จํ์ง ์์ต๋๋ค.
๋์กฐ์ ์ผ๋ก, GROUP BY ๋์ ์ฐฝ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ง๊ณ๋ ๊ฐ๊ณผ ์ง๊ณ๋์ง ์์ ๊ฐ์ ๋ชจ๋ ๊ฒ์ํ ์ ์์ต๋๋ค.
data.table์์ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ฌ์ฑํ๊ธฐ ์ํด ํ๋์ ์ฟผ๋ฆฌ์์ :=
๋ฐ by
๋ฅผ ์ํํฉ๋๋ค.
๋ฐ๋ผ์ ๊ตฌ๋ฌธ์ group-by ๊ฒฐ๊ณผ๊ฐ ์ง๊ณ๋์ง ์์ ๊ฐ๊ณผ ๊ฒฐํฉ๋ ์ ์๋ ํ์ค SQL์ ์ ํ์ ์ฐํํ๋๋ก ์ค๊ณ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค(์ฆ, ๋์ผํ ํํ์์์ A์ mean(A)๋ฅผ ๋ชจ๋ ์ ํ). ๊ทธ๋ฌ๋ data.table์๋ ์ด๋ฌํ ์ ํ์ด ์์ผ๋ฏ๋ก ๊ตฌ๋ฌธ ์ ํ์ ๋ ๋ง์ ์์ ๊ฐ ์์ต๋๋ค.
SQL์ ๋ง์ ์ ํ ์ฌํญ์ด ์๋๋ผ by
์ง๊ณ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ง๊ณ๋๋ GROUP BY์ ์ค๊ณ์ผ ๋ฟ์
๋๋ค. ์ ์ฐฝ ๊ธฐ๋ฅ์ ๋ค๋ฃจ๋ ค๋ฉด ์ API๊ฐ ํ์ํ์ต๋๋ค. FUN() OVER (PARTITION BY ...)
์ฌ์ฉํ์ฌ ๊ฐ ํจ์ ํธ์ถ์ ๋ํด SQL ์ฐฝ ํจ์์ ๋ํ ๊ทธ๋ฃนํ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ _partition by_๋ ๋จ์ผ ์ธก์ ์ ๋ํ ๋ก์ปฌ ๊ทธ๋ฃนํ์ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ SQL์ ์ ์ฐ์ฑ์ ์ป์ผ๋ ค๋ฉด j = mean(V1, roll=5)
๋๋ j = over(mean(V1), roll=5)
๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น API๋ฅผ j
์ ์ ์งํด์ผ ํฉ๋๋ค. ์ฌ์ ํ ์ด ์ ๊ทผ ๋ฐฉ์์ ์์์ ์ธ๊ธํ ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
"ยฑ50 ๊ด์ธก์น์ ๋ํ ๋กค๋ง ํ๊ท "์ ์ ์ฉํ์ฌ ํํํํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด align
์ธ์๊ฐ ์ฌ์ฉ๋๋ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ํ์ฅ์ "๋ถ๋๋ฌ์ด ์ฐฝ"์ ๋ณด๋ ๊ฒ์ ๋๋ค. ๊ณผ๊ฑฐ์ ๊ด์ฐฐ์ด ๋ ๋ฉ๋ฆฌ ์์์๋ก ๊ธฐ์ฌ๋๊ฐ ์ ์ ๊ณผ๊ฑฐ ๊ด์ฐฐ์ ๋ํ ํ๊ท ์ ์์ํด ๋ณด์ญ์์ค. ๋๋ ๊ฐ์ฐ์ค ์ปค๋์ ๋ํ ์ฃผ๋ณ ๊ด์ธก์น์ ํ๊ท ์ ๋๋ค.
์ด๋ ํ๊ท ์๋ ๋ง์ ๋ณํ(์ฌ์ค์ ๋ฌด์ ํ)์ด ์์ผ๋ฉฐ, ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํํ ์ฐฝ ํจ์(rollmean/SMA ์ ์ธ)๋ ์ง์ ์ด๋ ํ๊ท (EMA)์ ๋๋ค. ์ด๋ค ๊ฒ์ ํฌํจํด์ผ ํ๊ณ ์ด๋ค ๊ฒ์ ํฌํจํ์ง ์๋์ง๋ ๊ฒฐ์ ํ๊ธฐ ์ฝ์ง ์์ผ๋ฉฐ ์ค์ ๋ก ์ฌ์ฉ์๋ก๋ถํฐ ์ค๋ ๊ธฐ๋ฅ ์์ฒญ์ ๋ฐ๋ผ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ์ง๊ธ๊น์ง ์ด์ ๊ฐ์ ์์ฒญ์ ์์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ํ์ฅ๋ ๊ทธ๋ฃนํ ์ฐ์ฐ์๋ก ๊ตฌํ๋ ์ ์์ผ๋ฉฐ ๋กค๋ง ์ฐฝ์ ์ด ๋ชฉ๋ก์ ์์ ์ค ํ๋์ผ ๋ฟ์ ๋๋ค.
ํ์คํ ๊ทธ๋ค์ ํ ์ ์์ง๋ง SO์ ์ฐ๋ฆฌ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์์ฑ๋ ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๋ฉด ์ฌ๊ธฐ์ ์๋ ๋ช ๊ฐ์ง ๋กค๋ง ๊ธฐ๋ฅ์ด ์ฌ์ฉ์ ์์ฒญ์ 95% ์ด์์ ๋ด๋นํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. EMA ๋ฐ ๊ธฐํ MA์์ ์์ ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค(data.table์ด ์ต์ ์ ์ฅ์์ธ์ง ํ์คํ์ง ์์ง๋ง). ๊ทธ๋ฌ๋ ๋ณ๊ฐ์ ๋ฌธ์ ์ ๋๋ค. ๋๋ฅผ ํฌํจํ ์ผ๋ถ ์ฌ์ฉ์๋ ์ด๋ฏธ 4๋ ๋์ data.table์์ ๋จ์ ์ด๋ ํ๊ท ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
๋ค์์ ํต๊ณํ์์ ๊ด์ ์์ ๋ณธ ๊ฒ์ ๋๋ค.
์ ๊ด์ ์ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ง(์ต์ํ ์ผ์ฃผ์ผ์ ํ ๋ฒ ์ฐฝ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๊ณณ)๊ณผ ๊ฐ๊ฒฉ ์ถ์ธ ๋ถ์(์์ญ ๊ฐ์ง์ ์ด๋ ํ๊ท ์ ์ฌ์ฉํ ๊ณณ)์์ ๋์ต๋๋ค.
rollmean
์ด์์ด roll
๋ถ๊ธฐ๋ก ํธ์๋ฉ๋๋ค. ๋กค๋ง ํ๊ท ์ ๊ตฌํํ๋ ๋๋ถ๋ถ์ ๋ค๋ฅธ ํจํค์ง๋ ์
๋ ฅ์ ์๋ na.rm=FALSE
๋ฐ NA๋ฅผ ์ ์ฒ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ด ๊ตฌํ์ ISNAN
ํธ์ถ๋ก ์ธํด ์ฝ๊ฐ์ ์ถ๊ฐ ์ค๋ฒํค๋๋ฅผ ๋ถ๊ณผํ๋ mean
์ ๋ํด ์ผ๊ด๋๊ฒ NA๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์
๋ ฅ์ NA๊ฐ ์๋ค๊ณ ํ์ ํ๋ ๊ฒฝ์ฐ API๋ฅผ ๋ ๋น ๋ฅด์ง๋ง ๋ ์์ ํ ๋ฒ์ ์ผ๋ก ํ์ฉํ ์ ์์ต๋๋ค.
ํ๋ณด๋ #2795์ ์์ต๋๋ค.
@mattdowle PR์ ์ง๋ฌธ์ ๋ต๋ณ
์ data.table ๋ด์์ ์ด๊ฒ์ ํฉ๋๊น? ๊ธฐ์กด ํจํค์ง์ ๊ธฐ์ฌํ๊ณ data.table์์ ์ฌ์ฉํ๋ ๋์ ํตํฉํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋ด ์๊ฐ์๋ ๊ตฌ๋ฌธ(data.table์ ๋ด์ฅ๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํ๊ฑฐ๋ ํธ๋ฆฌํ ๊ธฐ๋ฅ, ์๋ฅผ ๋ค์ด [...] ๋ด๋ถ ๋ฐ ์ต์ ํ๋จ) ๋ฐ data.table ๋ด๋ถ๋ฅผ C ์์ค์ ๋กค๋ง ํจ์์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด froll*์ data.table ์ธ๋ฑ์ค์ ํค๋ฅผ ์ธ์ํ๊ณ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ๋จํ ์งง์ ์.
๊ฐ์ธ์ ์ผ๋ก ๊ทธ๊ฒ์ ์๋์ ์ข
์์ฑ ์ฒด์ธ์ ๋ถ์กฑ์ ๊ดํ ๊ฒ์
๋๋ค. ์์ฆ์๋ ๋ฌ์ฑํ๊ธฐ ์ฝ์ง ์์ต๋๋ค.
ํค/์ธ๋ฑ์ค๋ frollmin/frollmax์ ์ ์ฉํ ์ ์์ง๋ง ์ฌ์ฉ์๊ฐ ์ธก์ ๋ณ์์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ธก์ ๋ณ์์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ๊ฐ๋ฅ์ฑ์ ๋ฎ๊ณ ์์ง ์ต์/์ต๋์ ๋ํ ์ต์ ํ๋ฅผ ์ํํ์ง ์์์ต๋๋ค. ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋กค* ํธ์ถ ํ์ ํด์ ๋์ง ์๊ณ ์๋ต์ผ๋ก ๋ฐํ๋๊ธฐ ๋๋ฌธ์(๋น๋กค๋ง ํ๊ท , ํฉ๊ณ ๋ฑ๊ณผ ๋ฐ๋) GForce ์ต์ ํ์ ๋ํ ์๋ฏธ๊ฐ ๋ณ๋ก ์์ต๋๋ค.
ํตํฉ์ ๋ํ ์ค๋๋ ฅ ์๋ ์ฃผ์ฅ์ด ์์ผ๋ฉด ๋์ ๋ค๋ฅธ ํจํค์ง์ ๊ธฐ์ฌํด์ผ ํฉ๋๋ค.
์์ ๋ช ๊ฐ์ง๋ฅผ ๋์ดํ๋๋ฐ ํ์ ์ด ์์ง ์์ผ๋ฉด data.table ์ฌ์ฉ์์๊ฒ ์ง๋ฌธ์ ์์ฑํ๊ฑฐ๋ ํธ์ํฐ์ ์ง๋ฌธํ์ฌ ์๋ต์ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ค๋ซ๋์ ๋ง์ ์ฌ์ฉ์๊ฐ ์์ฒญํด ์์ต๋๋ค. ์๋ต์ด ํ์คํ์ง ์์ผ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ ์ ์์ต๋๋ค.
sparklyr
๋ ๋งค์ฐ ํฐ ๊ท๋ชจ์ ๋ฐ์ดํฐ ์ธํธ์์ ๋กค๋ง ๊ธฐ๋ฅ์ ๋งค์ฐ ์ ์ง์ํ ์ ์์ต๋๋ค.
@harryprince ๋
"์ฐฝ ๊ธฐ๋ฅ" ์ ๋ฐ๋ฅด๋ฉด
๋กค๋ง ์ง๊ณ๋ ๊ณ ์ ๋๋น ์ฐฝ์์ ์๋ํฉ๋๋ค. ๊ธฐ๋ณธ R์ด๋ dplyr์์๋ ์ฐพ์ ์ ์์ง๋ง RcppRoll๊ณผ ๊ฐ์ ๋ค๋ฅธ ํจํค์ง์๋ ๋ง์ ๊ตฌํ์ด ์์ต๋๋ค.
AFAIU dplyr ์ธํฐํ์ด์ค๊ฐ ๊ตฌํ๋์ง ์์ sparklyr๋ฅผ ํตํด ์ฌ์ฉ์ ์ง์ spark API๋ฅผ ์ฌ์ฉํฉ๋๊น?
์ด ๋ฌธ์ ๋ ์ง๊ณ ๋กค๋ง์ ๊ดํ ๊ฒ์ผ๋ก, ๋ค๋ฅธ "์ ํ"์ ์ฐฝ ํจ์๋ ์ด๋ฏธ ์ค๋ซ๋์ data.table
์ ์์ต๋๋ค.
(์ธ๋ฉ๋ชจ๋ฆฌ) ์ฑ๋ฅ๊ณผ sparklyr
/ SparkR
๋น๊ตํ ์ ์๋๋ก ๋ช ๊ฐ์ง ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ๋ ๋์์ด ๋ ๊ฒ์
๋๋ค.
์ด ์ง๋ฌธ์ด ๋ ์ฌ๋์ต๋๋ค.
๋ค๋ฅธ ์ด์ ๋ํด ๋ค๋ฅธ ์ฐฝ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ค์ ๋ก ๋ ๋์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ฉฐ ๋กค๋ง ๊ธฐ๋ฅ์๋ง ์ ์ฉ๋์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋์ผํ ์ฟผ๋ฆฌ ๋ด์์ ๋ ์ง๋ณ, ์ฃผ๋ณ, ์ฃผ+์นดํ ๊ณ ๋ฆฌ๋ณ ํ๊ท ์ ํ ๊ฐ๊ฒฉ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ฌป๋ ๊ฒ์ด ๋งค์ฐ ํฉ๋ฆฌ์ ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๋ฉด, ๊ทธ๊ฒ์ ๋ํ ์์ฐ์ค๋ฌ์ด ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค.
DT[, .( mean(price, by=date),
mean(price, by=week),
mean(price, by=c(week, category)) )]
์ด์ ์ด ๊ธฐ๋ฅ์ด ์ด๋ฏธ ๊ตฌํ๋์๋ค๋ฉด ์ฌ๊ธฐ์ ๋กค๋ง ์๋จ์ผ๋ก์ ๋จ์ํ ๋์ฝ์ด ๋์์ ๊ฒ์ ๋๋ค.
DT[, .( mean(price, roll=5),
mean(price, roll=20),
mean(price, roll=100) )]
์ด๊ฒ์ด rollmean(price, 5)
๋ณด๋ค ํ์คํ ๋ซ๋ค๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋ผ ๊ณ ๋ คํ ๋ช ๊ฐ์ง ๋์์ ๋์ง๋ ๊ฒ๋ฟ์
๋๋ค...
@st-pasha
๋ ์ง๋ณ, ์ฃผ๋ณ, ์ฃผ+์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ํ๊ท ์ ํ ๊ฐ๊ฒฉ์ ์ ํํ๋ ๋ฐฉ๋ฒ -- ๋ชจ๋ ๋์ผํ ์ฟผ๋ฆฌ ๋ด์์.
AFAIU ์ด๊ฒ์ ์ด๋ฏธ ?groupingsets
์ฌ์ฉํ์ฌ ๊ฐ๋ฅํ์ง๋ง ์์ง [.data.table
๋์ง ์์์ต๋๋ค.
@jangorecki , @st-pasha ๋ฐ Co. -- ๋ชจ๋ ์์
์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ๋ถ๋ถ ์ฐฝ ์ง์์ด ๋ฒ์์์ ์ ๊ฑฐ๋ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค. ํด๋น ๊ธฐ๋ฅ์ด ๋ก๋๋งต์ ๋ค์ ํฌํจ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น? ๋๋๋ก ๋์๊ฒ ์ ์ฉํ ๊ฒ์ด๊ณ ๋ด๊ฐ ์๋ ํ zoo
๋๋ RcppRoll
์ ์ฑ์์ง์ง ์์ ๊ธฐ๋ฅ ๊ฒฉ์ฐจ๋ฅผ ์ฑ์ธ ๊ฒ์
๋๋ค.
์ด ์คํ ์ค๋ฒํ๋ก ์ง๋ฌธ ์ partial = TRUE
์ธ์์ ์ด์ ์ ์ป์ ์ ์๋ ๋กค๋ง ์ ํ๋ฆฌ์ผ์ด์
์ ์ข์ ์์
๋๋ค.
@msummersgill ํผ๋๋ฐฑ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๊ฒ์๋ฌผ์์ ๋ถ๋ถ ์ฐฝ ๊ธฐ๋ฅ ์ฝ๋๋ฅผ ์ฐพ์ ์ ์๋ commit sha๋ฅผ ๋ช
์์ ์ผ๋ก ๋งํฌํ์ต๋๋ค. ๊ฑฐ๊ธฐ์ ์๋ ๊ตฌํ์ ๋์ค์ ์ฝ๋์ ๋ณต์ก์ฑ์ ์ค์ด๊ธฐ ์ํด ์ ๊ฑฐ๋์์ต๋๋ค. ๋ํ ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ์๋ ์ฝ๊ฐ์ ์ฑ๋ฅ ๋น์ฉ์ ๋ถ๊ณผํ์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋ ์ ์์ผ๋ฉฐ ์๋ง๋ ๊ทธ๋์ผ๋ง ํฉ๋๋ค. ๋จผ์ ์๋ ๊ทธ๋๋ก ์๋ฃํ ๋ค์ 1:window_size
์ ์ถ๊ฐ ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฝ๋ ๋ถ๋ถ ์ฐฝ์ ์ฑ์ฐ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํด๋น ๊ธฐ๋ฅ์ ์ค๋ฒํค๋๋ ์ฌ์ฉํ ๋๋ง ๋์ ๋๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฐ๋ฆฌ๋ adaptive
์ธ์๋ฅผ ํตํด ํด๋น ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ฌ๊ธฐ์ partial
๊ธฐ๋ฅ์ adaptive
๋กค๋ง ํ๊ท ์ ํน๋ณํ ๊ฒฝ์ฐ์
๋๋ค. ?froll
manual ์ adaptive
๋ฅผ ์ฌ์ฉํ์ฌ partial
๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ์๊ฐ ์์ต๋๋ค . ์ฌ๊ธฐ์ ๋ถ์ฌ๋ฃ๊ธฐ:
d = as.data.table(list(1:6/2, 3:8/4))
an = function(n, len) c(seq.int(n), rep(n, len-n))
n = an(3, nrow(d))
frollmean(d, n, adaptive=TRUE)
๋ฌผ๋ก ๋ถ๋ถ์ ์ธ ์ฐฝ์ ์ฑ์ฐ๊ธฐ ์ํด ์ถ๊ฐ ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ ๋น์ ์ํ ๋กค๋ง ๊ธฐ๋ฅ๋งํผ ํจ์จ์ ์ด์ง๋ ์์ ๊ฒ์
๋๋ค.
AFAIK zoo
์๋ partial
๊ธฐ๋ฅ์ด ์์ต๋๋ค.
data.table์ ๋กค๋ง ํ๊ท ํจ์๋ฅผ ์ถ๊ฐํ ๊ณํ์ด ์์ต๋๊น?
@waynelapierre์ ๋ํ ์์๊ฐ ์๋ค๋ฉด ๊ทธ๋ ์ต๋๋ค. ๋ด +1์ด ์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋๋ ์ง๋ฌธ ํ๋๋ง. ๋กค๋ง ํ๊ท ๋๋ ๋กค๋ง ์ค์๊ฐ๊ณผ ๊ฐ์ ๋จ์ํ ๋กค๋ง ์ง๊ณ๋ง ํ์๋ฉ๋๋ค. ๋กค๋ง DT ๋ฐ์ดํฐ ํ๋ ์๊ณผ ๊ฐ์ ๋ณด๋ค ์ ๊ตํ ๋กค๋ง ๊ธฐ๋ฅ๋ ๊ตฌํํ๊ณ ์์ต๋๊น? ์๋ฅผ ๋ค์ด, ๋ง์ง๋ง 10๊ฐ์ obs๋ฅผ ์ฌ์ฉํ์ฌ ๋กค๋ง DT๋ฅผ ๋ง๋ค๊ณ lm
ํ๊ท๋ฅผ ์คํํฉ๋๋ค.
๊ฐ์ฌ ํด์!
@randomgambit ๋์ ์์๊ฐ ์๋ค๋ฉด ๋ฒ์ ๋ฐ์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. C์์ ์ค์ฒฉ ๋ฃจํ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ๋ง์ผ๋ก ๊ธฐ๋ณธ R/zoo๋ณด๋ค ๋น ๋ฅด๊ฒ ํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ฒฉ ๋ฃจํ๋ฅผ ํผํ๊ธฐ ์ํด "์จ๋ผ์ธ" ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๊ตฌํํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ๋ ๊น๋ค๋กญ๊ณ ๊ฒฐ๊ตญ์๋ ๋ชจ๋ ํต๊ณ์ ๋ํด ์ํํ ์ ์์ผ๋ฏ๋ก ์ด๋ ์์ ์์ ํด๋น ํต๊ณ๋ฅผ ์๋ผ์ผ ํฉ๋๋ค.
@jangorecki ํฅ๋ฏธ๋ก์ด ๊ฐ์ฌํฉ๋๋ค. ์ฆ, tsibble
๋ฅผ ๊ณ์ ์ฌ์ฉํ์ฌ DATA.TABLES
tibble
! ์ ์ ์ด ๋ฒ์ฉ ๋ค์๋ค :D
frollmean
๋ฅผ ์ฌ์ฉํ์ฌ x
์ ์ต๊ทผ์ ์ด์์ ์ฌ์ฉํ์ฌ ์ด์ง y
๋ํด P[y | x]
๋ฅผ ํ์ํ๋ ๋น๋ชจ์์ "๋ก์ง์คํฑ ๊ณก์ "์ ๊ณ์ฐํ๋ ค๊ณ ํ์ต๋๋ค. y
์ ์ฅ๋ logical
๊ฐ integer
์๋ ์บ์คํ
๋์ง ์์ ๋๋์ต๋๋ค.
DT = data.table(x = rnorm(1000), y = runif(1000) > .5)
DT[order(x), .(x, p_y = frollmean(y, 50L))]
froll์ ์ค๋ฅ(fun = "mean", x = x, n = n, ์ฑ์ฐ๊ธฐ = ์ฑ์ฐ๊ธฐ, ์๊ณ ๋ฆฌ์ฆ = ์๊ณ ๋ฆฌ์ฆ, ์ ๋ ฌ = ์ ๋ ฌ, :
x๋ ์ซ์ ์ ํ์ด์ด์ผ ํฉ๋๋ค.
๋ฒกํฐํ๋ x
/ n
์ธ์๊ฐ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์.
https://github.com/AdrianAntico/RemixAutoML/commit/d8370712591323be01d0c66f34a70040e2867636#r34784427
๋ฃจํ๊ฐ ์ ๊ณ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ฝ๊ณ ํจ์ฌ ๋น ๋ฆ
๋๋ค(10x-36x ์๋ ํฅ์).
frollapply ์ค๋น: https://github.com/Rdatatable/data.table/pull/3600
### fun mean sum median
# rollfun 8.815 5.151 60.175
# zoo::rollapply 34.373 27.837 88.552
# zoo::roll[fun] 0.215 0.185 NA
# frollapply 5.404 1.419 56.475
# froll[fun] 0.003 0.002 NA
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, frollapply์ ์ ๋ฌ๋ FUN(์ฌ์ฉ์ ์ ์)์ R ๊ฐ์ฒด ๋๋ data.frame(data.table)์ ๋ฐํํ๋๋ก ๋ณ๊ฒฝ๋ฉ๋๊น? frollapply์ ์ ๋ฌ๋ x๋ ์ซ์๋ก ๊ฐ์ ๋ณํ๋์ง ์์ ๋ฌธ์์ data.table์ด ๋ ์ ์์ผ๋ฉฐ FUN์ ๋ค์์ ์ํํ ์ ์์ต๋๋ค. ๋ ์ด๋ธ ๋ฐ frollapply๊ฐ ๋ชฉ๋ก์ ๋ฐํํฉ๋๊น? ๊ทธ๋ฐ ๋ค์ Benford์ ํ ์คํธ ๋๋ ๋ ์ด๋ธ์ ๋ํ ์์ฝ๊ณผ ๊ฐ์ ๋กค๋ง ํ๊ท ๋๋ ๋กค๋ง ํ ์คํธ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
์ฌํ ๊ฐ๋ฅํ ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ํญ์ ์ ์ฉํฉ๋๋ค. ... ๋ช
ํํํ๊ธฐ ์ํด ์ด๋ฌํ ์๋๋ฆฌ์ค์์ ๋น์ ์ ์ถ์ต๋๋ค frollapply(dt, 3, FUN)
๊ธธ์ด์ ๋ชฉ๋ก์ ๋ฐํ nrow(dt)
๊ฐ ๋ชฉ๋ก ์์๊ฐ ๋ ๊ฒ์
๋๋ค ๊ฒฝ์ฐ data.table
์ ์ํด ๋ฐํ FUN(dt[window])
?
frollapply(x=dt, n=3, fun=FUN)[[3]]
๋ FUN(dt[1:3])
์ ๊ฐ์ต๋๋ค.
frollapply(x=dt, n=3, FUN=FUN)[[4]]
๋ FUN(dt[2:4])
์ ๊ฐ์ต๋๋ค.
๊ทธ ๋ง์ต๋๊น? @jerryfuyu0104
ํ์ฌ ์ฐ๋ฆฌ๋ ์ฒซ ๋ฒ์งธ ์ธ์์ ์ ๋ฌ๋ ์ฌ๋ฌ ์ด์ ์ง์ํ์ง๋ง ๋ฃจํ๋ฅผ ํตํด ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์๋ง๋ ์ถ๊ฐ ์ธ์ multi.var=FALSE
๊ฐ ํ์ํ ๊ฒ์
๋๋ค. true ๋ก ์ค์ ํ๋ฉด x
(์ง๊ธ์ฒ๋ผ: list(FUN(x[[1]]),FUN(x[[2]]))
)๋ฅผ ๋ฐ๋ณตํ์ง ์์ง๋ง ๋ชจ๋ ์ด FUN(x)
์ ๋ฌํฉ๋๋ค.
์ด์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋๋ ๊ทธ ์ด์ ์ ์์ฒญ์ ๋ ๋ฒ์งธ๋ก ํ๋ค.
๋ํ ๋ถ๋ถ ์ฐฝ์ ํ์ฉํ๊ธฐ ์ํด "๋ถ๋ถ" ์ธ์๋ฅผ ์ง์ํ ์ ์์ต๋๊น?
@eliocamp partial
์ฐฝ์ด ๋ฌด์์ธ์ง ์์ธํ ์ค๋ช
ํด ์ฃผ ์๊ฒ ์ต๋๊น?
@eliocamp "๋ถ๋ถ์ "์ธ์๋ฅผ ์ง์ํ ์ ์์ต๋๋ค. ์ด๋ฏธ ์๊ณ ์๊ฒ ์ง๋ง adaptive=TRUE
์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ธฐ๋ฅ์ ๋ํ ์ง์์ด ์ด๋ฏธ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๊ทธ๊ฒ์ ์ ๋ฐ ์ฐฝ ์ง์ ์ ํ์ฑํ๋ ๋์ ์ฒ์๋ถํฐ ๋๊น์ง ํจ์๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋๋น๊ฐ 11์ธ ๋กค๋ง ํ๊ท ์ ๊ฒฝ์ฐ ๋ฐํ๋๋ ์ฒซ ๋ฒ์งธ ์์๋ ์์ 1์์ 6๊น์ง์ ํ๊ท ์ด ๋ฉ๋๋ค. ๋ ๋ฒ์งธ ์์๋ 1์์ 7๊น์ง์ ํ๊ท ์ด ๋๋ ์์
๋๋ค.
@jangorecki ์ค ๊ฐ์ฌํฉ๋๋ค
๋์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ํธ๋ฆฌํจ๋ฟ๋ง ์๋๋ผ ์๋๋ฅผ ์ํด์๋ ๋ถ๋ถ์ ์ธ ๋
ผ์์ด ํ์ํฉ๋๋ค. adaptive=TRUE
๋ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค, ์ฐ๋ฆฌ๋ ๋ํ ๋กค๋ง ํ๊ท๊ฐ ํ์ํ๋ฏ๋ก ์ฌ๋ฌ ๋ณ์๋ฅผ ์ ๊ณตํ๊ณ ๊ฐ๊ฐ์ ๊ฐ๋ณ์ ์ผ๋ก๊ฐ ์๋๋ผ ํ ๋ฒ์ ๋กค๋งํฉ๋๋ค.
์ด๋ค์ ์ํ์ ๋ํ ์
๋ฐ์ดํธ๋ ์์ต๋๋ค.
๋์์ ์ฃผ๊ณ ์ถ์ง๋ง ์ C++ ๊ธฐ์ ์ ์ ํ ์กด์ฌํ์ง ์์ต๋๋ค. :sweat: ์์ ๋ด๋น๋ค์๊ฒ ์ด์ธ๋ฆด ๊ฒ ๊ฐ๋์?
์ฐ๋ฆฌ๋ C++๋ก ์ฝ๋ฉํ์ง ์์ง๋ง C๋ก ์ฝ๋ฉํฉ๋๋ค. ๋ค, ์์ํ๊ธฐ์ ์ข์ ๊ณณ์ ๋๋ค. ๋๋ frollmean์์ ์ ํํ ๊ทธ๋ ๊ฒํ์ต๋๋ค.
์ฝ๋๋ฅผ ๋ณด๋ ๊ฐ๊ด์ธ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ์ด๋ค ๊ฒฝ์ฐ์๋ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด์ ๋ ๋ค๋ฅธ ์์ฒญ์ ๋ํด frollmean(.SD)์ด ์ด๋ฆ์ ๋ณด์กดํด์ผ ํฉ๋๋ค. ๋ ์ผ๋ฐ์ ์ผ๋ก, froll*์ ์ ๋ ฅ์ด ์ด๋ฆ์ด ์๋ ๋ชฉ๋ก๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ด๋ฆ์ ๋ณด์กดํด์ผ ํฉ๋๋ค.
data.table์ ์์ฃผ ์ฌ์ฉํ๋ ์ ๋ tsibble
ํจํค์ง ์์ ํ์ฌ ์ ๊ณต๋๋ "์๊ฐ ์ธ์" ๊ธฐ๋ฅ์ ๊ฐ๋ ๊ฒ์ด ๋งค์ฐ ์ ์ฉํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๋ถํํ๋ ์ด ํจํค์ง๋ dplyr
์ฃผ๋ณ์์ ๊ฐ๋ฐ๋์์ต๋๋ค. data.table ๊ตฌํ์ด ๊ฐ๋ฅํ์ง ๊ถ๊ธํฉ๋๋ค. ์ด๋ฒ ํธ์์ ์ ์ํ๋ ์ฐฝ ๊ธฐ๋ฅ์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ผ๋ถ์
๋๋ค.
@ywhcuhcuh ํผ๋๋ฐฑ ๊ฐ์ฌํฉ๋๋ค. ์ฌ์ค ์ด ๋ฌธ์ ๊ฐ ์ด๋ฏธ ๋๋ฌด ๋ง์ ๊ฒ์ ์๊ตฌํ๊ณ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ ๋๋ถ๋ถ์ ๋งค์ฐ ๋น ๋ฅธ ์ฌ์ ํ ๊ฐ๋ฒผ์ด ํจํค์ง ๋กค๋ก ์ ๋ฎ์ฌ ์์ต๋๋ค. ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ํด์๋ ๊ด์ฌ ์๋ ๊ธฐ๋ฅ๋ณ๋ก ์๋ก์ด ์ด์๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ์ํ๋ฏ๋ก ๊ตฌํ/์ ์ง ์ฌ๋ถ๋ฅผ ๋ณ๋๋ก ๋
ผ์ํ ์ ์์ต๋๋ค. tstibble์ readme๋ฅผ ๋ณด๋ฉด ์๋ก์ด ๊ฒ์ด ์ ๊ณต๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค...
์ ๋ชฉ์ "Tidy Temporal Data Frames"์ด์ง๋ง ์์ ์กฐ์ธ์ ์ ๊ณตํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@jangorecki๋ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. ์๋ง๋ ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋ฌธ์ ์ผ ๊ฒ์
๋๋ค. ๋ด๊ฐ ๊ฐ์ฅ ์์ฃผ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ID์ ์๊ฐ์ด ์๋ "ํจ๋ ๋ฐ์ดํฐ"๋ก ์๋ ค์ ธ ์์ต๋๋ค. ํ๋ก๊ทธ๋จ์ด ์ด ๋ฐ์ดํฐ ๊ธฐ๋ฅ์ "์ธ์"ํ๋ฉด ๋ง์ ์์
, ํนํ ์๊ณ์ด ์์
์ด ๋งค์ฐ ์ฌ์์ง๋๋ค. STATA๋ฅผ ์๋ ์ฌ๋์๊ฒ๋ ๋ฆฌ๋, ์ง์ฐ, ์ฑ์ฐ๊ธฐ ๊ฐ๊ฒฉ ๋ฑ๊ณผ ๊ฐ์ tsset
๋ฐ xtset
๊ธฐ๋ฐ ์์
์
๋๋ค. data.table์ "์ธ๋ฑ์ค"๊ฐ ํฅ์ ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ค ์ ์ผ๋ก๋ ๊ทธ๋ฌํ ์์
์ ๊ฐ๋ฅํ๊ฒํฉ๋๋ค.
๋ฌผ๋ก ์ด๋ฌํ ์์
์ shift
๋ฐ by
์ ๊ฐ์ data.table ํจ์์์ ์ํํ ์ ์์ต๋๋ค. data.table์ index
๋ ํ์ํ ๊ฐ๋ฅ์ฑ์ด ๋ง๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ค๋ฅธ ๋ฌธ์ ์ ์ํด์ผํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ํ์ง๋ง ์์ ํ ๋ก ์์ ์์ง ์๊ณ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค ...
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@mattdowle PR์ ์ง๋ฌธ์ ๋ต๋ณ
๊ฐ์ธ์ ์ผ๋ก ๊ทธ๊ฒ์ ์๋์ ์ข ์์ฑ ์ฒด์ธ์ ๋ถ์กฑ์ ๊ดํ ๊ฒ์ ๋๋ค. ์์ฆ์๋ ๋ฌ์ฑํ๊ธฐ ์ฝ์ง ์์ต๋๋ค.
ํค/์ธ๋ฑ์ค๋ frollmin/frollmax์ ์ ์ฉํ ์ ์์ง๋ง ์ฌ์ฉ์๊ฐ ์ธก์ ๋ณ์์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ธก์ ๋ณ์์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ๊ฐ๋ฅ์ฑ์ ๋ฎ๊ณ ์์ง ์ต์/์ต๋์ ๋ํ ์ต์ ํ๋ฅผ ์ํํ์ง ์์์ต๋๋ค. ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋กค* ํธ์ถ ํ์ ํด์ ๋์ง ์๊ณ ์๋ต์ผ๋ก ๋ฐํ๋๊ธฐ ๋๋ฌธ์(๋น๋กค๋ง ํ๊ท , ํฉ๊ณ ๋ฑ๊ณผ ๋ฐ๋) GForce ์ต์ ํ์ ๋ํ ์๋ฏธ๊ฐ ๋ณ๋ก ์์ต๋๋ค.
์์ ๋ช ๊ฐ์ง๋ฅผ ๋์ดํ๋๋ฐ ํ์ ์ด ์์ง ์์ผ๋ฉด data.table ์ฌ์ฉ์์๊ฒ ์ง๋ฌธ์ ์์ฑํ๊ฑฐ๋ ํธ์ํฐ์ ์ง๋ฌธํ์ฌ ์๋ต์ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ค๋ซ๋์ ๋ง์ ์ฌ์ฉ์๊ฐ ์์ฒญํด ์์ต๋๋ค. ์๋ต์ด ํ์คํ์ง ์์ผ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ ์ ์์ต๋๋ค.