Python 可视化: 怎么做中文wordcloud? 附:案例&代码

Python:Python 3.6 (64-bit)

Jetbrean:PyCharm Community Edition 2018.1

操作系统:Windows7


WorldCloud()官方使用说明 & matplotlib.pyplot.imshow()官方使用说明链接这里。先看我实现的代码和运行结果:

from wordcloud import WordCloud, ImageColorGenerator  # 引入词云WordCloud
from scipy.misc import imread                         # 引入读取图片的工具
import jieba                                          # 引入分词的词典
import matplotlib.pyplot as plt                       # 制图包, as作用是重命名长度大的程序,方便引用写码


text = open('G:/CPDA/1.txt','r').read()                # 可分为两步, 1st: file = open(), 2nd: text = file.read()
# 英文文档不需要此行jieba代码。
cut_text = ' '.join(jieba.cut(text))                   # 让jieba把文本进行分词,从而词云显示“词组”而不是“句子”。并重新命名为cut_text,以示区别。
                                                       # 注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
bg_pic = imread('G:/CPDA/1.png')                       # 文件路径需要加引号;创建图片,这是为了替换WordCloud默认的长方形输出形状;
wc = WordCloud(                                        # WordCloud()设定词云参数,.generate()将str文本生成词云
    mask=bg_pic,                                       # 设定词云形状是bg_pic。
    font_path='c:\windows\Fonts\simhei.ttf'            # 设定文字的类型为中文黑体。
    background_color='white',                          # 设定图片背景为白色。默认为黑色。
    scale=15,                                          # 设定图片像素密度为15.默认之为1。
).generate(cut_text)                                   

image_color = ImageColorGenerator(bg_pic)              # 提取图片的色彩分布
a = wc.recolor(color_func = image_color)                # 替换默认的字体颜色

plt.imshow(a, interpolation='bilinear')        # Bilinear:双线性插值算法,用来缩放显示图片。缩放就是把原图片的像素应用坐标系统,用坐标表示,
                                               # 双线性插值算法就是把一个坐标不是整数的点的坐标,用最近的四个整数点坐标指示出来;                                               
                                               # 输出时,将云图按照图片的色彩分布进行显示。
plt.axis('off')                                        # 关闭坐标轴显示
plt.show() 
                                            # 最终从窗口显示词云
wc.to_file("pjl_cloud1.jpg")                     # 保存图片,默认和本.py文件保存到一处。


附注部分:

 

Q1、pip install wordcloud装不了怎么办?

从官网链接下载,然后windows的cmd中执行:

pip install <系统盘路径> + <文件名> wordcloud‑1.4.1‑cp36‑cp36m‑win_amd64.whl

1. 一些国内浏览器无法下载wordcloud比如QQ浏览器。可以使用Chorm浏览器。

1. 如何选择Wordcloud版本?例如:wordcloud‑1.4.1‑cp36‑cp36m‑win_amd64.whl

· “cp36”表示适用“Python3.6“,

· “win_amd64”表示适用64位“Python3.6“软件,

2. 不能为了图省事修改.whl文件的名字,否则无法安装。

 

Q2:如何正常显示中文,而不是矩形框框?

指定文本字体为中文,因为worldcloud默认英文

wordcloud = WordCloud(
    font_path='c:\windows\Fonts\simhei.ttf',          # 写明地址,指定文字的类型为中文黑体。
).generate(cut_text)

font_path='c:\windows\Fonts\xxx.ttf':C盘的“c”大小写没有影响,但文件路径有影响,如“Fonts“不能写成“fonts”。

拓展:怎么指定字体是中文?从哪里找中文字体?有2个途径:

- 其一 直接使用Windows自带中文(具体方法见问题3)

- 其二 网上下载.ttf格式的中文文档,放到C:\windows\fonts文件夹里边

Q3:为什么得到的是“句子云”? 为什么使用了jieba.cut()函数之后,还要使用 join()函数?

  • 产生“句子云”的原因有2个:
  1. 要么没有使用jieba.cut()进行分词,txt被直接用于WordCloud.generate()
  2. 要么使用了jieba.cut()但是没有用符号分隔jieba分好的词,(比如''.join())使得句子变回了原始txt格式,这时WordCloud.generate()只能按标点符号得到“句子云”。
  • 使用join()函数的原因:
  1. 使用jieba进行分词,我们会得到一个可迭代的generator,但是WordCloud.generate()只使用str格式,不使用generator。
  2. 这时候使用jion()函数把generator格式转换为str格式就OK了。通过例子我们能清楚的看出来jion()函数和jieba.cut()函数的功能:
from wordcloud import WordCloud, ImageColorGenerator  # 引入词云WordCloud
from scipy.misc import imread                         # 引入读取图片的工具
import jieba                                          # 引入分词的词典
import matplotlib.pyplot as plt                       # 制图包, as作用是重命名长度大的程序,方便引用写码


# jieba.cut()函数
# 假设我们有一个名为“haha.txt”,内容为“我勒个去,txt读取之后是什么格式?”的文件。

txt = open('f:/haha.txt', 'r').read()
cut_txt = ' '.join(jieba.cut(txt))                      # 特殊符号为 空格符
j_txt = jieba.cut(txt)
cut1_txt = ''.join(jieba.cut(txt))                      # 没有特殊符号

print(f'type of txt:{type(txt)}')
print(f'type of cut_txt:{type(cut_txt)}')
print(f'type of j_txt:{type(j_txt)}')
print(f'type of cut1_txt:{type(cut1_txt)}')

 # 结果如下:
"""
type of txt:<class 'str'>
type of cut_txt:<class 'str'>
type of j_txt:<class 'generator'>
type of cut_txt:<class 'str'>
"""
print(txt)
print(cut_txt)
print(j_txt)
print(cut1_txt)
"""
# 我的测试文本内容

我勒个去,txt读取之后是什么格式?                               # str格式
我勒个 去 , txt 读取 之后 是 什么 格式 ?                      # 我们要的就是它:句子被分词 & 格式是str 
<generator object Tokenizer.cut at 0x000000000B3F49E8>        # 这是为什么jieba.cut()不能直接用
我勒个去,txt读取之后是什么格式?                                # 只是用jion.()可以把generator转化为str,但是jieba.cut()失效了,相当于没有分词。

"""

 

Q5:怎么用Windows自带的其他中文字体?

方法:在“C:\windows\fonts”文件夹下,使用“Display”类型字体。

Tips:“Text”类的不行,会被报错:

self.font = core.getfont(font, size, index, encoding, layout_engine=layout_engine)

OSError: cannot open resource

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值