èŠä»¶ã1ãæã«éãããã®åé¡ãäœæããŠ_ããŒãªã³ã°é¢æ°_æ©èœïŒ_ããŒãªã³ã°ã¢ã°ãªã²ãŒã_ã_ã¹ã©ã€ãã£ã³ã°ãŠã£ã³ããŠ_ããŸãã¯_移åå¹³å_ / _移åã¢ã°ãªã²ãŒã_ãšãåŒã°ããŸãïŒãã«ããŒãã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
ã¯ãããããŠããã«å€ãã®ããŒã«é¢æ°ãåãåºæ¬çãªèãæ¹ã«åŸããŸãïŒ
ããŒãªã³ã°æšæºåå·®/æåŸ
å€ããŒã¹ã®ã¢ãŒã¡ã³ããããã³é¢æ°
+ã®ä»£ããã«å転å¯èœãª*ã䜿çšããŠå
éšã§éçŽããrollproductã®ããã«
çª
ç§ã¯åžžã«ãããŒã¿ã»ãããè€æ°ã®éè€ããã°ã«ãŒãïŒãŠã£ã³ããŠïŒã«ã°ã«ãŒãåããããšãšããŠãããŒãªã³ã°ãŠã£ã³ããŠæ©èœãæ³å®ããŠããŸããã ãã®å ŽåãAPIã¯æ¬¡ã®ããã«ãªããŸãã
DT[i, j,
by = roll(width=5, align="center")]
次ã«ã j
ã«mean(A)
j
ãå«ãŸããŠããå ŽåãçŸåšgmean()
è¡ã£ãŠããã®ãšãŸã£ããåãããã«ãå
éšã§rollmean(A)
眮ãæããããšãã§ããŸãã ãŸãã¯ã j
ä»»æã®è€éãªæ©èœãå«ããããšãã§ããŸãïŒããšãã°ããŠã£ã³ããŠããšã«ååž°ãå®è¡ããŸãïŒããã®å Žåãã°ã«ãŒãã®å ŽåãšãŸã£ããåãããã«ã .SD
data.tableãæäŸããŸãããã£ãä»ã
ãã®ããã«ã10以äžã®æ°ããæ©èœãå°å ¥ããå¿ èŠã¯ãããŸããã1ã€ã ãã§ãã ãããŠãããã¯ç²Ÿç¥çã«ãdata.table-yãæããŸãã
ã¯ãåæãã
åã2018幎4æ21æ¥ã«ã¯ã15:38ãã·ã£Stetsenko [email protected]
æžããŸããïŒ
ç§ã¯åžžã«ããŒãªã³ã°ãŠã£ã³ããŠæ©èœãã°ã«ãŒãåããããšãæ³å®ããŠããŸãã
ããŒã¿ã»ãããè€æ°ã®éè€ããã°ã«ãŒãïŒãŠã£ã³ããŠïŒã«åå²ããŸãã 次ã«ãAPIã¯æ¬¡ã®ããã«ãªããŸã
ãã®ãããªãã®ïŒDT [iãjã
by = rollïŒwidth = 5ãalign = "center"ïŒ]次ã«ãjã«ããšãã°meanïŒAïŒãå«ãŸããŠããå Žåãå éšçã«ããã次ã®ããã«çœ®ãæããããšãã§ããŸãã
rollmeanïŒAïŒ-çŸåšgmeanïŒïŒã§è¡ã£ãŠããã®ãšãŸã£ããåãã§ãã ãŸãã¯jã¯ã§ããŸã
ä»»æã«è€éãªæ©èœãå«ãŸããŠããïŒããšãã°ã
åãŠã£ã³ããŠïŒããã®å Žåã.SDdata.tableãæäŸããŸã-æ£ç¢ºã«
ä»ã®ã°ã«ãŒããšåãããã«ããã®ããã«ã10以äžã®æ°ããæ©èœãå°å ¥ããå¿ èŠã¯ãããŸããã1ã€ã ãã§ãã ãããŠãã
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ãèšç®ããæ¹æ³rollmean(rnorm(10), 3)
DT[, .(rollmean(list(V1, V2), c(5, 20)), rollmean(list(V2, V3), c(10, 30)))]
j
åŒã³åºãã§mean
ãšrollmean
ãåŒã³åºãæ¹æ³DT[, .(rollmean(V1, 3), mean(V1)), by=V2]
éåžžã by
ã䜿çšããå ŽåãããŒã¿ãããå°ãªãè¡æ°ã«éçŽããŸãããããŒãªã³ã°é¢æ°ã¯åžžã«å
¥åãšåãé·ãã®ãã¯ãã«ãè¿ããŸãã SQLã®ãã®ã¿ã€ãã®é¢æ°ã«ã¯ã次ã®ã¹ã¿ã€ã«ã®APIããããŸãã
SELECT AVG(value) OVER (ROWS BETWEEN 99 PRECEDING AND CURRENT ROW)
FROM tablename;
次ã®ããã«ããããGROUPBYãšçµã¿åãããããšãã§ããŸãã
SELECT AVG(value) OVER (ROWS BETWEEN 99 PRECEDING AND CURRENT ROW)
FROM tablename
GROUP BY group_columns;
ãããã£ãŠãSQLã§ã¯ããããã®é¢æ°ã¯DTã®j
ãåç
§ããSELECT
çãŸããŸãã
DTã§ã¯ã次ã®æ¹æ³ã§åãããšãå®çŸã§ããŸãã
DT[, rollmean(value, 100)]
DT[, rollmean(value, 100), group_columns]
ããŒãªã³ã°é¢æ°ã¯ã shift
ãšåãã«ããŽãªã®é¢æ°ã«åœãŠã¯ãŸããå
¥åãšåãæ°ã®è¡ãè¿ããŸãã
SQLã®ã·ããã¯æ¬¡ã®ããã«ãªããŸãã
SELECT LAG(value, 1) OVER ()
FROM tablename;
mean
ãšrollmean
ã¯åãªãç°ãªãé¢æ°ã§ã¯ãªããç°ãªãã«ããŽãªã®é¢æ°ã§ãã 1ã€ã¯ã°ã«ãŒãããšã«éçŽããããšãæå³ãããã1ã€ã¯ãŸã£ããéçŽããªãããšãæå³ããŸãã ããã¯ãããŒãªã³ã°é¢æ°ã¿ã€ãã«GROUP BY
ã䜿çšããªãSQLã§ç°¡åã«ç¢ºèªã§ããŸããã mean
ãããªéèšã«ã¯GROUP BY
ã䜿çšããå¿
èŠããããŸãïŒæçµçã«ã¯ã°ã«ãŒãåæã«å©æéã®åèšãååŸããŸãïŒå¥ã¯ååšããŸããïŒã
mean
å Žåãšåãæé©åã«ãŒã«ãé©çšããããšãã匷ãçç±ã¯èŠåœãããŸãããç¹ã«ããŠãŒã¹ã±ãŒã¹ã«å®éã«é©åããªãå Žåã¯ãdata.table-yã®ããã ãã§ãã粟ç¥ã çŸåšã®ææ¡ã¯data.table-yã®ç²Ÿç¥ã§ãããã shift
ãšåãããã«ã :=
ãšç°¡åã«çµã¿åãããããšãã§ããŸãã çŸåšdata.tableã§ã¯äœ¿çšã§ããªãæ°ããé¢æ°ã®ã»ãããè¿œå ããã ãã§ãã
@jangoreckiããããšãããããã¯ãã¹ãŠæå¹ãªèæ ®äºé ã§ãã ãã¡ããã人ã«ãã£ãŠçµéšãèŠæ¹ãç°ãªããäœããèªç¶ããšèŠãªãã¹ããã«ã€ããŠãç°ãªããŸãã
ã°ã«ãŒãããšã«rollmeanãå®è¡ããããšãã§ããŸããããã¯2ã¬ãã«ã®ã°ã«ãŒãåã§ãïŒ DT[, mean(V1), by=.(V2, roll(3))]
ã ããããç§ã®æ§æã§ç°ãªãåã«ç°ãªããŠã£ã³ããŠãµã€ãºãäœæããæ¹æ³ãããããŸãã...
ããŒãªã³ã°çµåã®SQLæ§æãèŠãããšããªãããšãèªããªããã°ãªããŸããã 圌ããAVG
ãªã©ã®æšæºçãªã¢ã°ãªã²ãŒã¿ãŒã䜿çšããŠããã«ããããããããŠã£ã³ããŠä»æ§ãé©çšããŠããã®ã¯èå³æ·±ãããšã§ãã Transact-SQLã®ããã¥ã¡ã³ããèŠããšãè«çè¡ãšç©çè¡ã®éžæã®éããªã©ãèå³æ·±ãã¢ã€ãã¢ãããã€ãããroll()
ã°ã«ãŒãã䜿çšãããšç¹°ãè¿ããå°ãªããªãããšã瀺åããŠããŸãã
ãŸãããã®SOã®è³ªåã¯ããªãOVERæ§æãSQLã«å°å ¥ãããã®ããšããèå³æ·±ãæŽå¯ãæäŸããŸãã
GROUP BYSalesOrderIDã䜿çšã§ããŸãã éãã¯ãGROUP BYã§ã¯ãGROUPBYã«å«ãŸããŠããªãåã®éèšå€ã®ã¿ãæã€ããšãã§ããããšã§ãã å¯Ÿç §çã«ãGROUP BYã®ä»£ããã«ãŠã£ã³ããŠéèšé¢æ°ã䜿çšãããšãéèšå€ãšééèšå€ã®äž¡æ¹ãååŸã§ããŸãã ã€ãŸãããµã³ãã«ã¯ãšãªã§ã¯ãããè¡ã£ãŠããŸããããåãSalesOrderIDã®ã°ã«ãŒãã«ã€ããŠãåã ã®OrderQtyå€ãšãããã®åèšãã«ãŠã³ããå¹³åãªã©ã®äž¡æ¹ãååŸã§ããŸãã
ãããã£ãŠãæ§æã¯ãgroup-byã®çµæãéèšãããŠããªãå€ãšçµã¿åãããããšãã§ããªãæšæºSQLã®å¶éãåé¿ããããã«èšèšãããŠããããã§ãïŒã€ãŸããåãåŒã§A
ãšmean(A)
äž¡æ¹ãéžæããŸãïŒã ãã ãã data.table
ã¯ãã®ãããªå¶éããªããããæ§æã®éžæã«èªç±åºŠããããŸãã
ããŠãæ¬åœã«æ代ãå åããããã®ã§ããã°ãããåºãèŠç¹ã§èããå¿ èŠããããŸãããããŒãªã³ã°ãæ©èœãšã¯äœãããããã¯äœã«äœ¿çšãããã®ããã©ã®ããã«æ¡åŒµã§ããã®ããªã©ã§ããçµ±èšå®¶ã®èŠ³ç¹ããïŒ
ã移åå¹³åãé¢æ°ã¯ããã€ãºã®å€ãå ¥åãå¹³æ»åããããã«äœ¿çšãããŸãã ããšãã°ãæéã®çµéã«äŒŽã芳枬ãããããå¹³åéãã®æŠå¿µãå¿ èŠãªå Žåãããã§ãéåžžã«ãã£ããã§ã¯ãããŸãããæéã®çµéãšãšãã«å€åããŸãã ãã®å Žåããéå»100åã®èŠ³æž¬ã®ç§»åå¹³åããŸãã¯ã以åã®ãã¹ãŠã®èŠ³æž¬ã®ç§»åå¹³åããèæ ®ããããšãã§ããŸãã åæ§ã«ãå ¥åã®ç¯å²ã§ç¹å®ã®éã芳枬ããå Žåã¯ãã±50åã®èŠ³æž¬ãè¶ ãã移åå¹³åããé©çšããããšã§ãããå¹³æ»åã§ããŸãã
ãããã¯ãã¹ãŠæ¡åŒµã°ã«ãŒãåæŒç®åãšããŠå®è£ ã§ããããŒãªã³ã°ãŠã£ã³ããŠã¯ãã®ãªã¹ãã®èŠçŽ ã®1ã€ã«ãããŸããã ããã¯èšã£ãŠããç§ãã¡ããããäž¡æ¹ã®æ¹æ³ã§æã€ããšãã§ããªãçç±ã¯ãããŸããã
ããŒãªã³ã°çµåã®SQLæ§æãèŠãããšããªãããšãèªããªããã°ãªããŸããã
ç§ã¯ããªããããŒãªã³ã°é¢æ°ãæå³ããŠãããšæããŸããåé¡ã¯ããŒãªã³ã°çµåãšã¯äœã®é¢ä¿ããããŸããã
ãããã¯ãç°ãªãåã§ç°ãªããOVERãæŒç®åãèš±å¯ããŸããããããã瀺ããã¹ãŠã®äŸã§ã¯ãåãOVERå¥ãè€æ°åç¹°ãè¿ãããŸãã ãããã£ãŠããã®ãŠãŒã¹ã±ãŒã¹ã¯ã¯ããã«äžè¬çã§ããããããã£ãŠãåäžã®rollïŒïŒã°ã«ãŒãã䜿çšãããšç¹°ãè¿ããå°ãªããªãããšã瀺åããŠããŸãã
åãOVERïŒïŒãäœåºŠãåŒã³åºãå Žåã¯ã GROUP BY
䜿çšããã«ãã¯ã¢ããããŒãã«ãäœæããŠãä»ã®ã¯ãšãªã§åå©çšããæ¹ãããã©ãŒãã³ã¹ãé«ãå ŽåããããŸãã äŸãäœã§ãããæäŸãããåã¡ãžã£ãŒã®å±ææ§ã®ç¹åŸŽãä¿æããã«ã¯ãOVERïŒïŒãç¹°ãè¿ãå¿
èŠããããŸãã ç§ã®ãŠãŒã¹ã±ãŒã¹ã¯ãMicrosoftããã¥ã¡ã³ãã®ãŠãŒã¹ã±ãŒã¹ã»ã©åçŽã§ã¯ãªãããŒã¿ãŠã§ã¢ããŠã¹ã®ãŠãŒã¹ã±ãŒã¹ã§ãã
å¯Ÿç §çã«ãGROUP BYã®ä»£ããã«ãŠã£ã³ããŠéèšé¢æ°ã䜿çšãããšãéèšå€ãšééèšå€ã®äž¡æ¹ãååŸã§ããŸãã
data.tableã§ã¯ã1ã€ã®ã¯ãšãªã§:=
ãšby
ãå®è¡ããŠãããå®çŸããŸãã
ãããã£ãŠãæ§æã¯ãgroup-byã®çµæãéèšãããŠããªãå€ãšçµã¿åãããããšãã§ããªãïŒã€ãŸããåãåŒã§AãšmeanïŒAïŒã®äž¡æ¹ãéžæããïŒæšæºSQLã®å¶éãåé¿ããããã«èšèšãããŠããããã§ãã ãã ããdata.tableã«ã¯ãã®ãããªå¶éããªããããæ§æã®éžæã«èªç±åºŠããããŸãã
SQLã®å¶éã¯ããã»ã©å€ããããŸãããã by
éçŽãããã®ãšåãæ¹æ³ã§éçŽãããã®ã¯ãGROUPBYã®èšèšã ãã§ãã æ°ãããŠã£ã³ããŠæ©èœãã«ããŒããã«ã¯ãæ°ããAPIãå¿
èŠã§ããã SQLãŠã£ã³ããŠé¢æ°ã®ã°ã«ãŒãåã¯ã FUN() OVER (PARTITION BY ...)
ã䜿çšããŠé¢æ°åŒã³åºãããšã«æäŸã§ããŸããããã§ã_partition by_ã¯ãåäžã¡ãžã£ãŒã®ããŒã«ã«ã°ã«ãŒãåã®ãããªãã®ã§ãã ãããã£ãŠãSQLã®æè»æ§ãå®çŸããã«ã¯ã j = mean(V1, roll=5)
ãŸãã¯j = over(mean(V1), roll=5)
ã䜿çšããŠããã®APIãj
ç¶æããå¿
èŠããããŸãã ããã§ãããã®ã¢ãããŒãã§ã¯ãäžèšã®ãã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ããµããŒãã§ããããã§ã¯ãããŸããã
ã±50å以äžã®èŠ³æž¬å€ã®ç§»åå¹³åããé©çšããããšã§ããããæ»ããã«ããããšãã§ããŸãã
ããã¯ã align
åŒæ°ã䜿çšãããç®çã§ãã
ãããã£ãŠãæåã®æ¡åŒµã¯ãæ»ãããªãŠã£ã³ããŠãã調ã¹ãããšã§ããéå»ã®èŠ³æž¬ã®å¹³åãæ³åããŠãã ãããéå»ã®èŠ³æž¬ãé²ãã»ã©ããã®å¯äžã¯å°ãªããªããŸãã ãŸãã¯ãã¬ãŠã¹ã«ãŒãã«ã§ã®è¿ãã®èŠ³æž¬å€ã®å¹³åã
移åå¹³åã«ã¯å€ãã®ããªãšãŒã·ã§ã³ïŒäºå®äžç¡å¶éã®æ°ïŒããããæãäžè¬çãªå¹³æ»åãŠã£ã³ããŠé¢æ°ïŒrollmean / SMA以å€ïŒã¯ææ°ç§»åå¹³åïŒEMAïŒã§ãã ã©ã¡ããå«ããã¹ãããã©ããå«ããªããã決å®ããã®ã¯ç°¡åã§ã¯ãªããå®éã«ã¯ããŠãŒã¶ãŒããã®æ©èœèŠæ±ã«åŸã£ãŠãã®æ±ºå®ãè¡ãã®ãæåã§ãããããŸã§ã®ãšããããã®ãããªèŠæ±ã¯ãããŸããã§ããã
ãããã¯ãã¹ãŠæ¡åŒµã°ã«ãŒãåæŒç®åãšããŠå®è£ ã§ããããŒãªã³ã°ãŠã£ã³ããŠã¯ãã®ãªã¹ãã®èŠçŽ ã®1ã€ã«ãããŸããã
確ãã«å¯èœã§ãããSOãšãªããžããªã§äœæãããåé¡ãèŠããšãããã«ããããã€ãã®ããŒãªã³ã°é¢æ°ããŠãŒã¶ãŒããã®ãªã¯ãšã¹ãã®95ïŒ ä»¥äžãå ããŠããããšãããããŸãã EMAããã®ä»ã®MAã«åãçµãã§æºè¶³ããŠããŸãïŒdata.tableããããã«æé©ãã©ããã¯ããããŸãããïŒããå¥ã®åé¡ãšããŠã§ãã ç§ãå«ããäžéšã®ãŠãŒã¶ãŒã¯ãdata.tableã§ã®åçŽãªç§»åå¹³åããã§ã«4幎éåŸ ã£ãŠããŸãã
ãããç§ã®èŠè§£ã§ããçµ±èšå®¶ã®èŠç¹ããæ¥ãŠããŸãã
ç§ã®èŠç¹ã¯ãããŒã¿ãŠã§ã¢ããŠãžã³ã°ïŒãŠã£ã³ããŠé¢æ°ãå°ãªããšãé±ã«1å䜿çšããïŒãšäŸ¡æ ŒåŸååæïŒæ°åã®ç°ãªã移åå¹³åã䜿çšããïŒããæ¥ãŠããŸãã
rollmean
ãã©ããã¯roll
ãã©ã³ãã«ããã·ã¥ãããŸãã 移åå¹³åãå®è£
ããä»ã®ããã±ãŒãžã®ã»ãšãã©ã¯ãå
¥åã«ååšããna.rm=FALSE
ãšNAãããŸãåŠçã§ããªãããšãããããŸããã ãã®å®è£
ã¯ãNAãäžè²«ããŠmean
ã«åŠçããŸããããã«ããã ISNAN
åŒã³åºãã®ããã«ãè¿œå ã®ãªãŒããŒããããçºçããŸãã ãŠãŒã¶ãŒãå
¥åã«NAããªããšç¢ºä¿¡ããŠããå Žåã¯ãAPIã®ããŒãžã§ã³ãé«éåããããšã¯ã§ããŸãããå®å
šæ§ã¯äœããªããŸãã
PRã¯ïŒ2795ã«ãããŸã
PRããã®è³ªåã«çãã@mattdowle
data.tableå ã§ãããè¡ãã®ã¯ãªãã§ããïŒ æ¢åã®ããã±ãŒãžã«è²¢ç®ããŠdata.tableãããããã䜿çšããã®ã§ã¯ãªãããªããããçµ±åããã®ã§ããïŒ
ç§ã®æšæž¬ã§ã¯ãæ§æïŒdata.tableã«çµã¿èŸŒãŸããŠããå Žåã«ã®ã¿å¯èœãŸãã¯äŸ¿å©ãªæ©èœãããšãã°[...]å ã§æé©åãããŠããïŒãšãdata.tableã®å éšãCã¬ãã«ã®ããŒãªã³ã°é¢æ°ã«çµã¿èŸŒãããšã«ãªããŸãã ããšãã°ãfroll *ã¯ãdata.tableã€ã³ããã¯ã¹ãšããŒãèªèããŠäœ¿çšããå¿ èŠããããŸãã ãããããªããããã«é¢ãããã詳现ãªæ å ±ãå¿ èŠã§ãã ããšãã°ãç°¡åãªçãäŸã
ç§å人ãšããŠã¯ãã¹ããŒããšäŸåé¢ä¿ã®é£éã®æ¬ åŠãåé¡ã§ãããä»æ¥ã§ã¯ç°¡åã«éæããããšã¯ã§ããŸããã
ããŒ/ã€ã³ããã¯ã¹ã¯frollmin / frollmaxã«åœ¹ç«ã€å¯èœæ§ããããŸããããŠãŒã¶ãŒãã¡ãžã£ãŒå€æ°ã«ã€ã³ããã¯ã¹ãäœæããå¯èœæ§ã¯ã»ãšãã©ãããŸããã ãŠãŒã¶ãŒãã¡ãžã£ãŒå€æ°ã®ã€ã³ããã¯ã¹ãäœæããå¯èœæ§ã¯ã»ãšãã©ãããŸããããŸãããã®æå°/æ倧ã®æé©åã¯ãŸã è¡ã£ãŠããŸããã å²ãåœãŠãããã¡ã¢ãªã¯roll *åŒã³åºãåŸã«è§£æŸããããå¿çãšããŠè¿ãããããïŒé移åå¹³åãåèšãªã©ãšã¯å¯Ÿç
§çã«ïŒãGForceæé©åã«ã¯ããŸãæå³ããããŸããã
çµ±åããããã®èª¬åŸåã®ããè°è«ããªãå Žåã¯ã代ããã«ä»ã®ããã±ãŒãžã«è²¢ç®ããå¿ èŠããããŸãã
äžèšã®ããã€ãããªã¹ãããŸãããã確信ãæãŠãªãå Žåã¯ãdata.tableãŠãŒã¶ãŒã«è³ªåãå ¥åããããTwitterãªã©ã§åçã確èªããããšããå§ãããŸãã ãã®æ©èœã¯é·ãéãå€ãã®ãŠãŒã¶ãŒããèŠæ±ãããŠããŸããã å¿çããŠãçŽåŸã§ããªãå Žåã¯ããã®åé¡ã解決ã§ããŸãã
sparklyr
ã¯ãéåžžã«å€§èŠæš¡ãªããŒã¿ã»ããã§ããŒãªã³ã°é¢æ°ãéåžžã«ããŸããµããŒãã§ããããšãããããŸããã
@harryprinceã¯ãsparklyrã§ãããè¡ãæ¹æ³ã®ãµã³ãã«ã³ãŒããæäŸããããšã§ãããå°ãå
ã
ããŠã£ã³ããŠé¢æ°ãã«ãããš
ããŒãªã³ã°ã¢ã°ãªã²ãŒãã¯ãåºå®å¹ ã®ãŠã£ã³ããŠã§åäœããŸãã ããŒã¹Rãdplyrã«ã¯ãããŸããããRcppRollãªã©ã®ä»ã®ããã±ãŒãžã«ã¯å€ãã®å®è£ ããããŸãã
dplyrã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ãããŠããªãsparklyrãä»ããŠã«ã¹ã¿ã sparkAPIã䜿çšããŠããAFAIUãæ£ããã§ããïŒ
ãã®åé¡ã¯ããŒãªã³ã°ã¢ã°ãªã²ãŒãã«é¢ãããã®ã§ãããä»ã®ãã¿ã€ããã®ãŠã£ã³ããŠé¢æ°ã¯ãã§ã«é·ãé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ãããã³zoo
ãŸãã¯RcppRoll
ã©ã¡ãã«ãåããããŠããªãæ©èœã®ã®ã£ãããåããŸãã
ãã®StackOverflowã®è³ªåã¯ã partial = TRUE
åŒæ°ã®æ©æµãåããå¯èœæ§ã®ããããŒãªã³ã°ã¢ããªã±ãŒã·ã§ã³ã®è¯ãäŸã§ãã
@msummersgillãã£ãŒãããã¯ãããããšãã æåã®æçš¿ã§ã¯ãéšåçãªãŠã£ã³ããŠæ©èœã³ãŒããèŠã€ããã³ãããshaãæ瀺çã«ãªã³ã¯ããŸããã ããã«ããå®è£
ã¯ãã³ãŒãã®è€éãã軜æžããããã«åŸã§åé€ãããŸããã ãŸãããã®æ©èœã䜿çšããªããŠããããã©ãŒãã³ã¹ã³ã¹ããäœããªããŸããã ãã®æ©èœã¯ãä»ã®æ¹æ³ã§å®è£
ã§ããŸãïŒãããããå®è£
ããå¿
èŠããããŸãïŒãæåã¯ãã®ãŸãŸå®äºãã次ã«1:window_size
è¿œå ã«ãŒãã䜿çšããŠãæ¬ èœããŠããéšåãŠã£ã³ããŠãåããŸãã ãããã£ãŠããã®æ©èœã®ãªãŒããŒãããã¯ãããã䜿çšããå Žåã«ã®ã¿é¡èã«ãªããŸãã ããã§ãã adaptive
åŒæ°ãä»ããŠãã®æ©èœãæäŸããŸããããã§ã partial
æ©èœã¯ã adaptive
å¹³åã®ç¹æ®ãªã±ãŒã¹ã«ãããŸããã ?froll
ããã¥ã¢ã«ã«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ãæã£ãŠããŸã
ããããšãããã¯çŽ æŽãããã§ãã ãã ãã質åã¯1ã€ã ãã§ãã 移åå¹³åã移åäžå€®å€ãªã©ã®åçŽãªããŒãªã³ã°éªšæãã衚瀺ãããŸããã ããŒãªã³ã°DTããŒã¿ãã¬ãŒã ãªã©ã®ããæŽç·ŽãããããŒãªã³ã°æ©èœãå®è£
ããŠããŸããïŒ ããšãã°ãæåŸã®10åã®obsã䜿çšããŠããŒãªã³ã°DTãäœæããããã«lm
ååž°ãå®è¡ããŸãã
ããããšãïŒ
@randomgambitéèŠãé«ããªãéããç¯å²å€ã ãšæããŸãã Cã§ãã¹ããããã«ãŒããåŠçããã ãã§ãããŒã¹R / zooãããé«éã«ããããšã¯ããã»ã©é£ãããããŸããããã ãããã¹ããããã«ãŒããåé¿ããã«ã¯ãããªã³ã©ã€ã³ãã¢ã«ãŽãªãºã ã䜿çšããŠå®è£ ããå¿ èŠããããŸãã ããã¯ããããªãããŒã§ãããæçµçã«ã¯ä»»æã®çµ±èšã«å¯ŸããŠãããè¡ãããšãã§ãããããããæç¹ã§ãããã®çµ±èšãé®æããå¿ èŠããããŸãã
@jangoreckièå³æ·±ãããããšãã ã€ãŸãã tsibble
ã䜿çšããŠåã蟌ã¿ãŸã... DATA.TABLES
ãtibble
ïŒ ãã€ã³ããããŒïŒD
frollmean
ã䜿çšããŠã x
æè¿åã䜿çšããŠãã€ããªy
P[y | x]
ã瀺ããã³ãã©ã¡ããªãã¯ãããžã¹ãã£ãã¯æ²ç·ããèšç®ããããšããŸããã logical
ãinteger
èªåçã«ãã£ã¹ããããªãã£ãããã y
ä¿åãããŠããããšã«é©ããŸããïŒ
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ãfill = fillãalgo = algoãalign = align ãïŒã®ãšã©ãŒ
xã¯æ°å€åã§ããå¿ èŠããããŸã
ãã¯ãã«åãããx
/ n
åŒæ°ãããã©ãŒãã³ã¹ã«ã©ã®ããã«åœ±é¿ãããã®äŸã
https://github.com/AdrianAntico/RemixAutoML/commit/d8370712591323be01d0c66f34a70040e2867636#r34784427
ã«ãŒããå°ãªããã³ãŒããèªã¿ããããã¯ããã«é«éã§ãïŒ10åãã36åã®é«éåïŒã
frollapplyæºåå®äºïŒ https ïŒ
### 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ã§ããå¯èœæ§ããããŸããã©ãã«ãšfrollapplyã¯ãªã¹ããè¿ããŸããïŒ æ¬¡ã«ããã³ãã©ãŒãã®ãã¹ããã©ãã«ã®èŠçŽãè¡ãããã«ãããŒãªã³ã°ååž°ãŸãã¯ããŒãªã³ã°ãã¹ããè¡ãããšãã§ããŸãã
åçŸå¯èœãªäŸãæäŸããããšã¯åžžã«æçšã§ãã ...æ確ã«ããããã«ããã®ãããªã·ããªãªã§ã¯ãããªããããããšæããŸã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)
ã
ããã«å¯ŸããæŽæ°ã¯ãããŸããïŒ
ç§ã¯ãã®åã®èŠæ±ã2çªç®ã«ããŠããŸãã
ããã«ãéšåçãªãŠã£ã³ããŠãèš±å¯ããããã«ãéšåçãªãåŒæ°ããµããŒãããããšã¯å¯èœã§ããããïŒ
@eliocampã¯ã partial
ãŠã£ã³ããŠãšã¯äœãã«ã€ããŠè©³ãã説æããŠããã ããŸããïŒ
@eliocamp ãéšåçãªãåŒæ°ããµããŒãããããšã¯å¯èœã§ãã adaptive=TRUE
åŒæ°ã䜿çšããŠããã®æ©èœã®ãµããŒãã¯ãã§ã«ååšããŠããããšããåç¥ãããããŸããã詳现ã«ã€ããŠã¯ãäŸãåç
§ããŠãã ããã
ããã¯ãããŒããŠã£ã³ããŠãã€ã³ãã圢æããã®ã§ã¯ãªããæåããæåŸãŸã§é¢æ°ãèšç®ããããšãæå³ããŸãã
ããšãã°ãå¹
ã11ã®ç§»åå¹³åã®å Žåãè¿ãããæåã®èŠçŽ ã¯èŠçŽ 1ãã6ã®å¹³åã«ãªããŸãã2çªç®ã®èŠçŽ ã¯1çªç®ãã7çªç®ã®å¹³åã«ãªãã以äžåæ§ã«ç¶ããŸãã
@jangoreckiãããããããšããç§ã¯ãããç¥ããŸããã§ããïŒ ç¢ºèªããŠã¿ãŸãã
åæããã䟿å©ãã ãã§ãªãã¹ããŒãã®ããã«ããéšåçãªè°è«ãå¿
èŠã§ãã adaptive=TRUE
ã¯ãªãŒããŒããããè¿œå ããŸãã
ãã¡ãããããŒãªã³ã°ååž°ãå¿
èŠãªã®ã§ãè€æ°ã®å€æ°ãæå®ããŠããããããåå¥ã«ã§ã¯ãªããäžåºŠã«ããŒãªã³ã°ããŸãã
ãããã®ã¹ããŒã¿ã¹ã«é¢ããæŽæ°ã¯ãããŸããã
æäŒãããã®ã§ãããç§ã®C ++ã¹ãã«ã¯ãŸã£ããååšããŸããã ïŒsweatïŒå®å šãªåå¿è ã«é©ããŠãããšæããŸããïŒ
C ++ã§ã¯ãªãCã§ã³ãŒãã£ã³ã°ããŸããã¯ããæåããå§ããã®ã«é©ããŠããŸãã ç§ã¯frollmeanã§ãŸãã«ãããããŸããã
ã³ãŒããèŠããšãæ°ãé ããªãããã§ãã ããããç§ã¯ãšã«ããããªããæŽæ°ããŸãã
ãããä»ãããã«å¥ã®èŠæ±ã®ããã«ïŒfrollmeanïŒ.SDïŒã¯ååãä¿æããå¿ èŠããããŸãã ããäžè¬çã«ã¯ãå ¥åãååä»ãã®ãªã¹ãã®ãããªãã®ã§ããå Žåãfroll *ã¯ååãä¿æããå¿ èŠããããŸãã
data.tableãé »ç¹ã«äœ¿çšããç§ã¯ãçŸåšããã±ãŒãžtsibble
æäŸãããŠãããããªããæéèªèãæ©èœããããšéåžžã«äŸ¿å©ã ãšæããŸãã æ®å¿µãªããããã®ããã±ãŒãžã¯dplyr
äžå¿ã«éçºãããŠããŸãã data.tableã®å®è£
ãå¯èœãã©ããçåã«æããŸãã ãã®å·ã§ææ¡ãããŠãããŠã£ã³ããŠé¢æ°ã¯ããããã®æ©èœã®ãµãã»ããã§ãã
@ywhcuhkãã£ãŒãããã¯ãããããšããç§ã¯å®éã«ãã®åé¡ããã§ã«ããŸãã«ãå€ããæ±ããŠãããšæã£ãŠããŸããã ãã®ã»ãšãã©ã¯ãéåžžã«é«éãªè»œéã®ããã±ãŒãžããŒã«ã§ååã«ã«ããŒãããŠããŸãã ãã®ä»ã®æ©èœã«ã€ããŠã¯ãèå³ã®ããæ©èœããšã«æ°ããåé¡ãäœæããããšããå§ãããŸãã®ã§ãå®è£
/ä¿å®ãããã©ããã®è°è«ã¯ãããããåå¥ã«æ±ºå®ã§ããŸãã tstibbleã®readmeãèŠãã ãã§ã¯ãæ°ãããã®ã¯äœãèŠã€ãããŸãã...
ã¿ã€ãã«ã¯ãTidyTemporalData Framesãã§ãããäžæçãªçµåãæäŸããŠããããã«ã¯èŠããŸããã
è¿ä¿¡ããããšãããããŸãtsset
ãšxtset
ã«åºã¥ãæäœã§ããdata.tableã®ãã€ã³ããã¯ã¹ããæ¡åŒµã§ãããšæããŸããã©ãããããããã®ãããªæäœãå¯èœã«ããããã«ã
ãã¡ããããããã®æäœã¯ã shift
ãby
ãªã©ã®data.tableé¢æ°ã§å®è¡ã§ããŸãã data.tableã®index
ã«ã¯ã調æ»ããå¯èœæ§ããããããããšæããŸããã ç§ã¯ãããå¥ã®åé¡ã«å±ããã¹ãã§ããããšã«åæããŸãã ããããç§ã¯äžèšã®è°è«ã倱ãããšãªããããåããæ¹æ³ãç¥ããŸãã...
æãåèã«ãªãã³ã¡ã³ã
PRããã®è³ªåã«çãã@mattdowle
ç§å人ãšããŠã¯ãã¹ããŒããšäŸåé¢ä¿ã®é£éã®æ¬ åŠãåé¡ã§ãããä»æ¥ã§ã¯ç°¡åã«éæããããšã¯ã§ããŸããã
ããŒ/ã€ã³ããã¯ã¹ã¯frollmin / frollmaxã«åœ¹ç«ã€å¯èœæ§ããããŸããããŠãŒã¶ãŒãã¡ãžã£ãŒå€æ°ã«ã€ã³ããã¯ã¹ãäœæããå¯èœæ§ã¯ã»ãšãã©ãããŸããã ãŠãŒã¶ãŒãã¡ãžã£ãŒå€æ°ã®ã€ã³ããã¯ã¹ãäœæããå¯èœæ§ã¯ã»ãšãã©ãããŸããããŸãããã®æå°/æ倧ã®æé©åã¯ãŸã è¡ã£ãŠããŸããã å²ãåœãŠãããã¡ã¢ãªã¯roll *åŒã³åºãåŸã«è§£æŸããããå¿çãšããŠè¿ãããããïŒé移åå¹³åãåèšãªã©ãšã¯å¯Ÿç §çã«ïŒãGForceæé©åã«ã¯ããŸãæå³ããããŸããã
äžèšã®ããã€ãããªã¹ãããŸãããã確信ãæãŠãªãå Žåã¯ãdata.tableãŠãŒã¶ãŒã«è³ªåãå ¥åããããTwitterãªã©ã§åçã確èªããããšããå§ãããŸãã ãã®æ©èœã¯é·ãéãå€ãã®ãŠãŒã¶ãŒããèŠæ±ãããŠããŸããã å¿çããŠãçŽåŸã§ããªãå Žåã¯ããã®åé¡ã解決ã§ããŸãã