Python分析《哈哈哈哈哈》第11期弹幕数据
本文针对《哈哈哈哈哈》第11期弹幕数据进行分析,提取弹幕中对五哈成员的提及次数。话不多说,上代码。
一、解析URL提取弹幕
# -*- coding = utf-8 -*-
# @Time : 2021/1/25 20:49
# @Author : 陈良兴
# @File : 11期.py
# @Software : PyCharm
import requests
import json
import time
import pandas as pd
csv = pd.DataFrame()
for page in range(15, 3000, 30):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
#《哈哈哈哈哈》11期上
# url = 'https://mfm.video.qq.com/danmu?target_id=1227342321%26vid%3Dr0018hmh1pa×tamp={}'.format(page)
#《哈哈哈哈哈》11期下
url = 'https://mfm.video.qq.com/danmu?target_id=6408292474%26vid%3Dx0035tnxiev×tamp={}'.format(page)
print("正在提取第" + str(page) + "页")
html = requests.get(url,headers = headers)
bs = json.loads(html.text,strict = False) #strict参数解决部分内容json格式解析报错
time.sleep(5) #每读取一个URL延迟3秒,避免被识别而报错
#遍历获取目标字段
for i in bs['comments']:
name = i['opername'] #昵称
content = i['content'] #弹幕
upcount = i['upcount'] #点赞数
user_degree =i['uservip_degree'] #会员等级
timepoint = i['timepoint'] #发布时间
comment_id = i['commentid'] #弹幕id
cache = pd.DataFrame({
'用户名':[name],
'弹幕':[content],
'会员等级':[user_degree],
'发布时间':[timepoint],
'弹幕点赞':[upcount],
'弹幕id':[comment_id]
})
csv = pd.concat([csv,cache])
csv.to_csv(r'.\templates\haha-11下.csv',encoding = 'utf-8')
二、数据合并
由于《哈哈哈哈哈》每一期都分为上下集,因此,需分别提取上下集弹幕数据,再进行整合,最后进行数据清洗。
# -*- coding = utf-8 -*-
# @Time : 2021/1/26 20:22
# @Author : 陈良兴
# @File : 数据合并.py
# @Software : PyCharm
import pandas as pd
csv1 = pd.read_csv("templates/haha-11上.csv")
csv1["期数"] = "10期上"
csv2 = pd.read_csv("templates/haha-11下.csv")
csv2["期数"] = "10期下"
csv = pd.concat([csv1,csv2]) #将两个csv文件合并
csv.to_csv('haha第11期.csv',encoding = 'utf-8') #存储合并后的csv文件
csv.info() #查看数据信息
通过查看数据信息发现,出了用户名信息,其他数据量还是一致的。而本次只做弹幕内容分析,所以可以忽略数据清洗。
三、制作词云
制作词云所涉及的模块有jieba、matplotlib、wordcloud、PIL等。作用在代码中已注释,此处不再说明。
# -*- coding = utf-8 -*-
# @Time : 2021/1/25 12:12
# @Author : 陈良兴
# @File : 制作词云.py
# @Software : PyCharm
import jieba #分词
from matplotlib import pyplot as plt #绘图,数据可视化
from wordcloud import WordCloud #词云
from PIL import Image #图片处理
import numpy as np #矩阵运算
import csv
#准备词云所需的文字(次)
with open('templates/haha第11期.csv', 'r', encoding='UTF-8') as f: #读取csv
reader = csv.reader(f)
result = list(reader)
text = ""
for item in range(len(result)):
text = text + str(result[item][2])
item +=1
# print(text)
#jieba分词
cut = jieba.cut(text)
string = ' '.join(cut)
print(len(string))
img = Image.open(r'.\statics\123.png') #打开遮罩图片
img_array = np.array(img) #将图片转化为数组
wc = WordCloud(
background_color='white',
mask=img_array,
font_path="STXINGKA.TTF"
)
wc.generate_from_text(string)
#绘制图片
fig = plt.figure(1)
plt.imshow(wc)
plt.axis('off') #是否显示坐标轴
# plt.show() #显示生成的词云图片
#输出词云图片到文件
plt.savefig(r'.\statics\wordcloud.jpg') #设置分辨率dpi=500,不设置则采用默认dpi
生成词云的效果:
|
|
|
|
|
|
四、制作数据可视化图表
通过数据可视化,能够直观的对比五哈成员在弹幕中的提及次数,但并不能说明提及次数高的就是受欢迎的,还需对弹幕内容进行情感分析,学识有限,仅止于此。
本次使用的是Apache ECharts,一个基于JavaScript 的开源可视化图表库,可以根据自己的需要去选图。(Apache ECharts链接http://echarts.apache.org/zh/index.html)