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中的break、continue、exit()、pass全面解析
Aug 05 Python
Python反射用法实例简析
Dec 22 Python
Python enumerate索引迭代代码解析
Jan 19 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
Nov 01 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
pyecharts调整图例与各板块的位置间距实例
May 16 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
详解python对象之间的交互
Sep 29 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
新手必备Python开发环境搭建教程
May 28 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
May 31 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 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实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
php 实现进制相互转换
2016/04/07 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
js微信分享实现代码
2020/10/11 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
详解datagrid使用方法(重要)
2020/11/06 Javascript
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
Python六大开源框架对比
2015/10/19 Python
用python实现的线程池实例代码
2018/01/06 Python
详解Python发送email的三种方式
2018/10/18 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
CSS3 分类菜单效果
2019/05/27 HTML / CSS
关爱留守儿童标语
2014/06/18 职场文书
公司委托书怎么写
2014/08/02 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
2016年教代会开幕词
2016/03/04 职场文书
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript