赞
踩
前一阵子完成了一个约90w条json数据的大数据新闻分析作业,发现对于类似数据格式的以R语言为分析工具的数据分析博客不是很全,相关信息十分零散。因此我整理了一些处理超大文本的方法和技巧,其中借鉴了一些博主的思想方法,作为学习和总结的资料。
文本大数据分析的基本思路
首先温故一下处理大数据文本文件的相关思想方法。我觉得主要有以下几个方面:
1.数据读取和格式识别(清楚的知道是什么格式的文件,文件包含的数据信息有哪些等等)
2.数据预处理/数据清洗/数据变换(这一步实际上是处理周期比较长的,需要把数据按照自己的要求处理为没有缺失值或错误值的整齐的文件,我比较喜欢处理为csv格式,当然mdb格式也是很好的)
3.文本数据挖掘,包括定量aggregate和主题分析
4.数据可视化
5.撰写数据分析报告
R读取json格式的超大文件
json格式文件流(一个90w左右行数的ndjson格式文件)看上去很可怕,但是是格式化的比较好处理的。笔者通过不断的尝试,发现json流处理是比较好的处理方法,即使用readlines函数嵌套数据转换语句实现批量格式的数据读写。
我参考了以下格式的代码R语言readlines函数用法
实现了不同编码格式的json文件的批量读入csv操作(也可以读入mySQL)
我处理的json新闻包含了title,content,sentiment,appName,id,sourceRegion,createDate,publishDate等多条数据标签。其中批量读取的方式大同小异,就是在编码转换上要花费一番功夫。
话不多说,上代码:
library(rjson) setwd("E:/") con <- file("E:/.txt", "r") line=readLines(con,n=1) while( length(line) != 0 ){ line=readLines(con,n=1) line<-iconv(line, from="UTF-8",to="GBK")//防止出现中文乱码 result <- fromJSON(line) data<-t(result$title) newstext<-data for (i in 1:length(newstext)) { write.table(newstext[[i]], "title.csv",col.names = F, append = T) } } close(con)
通过这行代码,可以将文本信息输出为一个只有一列的文本。笔者试验过这对于短而有序的文本时可以实现的,但是长篇文本就会出现数据乱七八糟的现象。
同样的,对于时间戳编码的时间数据,做一个简单的数据转换即可:
while(length(line) != 0 ){
line=readLines(con,n=1)
result <- fromJSON(line)
time <-as.POSIXct(result$createDate,origin="1970-01-01")
data<-t(time)
newstext<-data
for (i in 1:length(newstext)) {
write.table(newstext[[i]], "createTime.csv",col.names = F, append = T)
}
}
数据可视化
我比较常用的包是ggplot2包,因此这里用ggplot2包多唠嗑一下。
通过数据处理我们得到了非常整齐的csv格式文件,进行简单的合并以后,读取csv文件,很快就可以进行一定的统计处理。比如,对包含时间信息的数据,可以这样处理:
appName$createdate<-as.Date(appName$createdate, format='%Y/%m/%d')
appn <- appName %>%
group_by(appname) %>%
summarise
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。