大数据文摘作品 转载具体要求见文末
作者 | 寒小阳
视频后期 | 崔云柯
是的,你们没有猜错,这是一期撒狗粮的手把手教学文章!
刚刚从春节回家被爸妈逼婚的懵逼中回过神来,明天又到了满世界秀恩爱的情人节,各位给女朋友的礼物都准备好了吗?
如果还没有准备,不要慌张,老司机大数据文摘不仅文章有深度,套路也不浅,
在情人节前一天推出的这期手把手系列,小阳老师将花
10
分钟时间,逐步带各位利用
P
ython
完成一个技术范儿十足又有点浪漫的情人节礼物:用词云图带她回忆你们聊天记录里的爱情故事。
给你一张过去的词云图,
看看
那时我们的爱情
~
当然,这一切的前提是,你得有一个女朋友,或者,一个聊天频率远超其他人,聊天内容略暧昧的姑娘。
然后,请自行导出你们暧昧阶段、初识阶段、热恋阶段,总之一切充满甜言蜜语期的聊天记录,QQ/微信聊天记录导出方式请自行度娘。
好的,一切就绪,坐稳,老司机要上路了。
本段视频长度约10
分钟,暂时来不及看视频的同学请直接下拉查看代码和文章。
点击右上角进入大数据文摘公众号后台(非评论区),回复“
情人节
”获取代码包!
👇戳视频看寒小阳老师手把手教你炮制一份专属礼物!
前期准备工作
实现词云功能之前,我们需要一个python的编写和运行环境,同时安装好相关的依赖包。 对于python环境,我们推荐使用
ipython notebook
。 在本地电脑环境,anaconda提供了非常便利的安装和部署,他会自动帮你把ipython notebook环境部署好。
词云功能所需的依赖包如下: jieba(分词包) numpy(计算包) codecs(语言代码处理包) pandas(数据分析包) matplotlib(绘图功能包) WordCloud(词云包)
1.引入相关的库包
首先,需要引入词云功能的所有依赖包,具体代码如下:
In [10]:
#coding:utf-8__author__ = 'Hanxiaoyang'import jieba #分词包import numpy #numpy计算包import codecs #codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode import pandas #数据分析包import matplotlib.pyplot as plt from wordcloud import WordCloud#词云包
2.导入相关记录txt文件,分词:
然后读取你和你的另一半一切充满甜言蜜语的聊天记录。本次演示,大数据文摘选取的是《大话西游月光宝盒》中至尊宝和女神紫霞仙子的对话文本(提前准备好文件:大话西游.txt),对文本进行分词处理,形成分词后的词集。
具体代码:
In [11]:
file=codecs.open(u"大话西游.txt",'r')content=file.read()file.close()segment=[]segs=jieba.cut(content) #切词,“么么哒”才能出现for seg in segs:
if len(seg)>1 and seg!='\r\n':
segment.append(seg)
3.去停用词
“多喝热水”和闹嘴的小细节可以在这里抹去
想要生成一个较为理想的词云,分词的内容质量很重要,那么必须要做的一步就是要去除文本中的“噪音”,通常的实现方法是:先定义一个停用词集,然后利用停用词集对上面的文本分词全集进行过滤,最后形成一个有效词集。
这里要给大家一句非常重要的温馨提醒,我们希望每一位同学在处理相关数据时都能秉持公正客观真实的原则,但如果你最终导出的结果与你预期的“甜蜜”记录并不符合,比如出现了“
多喝热水
”等尴尬的词语,那么在去听用词中,适当的抹去这样的小细节来避免明年一个人过节,也是可以理解的。
具体代码:
In [12]:
words_df=pandas.DataFrame({'segment':segment})words_df.head()stopwords=pandas.read_csv("stopwords.txt",index_col=False,quoting=3,sep="\t",names=['stopword'],encoding="utf8")words_df=words_df[~words_df.segment.isin(stopwords.stopword)]
4.统计词频
情侣对话日常高频词
下面进入到词云的关键一步了:词频统计。我们需要统计有效词集中每个词的出现次数,然后按照次数从多到少进行排序。其中统计使用groupby函数,排序使用sort函数。
代码如下:
In [19]:
words_stat=words_df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size})words_stat=words_stat.reset_index().sort(columns="计数",ascending=False)words_stat #打印统计结果
/opt/ds/lib/python2.7/site-packages/ipykernel/__main__.py:2: FutureWarning: sort(columns=....) is deprecated, use sort_values(by=.....)
from ipykernel import kernelapp as app
Out[19]:
|
segment
|
计数
|
180
|
紫霞
|
80
|
193
|
至尊宝
|
52
|
112
|
悟空
|
18
|
140
|
月光宝盒
|
7
|
66
|
嘻嘻
|
6
|
11
|
上天
|
6
|
87
|
安排
|
5
|
184
|
老婆
|
4
|
60
|
告诉
|
4
|
173
|
真的
|
4
|
84
|
姻缘
|
3
|
85
|
娘子
|
3
|
21
|
交代
|
3
|
88
|
宝剑
|
3
|
89
|
宝盒
|
3
|
175
|
知不知道
|
3
|
15
|
不行
|
3
|
14
|
不用
|
3
|
98
|
干什么
|
3
|
177
|
神仙
|
3
|
137
|
明白
|
3
|
73
|
多久
|
2
|
57
|
后悔
|
2
|
182
|
终于
|
2
|
69
|
回忆
|
2
|
170
|
痛苦
|
2
|
114
|
意中人
|
2
|
167
|
留下
|
2
|
165
|
生气
|
2
|
82
|
姐姐
|
2
|
...
|
...
|
...
|
121
|
我托
|
1
|
123
|
我要
|
1
|
124
|
扔掉
|
1
|
125
|
找到
|
1
|
100
|
干成
|
1
|
97
|
帮个
|
1
|
62
|
唾骂
|
1
|
95
|
师傅
|
1
|
63
|
喂喂
|
1
|
65
|
嘟嘟声
|
1
|
67
|
回到
|
1
|
68
|
回去
|
1
|
70
|
回来
|
1
|
71
|
地方
|
1
|
72
|
夕阳
|
1
|
74
|
大姐
|
1
|
75
|
天黑
|
1
|
76
|
太晚
|
1
|
77
|
女人
|
1
|
78
|
女孩子
|
1
|
79
|
好不好
|
1
|
80
|
好怪
|
1
|
81
|
如意郎君
|
1
|
83
|
姑娘
|
1
|
86
|
孙悟空
|
1
|
91
|
家里
|
1
|
92
|
寂寞
|
1
|
93
|
小心
|
1
|
94
|
就象
|
1
|
227
|
齐天大圣
|
1
|
228 rows × 2 columns
5.做词云
开启亮瞎眼么么哒模式
最后是词云的点睛之笔了:数据图形化显示。有了强有力的工具包,这些工作都是分分钟就可以搞定。我们使用matplotlib和wordcloud工具来图形化显示上述的词频统计结果。
话不多说,上代码:
In [14]:
%matplotlib inlinewordcloud=WordCloud(font_path="simhei.ttf",background_color="black")wordcloud=wordcloud.fit_words(words_stat.head(1000).itertuples(index=False))plt.imshow(wordcloud)plt.show()
如果你想将生成的图形以本地图片的形式生成并打开显示,可以使用下面的实现代码:
In [15]:
%matplotlibwordcloud=WordCloud(font_path="simhei.ttf",background_color="black")wordcloud=wordcloud.fit_words(words_stat.head(1000).itertuples(index=False))plt.imshow(wordcloud)plt.show()
Using matplotlib backend: TkAgg
6.自定义背景图做词云
让他看到你的心