使用Python轻松实现绘制词云图项目(附详细源码)

目录
  • 项目背景
  • 项目实操
    • 一、一般词云绘制
    • 二、根据词频绘制词云
  • 结 语

项目背景

虽然现在已经有很多现成的制作词云图的工具了,但一般存在以下几个问题:

问题一:工具太多,眼花缭乱,质量参差不齐,选择困难症;

问题二:大多词云工具或多或少有一些限制,自定义的空间有限;

问题三:有些工具甚至收费。

基于以上几个问题,觉得有必要写一篇Python绘制词云图的文章,因为实在太简单!没有任何编程基础的小白都能搞定的事,还找什么工具啊!

OK,FINE。咱不废话,直接实操。

项目实操

一、一般词云绘制

制作词云图首先得有词吧,词从哪来,迪迪想了半天硬是没想出来。既然没思路,那就拿过气的后浪软文玩一玩吧,对于后浪大家褒贬不一,迪迪也不敢妄加评论。

首先,咱们把后浪全文保存为HL.txt,截取部分,长这样:

接着,下载并导入制作词云所需的库,各个库的功能都有注释。

import jieba  #结巴分词
from wordcloud import WordCloud  #词云展示库
from PIL import Image  #图像处理库
import numpy as np  #支持多维数组和矩阵运算
import matplotlib.pyplot as plt  #图像展示库

然后,把HL.txt的内容读出来。

# 读取文本内容
with open('HL.txt','r',encoding="UTF-8") as f:
    file = f.read()  #将文本读取为整个字符串,readlines可以按行读取

紧接着,咱们需要把读取的整个字符串分成一个个的词,jieba出征,寸草不生。

#进行分词
data_cut =jieba.cut(file,cut_all = False) #精确模式分词

分完词后发现,什么逗号啊、分号啊、句号啊也作为单独的词全出来了,那可不行,咱得想办法stop它们。 构建停词表,把看不惯的词remove掉,没错,我不喜欢口口声声的我们你们啥的。

stop_words = [",","。",";","、","我们","你们"]  #自定义停词列表

当然,有朋友会说,你这是因为文本内容少,自己搞个停词表方便,可要是成千上万的文本你这点停词肯定不够用啊。OK,那咱们百度下停词表,随便download一个,保存为stopwords.txt。stopwords.txt共有1893个常用停词,长这样:

有了停词表,咱得用Python读出来。

stop_words = [] #创建空列表
with open("stopwords.txt", 'r', encoding='utf-8') as f:
    for line in f:
        if len(line)>0:
            stop_words.append(line.strip())  #把停词追加到stop_words列表中

停词准备好了,接下来就是remove停词,拿到我们需要的词了。

data_result = [i for i in data_cut if i not in stop_words] #获取需要的词

print一下data_result,长这样:

这可不行,咱们需要的是由一个个词构成的字符串。因此,需要用join函数以空格分隔并将所有词连接成一个新的字符串。replace在这表示将换行(\n)符替换为空。

text = " ".join(data_result).replace("\n","") #连接成字符串
print(text)

咱们打印一下text看效果:

词有了,可以开始设计词云图,由于所有词都是中文,而WordCloud默认不支持中文,摔!咱还得指定字体文件路径,否则会出现乱码。迪迪毕竟学欧体过来的,于是找了个小楷字体,你可以根据自己的喜好设置不同的字体,网上免费字体一大堆。

wc = WordCloud(
    #设置字体,不指定就会出现乱码,这个字体文件需要下载
    font_path = "演示悠然小楷.ttf",
    background_color = "black",
    max_words = 5000,
)

配置好之后,咱生成图片并展示出来。

# 生成词云图
wc.generate(text)

# 保存词云图
wc.to_file("IMJG.jpg") #保存图片

# 展示
plt.imshow(wc) #对图片进行处理,并显示其格式
plt.axis("off") #关闭坐标轴
plt.show() #将图片显示出来

效果如下:

到这,你可能以为迪迪准备写结语了。不好意思,还没完,咱们的目标可不能局限在这,在诗和远方,哦不,是定制属于自己的词云图。 迪迪准备给词云加个自定义的底图,让词云看起来更形象些。想了很久,不知道用什么图合适。于是迪迪打开了好久没用的Photoshop cc,绘制了一个你用美图秀秀都能做的比我好看的png。

我把这张图片命名为JG.png,并用Image方法打开。

#用Image方法打开图片
images = np.array(Image.open("JG.png"))

把images配置到词云wc中去,传给参数mask。

wc = WordCloud(
    #设置字体,不指定就会出现乱码,这个字体文件需要下载
    font_path = "演示悠然小楷.ttf",
    background_color = "black",
    max_words = 5000,
    mask=images
)

重新生成并保存下词云图,效果如下:

哈哈,略丑。朋友们有兴趣可以自己做个底图或者网上download一个底图试试,底图尽量清晰、颜色尽量突出就好啦。

还有朋友可能会问为啥我文章开头的词云图是一个个句子,这里一并说明下,因为读取HL.txt的时候用的是readlines啊~

二、根据词频绘制词云

一般的词云制作用以上方法就可以啦,但现实生活中我们的需求可能更为复杂,根据词频绘制词云图的案例也更为多见。以下就是J哥经常用到的一个实战案例,开源代码奉上。

大致思路是从Mysql数据库中提取上万条交易记录,用sql语句把交易规模前100的品牌select出来,然后根据各个品牌交易规模的大小制作词云,文字越大的表示交易规模越大。

#-*- coding = uft-8 -*-
#@Time : 2020/5/23 10:30 上午
#@Author : 我是J哥
#@File : my_wordcloud.py

#给定词频制作词云图
from matplotlib import pyplot as plt   #绘图,数据可视化
from wordcloud import WordCloud   #词云
from PIL import Image  #图片处理
import numpy as np   #矩阵运算
import pymysql   #数据库
import pandas as pd  #数据处理

#准备词云所需文字(词)
conn = pymysql.connect(host="localhost", user="你的", passwd="你的", db="test", port=3306, charset="utf8")
cur = conn.cursor()
sql = "select brand as name,round(sum(jine)/10000,0) as value from Sc_month4 group by name order by value desc limit 100;"
df = pd.read_sql(sql, conn)
print(df)
name = list(df.name)  #词
value = df.value  # 词的频率
dic = dict(zip(name, value))  # 词频以字典形式存储
#print(dic)
cur.close()
conn.close()

img = Image.open("tree.png")
img_arry = np.array(img)
wc = WordCloud(
    background_color="white",
    mask=img_arry,
    max_words=1000,
    max_font_size=500,
    #font_path="演示悠然小楷.ttf"
    #font_path="有字库龙藏体.ttf"
    font_path="演示悠然小楷.ttf"
)

wc.generate_from_frequencies(dic)  #以词频生成词云

#绘制图片
fig = plt.figure(1)
plt.imshow(wc)
plt.axis("off")
plt.show()

#输出词云图片到文件
plt.savefig("JGJG.jpg",dpi=400)

生成的词云图长这样:

结 语

整体来看,Python制作词云图还是很简单的,代码清晰,代码量也少,很适合新手入门尝鲜。当然,要想呈现良好的词云效果,前提是你的数据是干净整洁的,因此数据清洗的知识必须掌握。

到此这篇关于使用Python轻松实现绘制词云图项目的文章就介绍到这了,更多相关Python绘制词云图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python通过文本和图片生成词云图

    使用现有的txt文本和图片,就可以用wordcloud包生成词云图.大致步骤是: 1.读取txt文本并简单处理: 2.读取图片,以用作背景: 3.生成词云对象,保存为文件. 需要用到3个库:jieba(用于分割文本为词语).imageio(用于读取图片).wordcloud(功能核心,用于生成词云). 我用简历和我的照片,生成了一个词云图: 代码如下: import jieba import imageio import wordcloud # 读取txt文本 with open('resume

  • Python实现爬取某站视频弹幕并绘制词云图

    目录 前言 爬取弹幕 爬虫基本思路流程 导入模块 代码 制作词云图 导入模块 读取弹幕数据 前言 [课 题]: Python爬取某站视频弹幕或者腾讯视频弹幕,绘制词云图 [知识点]: 1. 爬虫基本流程 2. 正则 3. requests >>> pip install requests 4. jieba >>> pip install jieba 5. imageio >>> pip install imageio 6. wordcloud  >

  • Python绘制词云图之可视化神器pyecharts的方法

    自定义图片生成词云图的多种方法 有时候我们会根据具体的场景来结合图片展示词云,比如我分析的是美团评论,那么最好的展示方法就是利用美团的logo来做词云图的底图展示,下面我们就介绍几种常用的方法! 根据喜爱的图片生成词云轮廓 from wordcloud import WordCloud import jieba import matplotlib.pyplot as plt import numpy as np import PIL.Image as Image text = open(u'da

  • python根据文本生成词云图代码实例

    这篇文章主要介绍了python根据文本生成词云图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 效果 代码 from wordcloud import WordCloud import codecs import jieba #import jieba.analyse as analyse from scipy.misc import imread import os from os import path import matplot

  • Python简单实现词云图代码及步骤解析

    一.安装 wordcloud pip install wordcloud 二.加载包.设置路径 import os from wordcloud import WordCloud import matplotlib.pyplot as plt os.chdir('E:\\pyspace\\tmp') 三.词云图示例 1.默认参数示例 text = 'Keep it simple and stupid.' wc = WordCloud() # 实例化词云图对象 wc.generate(text)

  • Python基于WordCloud制作词云图

    这篇文章主要介绍了python基于WordCloud制作词云图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. 导入需要的包package import matplotlib.pyplot as plt from scipy.misc import imread from wordcloud import WordCloud,STOPWORDS import xlrd 2. 设置生成词云图的背景图片,最好是分辨率高且色彩边界分明的图片 de

  • 利用Python爬取微博数据生成词云图片实例代码

    前言 在很早之前写过一篇怎么利用微博数据制作词云图片出来,之前的写得不完整,而且只能使用自己的数据,现在重新整理了一下,任何的微博数据都可以制作出来,一年一度的虐汪节,是继续蹲在角落默默吃狗粮还是主动出击告别单身汪加入散狗粮的行列就看你啦,七夕送什么才有心意,程序猿可以试试用一种特别的方式来表达你对女神的心意.有一个创意是把她过往发的微博整理后用词云展示出来.本文教你怎么用Python快速创建出有心意词云,即使是Python小白也能分分钟做出来.下面话不多说了,来一起看看详细的介绍吧. 准备工作

  • Python制作词云图代码实例

    词云图是将词汇按照频率的高低显示不同大小而形成的图,可以一目了然地看出关键词.下面是词云图的python代码- #导入需要模块 import jieba import numpy as np import matplotlib.pyplot as plt from PIL import Image from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator text_road=str(input('请输入文章的路径:')) pi

  • Python pyecharts绘制词云图代码

    目录 一.pyecharts绘制词云图WordCloud.add()方法简介 二.绘制词云图对应轮廓按diamond显示 三.对应完整代码如下所示 一.pyecharts绘制词云图WordCloud.add()方法简介 WordCloud.add()方法简介: add(name,attr,value, shape="circle", word_gap=20, word_size_range=None, rotate_step=45) name str 图例名称 attr list 属性

  • 使用Python轻松实现绘制词云图项目(附详细源码)

    目录 项目背景 项目实操 一.一般词云绘制 二.根据词频绘制词云 结 语 项目背景 虽然现在已经有很多现成的制作词云图的工具了,但一般存在以下几个问题: 问题一:工具太多,眼花缭乱,质量参差不齐,选择困难症: 问题二:大多词云工具或多或少有一些限制,自定义的空间有限: 问题三:有些工具甚至收费. 基于以上几个问题,觉得有必要写一篇Python绘制词云图的文章,因为实在太简单!没有任何编程基础的小白都能搞定的事,还找什么工具啊! OK,FINE.咱不废话,直接实操. 项目实操 一.一般词云绘制 制

  • 使用python+pygame开发消消乐游戏附完整源码

    效果是这样的 ↓ ↓ ↓ 一.环境要求 windows系统,python3.6+ pip21+ 开发环境搭建地址 一起来学pygame吧 游戏开发30例(开篇词)--环境搭建+游戏效果展示 安装游戏依赖模块 pip install pygame 二.游戏简介 消消乐应该大家都玩过,或者看过.这个花里胡哨的小游戏 用python的pygame来实现,很简单. 今天带大家,用Python来实现一下这个花里胡哨的小游戏. 三.完整开发流程 1.项目主结构 首先,先整理一下项目的主结构,其实看一下主结构

  • Python绘制词云图之可视化神器pyecharts

    目录 词云图 词云图系列模板 固定模式词云图 自定义文字样式 一键化词云案例 词云图 什么是词云图,相信大家肯定不会感到陌生,一本书统计里面出现的词频,然后可视化展示,让读者快速的了解这个主题纲要,这就是词云的直接效果. 词云图系列模板 固定模式词云图 修改一些参数可以修改词云的轮廓,我觉得这个是最方便的词云,一键化不需要你去找其他的底图,设置一些参数. shape词云图轮廓,有’circle’, ‘cardioid’, ‘diamond’, ‘triangleforward’, ‘triang

  • Python实现Wordcloud生成词云图的示例

    wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概. 首先贴出一张词云图(以哈利波特小说为例): 在生成词云图之前,首先要做一些准备工作 1.安装结巴分词库 pip install jieba Python中的分词模块有很多,他们的功能也都是大同小异,我们安装的结巴分词 是当前使用的最多的类型. 下面我来简单介绍一下结巴分词的用法 结巴分词的分词模式分为三种: (1)全模式:把句子中所有的可以成词的词语都扫描出

  • Python制作个性化的词云图实例讲解

    目录 1. 引言 2. 举个栗子 2.1 安装stylecloud库 2.2 生成词云图 2.3 美化显示效果 2.4 处理停用词 2.5 使用自定义背景图像 3. 总结 1. 引言 词云图可以让我们方便地识别出文本中的关键词,其中单词的大小代表它们的频率.有了这个,我们甚至在阅读之前就可以很好地了解文本的内容.虽然有很多免费的工具可以在线制作文字云,但我们可以使用万能的Python来定制个性化的词云图. 在本文中,我们将使用第三方Python库stylecloud,有了该库,可以通过简短的几行

  • Python画图小案例之小雪人超详细源码注释

    一步步教你怎么用Python画雪人,进一步熟悉Python的基础画图操作,废话不多说,上代码. 希望您给个关注给个赞,也算对我们的支持了. class Shape: # 基类(雪人各部件(形状)共有的属性) def __init__(self, cvns, points, fill): # 构造方法 画布 位置坐标 颜色 self.cvns = cvns # 画布 self.points = points # 坐标(x1, y1, x2, y2) self.fill = fill self.pi

随机推荐