作者:伊莲小小小小仙女,R语言中文社区专栏作者。个人公众号:MeMyselfandYou

这篇文章大概在好几个月前就存在在脑海中。最开始是看了《迟到的情人节礼物:做一个与她微信聊天的词云吧》,觉得作者写的很好玩,那个时候因为工作的原因刚开始学习R语言,一窍不通,我就想着那就用R学着同样分析一遍好了,应该能收获不少。于是,我开始分析和男友的微信聊天记录,只不过正如原文作者所说,分析着,情人节变情人劫怎么办?Anyway, 今天是来交作业的。

获取数据源

首先《迟到的情人节礼物:做一个与她微信聊天的词云吧》一文中的作者已经写的非常详细了,我也完全按照原文章中的步骤操作。不过在这里给大家两小提示:

1)网上有各类提取微信聊天记录的软件或攻略,每个mac版都试过,都不可行,最后只有iMazing可以成功提取。
2)iMazing, 一定要下载正版,我就是因为误下盗版,差点把手机毁掉,到现在手机感觉还是有点坏坏的(后遗症)。这个软件功能强大,用不好的话IPhone变板砖。

原文是用Python写,下面是我的R代码,略有不同。本人代码能力为0,太复杂循环算法都写不了,只能按照自己的思路一点点拼出来。

library(RSQLite)
library(plyr)
//连接SQLitle数据库  conn <- dbConnect(dbDriver("SQLite"), dbname="MM.sqlite")
//设置连接函数    doCountQuery <- function(conn,table){    query <- paste("SELECT COUNT(name) FROM ",table,sep ="")    t <- dbGetQuery(conn,query)    return(t)
}   table_name <- dbGetQuery(conn, "SELECT name FROM sqlite_master where type='table' and name like 'Chat_%' order by name")//取出所有表名,由于不会遍历,只能按照最笨的办法,计算哪个表的数据量最多,即是和男盆友的聊天记录表,如果不是和男盆友的聊天表,此方法是找不出来    counts <- numeric(0)for (i in 1:length(table_name) ){    count <- doCountQuery(conn,table_name[i])    counts[i] <-count[[1]]
}
//计算表长
table_count <- data.frame(counts)    //排序,表长最大的表,即是和男朋友的聊天记录表
table_count1 <- table_count[order(table_count$counts,decreasing=TRUE),] //提取到聊天内容
message <- dbGetQuery(conn, "SELECT * FROM Chat_XXXXXXXXXX ")

文本分析

拿到数据后就是进行文本分割,由于数据量实在庞大,我的电脑已经跑死好几次。后来,在完全不懂,也不知如何求解的情况下,靠部分代码和部分Excel互相切换,得到了想要的结果。

library(jiebaRD)
library(jiebaR) library(data.table)
library(stringr)    cutter=worker()
wechat_content =message
wechat_content <- as.character(wechat_word$V1)
///由于数据量过大,不知道为什么只用cuter无法把所有数据都遍历到,无奈只能写简单的函数每一条遍历切割 cut_y <- function (y){   y=gsub("\.","",y)  cutter[as.character(y)]
}
//遍历切割每一条聊天内容
y.out <- sapply(wechat_content,cut_y,USE.NAMES = F) //去除数字
y.out<-gsub("[0-9]+?","",y.out) // 去除停止词
s <- read.csv(‘stopwords.csv’)
stopwords <- c(NULL)for (i in 1:length(s))
{   stopwords[i] <- s[i]
}
y.out <- filter_segment(y.out,stopwords) //遍历计数后再组合到一起
wechat_content_whole <- as.array(0)
for (i in 1:length(y.out)){ table_content <- count(y.out[[i]])   wechat_content_whole <- rbind(wechat_content_whole,table_content)
}   //最后计数
wechat_content_whole <- count(wechat_content_whole,"x")    //从大到小排列
wechat_content_whole<- wechat_content_whole[order(wechat_content_whole$freq,decreasing=TRUE),]  //提取前1000条做词云
wechat_words_final <- table_content_whole_final[1:1000,] //颜色从粉到白函数
clufunc <- colorRampPalette(c("pink","white"))   //形成词云
wordcloud2(wechat_words_final, fontFamily = "HYTangTangCuTiJ", figPath = "love.jpg", size=1, color=clufunc(1000))

结果

一年零三个月

344442行

17万+

这次的分析一共收集了一年零三个月的聊天记录,总提取34442行数据,17万+个分词,下面的图就是最后提取的前1000个高频词的词云。


在过程中也发现了一些别样的东西:


“马老师”的字眼反复出现,这绝不是补习班的老师,更不是制服诱惑,马老师,一起加油


另外,在我们的聊天内容中,最常用的十大emoji竟是它们:


点赞最多,看来我们互相很认可对方,但是生气为啥也那么多?


此外,我还挑出过去N次吵架的聊天记录,做了下面的图。情人之间的吵架大概都大同小异吧,没有安全感,互相拒绝着对方,说着伤人的话。


后话

这个一次次丢掉又捡起来的小学习作业终于划上了一个句号。分析的过程的确痛苦,一方面要学习各种语法,另一方面,翻开聊天记录就像扒开自己的肉一样疼,回忆一幕幕,开心难过百感交集。这之间有自己的迷茫,有学术的无知,也有爱情的摸索,幸好,我们依旧,携手走在一起。

这个小分析同时也是一个起点,这几个月在R语言上收获颇多。没想到开始的机缘巧合燃起了对R的热情。学习过程,不像学校里的课程授课,几乎都是想实现一个功能,于是去查找,找到一个语法,联系到更多的知识,联系,联系,最后再串起来。

记得从最一开始rJava包在我的电脑上没法安装,在Google上翻过所有的问答,StackOverflow成了我泡得最多的网站,远在英国的同学也帮忙解答。。。每一次反复调代码的时候,都是深夜凌晨,可当调好的瞬间又那么欣喜如狂。

再回头看,这个小作业很简单,但是从中已经学到了R语言里几乎所有的基础语法,虽然中间部分的算法还很凌乱,至少为自己感到骄傲。现在可以任意用ggplot画一个漂亮的统计图,而不是千篇一律的Excel。当然,如果有大神能拯救我以上杂乱的算法,欢迎指导学习,也希望下一个学习项目能分享和发现更多有趣的东西。

—————————————

往期精彩:

  • 人民日报终发文:国航“避重就轻、不作为、护犊子、体验差、听不进批评”

  • 南抖音北快手,智障界的两泰斗

  • 遇事不决赖毛子,美国这次打算封杀变脸APP

用R语言分析我和男友的聊天记录相关推荐

  1. r语言pls分析_零基础学习R语言分析GEO

    关于零基础用R语言分析GEO的视频已更新完,发布在B站,有兴趣的小伙伴可以移驾到B站,我的B站号:I_am_Becky 之前录制过一系列关于零代码分析GEO数据的,但是这样画出来的图太low了,所以学 ...

  2. 【视频】主成分分析PCA降维方法和R语言分析葡萄酒可视化实例|数据分享

    最近我们被客户要求撰写关于主成分分析PCA的研究报告,包括一些图形和统计输出.降维技术之一是主成分分析 (PCA) 算法,该算法将可能相关变量的一组观察值转换为一组线性不相关变量.在本文中,我们将讨论 ...

  3. 如何用r语言分析数据

    如果要使用 R 语言分析数据,通常需要以下步骤: 导入数据:可以从多种格式的数据文件(如 CSV,Excel 等)中导入数据,并将其存储为 R 中的数据框(data.frame). 数据清理:检查数据 ...

  4. 使用R语言分析世界幸福指数

    使用R语言分析世界幸福指数 本文中的数据为2019年的世界幸福指数报告,数据来源于kaggle. 数据详情 数据包含9个字段: Rank: 排名 Country or Region: 国家或地区 Sc ...

  5. r语言实现sem_R-SEM-paper(R语言分析结构方程模型).pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp行业软件 R-SEM-paper(R语言分析结构方程模型).pd ...

  6. R语言分析蛋白质组学数据:飞行时间质谱(MALDI-TOF)法、峰值检测、多光谱比较...

    全文链接:http://tecdat.cn/?p=30051 •研究生物体产生的全部蛋白质. • Foci:鉴定.结构测定.生物标志物.通路.表达(点击文末"阅读原文"获取完整代码 ...

  7. 【视频】KMEANS均值聚类和层次聚类:R语言分析生活幸福指数可视化|数据分享...

    原文链接:http://tecdat.cn/?p=24198 聚类是将总体或数据点划分为多个组的任务,以使同一组中的数据点与同一组中的其他数据点更相似,而与其他组中的数据点不相似.它基本上是基于它们之 ...

  8. 教你用R语言分析招聘数据,求职/转行不求人~(附代码、数据集)

    来源:R语言中文社区 作者:Joffy Zhong 本文共4500字,建议阅读8分钟. 本文针对招聘网站的数据分析岗位的数据进行分析与挖掘实战. 项目背景 在学习数据分析的路上,少不了经常逛知乎,这也 ...

  9. 使用R语言分析微信好友

    上篇使用python分析微信好友 - 简书 https://www.jianshu.com/p/c7f1b400d20a python爬虫: 数据保存后用R语言作图分析 省份分布 城市分布 微信签名生 ...

  10. 用R语言分析我的fitbit计步数据

    目标:把fitbit的每日运动记录导入到R语言中进行分析,画出统计图表来 已有原始数据:fitbit2014年每日的记录电子表格文件,全部数据点此下载,示例如下: 日期 消耗卡路里数 步 距离 攀爬楼 ...

最新文章

  1. struct 类型指针技巧
  2. 【线性规划与网络流24题】汽车加油行驶问题 分层图
  3. 好代码是管出来的——Git的分支工作流与Pull Request
  4. mongoose更新数据,如果这条记录不存在,则直接变为新增
  5. StringBuilder 和 String拼接10万个字符串的速度测试差别太大了
  6. CentOS7下安装Redis — 单节点
  7. 第二章 Java多线程入门类和接口
  8. JavaScript的事件绑定及深入
  9. 程序设计大赛WBS图
  10. pygal:一款好用到爆的 Python 可视化利器,炫酷动态图轻松绘制
  11. dataframe.append()合并多个列名相同的文件
  12. php ppt如何转换成pdf,PHP将Word,Wps,Excel,PPT转成PDF
  13. C/C++中的逻辑右移和算术右移
  14. win7程序关闭后弹出 程序兼容性助手 这个程序可能安装不正确 如果此程序没有正确安装,处理方式
  15. 路由url里多了%7D是怎么回事?
  16. 从页面获取form表单提交的数据
  17. markdown中编辑复杂表格
  18. pdf压缩的网站?pdf文件在线压缩?在线压缩pdf文件大小?pdf文档压缩,在线压缩pdf文件大小,压缩pdf大小的方法?
  19. 交换机端口隔离功能的使用意义
  20. 解决[WARNING]: sftp transfer mechanism failed on [xx]. Use ANSIBLE_DEBUG=1 to see detailed information

热门文章

  1. 把txt作为数据源绑定到GridView中
  2. Bean在Spring和SpringMVC中无所不在
  3. 取出大文件里面的一部分数据
  4. linux关于bashrc与profile的区别(转)
  5. 呵呵,你这是在背面试题吧?ThreadLocal使用中会有那些坑?
  6. IDEA 公司,又出新神器,一套代码适应多端!
  7. 推荐一款日志切割神器!我常用~
  8. Linux 启动流程详细解析
  9. Linux内核4.14 LTS发布:那些最新最好的功能特性
  10. 从0开始学习 GitHub 系列之「Git速成」