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之入门(二)基本数据类型
May 25 Python
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
详解python发送各类邮件的主要方法
Dec 22 Python
Python 查看文件的读写权限方法
Jan 23 Python
Python callable()函数用法实例分析
Mar 17 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
pytorch使用 to 进行类型转换方式
Jan 08 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 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加密解密函数详解
2015/10/28 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
Python实现二维有序数组查找的方法
2016/04/27 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
学习python的前途 python挣钱
2019/02/27 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
extern在函数声明中是什么意思
2014/01/19 面试题
楼面部长岗位职责范本
2014/02/14 职场文书
社区服务活动小结
2014/07/08 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
老公给老婆的检讨书(精华篇)
2014/10/18 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
社区法制宣传日活动总结
2015/05/05 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python
golang内置函数len的小技巧
2021/07/25 Golang
python读取mnist数据集方法案例详解
2021/09/04 Python