使用R语言 4秒对10万行qq群聊天记录进行基本的清洗整理

library(stringr)  #需要使用stringr里的str_extract正则抓取字符串

data <- readLines(file.choose(), encoding = "UTF-8") #读文件


data1 <- data[-c(1:8)] #去掉前八行不必要的表头

data2 <- as.data.frame(data1, stringsAsFactors = FALSE)

names(data2) <- "All"


数据很规整,第一行时间人物,第二行说的话,第三行空格,三行一循环


index <- which(sapply("[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]+:[0-9]+:[0-9]+",regexpr,

                      data2$All)>0) #正则匹配出 时间人物行 的索引


talkindex <- index + 1 #下面一行为聊天内容(ps,有些人会使用ctrl+enter输出聊天内容,导致聊天的话可能有两三行,那我只取第一行,这种情况出现的次数只有几百次,可以忽略)

以下的year time name都是对第一行时间人物进行字符串切割,利用for循环要起码几十分钟,sapply只要1秒不到

year <- sapply(data2$All[index], 
               substring ,1,10)
year <- as.character(year)
time <- sapply(data2$All[index], 
               substring ,12,19)
time <- as.character(time)
name <- sapply(data2$All[index], 
               substring ,20,50)
name <- as.character(name)
name <- as.character(sapply(name, str_extract , "([0-9]{6,11})|<(.*?)>")) #  抓取QQ号,唯一ID

newdata <- data.frame(Name = name,
                      Year = year, 
                      Time = time,
                      text = data2$All[talkindex], 
                      stringsAsFactors = F)


puredata <- newdata[-which(is.na(newdata$Name) == T),] #最后去除 有问题的QQ号,比如系统消息(10000),因为正则匹配它返回的结果是NA


清洗完的数据就可以继而词频统计做词云,时间与发言的热力图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值