私はこの形式で構造化されたデータを持っています (より長いですが、まだ省略されています。データセットはここにあります):
pull_req_id,user,action,created_at
1679,NiGhTTraX,opened,1380104504
1678,akaariai,opened,1380044613
1678,akaariai,opened,1380044618
...
次のライブラリをロードします。
library(TraMineR)
library(sqldf)
この関数を使用してロードします(これは迅速です):
read_seqdata <- function(data, startdate, stopdate){
data <- read.table(data, sep = ",", header = TRUE)
data <- subset(data, select = c("pull_req_id", "action", "created_at"))
colnames(data) <- c("id", "event", "time")
data <- sqldf(paste0("SELECT * FROM data WHERE strftime('%Y-%m-%d', time,
'unixepoch', 'localtime') >= '",startdate,"' AND strftime('%Y-%m-%d', time,
'unixepoch', 'localtime') <= '",stopdate,"'"))
data$end <- data$time
data <- data[with(data, order(time)), ]
data$time <- match(data$time, unique(data$time))
data$end <- match(data$end, unique(data$end))
(data)
}
project_sequences <- read_seqdata("/Users/name/github/local/data/event-data.txt",
'2012-01-01', '2012-06-30')
次に、この関数を実行してシーケンスの長さを計算します (非常に遅い)。
sequence_length <- function(data){
slmax <- max(data$time)
sequences.sts <- seqformat(data, from="SPELL", to="DSS", begin="time",
end="end", id="id", status="event", limit=slmax)
sequences.sts <- seqdef(sequences.sts, right = "DEL", left = "DEL",
gaps = "DEL")
sequences.length <- seqlength(sequences.sts)
(sequences.length)
}
project_length <- sequence_length(project_sequences)
ただし、これは骨の折れるほど遅いです。コードをリファクタリングして高速化する方法について何かアドバイスはありますか?
タイムスタンプの中には数千ステップ離れているものもありますが、各シーケンスの長さはほんの数ステップです。異なるシーケンスのタイムスタンプ間の大きな距離が、長い計算時間 (大学のスーパーコンピューターで 20 時間以上) の原因になる可能性はありますか?