Python基于WordCloud制作词云图


Posted in Python onNovember 29, 2019

这篇文章主要介绍了python基于WordCloud制作词云图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1. 导入需要的包package

import matplotlib.pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud,STOPWORDS
import xlrd

2. 设置生成词云图的背景图片,最好是分辨率高且色彩边界分明的图片

def set_background(picpath):
  back_coloring = imread(picpath)# 设置背景图片,png等图片格式
  return back_coloring

3. 创建词云图:WordCloud

def create_word_cloud(txt_str, back_coloring): #txt_str表示导入的是字符串格式数据,#back_color表示的是背景图片位置
  print('---- 根据词频,开始生成词云! ----')
  font = r'C:\Windows\Fonts\simsun.ttc' #加载显示字体
  wc = WordCloud(
    font_path=font,
    collocations=False, # 去重,如果不加,词云图会显示相同的词
    stopwords=STOPWORDS, #加载停用词,如果不自己指定,则会加载默认的停用词
    max_words=100,
    width=2000,
    height=1200,
    # background_color='white',
    mask=back_coloring,
  )
  wordcloud = wc.generate(txt_str)
  # 写词云图片
  wordcloud.to_file(".\wordcloud_test.png")
  # 显示词云文件
  plt.imshow(wordcloud)
  plt.axis("off")
  plt.show()

4. 默认的停用词一般在:假如anaconda安装在D盘,则会在其目录:D:\Anaconda3\Lib\site-packages\wordcloud\stopwords,其中都是英文词,例如:

Python基于WordCloud制作词云图

Python基于WordCloud制作词云图

注意:也可以在jieba分词中,先利用自己的停用词,得到去除停用词之后的文本字符串来绘制词云图:

5. 此时,词云图无法显示数字,这是因为 wc.generate 操作中,有去除数字的语句:在wordcloud.py中,第560行左右,所以想要显示数字,需要先注释这一行

Python基于WordCloud制作词云图

6. 假设想要显示的词,已经经过jieba分词,保存在txt文档中,则绘制词云图的方法是:

例如:txt中是每行是一个词:

Python基于WordCloud制作词云图

则,先读取txt文件,形成字符串格式文本,再绘制

if __name__ == '__main__': 
  picpath = r".\xxx.png" #背景图片路径
  back_coloring = set_background(picpath)
  
  with open(r".\jieba_分词数据.txt", "r",encoding='utf-8') as f:
    remove_stop_str = f.read()
  
  create_word_cloud(remove_stop_str, back_coloring)

7. 如果通过jieba分词的数据已经处理成了(词, 词频)并保存在excel中,例如这种两列格式的excel表,第一行是标签如(词, 词频):

Python基于WordCloud制作词云图

则可以先读取词频再显示,python读取excel数据可以通过 xlrd.open_workbook 方法:

def read_from_xls(filepath,index_sheet):
  #读取文件名,filepath是excel文件的路径,index_sheet是第几个sheet
  #读取表格#
  # 设置GBK编码
  xlrd.Book.encoding = "gbk"
  rb = xlrd.open_workbook(filepath)
  print(rb)

  sheet = rb.sheet_by_index(index_sheet)
  nrows = sheet.nrows
  data_tmp = []

  for i in range(nrows - 1):
    tt=i+1 #excel的第一行是标签
    tmp_char = [str(sheet.cell_value(tt,0))] #第一列是词
    tmp_num = int(sheet.cell_value(tt,1))  #第二列是词频
    data_tmp.extend(tmp_char*tmp_num)
  return data_tmp

然后,读数据和生成词云图:

if __name__ == '__main__': 
  picpath = r".\xxx.png"
  back_coloring = set_background(picpath)
  
  data_dic = read_from_xls(r'D:\Python_workspace\spyder_space\jieba分词表.xlsx',0)
  data_dic_str = '\n'.join(data_dic) #转成字符串格式
  
  create_word_cloud(data_dic_str, back_coloring)

8. 总结代码

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 19 10:47:17 2019

@author: Administrator
"""
import matplotlib.pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud,STOPWORDS
import xlrd

def set_background(picpath):
  back_coloring = imread(picpath)# 设置背景图片
  return back_coloring

def create_word_cloud(txt_str, back_coloring):
  print('---- 根据词频,开始生成词云! ----')
  font = r'C:\Windows\Fonts\simsun.ttc'
  wc = WordCloud(
    font_path=font,
    collocations=False, # 去重
    stopwords=STOPWORDS,
    max_words=100,
    width=2000,
    height=1200,
    # background_color='white',
    mask=back_coloring,
  )
  wordcloud = wc.generate(txt_str)
  # 写词云图片
  wordcloud.to_file(".\wordcloud_test.png")
  # 显示词云文件
  plt.imshow(wordcloud)
  plt.axis("off")
  plt.show()

def read_from_xls(filepath,index_sheet):
  #读取文件名
  #读取表格#
  # 设置GBK编码
  xlrd.Book.encoding = "gbk"
  rb = xlrd.open_workbook(filepath)
  print(rb)

  sheet = rb.sheet_by_index(index_sheet)
  nrows = sheet.nrows
  data_tmp = []

  for i in range(nrows - 1):
    tt=i+1
    tmp_char = [str(sheet.cell_value(tt,0))]
    tmp_num = int(sheet.cell_value(tt,1))
    data_tmp.extend(tmp_char*tmp_num)
  return data_tmp

if __name__ == '__main__': 
  picpath = r".\xxx.png"
  back_coloring = set_background(picpath)
  data_dic = read_from_xls(r'D:\Python_workspace\spyder_space\jieba分词表.xlsx',0)
  data_dic_str = '\n'.join(data_dic)
  
#  with open(r".\jieba_分词数据.txt", "r",encoding='utf-8') as f: 
#  remove_stop_str = f.read() 


create_word_cloud(data_dic_str, back_coloring)

当然绘制词云图的方法有很多,这只是其中的一种

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 时间操作例子和时间格式化参数小结
Apr 24 Python
python测试驱动开发实例
Oct 08 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
Python 反转字符串(reverse)的方法小结
Feb 20 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
解决pyinstaller打包pyqt5的问题
Jan 08 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
Apr 12 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
Python如何在DataFrame增加数值
Feb 14 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
python实现腾讯滑块验证码识别
Apr 27 Python
Python实现栈和队列的简单操作方法示例
Nov 29 #Python
python调用函数、类和文件操作简单实例总结
Nov 29 #Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 #Python
python实现把两个二维array叠加成三维array示例
Nov 29 #Python
python的time模块和datetime模块实例解析
Nov 29 #Python
python实现将一维列表转换为多维列表(numpy+reshape)
Nov 29 #Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 #Python
You might like
php流量统计功能的实现代码
2012/09/29 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
socket + select 完成伪并发操作的实例
2017/08/15 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
制作部班长职位说明书
2014/02/26 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
python Django框架快速入门教程(后台管理)
2021/07/21 Python
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android