R_Language 板


LINE

※ 引述《tan800630 (天ㄦ)》之銘言: : [問題類型]: : : 效能諮詢(我想讓R 跑更快) : : [軟體熟悉度]: : : 使用者(已經有用R 做過不少作品) : [問題敘述]: : : 各位版上的前輩好,最近自己在玩臉書粉絲專頁的資料,目前想要統計 : 某段時間的Po文中總共有哪些人按讚,每人的按讚次數,以及Po文時間, : 目前已經先將粉絲專頁(柯文哲 哈)某一段時間的po文都抓下來並存成RData檔案, : #直接抓getPost()的資料存進去 : 目前希望將檔案整理成 "ID","最早按讚文章日期","最後按讚文章日期","總共按讚次數" : 的格式,目前使用的方式仍然是用迴圈逐次讀取每一個檔案並且記錄按讚者的 : 相關內容(我知道迴圈效率很低O_Q 自己嘗試使用apply系列但失敗) : 然而由於按讚者眾多,目前照著我預設的方式會跑非常久,因此想請教各位有沒有 : 甚麼建議可以讓整個程式的處理效率更快速 : 再麻煩各位前輩指教~~~~~ : : [程式範例]: : : 程式碼 : https://pastebin.com/e9WY2AjD : 範例檔案下載處(放了三篇文章的檔案,請參考) : http://doora.qiniudn.com/lH2Z7.rar : : [環境敘述]: : : R version 3.3.2 (2016-10-31) : Platform: x86_64-w64-mingw32/x64 (64-bit) : Running under: Windows 8.1 x64 (build 9600) : locale: : [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950 : [2] LC_CTYPE=Chinese (Traditional)_Taiwan.950 : [3] LC_MONETARY=Chinese (Traditional)_Taiwan.950 : [4] LC_NUMERIC=C : [5] LC_TIME=Chinese (Traditional)_Taiwan.950 : attached base packages: : [1] stats graphics grDevices utils datasets methods base : other attached packages: : [1] Rfacebook_0.6.12 httpuv_1.3.3 rjson_0.2.15 httr_1.2.1 : loaded via a namespace (and not attached): : [1] R6_2.2.0 tools_3.3.2 Rcpp_0.12.9 : : [關鍵字]: : : 迴圈 後面有R code,不過我先說,我建議這種資料直接存到資料庫 一個表存POST,一個表存Like,一個表存Comment 每一個POST都存一個POST ID,Like跟Comment表再存的時候也要記得給一個post id 然後用SQL就可以輕鬆串出你要的結果了: select b.from_id user_id, min(a.post_time) first_like, max(a.post_time) last_like, count(a.post_time) count_like from post_table a, like_table b where 1=1 and a.post_id = b.post_id group by b.from_id 但是要用R做的話大概是這樣: library(pipeR) library(data.table) library(lubridate) postDT <- lapply(list.files("lH2Z7", full.names = TRUE), function(fn){ load(fn) data.table(post_time = parse_date_time(substring(post$post$created_time, 1, 19), "ymd HMS"), post$likes) }) %>>% rbindlist outDT <- list( dcast(postDT, from_id + from_name ~ 1, min, value.var = "post_time") %>>% setnames(".", "first"), dcast(postDT, from_id + from_name ~ 1, max, value.var = "post_time") %>>% setnames(".", "last"), dcast(postDT, from_id + from_name ~ 1, length, value.var = "post_time") %>>% setnames(".", "count") ) %>>% Reduce(f = function(x, y) merge(x, y, by = c("from_id", "from_name"))) # 結果: # from_id from_name first last count # 1: 1000352350101347 王相現 2017-04-11 12:06:46 2017-04-13 14:31:01 3 # 2: 1000365193433309 Erica Wang 2017-04-13 14:31:01 2017-04-13 14:31:01 1 # 3: 1000465496719965 陳健男 2017-04-12 11:00:15 2017-04-12 11:00:15 1 # 4: 1001166286680917 Jolie Liaw 2017-04-12 11:00:15 2017-04-12 11:00:15 1 # 5: 1001188363348018 翁茂翔 2017-04-12 11:00:15 2017-04-13 14:31:01 2 dcast一定要吃到global environment宣告的函數(攤手 所以我就乖乖寫了,沒有用lapply配合assign宣告到.GlobalEnv -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) https://goo.gl/72l1m9 data.table #1LhW7Tvj (R_Language) https://goo.gl/PZa6Ue dplyr(上.下) #1LhpJCfB,#1Lhw8b-s (R_Language) https://goo.gl/I5xX9b tidyr #1Liqls1R (R_Language) https://goo.gl/i7yzAz pipeR #1NXESRm5 (R_Language) https://goo.gl/zRUISx --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.38.134.123
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1493469201.A.557.html
1F:推 tan800630: 謝謝C大! 晚點試試看 04/30 20:14
2F:推 tan800630: 其實dplyr之前也摸過,但感覺還沒內化成第一時間會想到 05/01 10:58
3F:→ tan800630: 處理效率自己實在是不大會比較,看來之後還是要多觀摩 05/01 10:59
我這裡是用data.table (攤手 tidyr也可做到一樣的效果 ※ 編輯: celestialgod (114.38.134.123), 05/01/2017 15:44:50







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP