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之开始真正编程
Sep 12 Python
python简单获取本机计算机名和IP地址的方法
Jun 03 Python
基于进程内通讯的python聊天室实现方法
Jun 28 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
Apr 19 Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
Python基于mysql实现学生管理系统
Feb 21 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
python PIL模块的基本使用
Sep 29 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 Python
Python中time与datetime模块使用方法详解
Mar 31 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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
PHP中用正则表达式清除字符串的空白
2011/01/17 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
python如何读写csv数据
2018/03/21 Python
python 异或加密字符串的实例
2018/10/14 Python
python字符串格式化方式解析
2019/10/19 Python
python连接PostgreSQL过程解析
2020/02/09 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
租房安全协议书
2014/08/20 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
在校生证明
2015/06/17 职场文书
关于环保的宣传稿
2015/07/23 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
Python first-order-model实现让照片动起来
2022/06/25 Python