1. 前言
词云是一种有效可视化文本数据的方式,其中文本中出现频率高的词汇会在词云中显示的更大、更加突出。在python中,我们可以使用词云库wordCloud轻松制作词云图表,并且解决中文乱码问题。本文将详细介绍wordCloud库的使用方法。
2. 安装wordCloud库
在使用wordCloud之前,我们需要先使用pip安装它。使用以下命令即可:
pip install wordcloud
3. 制作简单词云
在制作简单词云时,我们需要导入wordCloud库,并且将文本数据转化为字符串类型,利用wordCloud实例生成词云图形并显示:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = "I love Python programming language" # 文本数据
wordcloud = WordCloud().generate(text) # 创建wordCloud实例并生成词云图形
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
运行上述代码,程序会生成词云图形并展示。
这里需要注意的是:
interpolation:插值方法,用于处理图像中的像素缺失。默认情况下,WordCloud使用bilinear插值来处理图像,以更好地使图像看起来平滑。
axis:是否显示坐标轴线,此处axis("off")意味着不显示坐标轴。
4. 制作自定义词云
4.1 使用自定义字体
默认情况下,wordCloud使用的字体可能不太符合我们的要求,我们可以使用自己的字体。通过以下代码设置:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = "I love Python programming language" # 文本数据
font_path = "D:/Fonts/STXINGKA.TTF" # 自定义字体路径
wordcloud = WordCloud(font_path=font_path).generate(text) # 创建wordCloud实例并生成词云图形
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
运行上述代码,程序会生成词云图形并展示。在此代码中,font_path参数指定了字体的路径。我们需要先在计算机中放置字体文件,并且指定文件的路径才能成功应用。
4.2 修改词云形状
制作词云图形时,默认情况下wordCloud将使用矩形来作为词云的形状。我们可以通过指定一个外界轮廓来改变词云形状。这可以通过mask参数实现。以下是一个示例代码:
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
text = open('myfile.txt', 'r').read() # 读取文本数据
font_path = "D:/Fonts/STXINGKA.TTF" # 自定义字体
mask = np.array(Image.open("cloud.png")) # 使用自定义轮廓
wordcloud = WordCloud(font_path=font_path, background_color="white", mask=mask, stopwords=STOPWORDS).generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
在上述代码中,mask参数用来指定自定义轮廓的图像,这通常需要通过Pillow(映像处理库)加载。在此代码中,我们使用了名为‘cloud.png’的文件作为自定义轮廓。除了指定轮廓以外,我们还可以定义一个背景颜色,这里将颜色设置为白色。
4.3 使用中文词云
在使用中文文本数据时,我们需要注意到wordCloud不支持中文字符。因此,我们需要进行中文字符转换。这可以通过一些处理步骤来完成。下面是一个简单示例:
from wordcloud import WordCloud
import jieba
import matplotlib.pyplot as plt
text = open('myfile.txt', 'r', encoding='utf-8').read() # 读取文本数据
text = " ".join(jieba.cut(text, cut_all=False)) # 将文本进行分词
font_path = "D:/Fonts/simhei.ttf" # 定义中文字体
wordcloud = WordCloud(font_path=font_path, background_color="white", width=1000, height=1000, max_font_size=100, scale=3.5, collocations=False, random_state=42).generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
在上述代码中,我们加载文本数据,使用jieba库对其进行分词,并且指定了中文字体。文本分词结果将会作为WordCloud实例的输入,然后生成词云图像并且展示。
4.4 其他自定义设置
除了上面介绍的自定义设置以外,我们还可以进行更多的设置。以下是一些常见的设置:
width/height: 指定词云图形的大小(默认为400x200)。
max_font_size:设置词云绘制时使用的最大字体大小(默认为200)。
max_words:指定生成的最大单词数量(默认为200)。
colormap:指定使用的颜色图。
random_state:使用此参数可以确保每个人都可以获得相同的结果。当我们重新运行代码时,结果将会发生变化,如果我们想要固定结果,可以使用此参数。
5. 解决中文乱码
在WordCloud制作词云时,中文字符可能会出现乱码问题。这通常是由于默认字体不支持中文格式所致。为了解决这个问题,我们可以使用Pillow库中的ImageFont将中文转换成图片格式,然后导入该图片作为WordCloud中的字体。以下是代码示例:
from wordcloud import WordCloud
import numpy as np
import PIL.Image as Image
import jieba
# 定义中文分词
text = open("myfile.txt", "r",encoding='utf-8').read()
text = " ".join(jieba.cut(text))
# 生成WordCloud实例并转换为图像
wc = WordCloud(font_path='msyh.ttf')
img = wc.generate(text).to_image()
# 导出图像文件并展示
img.save('wordcloud.png')
img.show()
结论
本文详细介绍了Python词云库wordCloud的使用方法。我们学习了如何制作词云图形,如何自定义词云形状,如何使用中文字符,并且解决了中文字符乱码的问题。