1. 绘制词云图
·安装软件:jieba(分词)、wordcloud(词云)
·使用到的库:matplotlib.pyplot、IPL(提取图片)、numpy
·思路:
A. 文本预处理
导入文本数据-open/read,简单预处理-replace;
分词-jieba,分词连接-join
B.导入停词-open/read
C. 导入背景图片-PIL.Image/np.array
D. 生成词云-WordCloud()
E. 讲文本导入词云-generate
F. 展示结果
尺寸控制-subplots/imshow/axis/show
注:文本.txt、stop_word.txt、backgroud.png
·问题
A. 能做成词云的形状有哪些要求
B. subplots和figure函数的区别在哪
C. 如何提高背景图片导入后的效果—pillow库
D. 字体库的处理
可网络下载放到指定位置,或者直接获取电脑自带字体库位置获取对应字体
E. 文本数据
文本采用txt文档,里面的数据尽量大而多
2. WordCloud各参数含义
WordCloud是wordcloud绘制词云图最核心的类。主要参数如下:
font_path——字符型,传入自定义字体路径
width——int型,控制词云图画布宽度,默认400
height——int型,控制词云图画布高度,默认200
prefer_horizontal——float型,控制所有水平显示的问题相对于竖直显示文字的比例,越小显示的文字越多
mask——传入背景图。图片处理graph=numpy.array(PIL.Imag(‘图.png’))
contour——float型,当mask不为None时,contour参数为图像轮廓线显示宽度。默认为0,即不显示轮廓线
contour_color——设置轮廓线颜色,默认‘black’
scale——当画布固定时,按照比例放大画布。如scale=1.5,则长宽都是为原来画布的1.5倍
min_font_size——int型,词云图最小词的字体大小,默认4
max_font_size——int型,词云图最大词的字体大小,默认为200
max_words——int型,画布最多绘制的词个数,默认200
stopwords——控制绘图是否忽略停用词,默认为None,即条用自带的英文停用词表。也可传入自定义的中文停用词
background_color——控制词云图背景色,默认‘black’
relative_scalling——float型,控制字体大小和对应词频的相关性。设置为1,完全相关;设置为0,完全不相关;默认设置0.5
color_func——传入自定义调色盘函数,默认None
colormap——对应matplotlib中的colormap调色盘,默认‘virids’。该参数与color_func互斥,当color_func有函数传入时,本参数失效
repeat——bool型,控制是否允许出现重复词,默认False(不出现)
random_state——控制随机水平。传入某个固定的数字后,每一次绘图文字布局将不会改变
collocation——bool型,默认True。是否包括两个单词的搭配
font_step——int型,默认1,字体大小的步长。大于1时加快运算,但可能会导致较大误差
mode——string型,默认‘RGB’。当参数为‘RGBA’时,其中A代表透明度。且background_color不为空时,背景为透明
normalize_plurals——bool型,默认True。是否移除词尾的s
3. wordcloud绘制云图遇到的小问题
·scipy.misc.imread(IMG_FILE) 将图片读取出来为array类型,即numpy类型
但scipy.misc import 'imread' 导入失败新版抛弃了这个接口,需要手动装旧版
·imshow和show的区别
imshow将图像绘制到内存,也就是说图像已经绘制了,只是在内存没有传到显示器,然后调用show呈现在显示器上
·提取关键字
jieba.cut(x) 返回一个生成器,可通过for循环来取里面的每一个词
jieba.lcut(x) 返回一个列表类型
·生成词频
wc.generate(text)直接生成词频
generate_from_frequencies适用于已知词及其对应的词频是多少(已有数据库),不需要分词的情况下用。函数的参数是dict字典
·从图片获取颜色色系
导入from wordcloud import ImageColorGenerator
提取background = Image.open(img_file)
usa_mask =ImageColorGenerator(np.array(background))
应用plt.imshow(wordcloud.recolor(color_func=usa_mask), alpha=1)
[if !supportLists]4. [endif]stylecloud绘制云图
stylecloud是wordcloud的优化改良版。基于wordcloud,支持个性化的云图创作。
两者最大的区别:stylecloud可以直接将原始文本转换成本地词云图片文件。
·制作云图
stylecloud制作云图只需要gen_stylecloud一个函数即可。主要参数有:
text——字符串,格式同wordcloud的generate方法传入的text
gradient——控制云图颜色渐变的方向。vertical为垂直,horizontal为水平(默认)。此功能在python3.2已经弃用
size——控制输出图像文件的分辨率(默认方形图,分辨率512),代表长和宽
icon_name——词云形状传入参数,默认‘fas fa-flag’
palette——控制调色方案,默认为’cartocolors.qualitative.Bold_5’
background_color——字符串,控制词云图底色。可传入颜色名称或16进制色彩,默认’white’
max_font_size——最大字
max_words——最多字数
stopwords——bool型,控制是否开启去停用词功能,默认True,调用自带的英文停用词
custom_stopword——传入自定义的停用词list,配合stopwords=True使用
output_name——控制输出词云图文件的文件名,默认stylecloud.png
font_path——传入自定义字体文件的路径
random_state——控制随机数水平,传入某个固定的数字之后,每一次绘图文字布局将不会改变。
collocation——bool型,默认True。是否包括两个单词的搭配
·默认参数设置
def gen_stylecloud(text=None,
file_path=None, #输入文本/CSV 的文件路径
size=512, # stylecloud的大小(长度和宽度)
icon_name='fasfa-flag', # stylecloud形状的图标名称
palette='cartocolors.qualitative.Bold_6', #调色板
colors=None,
background_color="white", #背景颜色
max_font_size=200, # stylecloud中的最大字号
max_words=2000, # stylecloud可包含的最大单词数
stopwords=True, #布尔值,用于筛除常见禁用词
custom_stopwords=STOPWORDS,
icon_dir='.temp',
output_name='stylecloud.png', # stylecloud输出文本名
gradient=None, #梯度方向
font_path=os.path.join(STATIC_PATH, 'Staatliches-Regular.ttf'), #stylecloud所用字体
random_state=None, #控制单词和颜色的随机状态
collocations=True,
invert_mask=False,
pro_icon_path=None,
pro_css_path=None)
·使用Font Awesome提供的免费图表来变更词云形状
参考https://www.runoob.com/font-awesome/fontawesome-reference.html
设置显示形状参数:icon_name
操作:将链接中对应图标的描述赋值给icon_name参数
注意:链接的描述是以‘fa’开头,需要变更为‘fas’
举例:icon_name=‘fas fa-plane’
·通过palettable更改调色板的自定义风格
参考https://jiffyclub.github.io/palettable/
设置配色方案参数:palette
操作:进入链接任意点击一个palettable(palettable:***),进入新链接选择Contents的颜色[color]
将***.[color]赋值给palette参数
注意:不能直接用最后一个颜色赋值,需要完整的色系
举例:palette= 'matplotlib.Inferno_3'
·添加梯度,是颜色按照特定方向流动
参数:gradient
操作:gradient=‘vertical’ #垂直
gradient=‘horizontal’ #水平