少妇被躁爽到高潮无码人狍大战_亚洲AV无码成人网站久久精品大_亚洲熟女乱综合一区二区在线_久久精品国产免费观看
讓專(zhuān)才為專(zhuān)家服務(wù)
首頁(yè) 產(chǎn)品應用 典型案例 一個(gè)處理大量 EM50 數據的示例 (dtplyr+data.table 版本)

一個(gè)處理大量 EM50 數據的示例 (dtplyr+data.table 版本)

來(lái)源:北京力高泰科技有限公司 發(fā)布日期:2020-04-01 15:57:10 瀏覽次數:2235

編者薦語(yǔ):

需要處理大量EM50數據?請看這里!

以下文章來(lái)源于生態(tài)學(xué)數據分析之R和Python ,作者祝介東


  1. 一個(gè)處理大量 EM50 數據的示例 (dtplyr版本)

主要改進(jìn)有以下幾點(diǎn):

  1. 盡可能的最大化 data.table 來(lái)處理數據,大家都知道它最大的優(yōu)勢是純 C 寫(xiě)的,速度快。

  2. 復雜的轉換盡可能使用 dtplyr,減少操作難度,又兼顧了時(shí)間上的考慮。

  3. 不知什么原因,dtplyr 在我這里對 data.table 的支持不是很足,我沒(méi)找到原因的代碼報錯,所以最后一步又使用了部分  data.table 的代碼。

下面內容,關(guān)鍵步驟都有注釋?zhuān)┐蠹覅⒖肌?/p>


先加載需要多次的包:

1library(data.table)
2library(dtplyr)
3library(dplyr, warn.conflicts = FALSE)
4library(stringr)
5library(tidyr)
6library(lubridate)

然后是最重要的部分:

  1# 將序列號寫(xiě)到一個(gè)csv 文件內讀取
 2sn <- fread(file = "./data/EM50_SN.csv")
 3
 4#部分數采的通道沒(méi)有全部使用,為方便后續數據的處理
 5#暫時(shí)將深度1000分配各這些通道,方便數據處理,
 6#因為盡管無(wú)傳感器,數采仍然輸出了無(wú)效的數值。
 7#并非一定是 1000,只要沒(méi)有該深度的數據即可,比如8888
 8
 9depth_47373 <- c(10801000140150)
10depth_26387 <- c(1551651080130)
11
12# 將表頭改一下名字,不用port12345,方便后面處理
13name_47373 <-
14  paste0(c("moist_""temp_"), rep(depth_47373, each = 2))
15name_26387 <-
16  paste0(c("moist_""temp_"), rep(depth_26387, each = 2))
17
18# directory and pattern for list.files ------------------------------------
19data_dir <- ("./csvdata/")
20file_pattern <- paste0(sn[, EM50], "*")
21file_pattern <- str_split(file_pattern, pattern = "EM\\*")
22file_dir <- paste0(rep(data_dir, nrow(sn)))
23file_dir <- str_split(file_dir, "\\*\\/$")
24
25# fread 縮短讀數的時(shí)間 ------------------------------------
26# 將所有文檔名和路徑都讀入list
27all_files <-
28  purrr::map2(file_dir, file_pattern, list.files, full.names = TRUE)
29
30# 讀取第一個(gè)list,按序列號順序排列
31list_files <-
32  lapply(all_files[[1]],
33         fread,
34         skip = 3,
35         col.names = c("time", name_26387))
36# 按行將list轉換為 data.table
37dt_26387 <- rbindlist(list_files)
38
39# 將日期轉化為日期格式
40dt_26387[, time := as.POSIXct(time)]
41
42
43# 將數據按濕度和溫度整理成列 -----------------------------------------------------------
44dt_26387[, time := as.POSIXct(time)]
45dt_26387 <- melt(
46  dt_26387,
47  measure.vars = name_26387,
48  variable.name = "depth",
49  value.name = "val"
50)
51# 將高度與前面表示的溫度和濕度拆分開(kāi)
52dt_26387[, c("measure_item""depth_val") := 
53           tstrsplit(depth, "_", fixed = TRUE)]
54
55# 按 moist 和 temp 將數據分開(kāi)為 list
56dt_26387_split <-
57  split(dt_26387, f = as.factor(dt_26387$measure_item))
58# 再把 list 拼起來(lái),按列
59dt_26387_split <- bind_cols(dt_26387_split)
60
61# 把數據名字改正常了,好記,選擇需要的列,其他扔掉
62dt_26387_merge <-
63  dt_26387_split[, `:=`(moisture = val , temprature = val1)]
64dt_26387_merge <-
65  dt_26387_merge[, .(time, moisture, temprature), keyby = depth_val]
66
67# 轉換為 lazy_dt,開(kāi)始 dtplyr
68lazy_26387 <- lazy_dt(dt_26387_merge)
69lazy_26387 <- lazy_26387 %>%
70  rename(depth = depth_val) %>%
71  # 按照15 min 的間隔劃分數據,并整理
72  # 同時(shí)不要忘記分按剖面來(lái)處理
73  mutate(sep_15 = floor_date(time, "15 mins")) %>%
74  group_by(depth, sep_15) %>%
75  summarise(
76    moisture = mean(moisture, na.rm = TRUE),
77    temp = mean(temprature, na.rm = TRUE)
78  ) %>%
79  as.data.table()
80
81# 不能使用 separate 繼續轉換 sep_15,不知原因
82# separate error:no applicable method for 'separate_' applied
83# to an object of class "c('dtplyr_step_group', 'dtplyr_step')"
84# 使用 data.table 繼續
85# 把時(shí)間日期拆開(kāi)了
86lazy_26387[, c("date""time") := 
87             tstrsplit(sep_15, " ", fixed = TRUE)]
88lazy_26387[, c("year""month""day") := 
89             tstrsplit(date, "-", fixed = TRUE)]
90lazy_26387[, c("hour""minuts""sec") := 
91             tstrsplit(time, ":", fixed = TRUE)]
92
93# 扔掉不需要的數據                                                       
94lazy_26387[, `:=`(
95  sep_15 = NULL,
96  sec = NULL,
97  date = NULL,
98  time = NULL
99)]
100
101# 整理另一個(gè)序列號 -----------------------------------------------------------
102# 只需要將前面的代碼改換序列號即可
103
104list_files <-
105  lapply(all_files[[2]],
106         fread,
107         skip = 3,
108         col.names = c("time", name_47373))
109# 按行將list轉換為 data.table
110dt_47373 <- rbindlist(list_files)
111
112# 將日期轉化為日期格式
113dt_47373[, time := as.POSIXct(time)]
114
115
116# 將數據按濕度和溫度整理成列 -----------------------------------------------------------
117dt_47373[, time := as.POSIXct(time)]
118dt_47373 <- melt(
119  dt_47373,
120  measure.vars = name_47373,
121  variable.name = "depth",
122  value.name = "val"
123)
124# 將高度與前面表示的溫度和濕度拆分開(kāi)
125dt_47373[, c("measure_item""depth_val") := 
126           tstrsplit(depth, "_", fixed = TRUE)]
127
128# 按 moist 和 temp 將數據分開(kāi)為 list
129dt_47373_split <-
130  split(dt_47373, f = as.factor(dt_47373$measure_item))
131# 再把 list 拼起來(lái),按列
132dt_47373_split <- bind_cols(dt_47373_split)
133
134# 把數據名字改正常了,好記,選擇需要的列,其他扔掉
135dt_47373_merge <-
136  dt_47373_split[, `:=`(moisture = val , temprature = val1)]
137dt_47373_merge <-
138  dt_47373_merge[, .(time, moisture, temprature), keyby = depth_val]
139
140# 轉換為 lazy_dt,開(kāi)始 dtplyr
141lazy_47373 <- lazy_dt(dt_47373_merge)
142lazy_47373 <- lazy_47373 %>%
143  rename(depth = depth_val) %>%
144  # 按照15 min 的間隔劃分數據,并整理
145  # 同時(shí)不要忘記分按剖面來(lái)處理
146  mutate(sep_15 = floor_date(time, "15 mins")) %>%
147  group_by(depth, sep_15) %>%
148  summarise(
149    moisture = mean(moisture, na.rm = TRUE),
150    temp = mean(temprature, na.rm = TRUE)
151  ) %>%
152  as.data.table()
153
154# 不能使用 separate 繼續轉換 sep_15,不知原因
155# separate error:no applicable method for 'separate_' applied
156# to an object of class "c('dtplyr_step_group', 'dtplyr_step')"
157# 使用 data.table 繼續
158# 把時(shí)間日期拆開(kāi)了
159lazy_47373[, c("date""time") := 
160             tstrsplit(sep_15, " ", fixed = TRUE)]
161lazy_47373[, c("year""month""day") := 
162             tstrsplit(date, "-", fixed = TRUE)]
163lazy_47373[, c("hour""minuts""sec") := 
164             tstrsplit(time, ":", fixed = TRUE)]
165
166# 扔掉不需要的數據                                                       
167lazy_47373[, `:=`(
168  sep_15 = NULL,
169  sec = NULL,
170  date = NULL,
171  time = NULL
172)]

結果如下:

1#最終處理好的數據,已經(jīng)按 15 min 來(lái)進(jìn)行整理了:
2knitr::kable(head(lazy_26387))
3knitr::kable(head(lazy_47373))

untitled.png

最終將數據導出:

1#最終導出 csv。
2fwrite(lazy_47373, "./final-data/ave26387.csv")
3fwrite(lazy_47373, "./final-data/ave47373.csv")


少妇被躁爽到高潮无码人狍大战_亚洲AV无码成人网站久久精品大_亚洲熟女乱综合一区二区在线_久久精品国产免费观看