## sougou用户画像数据分析与数据挖掘####
## 数据预处理和数据探索
## 分词文件
##设置工作文件夹
setwd("/Users/Daitu/数据分析/CCF/Sogou画像")
getwd()
## [1] "/Users/daitu/数据分析/CCF/Sogou画像"
## 加载所需要的包
library(readr)
library(readxl)
library(jiebaR)
## Loading required package: jiebaRD
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(parallel)
library(stringr)
library(plyr)
## -------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## -------------------------------------------------------------------------
##
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
## 读取数据####
## 读取训练集
filename <- "traindata.txt"
traindata <- readLines(filename,encoding = "UTF8")
## 读取测试集
filename <- "testdata.txt"
testdata <- readLines(filename,encoding = "UTF8")
## 对测试集和训练集进行预处理
## 便携一个处理每条训练数据的函数####
split_strs <- function(str1,n = 5){
## 该函数用来切分字符串,并返回一个向量
## str1 :所要分解的字符串
## n:要输出的向量个数
strvec <- vector()
# str1 <- traindata[1]
str1s <- str_split(str1,pattern = "\t",simplify = FALSE)
## 对训练集进行处理
if(n == 5){
strvec[1] <- str1s[[1]][1]
strvec[2] <- str1s[[1]][2]
strvec[3] <- str1s[[1]][3]
strvec[4] <- str1s[[1]][4]
strvec[5] <- str_c(str1s[[1]][5:length(str1s[[1]])],collapse=",")
}
if(n == 2){
strvec[1] <- str1s[[1]][1]
strvec[2] <- str_c(str1s[[1]][2:length(str1s[[1]])],collapse=",")
}
return(strvec)
}
split_strs(traindata[1])
## [1] "22DD920316420BE2DF8D6EE651BA174B"
## [2] "1"
## [3] "1"
## [4] "4"
## [5] "柔和双沟,女生,中财网首页 财经,http://pan.baidu.com/s/1plpjtn9,周公解梦大全查询2345,曹云金再讽郭德纲,总裁大人行行好,中财网第一财经传媒,教师节全文,男子砸毁15墓碑,黄岩岛最新填海图,引起的疲,缘来未迟落跑甜心不好惹,梁朝伟与替身同框,笑傲江湖电视剧任贤齐,小起名字女孩名字,海运行李到堪培拉,确定,诱爱99天 司少的天价宝贝,什么是遥控魔棒,徽信表情动态搞笑图片,教师节征文100字,安微联通网上营业厅,甜宠百分百:校草的萌萌未婚妻,豪门重生之暖爱成婚,nikehypershift和kd5哪个好看,韭菜炒鸡蛋,陈赫玩王者荣耀,虎牙楚河,三国演义小说txt下载,威县欧派,炒馍花怎么做好吃,黄岩岛最新消息2016年,中秋节诗句大全祝福,教师节征文,菜谱,柔和双沟卖的怎么样,七位数开奖结果,以色列停车场坍塌,天龙家庭农场,7.22什么星座,新旧约圣经和合本下载,4π,wifi万能钥匙,威灵仙图片,临泉长官天龙家庭农场,早安总统大人,百合,莲藕的做法,花街,无锡,蚬壳胃散怎么吃,触手忆寒,中秋节的诗句,孟州电信 电子发票,鸡丝汤的做法,我等你,临泉长官镇桥口李小刚农场,朋仇,全民k歌,炸葱花,蒜苔炒肉,冰川的图片,kd5,…,若风,好奇纸尿裤,清蒸鱼,189.8是谁的平方,重庆餐馆发生爆炸,捡手机被失主抢劫,https://yunpan.cn/ocsqfgtfya2ewj,炒馍花的家常做法,三国演义小说百度云,总裁掠爱小舅别太坏,:https://yunpan.cn/cmh8tmeyraiww,周公解梦,查坦克冰川,凉拌藕片的做法,投票,鸡丝炒什么好吃,被时光掩埋的秘密小说下载,中国电信电子发票,张续豪,关于月亮的诗句,用酵母蒸馒头的方法,赵丽颖碧瑶坐,触手兵长,图集 下载腾讯新闻,看街头混战武警,厦门航空,蚬壳胃散,炒茄子做法,身份类别怎么填,最好的我们里面的方特在哪里,牢里面的生活是怎样的,强迫症有哪些表现,白袍法师暖暖图片,朋仇广场舞,小宇热游,蒸馒头的方法,狡滑的意思,黄石大冶东岳派出所服务电话,三国演义小说下载txt,http://zxjhjc9088.1688.com,松柏道馆,10.1高速免费几天,三国演义小说txt,柔和双沟业务待遇,酵母蒸馒头的方法,初中家教一对一辅导,口子窖,中秋节祝福诗句,侠岚,文王国窖42度价格表1001文王国窖42度价格表,批注是什么意思,殿下专属小丫头,无锡爆炸,炸茄子做法,http://pan.baidu.com/s/1cor7gy,大件行李邮寄,烟火陈翔,没想到,真没想到作文,安徽滁州石坝镇,虎牙小宇,驾校培训跑长途,骨质性关节炎,左膝盖内侧疼是怎么回事,虎皮尖椒的做法大全,陈翔的女朋友吻照,q我的世界、5,23.04的平方根,神将世界表情包,寻找成龙,柔和双沟卖的,三国演义txt百度云,一般现在时,澳洲邮寄行李费用,触手若月,1991年11月26日是什么星座,校草成长记,暮光女向女友求婚,钢弩的价格图片,乐乐课堂,宠妻成瘾老婆你要乖,魔手tv,梅河口到济南的火车票,临泉长官镇,君子兰,南洋十大邪术电影,肚,炸油条的做法和配方,根号6等于多少,笑笑昨日帝王骗,吃惊的什么填词语,50字教师节征文,朝阳区黑庄户邮编,千百鲁,1991年农历11月26日是什么星座,圣经和合本免费下载,水煮花生米的做法,http://pan.baidu.com/s/1jhbv9pg,十字弓,徽信表情含义,天才小熊猫微博长图,宠冠六宫:帝王的娇蛮皇妃,去广告软件 安卓版,萌妻娇俏帝少我嘴挑,总裁霸爱小小新娘要逃婚,花生怎么煮好吃,中国证券网,柔和双沟销售,中秋节的诗句图片,男子怪病喝洗洁精,4π等于多少,服装批发5元,怀孕33周肚子隐隐作痛怎么回事,百度云,酱炒蒜苔的家常做法,水煮花生米,天才小熊猫作品,袁姗姗,临泉长官镇桥口,呼作白玉盘的上一句,微信表情包搞笑图片,滴滴快车司机端,教师节手抄报简单好看,大冶公安局 派出所,柔和双沟业务待遇怎么样,为什么哺乳期不会有月经,临泉长官水上乐园,忐忑不安的意思,临泉长官李小刚家庭农场,电信电子发票怎么报销,岳不群,:http://pan.baidu.com/s/1plefcb5,临泉长官镇桥口李天龙农场,凉拌水煮花生米的做法,威灵仙的功效与作用,http://pan.baidu.com/s/1o7hnpmy,鸽子汤的做法,战神伪高冷 天降医妃拐回家,白颠疯初期症状,天才小熊猫,首席萌妻咬一口,弩弓枪商城,三国演义小说,临泉长官镇桥口植物养殖基地,邮储银行手机银行客户端下载,煮花米怎么做好吃,英语在线翻译,糖醋鲤鱼,www.2016yg.com,搞笑微信表情图片带字,新婚甜似火:鲜妻,二胎生一对,三国演义,关于教师节的手抄报,http://m37189.mustfollow.vx.mvote.net/wx,文王国窖42度价格表,鱼汤的做法,http://www.cswanda.com/weixin/game1/2016,临泉长官镇桥口私人农场,临泉长官镇桥口镇杨营,临泉长官李天龙家庭农场,李子树根部有脓包怎么回事,单手高速转牌,医学院在什么路上,徽信早上好动态表情,宝宝小名大全2016洋气,寂寞男女聊天记录截图,https://yunpan.cn/oc6nhvmrg5j2ur,神将世界,美丽的秋天作文300字,http://pan.baidu.com/s/1nu9uizn,钢弩,冰川世纪电影,全文,触手蓝烟,鱼的做法,金罐加多宝20罐,澳洲托运行李规定,15346171303@189.cn,炒蒜苔的家常做法,被时光掩埋的秘密,根号13.6等于几,方特东方神画,粉红花朵图片,qq号申请,千亿盛宠 大叔吻慢点,http://linjiada1989.1688.com,东方财富网首页,http://pan.baidu.com/s/1hraemhe,动力煤价格,手机遥控魔棒,jzg,http://pan.baidu.com/s/1o8cxpmm,行李托运到澳洲,蚬壳胃散副作用,红烧鲤鱼,触手tv,中国财经信息网中财网,立方根800,美食菜谱,笑傲江湖电视剧,柔和双沟怎么样,笑傲江湖,花的品种名字及图片,滴滴司机端,奇怪君,鸡蛋灌饼,天龙农家乐园,吉拉拉歌词,陈翔的女朋友,牢解场的生活,微微一笑很倾城,豪门少奶奶谢少的心尖宠妻"
## 处理训练数据集
traindata <- lapply(traindata, split_strs)
traindata <- plyr::ldply(traindata)
names(traindata) <- c("ID","Age","Gender","Education","QueryList")
## 处理测试数据集
testdata <- lapply(testdata, split_strs,n=2)
testdata <- ldply(testdata)
names(testdata) <- c("ID","QueryList")
## 数据预处理###
## 1:准备停用词
# file_coding("中文停用词库.txt")
filename <- "中文停用词库.txt"
file_coding(filename)
## [1] "gb2312"
stopwordchinese <- read.csv(file = "中文停用词库.txt",header = FALSE,sep = "\n",
fileEncoding = file_coding("中文停用词库.txt"),
stringsAsFactors = FALSE)
stopworbaidu <- read.csv(file = "百度停用词列表.txt",header = FALSE,sep = "\n",
fileEncoding = file_coding("百度停用词列表.txt"),
stringsAsFactors = FALSE)
stopworsichuan <- read.csv(file = "四川大学机器智能实验室停用词库.txt",header = FALSE,sep = "\n",
fileEncoding = file_coding("四川大学机器智能实验室停用词库.txt"),
stringsAsFactors = FALSE)
## 融合停用词
mystopword <- unique(c(stopwordchinese$V1,stopworbaidu$V1,stopworsichuan$V1))
## 查看每类型的数量
traindata$Age <- as.numeric(traindata$Age)
traindata$Gender <- as.numeric(traindata$Gender)
traindata$Education <- as.numeric(traindata$Education)
summary(traindata)
## ID Age Gender Education
## Length:20000 Min. :0.000 Min. :0.000 Min. :0.000
## Class :character 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:3.000
## Mode :character Median :2.000 Median :1.000 Median :4.000
## Mean :2.068 Mean :1.389 Mean :3.906
## 3rd Qu.:3.000 3rd Qu.:2.000 3rd Qu.:5.000
## Max. :6.000 Max. :2.000 Max. :6.000
## QueryList
## Length:20000
## Class :character
## Mode :character
##
##
##
## 剔除信息缺失的数据
sum(traindata$Age == 0 | traindata$Gender == 0 | traindata$Education == 0 )
## [1] 2337
## 存在2337个样本存在未知的信息
## 因为2337个样本量很少,所以先将这些含有未知的数据剔除
traindata <- traindata[!(traindata$Age == 0 | traindata$Gender == 0 | traindata$Education == 0 ),]
## 选折样本进行分词处理 ####
## 另一种快速的分词方法
## 构建分词工作器
lincsep <- jiebaR::worker(type = "mix")
traindatasample <- sample_n(traindata,size = 1000)
# fenci <- apply_list(as.list(traindatasample$QueryList),lincsep)
system.time({
fenci <- apply_list(as.list(traindatasample$QueryList),lincsep)
# fenci <- apply(data.frame(traindatasample$QueryList), 1, segment,lincsep)
fenci <- sapply(fenci, filter_segment,filter_words = mystopword)
})
## user system elapsed
## 23.599 0.037 23.639
traindatasample$QueryList[10]
## [1] "火星,哺乳期乳房有硬块,碰到会痛,boss凶猛老公领证吧,董文华老公张楠简历,16099期双色球,九月英文,胸口的英文单词,邪王的倾城狂妻鬼妃天下,天上的星星贾平凹,透视高手,火星单词,胸口的单词,muzza,boss凶猛:老公,喂不饱,我认为你不仅仅是我的老师,你还是我的朋友 ,哦漫画,天上的星星 贾平凹,斗破苍穹,古代寓言二则,冰心纸船阅读答案,教师节英语作文带翻译,贾平凹,),小学英语单词怎么写,某个玻璃饰品的外形是简单多面体,七年级上册语文书苏教版,所示的八棱柱,我希望用每一天去感谢你 用英语怎么说,斗罗大陆的,小学,斗罗大陆3龙王传说,spacecraft,天上的星星贾平凹读后感,代孕婚妻,圆锥体怎么用卡纸做,adventure什么意思,太原鲁艺,muz,李帅,古代寓言二则翻译,sm,鲁艺,货币发展的四个阶段,贾平凹天上的星星主要内容,罗摩衍那读音,逆天邪神,murray,发射器的英文单词,游世无双漫画,写出冰心纸船一诗的中心句,货币的发展四个阶段,汽车超人1分钱汽车,李帅画家,古代皇帝玩妃子,顾若莫离,发射器的英文,天上的星星全文概括,安恩和奶牛,天上的星星 贾平凹全文概括,逆天透视眼,mars,muz的意思,我叠纸船为什么含着泪,捡个杀手做老婆,圆锥体怎么用卡纸做图片,太空飞船的单词,七年级上册语文书,program,德奥拉夫人,天上的星星读后感,天上的星星,火星的英文单词,小学英语"
fenci[[10]]
## [1] "火星" "哺乳期" "乳房" "硬块" "碰到"
## [6] "会痛" "boss" "凶猛" "老公" "领证"
## [11] "董文华" "老公" "张楠" "简历" "16099"
## [16] "双色球" "九月" "英文" "胸口" "英文单词"
## [21] "邪王" "倾城" "狂妻" "天下" "天上"
## [26] "星星" "贾平凹" "透视" "高手" "火星"
## [31] "单词" "胸口" "单词" "muzza" "boss"
## [36] "凶猛" "老公" "老师" "朋友" "漫画"
## [41] "天上" "星星" "贾平凹" "斗破" "苍穹"
## [46] "古代" "寓言" "二则" "冰心" "纸船"
## [51] "阅读" "答案" "教师节" "英语" "作文"
## [56] "翻译" "贾平凹" "小学" "英语单词" "玻璃"
## [61] "饰品" "外形" "简单" "多面体" "七年级"
## [66] "上册" "语文" "苏教版" "所示" "棱柱"
## [71] "希望" "感谢" "英语" "斗罗" "大陆"
## [76] "小学" "斗罗" "大陆" "龙王" "spacecraft"
## [81] "天上" "星星" "贾平凹" "读后感" "代孕"
## [86] "婚妻" "圆锥体" "卡纸" "adventure" "太原"
## [91] "鲁艺" "muz" "李帅" "古代" "寓言"
## [96] "二则" "翻译" "sm" "鲁艺" "货币"
## [101] "发展" "四个" "阶段" "贾平凹" "天上"
## [106] "星星" "内容" "罗摩衍那" "读音" "逆天"
## [111] "邪神" "murray" "发射器" "英文单词" "游世"
## [116] "无双" "漫画" "写出" "冰心" "纸船"
## [121] "一诗" "中心" "货币" "发展" "四个"
## [126] "阶段" "汽车" "超人" "分钱" "汽车"
## [131] "李帅" "画家" "古代" "皇帝" "妃子"
## [136] "顾若莫离" "发射器" "英文" "天上" "星星"
## [141] "全文" "概括" "安恩" "奶牛" "天上"
## [146] "星星" "贾平凹" "全文" "概括" "逆天"
## [151] "透视" "mars" "muz" "我叠" "纸船"
## [156] "含着泪" "杀手" "老婆" "圆锥体" "卡纸"
## [161] "图片" "太空" "飞船" "单词" "七年级"
## [166] "上册" "语文" "program" "奥拉夫" "天上"
## [171] "星星" "读后感" "天上" "星星" "火星"
## [176] "英文单词" "小学" "英语"
## 并行版本
system.time({
fenci <- apply_list(as.list(traindatasample$QueryList),lincsep)
cl <- makeCluster(4) # 初始化四核心集群
results <- parLapply(cl = cl,fenci,filter_segment,filter_words = mystopword) # lapply的并行版本
stopCluster(cl) # 关闭集群
})
## user system elapsed
## 1.050 0.031 7.523
## 测试分词和去停用词时间
system.time({
fenci <- apply_list(as.list(traindatasample$QueryList),lincsep)
})
## user system elapsed
## 0.921 0.010 0.932
system.time({
fenci <- sapply(fenci, filter_segment,filter_words = mystopword)
})
## user system elapsed
## 22.881 0.022 22.906
## 并行版本
system.time({
fenci <- apply_list(as.list(traindatasample$QueryList),lincsep)
})
## user system elapsed
## 0.900 0.012 0.911
system.time({
cl <- makeCluster(4) # 初始化四核心集群
results <- parLapply(cl = cl,fenci,filter_segment,filter_words = mystopword) # lapply的并行版本
stopCluster(cl) # 关闭集群
})
## user system elapsed
## 0.128 0.021 6.622
## 对训练进行分词和去停用词处理
# 用system.time来返回计算所需时间
## 并行版本
system.time({
fenci <- apply_list(as.list(traindata$QueryList),lincsep)
})
## user system elapsed
## 17.568 0.196 17.772
system.time({
cl <- makeCluster(4) # 初始化四核心集群
results <- parLapply(cl = cl,fenci,filter_segment,filter_words = mystopword) # lapply的并行版本
stopCluster(cl) # 关闭集群
})
## user system elapsed
## 2.567 0.300 113.775
## 保存分词的结果
resultsID <- traindata[c("ID","Age","Gender","Education")]
save(results,file = "训练集分词结果.RData")
save(resultsID,file = "训练集分词标记.RData")
## 对测试集进行分词-----------------------------------------------------
# 用system.time来返回计算所需时间
## 并行版本
system.time({
fencitest <- apply_list(as.list(testdata$QueryList),lincsep)
})
## user system elapsed
## 19.898 0.235 20.136
system.time({
cl <- makeCluster(4) # 初始化四核心集群
resultstest <- parLapply(cl = cl,fencitest,filter_segment,filter_words = mystopword) # lapply的并行版本
stopCluster(cl) # 关闭集群
})
## user system elapsed
## 3.215 0.354 130.462
resultstestID <- testdata["ID"]
## 保存分词结果
save(resultstest,file = "预测集分词结果.RData")
save(resultstestID,file = "预测集分词标记.RData")