b站评论词频统计绘制词云图

2024-04-05 00:44

本文主要是介绍b站评论词频统计绘制词云图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、评论爬取

        在笔者之前的文章中,已经专门介绍了b站评论的爬取(传送门),这里只对b站评论的文本数据做展示。如下图所示:

二、分词、去停用词、词频统计

        Python中的Jieba分词作为应用广泛的分词工具之一,其融合了基于词典的分词方法和基于统计的分词方法的优点,在快速地分词的同时,解决了歧义、未登录词等问题。因而Jieba分词是一个很好的分词工具。Jieba分词工具支持中文简体、中文繁体分词,还支持自定义词库,它支持精确模式、全模式和搜索引擎模式三种分词模式,具体说明如下:

        精确模式:试图将语句最精确的切分,不存在冗余数据,适合进行文本分析。

        全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据。

        搜索引擎模式:在精确模式的基础上,对长词再次进行切分。

        停用词是指在信息检索中,为节省存储空间和提高检索效率,在处理自然语言数据之前或之后,过滤掉某些字或词,在Jieba库中可以自定义停用词。 代码如下:

# 读取停用词,创建停用词表
stwlist = [line.strip() for line in open('stop.txt', encoding='utf8').readlines()]# 文本分词
mytext_list = []
number_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
words = jieba.lcut(text, cut_all=False)
for seg in words:for i in number_list:seg = seg.replace(str(i), '')if not seg:continueif seg not in stwlist and seg != " " and len(seg) != 1:mytext_list.append(seg)
cloud_text = ",".join(mytext_list)def word_frequency(txt):# 统计并返回每个单词出现的次数word_list = txt.split(',')d = {}for word in word_list:if word in d:d[word] += 1else:d[word] = 1# 删除词频小于2的关键词for key, value in dict(d).items():if value < 2:del d[key]return dfrequency_result = word_frequency(cloud_text)
frequency_result = list(frequency_result.items())
# 对关键词进行排序
frequency_result.sort(key=lambda x: x[1], reverse=True)
# 输出词频统计表
df = pd.DataFrame(frequency_result, columns=['词', '词频'])
df.to_csv('词频统计.csv', encoding='utf-8-sig', index=False)

三、绘制词云图和高频词条形图

       词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。就是一大堆关键词形成一张图片,有的是矩形有的是一些特殊形状。而WordCloud的作用,就是制作这种图片。这个模块的使用也是非常方便的,我们需要准备一个文本、一张图片、然后填写一堆参数就好了。

        接下来,介绍下wordcloud的基本使用。wordcloud把词云当作一个对象,它可以将文本中词语出现的频率作为一个参数绘制词云,而词云的大小、颜色、形状等都是可以设定的。高频词条形图可以让我们对词频的数量级有直观地了解。代码如下:

# 读取背景图片
jpg = imread('Background.jpg')
# 绘制词云
wordcloud = WordCloud(mask=jpg,background_color="white",font_path='msyh.ttf',width=1600,height=1200,margin=20,max_words=50
).generate(cloud_text)
plt.figure(figsize=(15, 9))
plt.imshow(wordcloud)
# 去除坐标轴
plt.axis("off")
# plt.show()
plt.savefig("WordCloud.jpg")#绘制条形图
def bar_toolbox() -> Bar:c = (Bar().add_xaxis(x_data[:10]).add_yaxis("关键词", y_data[:10], stack="stack1").set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="高频词条形图"),toolbox_opts=opts.ToolboxOpts(),legend_opts=opts.LegendOpts(is_show=True),xaxis_opts=opts.AxisOpts(name='关键词',name_textstyle_opts=opts.TextStyleOpts(color='red',font_size=20), axislabel_opts=opts.LabelOpts(font_size=15,rotate=45)),yaxis_opts=opts.AxisOpts(name='数量',name_textstyle_opts=opts.TextStyleOpts(color='red',font_size=20),axislabel_opts=opts.LabelOpts(font_size=15,),name_location = "middle")).set_series_opts(label_opts=opts.LabelOpts(position='top',color='black',font_size=15)))return c
bar_toolbox().render('高频词条形图.html')

        词云图效果如下:

 

        条形图如下:

 

四、完整代码

import pandas as pd
import jieba
from imageio.v2 import imread
import matplotlib.pyplot as plt
from pyecharts import options as opts
from pyecharts.globals import SymbolType
from pyecharts.charts import Bar, Page
from wordcloud import WordCloudplt.rcParams['font.sans-serif'] = 'SimHei'df = pd.read_csv('BV1f1421U76k_评论.csv')
text = ''.join(df['内容'])# 读取停用词,创建停用词表
stwlist = [line.strip() for line in open('stop.txt', encoding='utf8').readlines()]# 文本分词
mytext_list = []
number_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
words = jieba.lcut(text, cut_all=False)
for seg in words:for i in number_list:seg = seg.replace(str(i), '')if not seg:continueif seg not in stwlist and seg != " " and len(seg) != 1:mytext_list.append(seg)
cloud_text = ",".join(mytext_list)def word_frequency(txt):# 统计并返回每个单词出现的次数word_list = txt.split(',')d = {}for word in word_list:if word in d:d[word] += 1else:d[word] = 1# 删除词频小于2的关键词for key, value in dict(d).items():if value < 2:del d[key]return dfrequency_result = word_frequency(cloud_text)
frequency_result = list(frequency_result.items())
# 对关键词进行排序
frequency_result.sort(key=lambda x: x[1], reverse=True)
# 输出词频统计表
df = pd.DataFrame(frequency_result, columns=['词', '词频'])
df.to_csv('词频统计.csv', encoding='utf-8-sig', index=False)# 准备数据
x_data = []
y_data = []
for item in frequency_result:x_data.append(item[0])y_data.append(item[1])# 读取背景图片
jpg = imread('Background.jpg')
# 绘制词云
wordcloud = WordCloud(mask=jpg,background_color="white",font_path='msyh.ttf',width=1600,height=1200,margin=20,max_words=50
).generate(cloud_text)
plt.figure(figsize=(15, 9))
plt.imshow(wordcloud)
# 去除坐标轴
plt.axis("off")
# plt.show()
plt.savefig("WordCloud.jpg")#绘制条形图
def bar_toolbox() -> Bar:c = (Bar().add_xaxis(x_data[:10]).add_yaxis("关键词", y_data[:10], stack="stack1").set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="高频词条形图"),toolbox_opts=opts.ToolboxOpts(),legend_opts=opts.LegendOpts(is_show=True),xaxis_opts=opts.AxisOpts(name='关键词',name_textstyle_opts=opts.TextStyleOpts(color='red',font_size=20), axislabel_opts=opts.LabelOpts(font_size=15,rotate=45)),yaxis_opts=opts.AxisOpts(name='数量',name_textstyle_opts=opts.TextStyleOpts(color='red',font_size=20),axislabel_opts=opts.LabelOpts(font_size=15,),name_location = "middle")).set_series_opts(label_opts=opts.LabelOpts(position='top',color='black',font_size=15)))return c
bar_toolbox().render('高频词条形图.html')

 

这篇关于b站评论词频统计绘制词云图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877243

相关文章

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math