词云图:论一个精致猪猪男孩的数据修养

夏天终于又来了啊

最近夏天到了,小编在空调下喝着肥宅快乐水简直美滋滋。

然而每当走出室外与太阳公公进行亲密接触的时候,小编都会热到简直灵魂出窍

于是朋友圈中出现这么的一群叫苦不迭的直男:

打伞不好意思?噢没有的事,小编热得都要坐地飞升了,脸是什么?能遮阳吗?

是我老了还是你们飘了,居然都有了滴滴拼伞群?!(不知道我科有木有,小可爱们快把小编拉进去!)

吓得小编赶紧上某宝买把太阳伞压压惊! 但是某宝上伞这么多怎么挑呢?于是小编就顺手爬取了数万条卖家评论,来了个词频分析,做了一张炫酷的词云图!由词云图来看,这把伞的综合评价还是不错的,于是就赶紧下单啦~

接下来就让小编教大家如何做成像下面这样炫酷的词云图吧!

一. 词云介绍

“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

可见词云在数据挖掘中有重要的作用!

二. 工具+依赖包+配置环境

形成一张词云图我们需要使用python语言(小编使用Anaconda自带的spyder编译器),jieba、numpy、matplotlib、wordcloud、PIL模块(Anaconda的安装以及模块的导入详情在本公众号数据技术|十分钟教你写会爬虫程序一文中有介绍)

以下分享三种方法导入外部模块

三种方法

1

不嫌麻烦 通过下载whl文件导入(https://www.lfd.uci.edu/~gohlke/pythonlibs/)

1)进入网页后ctrl+f,输入想要导入的模块,找到并下载

2)将下载后的whl文件重命名为zip文件解压缩,将模块复制到Anaconda的Lib文件下(小编电脑位置D:\Anaconda\Lib)

2

Win+R打开cmd输入conda install package_name

3

推荐Win+R打开cmd输入pip install package_name

配置好环境之后,万事俱备只欠东风!接下来就让小编手把手教学吧!(对这部分有疑问的小伙伴们别着急,文末还有干货给你们哦~)

三. 用wordcloud创建基础词云图

大家都知道近年成功出村进城的霉霉(Taylor Swift)吧,我们就先来分析一下霉霉的40首歌的歌词~

步骤表

1

#import 所需要的模块

from wordcloud import WordCloud

import matplotlib.pyplot as plt

2

#加载需要分析的文章

text = open(r'D:\BaiduNetdiskDownload\Song.txt','r').read()

3

#创建词云对象

wc = WordCloud(

#指定格式

background_color="white",

max_font_size=300,

width=800 ,

height=600,

margin=2)

4

#生成词云

wc.generate(text)

5

#展示词云

plt.imshow(wc)

plt.axis("off")

plt.show()

6

#保存词云

wc.to_file('test.png')

运行上述代码我们就得到下面的词云图啦!

(嘿嘿嘿,是不是很简单?)

什么?不够炫酷?

哼!凡人,是时候展示一下真正的技术了!!!

什么?他的战斗力居然还在飙升!!!简直不敢相信!!!

四.创建wordcloud创建高级词云图

我们就以分析很火的科幻小说三体3死神永生中的关键词频为例子吧~

Before that ,需要科普一下的是由于计算机可以通过英文单词之间的空格来分词辨别,然而在中文中可是没有空格来分割呢,计算机怎么识别单词呢?贴心的python开发者就想到了这点,开发了jieba分词模块,下面我们通过代码来认识一下这个模块吧~

步骤表

1

#import jieba

sentence = ‘小编好想喝肥宅快乐水啊!’

2

#全模式

sentence_1=jieba.cut(sentence,cut_all=True)

3

#精确模式

sentence_2=jieba.cut(sentence,cut_all=False)

print(‘,’.join(sentence_1))

print(‘,’.join(sentence_2))

运行结果:

小,编,现在,好,想,喝,肥,宅,快乐,水,啊,,

小编,现在,好,想,喝,肥宅,快乐,水,啊,!

可以看到,精确模式下,jieba.cut()尽可能多的进行分词(类似re的贪婪模式,全模式对应着非贪婪模式

充分了解jieba模块后,我们就开始愉快的代码之旅吧~

步骤表

1

#导入需要模块

import jieba

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

from wordcloud import WordCloud, STOPWORDS

2

#读取txt文件

text = open(r'D:\BaiduNetdiskDownload\三体3死神永生.txt','r',encoding='gbk').read()

print('加载txt文件成功')

3

#进行分词

wordlist_after_jieba =jieba.cut(text, cut_all=False)

wl_space_split = " ".join(wordlist_after_jieba)

print('分词成功')

4

# 读取照片通过numpy.array函数将照片等结构数据转化为np-array

mask=np.array(Image.open(r'D:\我的文档\图片\ wordcloud_mask.png'))

print('加载图片成功!')

5

#选择屏蔽词,不显示在词云里面

stopwords = set(STOPWORDS)

stopwords.add("此用户没有填写评价")

# stopwords.add("收到”)可以加多个屏蔽词

6

#创建词云对象并设置参数

需要注意的是使用mask参数后不能使用width, height参数,因为图片大小已经确定

wc = WordCloud(

#选择背景色

background_color="black",

max_words=1000,

mask=mask,

stopwords=stopwords,

max_font_size=40,

# 设置有多少种随机生成状态,即有多少种配色方案

random_state=30

7

#生成词云

wc.generate(text)

8

#存储并指定文件名称

wc.to_file( "三体3死神永生词云.png")

9

#通过matplotlib绘图库显示词云

plt.imshow(wc, interpolation='bilinear')

plt.axis("off")

10

#不显示坐标轴

plt.figure()

plt.imshow(mask, cmap=plt.cm.gray, interpolation='bilinear')

plt.axis("off")

plt.show()

print('生成词云成功!')

如果你欣喜的阅读本篇文章的同时在运行代码的话,会得到这样的运行结果:

What?Excuse me?Are you kidding me?素质三连,这堆方框什么鬼!

莫慌,这是因为wordcloud默认字体并不支持中文,所以就出现这堆方框啦~小编特地留在后面说是因为希望小编就踩过这个雷(手动滑稽),希望大家加深印象~

解决方法:

我们只需要指定字体就好了,Win+R下输入fonts打开了windows的字体库,选择一个支持中文的字体

修改代码

1

#创建词云对象

wc = WordCloud(

#设置字体,不指定就会出现乱码font_path=r'C:\Windows\Fonts\STHUPO.ttf',

background_color="black",

max_words=1000,

mask=mask,

stopwords=stopwords,

max_font_size=40,

random_state=30

# 设置有多少种随机生成状态,即有多少种配色方案

修改完成后再次运行就得到我们的炫酷词云图啦!

有了上面的基础之后我们就可以创建更多的词云图了:

五. 淘宝爬虫代码分享

小魔术师前面的文章有十分钟入门爬虫的教程,并且淘宝评论加载方式为ajax,爬取难度比普通静态页面要难,在此不多赘述,仅分享代码:

代码分享

#淘宝爬虫代码

import json

import requests

#要是想将评论导入xls文件中则去掉代码前的#,若仅需要txt文件则不需要改动

#import xlwt

#book = xlwt.Workbook ( encoding = 'utf-8' )

#sheet = book.add_sheet ( '评论', cell_overwrite_ok = True )

#i = 0

for m in range ( 1, 100 ) :

headers = {'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'

url仅需要改变商家的auctionNumId即可

url = 'https://rate.taobao.com/feedRateList.htm?auctionNumId=559124988376¤tPageNum=' + str ( m ) + '&pageSize=20'

res = requests.get ( url, headers = headers )

strJson = res.text

strJson = strJson [ :-2 ]

strJson = strJson [ 3 : ]

json_data = json.loads ( strJson )

for comment in json_data [ "comments" ] :

with open ('评论.txt','a',encoding='gbk',errors='ignore') as f:

f.write(comment [ "content" ])

#j = 0

#sheet.write ( i, j, comment [ "content" ] )

#j += 1

#sheet.write ( i, j, comment [ "date" ] )

#j += 1

#sheet.write ( i, j, comment [ "auction" ] [ "sku" ] )

#j += 1

#i += 1

print(comment [ "content" ])

print(comment [ "date" ])

print(comment [ "auction" ] [ "sku" ])

#book.save ( '评论.xls' )

干货预警!

由于通过condapip安装包都是源于外网,速度十分十分十分之慢,可以看到下载速度只有5.9kb/s,下面小编就教大家如何替换使用国内服务器进行高速下载:

步骤表

1

#初始

Win+R下输入%APPDATA%,进入文件夹后创建pip文件夹,在pip文件夹下创建pip.ini配置文件

2

#在pip.ini内输入以下内容并保存:

[global]

timeout = 6000

index-url = http://pypi.douban.com/simple

trusted-host = pypi.douban.com

(见下图1)

3

#添加到环境变量中:

我的电脑右键—>属性—>高级系统配置—>环境变量—>path—>新建—>输入%APPDATA%\pip\pip.ini,然后一直确定就完成啦!

(见下图2)

图1 pip.ini输入内容

图2 配置环境变量

新下载速度

完成上述步骤后重新导入模块,可以说下载速度有了质的飞跃~~

赞 赏

长按下方二维码打赏

感谢您,

支持学生们的原创热情!

郑重承诺

打赏是对工作的认可

所有打赏所得

都将作为酬劳支付给辛勤工作的学生

指导老师不取一文

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180611G0B9OS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券