目录
前言:
官方示例:
实践示例:
背景说明:基于电影用户评论的数据,通过其中关键词出现的频率做出词云图,从而让阅览者一目了然的看出该电影的正反面评价,甚至电影的分类标签。
数据预处理
1、首先将我们所需要的数据爬取出成Excel文件,并用pandas库读取出来。
2、评论分词——结巴分词
3、分词词性标注
4.统计且筛选出做需要的词性
最后,通过pyecharts画出词云图
1、首先导入我们所需的画图库
2.绘制词云图
简单说明一下
代码参数:
相关网站:
总结:
词云图是数据可视化的一种形式,即对文本数据中高频出现的关键词以视觉上的突出的形式形成"关键词的渲染",过滤大数文本信息,使阅览者一眼就能领略文本数据的主要表达意思,达到“一眼万年”的效果。
这里选用pyecharts官方社区的示例代码
链接——Wordcloud - Basic_wordcloud - Document (pyecharts.org)
import pyecharts.options as opts
from pyecharts.charts import WordCloud
data = [
("生活资源", "999"),
("供热管理", "888"),
("供气质量", "777"),
("生活用水管理", "688"),
("一次供水问题", "588"),
("交通运输", "516"),
("城市交通", "515"),
("环境保护", "483"),
("房地产管理", "462"),
("城乡建设", "449"),
("社会保障与福利", "429"),
("社会保障", "407"),
("文体与教育管理", "406"),
("公共安全", "406"),
("公交运输管理", "386"),
("出租车运营管理", "385"),
("供热管理", "375"),
("市容环卫", "355"),
("自然资源管理", "355"),
("粉尘污染", "335"),
("噪声污染", "324"),
("土地资源管理", "304"),
("物业服务与管理", "304"),
("医疗卫生", "284"),
("粉煤灰污染", "284"),
("占道", "284"),
("供热发展", "254"),
("农村土地规划管理", "254"),
("生活噪音", "253"),
("供热单位影响", "253"),
("城市供电", "223"),
("房屋质量与安全", "223"),
("大气污染", "223"),
("房屋安全", "223"),
("文化活动", "223"),
("拆迁管理", "223"),
("公共设施", "223"),
("供气质量", "223"),
("供电管理", "223"),
("燃气管理", "152"),
("教育管理", "152"),
("医疗纠纷", "152"),
("执法监督", "152"),
("设备安全", "152"),
("政务建设", "152"),
("县区、开发区", "152"),
("宏观经济", "152"),
("教育管理", "112"),
("社会保障", "112"),
("生活用水管理", "112"),
("物业服务与管理", "112"),
("分类列表", "112"),
("农业生产", "112"),
("二次供水问题", "112"),
("城市公共设施", "92"),
("拆迁政策咨询", "92"),
("物业服务", "92"),
("物业管理", "92"),
("社会保障保险管理", "92"),
("低保管理", "92"),
("文娱市场管理", "72"),
("城市交通秩序管理", "72"),
("执法争议", "72"),
("商业烟尘污染", "72"),
("占道堆放", "71"),
("地上设施", "71"),
("水质", "71"),
("无水", "71"),
("供热单位影响", "71"),
("人行道管理", "71"),
("主网原因", "71"),
("集中供热", "71"),
("客运管理", "71"),
("国有公交(大巴)管理", "71"),
("工业粉尘污染", "71"),
("治安案件", "71"),
("压力容器安全", "71"),
("身份证管理", "71"),
("群众健身", "41"),
("工业排放污染", "41"),
("破坏森林资源", "41"),
("市场收费", "41"),
("生产资金", "41"),
("生产噪声", "41"),
("农村低保", "41"),
("劳动争议", "41"),
("劳动合同争议", "41"),
("劳动报酬与福利", "41"),
("医疗事故", "21"),
("停供", "21"),
("基础教育", "21"),
("职业教育", "21"),
("物业资质管理", "21"),
("拆迁补偿", "21"),
("设施维护", "21"),
("市场外溢", "11"),
("占道经营", "11"),
("树木管理", "11"),
("农村基础设施", "11"),
("无水", "11"),
("供气质量", "11"),
("停气", "11"),
("市政府工作部门(含部门管理机构、直属单位)", "11"),
("燃气管理", "11"),
("市容环卫", "11"),
("新闻传媒", "11"),
("人才招聘", "11"),
("市场环境", "11"),
("行政事业收费", "11"),
("食品安全与卫生", "11"),
("城市交通", "11"),
("房地产开发", "11"),
("房屋配套问题", "11"),
("物业服务", "11"),
("物业管理", "11"),
("占道", "11"),
("园林绿化", "11"),
("户籍管理及身份证", "11"),
("公交运输管理", "11"),
("公路(水路)交通", "11"),
("房屋与图纸不符", "11"),
("有线电视", "11"),
("社会治安", "11"),
("林业资源", "11"),
("其他行政事业收费", "11"),
("经营性收费", "11"),
("食品安全与卫生", "11"),
("体育活动", "11"),
("有线电视安装及调试维护", "11"),
("低保管理", "11"),
("劳动争议", "11"),
("社会福利及事务", "11"),
("一次供水问题", "11"),
]
(
WordCloud()
.add(series_name="热点分析", data_pair=data, word_size_range=[6, 66])
.set_global_opts(
title_opts=opts.TitleOpts(
title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
),
tooltip_opts=opts.TooltipOpts(is_show=True),
)
.render("basic_wordcloud.html")
)
运行结果:
出现次数越多的词汇/词语,所呈现在图中的字体越大。后续也可通过自行修改参数,改变词汇字体、图片背景等等。
这里选用豆瓣第一高分电影、280万人评论、1994年的《肖申克的救赎 The Shawshank Redemption》的豆瓣短评作为数据集,来制作词云,看看评论区对该电影的“关键词”。
(不会爬的同学可以用八爪鱼,有详细教程)
import pandas as pd
data = pd.read_excel(r'肖申克的救赎 短评.xlsx')
这里我们选取200条评论。
jieba分词,号称要做最好的 Python 中文分词组件。jieba的主要功能是做中文分词,可以进行简单分词、并行分词、命令行分词等等等等。
总之jieba在开源社区的受欢迎程度非常之高,是非常多人使用的分词组件。
镜像下载- pip install jieba -i https://pypi.douban.com/simple/
我们引用jieba库进行分词:
# 分词
import jieba
data['分词'] = data['评论'].agg(lambda x:jieba.lcut(x))
snowNLP是国人开发的python类库,可以方便的处理中文文本内容,snownlp主要可以进行中文分词(算法是Character-Based Generative Model)、词性标注、情感分析、文本分类(原理是朴素贝叶斯)、转换拼音、繁体转简体、提取文本关键词(原理TextRank)、提取摘要(原理TextRank)、分割句子、文本相似(原理BM25)。
先安装snownlp
pip install snownlp
词性标注:
# 词性标注
from snownlp import SnowNLP
data['词性标注'] = data['评论'].agg(lambda x:list(SnowNLP(x).tags))
整理:
# 把词性一列中所有列表的数据对拼接到一个列表中,方便后续分析
list_tags = []
for i in data['词性标注']:
for j in i:
list_tags.append(j)
# 转换成表格对象
data_tags = pd.DataFrame(list_tags,columns=['词语','词性'])
# 统计每一个词性出现的次数
# data_tags['词性'].value_counts()
# 统计形容词的出现频次
result = data_tags[data_tags['词性']=='a'].groupby(by='词语')['词语'].count().sort_values(ascending=False)#[:20]
# 将形容词一列和出现频次一列转换成二维列表
# 注意:频次的数字需要转换成字符
data_wordcloud_tags = [(i,str(j)) for i,j in zip(result.index,result.values)]
我们选用形容词来做我们的词云,在将形容词一列喝出现频次一列转换为二维的列表。
import pyecharts.options as opts
from pyecharts.charts import WordCloud
pyecharts是将Python与Echarts相结合的数据可视化工具,其强大毋容置疑,不多解释。
安装:
pip install pyecharts
而后,wordcloud库可以说是python非常优秀的词云展示第三方库。词云以词语为基本单位更加直观和艺术的展示文本。词云图必备!!
c = (
WordCloud()
.add(series_name="",
data_pair=data_wordcloud_tags,
word_size_range=[15, 90],
mask_image='4444.jpeg'
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="削肾客的感言", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
),
tooltip_opts=opts.TooltipOpts(is_show=True),
)
)
c.render_notebook()
出图如下:
这处我是自定义的背景,也就是mask_image=""参数,如不设置则默认长方形。注意:背景图最好是白底!(其他底会怎么样没试过)
以下是wordcloud词云图的其他参数:
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据项,[(word1, count1), (word2, count2)]
data_pair: Sequence,
# 词云图轮廓,有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可选
shape: str = "circle",
# 自定义的图片(目前支持 jpg, jpeg, png, ico 的格式,其他的图片格式待测试)
# 该参数支持:
# 1、 base64 (需要补充 data 头);
# 2、本地文件路径(相对或者绝对路径都可以)
# 注:如果使用了 mask_image 之后第一次渲染会出现空白的情况,再刷新一次就可以了(Echarts 的问题)
# Echarts Issue: https://github.com/ecomfe/echarts-wordcloud/issues/74
mask_image: types.Optional[str] = None,
# 单词间隔
word_gap: Numeric = 20,
# 单词字体大小范围
word_size_range=None,
# 旋转单词角度
rotate_step: Numeric = 45,
# 距离左侧的距离
pos_left: types.Optional[str] = None,
# 距离顶部的距离
pos_top: types.Optional[str] = None,
# 距离右侧的距离
pos_right: types.Optional[str] = None,
# 距离底部的距离
pos_bottom: types.Optional[str] = None,
# 词云图的宽度
width: types.Optional[str] = None,
# 词云图的高度
height: types.Optional[str] = None,
# 允许词云图的数据展示在画布范围之外
is_draw_out_of_bound: bool = False,
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 词云图文字的配置
textstyle_opts: types.TextStyle = None,
# 词云图文字阴影的范围
emphasis_shadow_blur: types.Optional[types.Numeric] = None,
# 词云图文字阴影的颜色
emphasis_shadow_color: types.Optional[str] = None,
1、官网文档
包含pyecharts中各个功能和图形的介绍和代码参数解析。
pyecharts - A Python Echarts Plotting Library built with love.Descriptionhttps://pyecharts.org/#/zh-cn/intro
2、社区
包含各种图形demo的项目案例代码和演示。
https://gallery.pyecharts.org/#/READMEhttps://gallery.pyecharts.org/#/README
3、背景图素材
易词云
http://yciyun.comhttp://yciyun.com
此次学习词云图,在通过第三方库,使得过程十分方便简洁,希望对你有所帮助,不足的地方也请不要提出,学无止境,谢谢!!