接下来就让小编教大家如何做成像下面这样炫酷的词云图吧!
一. 词云介绍
“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
可见词云在数据挖掘中有重要的作用!
二. 工具 依赖包 配置环境
形成一张词云图我们需要使用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:AnacondaLib)
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:BaiduNetdiskDownloadSong.txt','r').read()
3
#创建词云对象
代码语言:javascript复制wc = WordCloud(
#指定格式
background_color="white",
max_font_size=300,
width=800 ,
height=600,
margin=2)
4
#生成词云
代码语言:javascript复制wc.generate(text)
5
#展示词云
代码语言:javascript复制plt.imshow(wc)
plt.axis("off")
plt.show()
6
#保存词云
wc.to_file('test.png')
运行上述代码我们就得到下面的词云图啦!
(嘿嘿嘿,是不是很简单?)
什么?不够炫酷?
哼!凡人,是时候展示一下真正的技术了!!!
什么?他的战斗力居然还在飙升!!!简直不敢相信!!!
四. 创建wordcloud创建高级词云图
我们就以分析很火的科幻小说三体3死神永生中的关键词频为例子吧~
Before that ,需要科普一下的是由于计算机可以通过英文单词之间的空格来分词辨别,然而在中文中可是没有空格来分割呢,计算机怎么识别单词呢?贴心的python开发者就想到了这点,开发了jieba分词模块,下面我们通过代码来认识一下这个模块吧~
步骤表
1
#import jieba
代码语言:javascript复制sentence = ‘小编好想喝肥宅快乐水啊!’
2
#全模式
代码语言:javascript复制sentence_1=jieba.cut(sentence, cut_all=True)
3
#精确模式
代码语言:javascript复制sentence_2=jieba.cut(sentence, cut_all=False)
print(‘,’.join(sentence_1))
print(‘,’.join(sentence_2))
运行结果:
小,编,现在,好,想,喝,肥,宅,快乐,水,啊,,
小编,现在,好,想,喝,肥宅,快乐,水,啊,!
可以看到,精确模式下,jieba.cut()尽可能多的进行分词(类似re的贪婪模式,全模式对应着非贪婪模式)
充分了解jieba模块后,我们就开始愉快的代码之旅吧~
步骤表
1
#导入需要模块
代码语言:javascript复制import jieba
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS
2
#读取txt文件
代码语言:javascript复制text = open(r'D:BaiduNetdiskDownload三体3死神永生.txt','r',encoding='gbk').read()
print('加载txt文件成功')
3
#进行分词
代码语言:javascript复制wordlist_after_jieba = jieba.cut(text, cut_all=False)
wl_space_split = " ".join(wordlist_after_jieba)
print('分词成功')
4
# 读取照片通过numpy.array函数将照片等结构数据转化为np-array
代码语言:javascript复制mask=np.array(Image.open( r'D:我的文档图片 wordcloud_mask.png'))
print('加载图片成功!')
5
#选择屏蔽词,不显示在词云里面
代码语言:javascript复制stopwords = set(STOPWORDS)
stopwords.add("此用户没有填写评价")
# stopwords.add("收到”)可以加多个屏蔽词
6
#创建词云对象并设置参数
需要注意的是使用mask参数后不能使用width, height参数,因为图片大小已经确定
代码语言:javascript复制wc = WordCloud(
#选择背景色
background_color="black",
max_words=1000,
mask=mask,
stopwords=stopwords,
max_font_size=40,
# 设置有多少种随机生成状态,即有多少种配色方案
random_state=30
7
#生成词云
代码语言:javascript复制wc.generate(text)
8
#存储并指定文件名称
代码语言:javascript复制wc.to_file( "三体3死神永生词云.png")
9
#通过matplotlib绘图库显示词云
代码语言:javascript复制plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
10
#不显示坐标轴
代码语言:javascript复制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
#创建词云对象
代码语言:javascript复制wc = WordCloud(
#设置字体,不指定就会出现乱码 font_path=r'C:WindowsFontsSTHUPO.ttf',
background_color="black",
max_words=1000,
mask=mask,
stopwords=stopwords,
max_font_size=40,
random_state=30
# 设置有多少种随机生成状态,即有多少种配色方案
修改完成后再次运行就得到我们的炫酷词云图啦!
有了上面的基础之后我们就可以创建更多的词云图了:
五. 淘宝爬虫代码分享
小魔术师前面的文章有 十分钟入门爬虫 的教程,并且淘宝评论加载方式为ajax,爬取难度比普通静态页面要难,在此不多赘述,仅分享代码:
代码分享
#淘宝爬虫代码
代码语言:javascript复制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' )
干货预警!
由于官网下载Anaconda速度十分之慢,小编推荐使用快速并且安全的清华大学开源软件镜像站(https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/)选择最新版本下载(上图前为官网速度,后为镜像站速度)
由于通过conda和pip安装包都是源于外网,速度十分十分十分之慢,可以看到下载速度只有5.9kb/s,下面小编就教大家如何替换使用国内服务器进行高速下载:
步骤表
1
#初始
Win R下输入%APPDATA%,进入文件夹后创建pip文件夹,在pip文件夹下创建pip.ini配置文件
2
#在pip.ini内输入以下内容并保存:
代码语言:javascript复制[global]
timeout = 6000
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
(见下图1)
3
#添加到环境变量中:
我的电脑右键—>属性—>高级系统配置—>环境变量—>path—>新建—>输入%APPDATA%pippip.ini,然后一直确定就完成啦!
(见下图2)
图1 pip.ini输入内容
图2 配置环境变量
新下载速度
完成上述步骤后重新导入模块,可以说下载速度有了质的飞跃~~
文案 / 欧子铨(大一)
排版 / 陈志(大三)
代码 / 欧子铨(大一)
审核 / 贺兴(大三)
指导老师 / 秦时明岳