原神角色弹幕可视化
根据原神2023年五星男性角色PV弹幕感情和高频词分析——艾尔海森以及原神2023年五星男性角色PV弹幕分析——艾尔海森,我们可以生成包含弹幕内容和感情得分的xls文件
同样,通过爬虫和数据清洗我们可以得到原神男性角色白术的角色PV发布当天的xls文件
数据处理
我们利用pandas对两个xls文件进行拼接并转化成csv文件,方便后续我们利用dataGrip对数据进行对比
import pandas as pd
# 白术的数据
atr_data = pd.read_excel('白术的文件.xls', sheet_name='Sheet1')
atr_data = pd.DataFrame(atr_data)
rows_num_I = atr_data.shape[0]
atr_data['角色名称'] = ['白术']*rows_num_I
atr_data = atr_data[['弹幕内容', '感情分数', '角色名称']]
atr_data.to_csv('bilibili_Atractylodes.csv', index=False)
# 艾尔海森的数据
elh_data = pd.read_excel('艾尔海森的文件.xls', sheet_name='Sheet1')
elh_data = pd.DataFrame(elh_data)
rows_num_II = elh_data.shape[0]
elh_data['角色名称'] = ['艾尔海森']*rows_num_II
elh_data = elh_data[['弹幕内容', '感情分数', '角色名称']]
elh_data.to_csv('bilibili_elheisen.csv', index=False)
# 对数据进行拼接
sum_data = pd.concat([elh_data,atr_data], ignore_index=True)
sum_data.to_csv('bilibili_danmu.csv', index=False)
我们可以得到csv文件,包含了艾尔海森和白术角色pv发布当天的弹幕内容和感情得分
数据可视化和对比
将数据导入datagrip文件中,并通过一系列SQL语句可视化数据。导入的数据可以表示为:
通过SQL命令查看角色PV发布当天的弹幕总数量
select
sum(case when 角色名称='艾尔海森' then 1 else 0 end) '艾尔海森弹幕数量',
sum(case when 角色名称='白术' then 1 else 0 end) '白术弹幕数量'
from ddm.danmu
得到的结果为
此外,我们可以观看不同角色的弹幕感情分布,以艾尔海森为例
select
sum(if(感情分数 > 0.5, 1, 0)) '感情分数高于0.5',
sum(if(感情分数 = 0.5, 1, 0)) '感情分数等于0.5',
sum(if(感情分数 < 0.5, 1, 0)) '感情分数小于0.5'
from ddm.danmu
where 角色名称='艾尔海森'
并得到相关的感情占比,代码和结果如下
select
sum(if(感情分数 > 0.5, 1, 0))/count(角色名称) '感情分数高于0.5(%)',
sum(if(感情分数 = 0.5, 1, 0))/count(角色名称) '感情分数等于0.5(%)',
sum(if(感情分数 < 0.5, 1, 0))/count(角色名称) '感情分数小于0.5(%)'
from ddm.danmu
where 角色名称='艾尔海森'
同理,我们可以得到白术的弹幕感情分布和占比
通过取平均值,我们可以得到两个男性角色的平均得分情况
select
角色名称,
round(avg(感情分数), 4) 平均感情得分
from ddm.danmu
group by 角色名称
数据分析
通过对比以上数据,我们发现艾尔海森的角色热度比白术的角色热度高,但是艾尔海森的角色争议略高于白术。并且,我们发现只使用SnowNLP对弹幕进行感情分析与真正的感情得分有一定的出入。 比如在艾尔海森的弹幕感情分析中,根据流行词和原神玩家的口头禅,这两句的弹幕感情得分应该较高,然而得分却比较低
在白术的弹幕感情分析中,也存在同样的问题。并且“玩到关服”在原神中一般和“不歪”进行连用。单个词汇进行分析会导致感情得分存在偏差。