原神艾尔海森弹幕感情和高频词分析
在上一节中,得到一个艾尔海森PV的弹幕csv文件:bilibili_elheisen_danmu.csv,接下来我们进行弹幕的感情分析并提取高频词汇,用到的python 模块表示为
# 数据处理库
import pandas as pd
import jieba
# 数据可视化库
import matplotlib.pyplot as plt
import seaborn as sns
# 文本挖掘库
from snownlp import SnowNLP
首先我们对数据进行导入和预处理(去重空白值和重复值)
filename = 'bilibili_elheisen_danmu.csv'
danmu_data = pd.read_csv(filename, names=['弹幕内容'])
data = pd.DataFrame(danmu_data)
data = data.dropna() # 删除空白数据所在的行
data = data.drop_duplicates() # 对数据进行去重操作
删除缺失行。
弹幕感情分析
我们用SnowNLP对这些弹幕进行感情分析
# 对弹幕内容中的每个值进行情感训练
senti_score = data['弹幕内容'].apply(lambda x: SnowNLP(x).sentiments)
data['感情分数'] = senti_score
# 对艾尔海森的感情倾向
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(12, 6))
rate = data['感情分数']
ax = sns.distplot(rate,
hist=True,
kde=True, # 开启核密度曲线kernel density estimate (KDE)
kde_kws={'linestyle': '--', 'linewidth': '1', 'color': '#c72e29',
},
color='#098154',
axlabel='艾尔海森弹幕整体感情倾向' # 设置x轴标题
)
# ax.set_title('艾尔海森弹幕整体感情倾向')
plt.show()
得到的结果可以表示为
高频词分析
words = jieba.lcut(data) # 使用jieba库对文本进行分词
counts = {} # 创建一个字典,用于对词出现次数的统计,键表示词,值表示对应的次数
for word in words:
if len(word) <= 1:
continue
else:
counts[word] = counts.get(word, 0) + 1 # 在字典中查询若该字返回次数加一
# print(counts)
word_dict = sorted(counts.items(), key=lambda d: d[1], reverse=True)
# 绘制高频词汇的柱状图
dict_len = 10
for i_len in range(dict_len):
plt.bar(word_dict[i_len][0], word_dict[i_len][1])
plt.title("艾尔海森的前10个高频弹幕词")
plt.xlabel("弹幕内容")
plt.ylabel("出现次数")
plt.show()
我们对前10个高频词进行了展示,得到如下结果: