十分钟视频,手把手教你用Python撒情人节狗粮的正确姿势

大数据文摘作品 转载具体要求见文末

作者 | 寒小阳 视频后期 | 崔云柯

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

刚刚从春节回家被爸妈逼婚的懵逼中回过神来,明天又到了满世界秀恩爱的情人节,各位给女朋友的礼物都准备好了吗?

如果还没有准备,不要慌张,老司机大数据文摘不仅文章有深度,套路也不浅,在情人节前一天推出的这期手把手系列,小阳老师将花10分钟时间,逐步带各位利用Python完成一个技术范儿十足又有点浪漫的情人节礼物:用词云图带她回忆你们聊天记录里的爱情故事。

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

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

然后,请自行导出你们暧昧阶段、初识阶段、热恋阶段,总之一切充满甜言蜜语期的聊天记录,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.自定义背景图做词云

让他看到你的心

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

实现代码如下:

In [16]:

from scipy.misc import imreadimport matplotlib.pyplot as pltfrom wordcloud import WordCloud,ImageColorGenerator%matplotlib inlinebimg=imread('heart.jpeg')wordcloud=WordCloud(background_color="white",mask=bimg,font_path='simhei.ttf')wordcloud=wordcloud.fit_words(words_stat.head(4000).itertuples(index=False))bimgColors=ImageColorGenerator(bimg)plt.axis("off")plt.imshow(wordcloud.recolor(color_func=bimgColors))plt.show()

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

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

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

这是本次情人节大数据文摘献给各位的套路,小阳老师只能帮你到这里啦。

本文分享自微信公众号 - 大数据文摘(BigDataDigest)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-02-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Winter漫聊技术

一个随机播放的算法II

音乐时光? 骑着车,戴着耳机,播放列表里有几首歌。 突然,很想听《且听风吟》,但是不想掏出手机,于是一路双击耳机播放键切歌。 emmm,下面是切过的歌:

16430
来自专栏葬爱家族

Android高德之旅(10)绘制热力图废话总结

热力图,这个词可能有点生僻,它表示的是统计数据在一定区域内的分布集中情况,这是一种非常清晰的展示方式,可以让使用者直观地看出事物热度分布。

18730
来自专栏数据结构与算法

网络最大流算法—最高标号预流推进HLPP

吐槽 这个算法。。 怎么说........ 学来也就是装装13吧。。。。 长得比EK丑 跑的比EK慢 写着比EK难 思想 大家先来猜一下这个算法的思想吧:joy...

44060
来自专栏岑志军的专栏

iOS模仿系统相机拍照你不曾注意过的细节

15820
来自专栏企鹅号快讯

Python的五个小彩蛋

偶尔写一下推送的我又来了。 这次介绍的是Python的几个小彩蛋。 Python是一门开源的编程语言,因为开源,所以Python社区难免有些幽默的人给它添加了一...

23850
来自专栏工科狗和生物喵

【我的漫漫跨考路】数据结构之堆栈的线性实现

正文之前 ? 昨天晚上阶段性的完成了一部分数学的复习(一元积分学终于搞定了,后面的貌似没这么难了),所以今天打算撸一撸代码,结合前几天写的链表实现线性存储,今天...

29860
来自专栏Android群英传

程序员英语口语等级考试

18540
来自专栏数据小魔方

R语言数据清洗实战——世界濒危遗产地数据爬取案例

最近重复新翻阅R语言领域唯一一本关于网络数据采集的参考书——《基于R语言的自动数据收集》,开篇就是一个数据爬取的案例。 尽管之前已经粗略的看过一遍,但是仍感书中...

73260
来自专栏PPV课数据科学社区

【收藏】50个数据科学和机器学习速查表

在数据科学领域有成千上万的包和数以百计的函数公式,你虽然不需要掌握所有的这些知识,但是有一些速查表在你的学习中是非常重要的。学习大数据包括对统计学、数学、编程知...

30870
来自专栏牛客网

51一面面经

14000

扫码关注云+社区

领取腾讯云代金券