谁说程序猿不懂浪漫?今天就教你用Python撒狗粮!

又到了七夕,你给另一半准备好惊喜了吗?如果还没有,那这次就用数据为心爱的他/她,准备一份数据感、科技感、炫酷感、新奇感十足的七夕小惊喜吧!不会做?别怕!今天的数据侠手把手教你用Python撒狗粮,学起来~

是的,你们没有猜错,这是一期撒狗粮的手把手教学文章!

周五就是七夕了,各位给女朋友的礼物都准备好了吗?

如果还没有准备,不要慌张!只要10分钟,你将学会利用Python完成一个技术范儿十足又有点浪漫的七夕礼物:用词云图带她回忆你们聊天记录里的爱情故事。

给你一张过去的词云图,看看那时我们的爱情~

当然,这一切的前提是,你得有一个女朋友,或者,一个聊天频率远超其他人,聊天内容略暧昧的姑娘。

然后,请自行导出你们暧昧阶段、初识阶段、热恋阶段,总之一切充满甜言蜜语期的聊天记录,QQ/微信聊天记录导出方式请自行度娘。

好的,一切就绪,坐稳,老司机要上路了。

戳视频,手把手教你炮制一份专属礼物!

▍前期准备工作

实现词云功能之前,我们需要一个python的编写和运行环境,同时安装好相关的依赖包。对于python环境,我们推荐使用ipython notebook。在本地电脑环境,anaconda提供了非常便利的安装和部署,他会自动帮你把ipython notebook环境部署好。

词云功能所需的依赖包如下: jieba(分词包) numpy(计算包) codecs(语言代码处理包) pandas(数据分析包) matplotlib(绘图功能包) WordCloud(词云包)

▍引入相关的库包

首先,需要引入词云功能的所有依赖包,具体代码如下:

In [10]:

#coding:utf-8__author__='Hanxiaoyang'importjieba#分词包importnumpy#numpy计算包importcodecs#codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicodeimportpandas#数据分析包importmatplotlib.pyplotaspltfromwordcloudimportWordCloud#词云包

▍导入相关记录txt文件,分词

然后读取你和你的另一半一切充满甜言蜜语的聊天记录。

本次演示,大数据文摘选取的是《大话西游月光宝盒》中至尊宝和女神紫霞仙子的对话文本(提前准备好文件:大话西游.txt),对文本进行分词处理,形成分词后的词集。

具体代码:

In [11]:

file=codecs.open(u"大话西游.txt",'r')content=file.read()file.close()segment=[]segs=jieba.cut(content)#切词,“么么哒”才能出现forseginsegs:iflen(seg)>1andseg!='\r\n':segment.append(seg)

▍去停用词:“多喝热水”和闹嘴的小细节可以在这里抹去

想要生成一个较为理想的词云,分词的内容质量很重要,那么必须要做的一步就是要去除文本中的“噪音”,通常的实现方法是:先定义一个停用词集,然后利用停用词集对上面的文本分词全集进行过滤,最后形成一个有效词集。

这里要给大家一句非常重要的温馨提醒,我们希望每一位同学在处理相关数据时都能秉持公正客观真实的原则,但如果你最终导出的结果与你预期的“甜蜜”记录并不符合,比如出现了“多喝热水”等尴尬的词语,那么在去听用词中,适当的抹去这样的小细节来避免明年一个人过节,也是可以理解的。

具体代码:

In [12]:

▍统计词频:情侣对话日常高频词

下面进入到词云的关键一步了:词频统计。我们需要统计有效词集中每个词的出现次数,然后按照次数从多到少进行排序。其中统计使用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]:

228 rows × 2 columns

▍做词云:开启亮瞎眼么么哒模式

最后是词云的点睛之笔了:数据图形化显示。有了强有力的工具包,这些工作都是分分钟就可以搞定。我们使用matplotlib和wordcloud工具来图形化显示上述的词频统计结果。

话不多说,上代码:

In [14]:

%matplotlibinlinewordcloud=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

▍自定义背景图做词云:让他看到你的心

七夕,又是大话西游这样的经典对白,我们当然还可以把图形呈现玩得再酷炫一些,自定义一个心形图像背景并将词云图形化输出。

实现代码如下:

In [16]:

当然你也可以选择对你们更有意义的图片,生成你们独一无二的词云图。如果你想将生成的图形以本地图片的形式生成并打开显示,可以使用下面的实现代码:

In [18]:

%matplotlibbimg=imread('heart.jpeg')wordcloud=WordCloud(background_color="white",mask=bimg,font_path='simhei.ttf')wordcloud=wordcloud.fit_words(words_stat.head(39769).itertuples(index=False))bimgColors=ImageColorGenerator(bimg)plt.axis("off")plt.imshow(wordcloud.recolor(color_func=bimgColors))plt.show()

Using matplotlib backend: TkAgg

以上,就是大话西游对话词云的实现过程,所有代码都经过调试,直接可用。 让喜欢数据的你,利用这种方式,为心爱的他/她,带来一份数据感、科技感、炫酷感、新奇感十足的七夕小惊喜吧!

也提前祝各位七夕快乐!

注:内容仅为作者观点,不代表DT财经立场。

作者 | 寒小阳

题图 | 网络

▍加入数据侠

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180813B1NEA500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券