背景:分析Excel某一列的数据出现的数据次数,并生成词云图片(建议直接和数据库结合使用效果更好)。
一、导入需求的python模块
| 模块名称 | 功能 | 安装命令 |
| openpyxl | 操作表格 | pip install openpyxl |
| wordcloud | 云词相关 | pip install wordcloud |
| imageio | 图像数据读取库 | pip install imageio |
二、对某一列的表格进行提取(当然也可以不使用openpyxl模块,看自己习惯使用哪个模块)。
from openpyxl import *# 表格数据集list集list = []# 读取存在的表格wb = load_workbook('/表格的路径.xlsx')# 指定Sheet页面sheet = wb['Sheet名称']prj = sheet.columnsprjTuple = tuple(prj)# 过滤第I列# 0,4是遍历A、B、C、D列 #(0,len(prjTuple)) 遍历全部列for idx in range(8, 9):for cell in prjTuple[idx]:# 将值写入到list空列表中list.append(cell.value)
三、将list数据进行分析生成字典,key对应词,value对应词出现的次数,例子:{词:词出现的次数}。
# 把结果放到字典里面去{键值对类型}results = {}for s in list:# results[s]获取key值,results.get(s, 0)+ 1 指定键的值不存在时,返回0,如果存在就会在原key值的基础上+1results[s] = results.get(s, 0) + 1
四、imageio.v2.imread('路径') 设置指定图片模版进行替换到WordCloud中的图片,图片白色底不会展示词汇。
import imageiofrom wordcloud import WordCloud# 读取背景图片并用变量接收(文字只会展示在非白色背景上)color_mask = imageio.v2.imread("/指定模版图片路径.jpg")cloud = WordCloud(# 设置字体,不指定就会出现乱码font_path="Library/Fonts/Songti.ttc",# 设置背景色background_color='white',# 词云形状,使用读取的图片mask=color_mask,# 允许最大词汇max_words=2000,# 最大号字体max_font_size=200,# 最小号字体# min_font_size=50# 设置图片宽度width=375,# 设置图片高度height=300,)# 产生词云word_cloud = cloud.generate_from_frequencies(results)# 保存词云图片,并指定保存路径word_cloud.to_file("/指定保存图片路径.jpg")
不设置模版前生成的云词图片:

模版:

设置模版后生成的云词图片:

WordCloud常用方法
| 设置方法 | 传值类型 | 备注 |
| font_path=None | string | 字体OTF or TTF路径,需要展现什么字体就把该字体路径+后缀名写上,如:font_path = '黑体.ttf' |
| width=400 | int | 输出图片(画布)的宽度,默认400像素 |
| height=200 | int | 输出图片(画布)的宽度,默认200像素 |
| margin=2 | int | 图片(画布)边缘留白的空隙,默认留白空间是2像素 |
| ranks_only=None | 可以忽略,这块确实不知道啥意思 | |
| prefer_horizontal=0.9 | float | 词语水平方向排版出现的频率,默认 0.9 ,所以词语垂直方向排版出现频率为 0.1 |
| mask=None | nd-array or None | 是否使用mask(蒙板),默认不使用。如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:bg_pic = imread('读取一张图片.png'),背景图片的画布一定要设置为白色(#FFFFFF),然后显示的形状为不是白色的其他颜色。可以用ps工具将自己要显示的形状复制到一个纯白色的画布上再保存,就ok了 |
| scale=1 | float | 在字段width和height乘以的倍数,最终呈现的画布尺寸以这个结果。默认是1,此方法适合需要呈现大尺寸的图片(画布) |
| color_func=Nonec | callable | 生成新颜色的函数,默认为空。如果为空,则使用 self.color_func |
| max_words=200 | int | 单词最多显示数量,默认200个 |
| min_font_size=4 | int | 单词最小尺寸,默认4像素 |
| stopwords=None | set of strings or None | 设置需要屏蔽展示的词,如果为空,则使用内置的STOPWORDS。若使用generate_from_frequencies生成方式,则会忽略此参数 |
| random_state=None | int or None | 为每个单词返回一个PIL颜色 |
| background_color='black'c | string | 输出画布背景颜色,默认黑色 |
| max_font_size=None | int | 单词最大尺寸,默认不限制 |
| font_step=1 | int | 字体步长,默认1。如果步长大于1,会加快运算但是可能导致结果出现较大的误差(这块确实不知道啥意思) |
| mode='RGB' | string | 颜色显示模式,默认”RGB”。当参数为“RGBA”并且background_color是None时,背景色为透明 |
| relative_scaling='auto' | float | 词频和字体大小的关联性(倍数)。默认是auto,即为0.5。若为0,只考虑单词的排列顺序;若为1,则单词展现的大小和出现的频率一致;若两者都考虑则可以设置为auto。若参数repeat=True,则此项为0 |
| regexp=None | string or None (optional) | 把文本切片的通用方法。若为空,则使用正则匹配r"\w[\w'];若使用generate_from_frequencies生成方式,则忽略此参数 |
| collocations=True | bool | 是否包含两个单词的搭配性,默认包含。若使用generate_from_frequencies生成方式,则忽略此参数 |
| colormap=None | string or matplotlib colormap | 给每个单词随机分配颜色或者使用Matplotlib调色板,默认颜色是”viridis”即翠绿色。若使用了参数color_func,则忽略此项 |
| normalize_plurals=True | bool | 是否去掉单词末尾的‘s’,默认去掉。若为真,并且单词以‘s’结尾(若以‘ss’结尾则不符合此规则),‘s’会被去除并且去除后的单词出现的频率会被统计。若使用generate_from_frequencies生成方式,则忽略此参数 |
| contour_width=0 | float | mask轮廓线宽。若mask不为空且此项值大于0,就绘制出mask轮廓 (default=0) |
| contour_color='black' | color value | Mask轮廓颜色,默认黑色 |
| repeat=False | bool | 单词是否重复展示,默认不重复 |
from openpyxl import *from wordcloud import WordCloudimport matplotlib.pyplot as pltimport imageio# 表格数据集list集list = []# 读取存在的表格wb = load_workbook('/表格的路径.xlsx')# 指定Sheet页面sheet = wb['Sheet']prj = sheet.columnsprjTuple = tuple(prj)# 过滤第I列# 0,4是遍历A、B、C、D列 #(0,len(prjTuple)) 遍历全部列for idx in range(8, 9):for cell in prjTuple[idx]:# print(cell.coordinate, cell.value)list.append(cell.value)# 把结果放到字典里面去{键值对类型}results = {}for s in list:# results[s]获取key值,results.get(s, 0)+ 1 指定键的值不存在时,返回0,如果存在就会在原key值的基础上+1results[s] = results.get(s, 0) + 1# 读取背景图片并用变量接收(文字只会展示在非白色背景上)color_mask = imageio.v2.imread("/指定模版图片路径.jpg")cloud = WordCloud(# 设置字体,不指定就会出现乱码font_path="Library/Fonts/Songti.ttc",# 设置背景色background_color='white',# 词云形状,使用读取的图片# mask=color_mask,# 允许最大词汇max_words=2000,# 最大号字体max_font_size=200,# 最小号字体# min_font_size=50# 设置图片宽度width=375,# 设置图片高度height=300)# 产生词云word_cloud = cloud.generate_from_frequencies(results)# 保存词云图片,并指定保存路径word_cloud.to_file("/指定保存图片路径.jpg")
文章转载自一生之记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




