R筋

プログラミングと時々育児

【R】ログ解析するときの工夫

久々に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")
#書き出す