大数据人|大数据第一社区
标题:
R语言:批量处理文本文件
[打印本页]
作者:
admin
时间:
2015-7-7 13:43
标题:
R语言:批量处理文本文件
多个数据以不同的日期作文件夹分别存放,每个文件夹中又有近一千个文本文件,每个文件都是一个用户的行为日志。为了分析这些数据,首先需要将这两万个文本文件读入R中,再用字符串函数进行处理成结构化的数据。处理方法如下:
library(stringr)
setwd('D:\\kaggle\\tang\\data')
data <- read.table('data.csv',T,sep=',')
# 读入文档地址
path <- 'D:\\kaggle\\tang\\data\\behavior'
dir.name <- dir('D:\\kaggle\\tang\\data\\behavior')
doc.name <- list()
fre <- numeric()
for (i in 1:length(dir.name)) {
doc.name[i]<- dir(paste(path,dir.name,sep='\\'))
fre <- length(doc.name[i])
}
dir <- rep(dir.name,fre)
doc.name <-unlist(doc.name)
file.name <- character()
for ( i in 1:length(dir)) {
file.name <- paste(path,dir,doc.name,sep='\\')
}
# 建立抽取主函数,返回列表
data.get <- function(file.name) {
#获取文本
temp <- readLines(file.name,encoding='UTF-8')
if (length(temp)<=2) return(NA)
# 用户编号
id <- str_match(file.name, "[A-Z0-9]{32}")
# 调查日期
day <- str_match(file.name, "\\d+-\\d+-\\d+")
# 开机时点
clock <-str_sub(str_match(file.name,'_\\d{2}-'),2,3)
# 切分转换文本函数
trans <- function(x){
res <- unlist(str_split(x, "\\[=\\]|<=>"))
# res <- str_extract(x, "[^<=>]+\\.[a-z]+")
return(res)
}
# 将文本切开转为列表
result <- lapply(temp,trans)
# 开机时长
opentime <- as.numeric(result[1][2])
# 先进行时间分析,由于有的信息不是按顺序排列,所以要按时点重排
# 时点抽取
time <- unlist(lapply(result[-c(1:2)], function(x) x[2]))
time <- as.numeric(time)
# 时点排序,然后重排result列表
new.res <- result[-c(1:2)][order(time)]
# 返回用户使用的程序向量
prog <- unlist(lapply(new.res, function(x) x[4]))
# 各程序使用时间
time <- unlist(lapply(new.res, function(x) x[2]))
time <- as.numeric(time)
time[length(time)+1] <- opentime
time <- diff(time)
prog.time <- data.frame(prog=prog,time=time)
progtime <- dcast(prog.time,prog~., sum,value.var='time')
names(progtime) <- c('program','time')
# 使用的软件个数
numofsoft <- nrow(progtime)
# 真实使用时长
realtime <- sum(progtime$time,na.rm=T)
return(list(id=as.character(id),day=as.character(day),
clock = as.numeric(clock),opentime=opentime,
numofsoft = numofsoft,
realtime= realtime,progtime=progtime))
}
所有的文件名都已经存在file.name变量中,用上面建立好的函数data.get来提取第一份文件中的信息
> data.get(file.name[1])
$id
[1] "0143692D264FD906F10B8ECAB0F139D1"
$day
[1] "2012-05-07"
$clock
[1] 12
$opentime
[1] 7771
$numofsoft
[1] 9
$realtime
[1] 7610
$progtime
program time
1 360chrome.exe 1237
2 360leakfixer.exe 3
3 360Safe.exe 12
4 360sd.exe 20
5 explorer.exe 510
6 iexplore.exe 5473
7 liveupdate.exe 6
8 popup_QQ.exe 44
9 QQ.exe 305
作者:
花花灬太岁
时间:
2015-7-9 14:12
看上去似乎高大上,然并卵
欢迎光临 大数据人|大数据第一社区 (http://www.bigdata.ren/)
Powered by Discuz! X3.2