久々にRのTIPSを。僕がRでログデータを処理したときにかんがえたことを書いとく。
#ログデータが複数ファイルにある時、リスト化する。 files <- list.files(getwd(),full.names=TRUE) #full.names=TRUEによりフルパスのリストができる。 #あとで使う系 access <- list() library(readr) #リストを順番に読み込む for(i in 1:length(files)){ tmp <- read.csv(files[i],sep="\n",colClasses = "character",encoding="UTF-8",header=FALSE) #sep="\n"により改行コードを区切り文字として読み込む #→ログデータは1行1ログであることが多いため、1行単位で読み込むと良い。 #colClasses = "character" #→デフォではfactor型など、扱いづらい型になっているので文字列として取得する。 tmp <-as.list(tmp$V1) #データフレームの第1列をリストに変換 x <- grepl("error-AAA",tmp) #”error-AAA”に該当する行番号を取得する。 access <- c(access,subset(tmp,x)) #tmpの中で抽出条件xに該当する行だけを取り出した上で、 #accessというリストに追記する。 } time <- str_extract(access,pattern="[0-9]{4}.[0-9]{2}.[0-9]{2}.[0-9]{2}.[0-9]{2}.[0-9]{2}" #時間を取り出す #stringrの関数str_extractは該当した正規表現を取り出してくれる。 url <- str_extract(access,pattern="(http)[^,]*") #URLを取り出す(てきとう) log <- cbind(time,url) #時間とURLをセットにしたデータフレームを作成 write.csv(log,"log.csv") #書き出す