大数据人官方②群

大数据人|中国大数据第一社区

 找回密码
 注册会员

扫一扫,访问微社区

查看: 974|回复: 1

[其它] R语言:批量处理文本文件

[复制链接]
  • TA的每日心情
    奋斗
    2015-7-30 23:05
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    848

    主题

    968

    帖子

    4774

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    4774
    QQ
    发表于 2015-7-7 13:43:56 | 显示全部楼层 |阅读模式
    多个数据以不同的日期作文件夹分别存放,每个文件夹中又有近一千个文本文件,每个文件都是一个用户的行为日志。为了分析这些数据,首先需要将这两万个文本文件读入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

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-28 13:36
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    10

    主题

    12

    帖子

    342

    积分

    超级版主

    Rank: 8Rank: 8

    积分
    342
    发表于 2015-7-9 14:12:21 | 显示全部楼层
    看上去似乎高大上,然并卵
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条


    id="mn_portal" >首页Portalid="mn_P18" onmouseover="navShow('P18')">应用id="mn_P15" onmouseover="navShow('P15')">技术id="mn_P37" onmouseover="showMenu({'ctrlid':this.id,'ctrlclass':'hover','duration':2})">前沿id="mn_P36" onmouseover="navShow('P36')">宝箱id="mn_P61" onmouseover="showMenu({'ctrlid':this.id,'ctrlclass':'hover','duration':2})">专栏id="mn_P65" >企业id="mn_Nd633" >导航 折叠导航 关注微信 关注微博 关注我们

    QQ|广告服务|关于我们|Archiver|手机版|小黑屋|大数据人 ( 鄂ICP备14012176号-2  

    GMT+8, 2020-6-5 18:48 , Processed in 0.212278 second(s), 35 queries .

    Powered by 小雄! X3.2

    © 2014-2020 bigdataer Inc.

    快速回复 返回顶部 返回列表