news 2026/2/6 15:15:42

毕设开源 大数据B站数据分析与可视化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
毕设开源 大数据B站数据分析与可视化

文章目录

  • 0 前言
  • 1 课题背景
  • 2 实现效果
  • 3 数据获取
  • 4 数据可视化

0 前言

🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。并且很难找到完整的毕设参考学习资料。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目提供大家参考学习,今天要分享的是

🚩大数据B站数据分析与可视化

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿选题指导, 项目分享:见文末

1 课题背景

目前视频行业可以分为爱优腾为代表的长视频赛道,快手抖音为代表的短视频赛道,以及B站,B站的视频内容十分的丰富,因为独特的社区属性和基于UP主们的原创内容,打造了一个通过内容交流给用户带来愉悦感的社区型平台。

本项目基于Python+flask+pyecharts实现了对哔哩哔哩排行榜大数据的可视化分析。

2 实现效果

3 数据获取

本次数据来源于哔哩哔哩排行榜,服务器后台中每5min对排行榜数据爬取,通过jQuery Ajax+flask实时更新到网页上。

python爬虫简介

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。爬虫对某一站点访问,如果可以访问就下载其中的网页内容,并且通过爬虫解析模块解析得到的网页链接,把这些链接作为之后的抓取目标,并且在整个过程中完全不依赖用户,自动运行。若不能访问则根据爬虫预先设定的策略进行下一个 URL的访问。在整个过程中爬虫会自动进行异步处理数据请求,返回网页的抓取数据。在整个的爬虫运行之前,用户都可以自定义的添加代理,伪 装 请求头以便更好地获取网页数据。爬虫流程图如下:

爬虫相关代码

importrequestsfrombs4importBeautifulSoupimportxlwtimporttimeimporturllib3importrequestsimportjson# 爬取B站热榜排行# 格式解析,[0-当前排名,1-视频标题,2-播放数目,3-弹幕数量,4-综合得分,5-作者,6-视频地址,7-时长,8-评论数,9-收藏数,10-投币数,11-分享数,12-点赞数]# 格式化defwhitespace(st):st=st.replace('\n','')st=st.strip()st=st.replace(' ','')returnst# 详情页definfo_Page(bv):url='http://api.bilibili.com/x/web-interface/view?bvid='+bv headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"}# 请求头,模拟浏览器的运行urllib3.disable_warnings()# 从urllib3中消除警告response=requests.get(url,headers=headers)content=json.loads(response.text)# 很迷,获取到的是str字符串 需要解析成json数据statue_code=content.get('code')# print(statue_code)ifstatue_code==0:duration=content['data']['duration']# 时长reply=content['data']['stat']['reply']# 评论favorite=content['data']['stat']['favorite']# 收藏coin=content['data']['stat']['coin']# 投币share=content['data']['stat']['share']# 分享like=content['data']['stat']['like']# 点赞returnduration,reply,favorite,coin,share,likewhile(True):url='https://www.bilibili.com/v/popular/rank/all'headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'}rank=requests.get(url,headers=headers)# 请求页面soup=BeautifulSoup(rank.text,'lxml')all_rank=soup.find_all('li',class_='rank-item')num=0lst=[]foriinall_rank:record=[]rank_num=i.find('div',class_='num').text# 获取排名info=i.find('div',class_='info')# 筛选出视频详细信息的标签href=info.find('a',class_='title').attrs['href']# 获取链接title=info.find('a',class_='title').text# 获取标题play_num=info.find('i',class_='b-icon play').parent.text# 获取播放量view_num=info.find('i',class_='b-icon view').parent.text# 获取弹幕数author=info.find('i',class_='b-icon author').parent.text# 获取作者名scores=info.find('div',class_='pts').find('div').text# 获取综合得分# 播放,弹幕,作者play_num=whitespace(play_num)view_num=whitespace(view_num)author=whitespace(author)bv=href.split('/')[-1]duration,reply,favorite,coin,share,like=info_Page(bv)record.append(rank_num)record.append(title)record.append(play_num)record.append(view_num)record.append(scores)record.append(author)record.append(href)record.append(duration)record.append(reply)record.append(favorite)record.append(coin)record.append(share)record.append(like)num+=1lst.append(record)# 爬取的数据存入文件,避免多次爬取且提高响应速度withopen('./bilibili.txt','w',encoding='utf-8')asf:forlineinlst:foriinline:f.write(str(i)+',')f.write('\n')time.sleep(300)#print(lst[0])

4 数据可视化

可视化呈现方案

综合得分计算指标:哔哩哔哩综合得分,是视频是否能排上排行榜的依据,若能知道其规则,对于视频内容的倾向,up主是否需要请求“一键三连”,观众们需不需要吝啬手中的币,是有很大的价值的,所以在此首先进行综合得分计算指标的分析及其可视化,此处采取灰色关联度分析(Grey Relation Analysis,GRA)来进行数据的处理。

首先是要确定子母序列,母是结果,子是影响因子,那么,毫无疑问,综合得分就是母,其他均为影响因子。将其分别存入mom_以及son_中,代码如下:

withopen('./bilibili.txt','r+',encoding='utf-8')asf1:lst2=[]forlineinf1.readlines():lst2.append(line.split(','))mom_=[int(i[4])foriinlst2[0:50:]]view=[]reply=[]favorite=[]coin=[]share=[]like=[]foriinlst2[0:50]:view.append(float(i[2].strip("万"))*10000)reply.append(int(i[8]))favorite.append(int(i[9]))coin.append(int(i[10]))share.append(int(i[11]))like.append(int(i[12]))son_=[view,reply,favorite,coin,share,like]

然后要对数据进行预处理,因为我们的这些要素是不同质的东西的指标,因此可能会有的数字很大有的数字很小,但是这并不是由于它们内禀的性质决定的,而只是由于量纲不同导致的,因此我们需要对它们进行无量纲化。这个操作一般在数据处理领域叫做归一化(normalization),也就是减少数据的绝对数值的差异,将它们统一到近似的范围内,然后重点关注其变化和趋势。按公式归一化即可。

mom_=np.array(mom_)son_=np.array(son_)son_=son_.T/son_.mean(axis=1)mom_=mom_/mom_.mean()foriinrange(son_.shape[1]):son_[:,i]=abs(son_[:,i]-mom_.T)Mmin=son_.min()Mmax=son_.max()cors=(Mmin+0.5*Mmax)/(son_+0.5*Mmax)Mmean=cors.mean(axis=0)

最终结果:B站综合得分与播放、评论、收藏、投币、分享、点赞几个因素都具有很强的相关性。

灰色关联度介绍

GRA是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,本项目中,就是说:我们假设B站综合得分可能是与播放、评论、收藏、投币、分享、点赞几个因素相关的,那么我们想知道综合得分与这几个因素中的哪个相对来说更有关系,而哪个因素相对关系弱一点,把这些因素排个序,得到一个分析结果,我们就可以知道哔哩哔哩综合得分,与因素中的哪些更相关,因而也就可以看出观众的一键三连的作用以及up主们更应该求的是赞、币亦或是其他。

相关代码

# 灰色关联度分析版本importnumpyasnpfrompyechartsimportoptionsasoptsfrompyecharts.chartsimportGraphwithopen('./bilibili.txt','r+',encoding='utf-8')asf1:lst2=[]forlineinf1.readlines():lst2.append(line.split(','))mom_=[int(i[4])foriinlst2[0:50:]]view=[]reply=[]favorite=[]coin=[]share=[]like=[]foriinlst2[0:50]:view.append(float(i[2].strip("万"))*10000)reply.append(int(i[8]))favorite.append(int(i[9]))coin.append(int(i[10]))share.append(int(i[11]))like.append(int(i[12]))son_=[view,reply,favorite,coin,share,like]mom_=np.array(mom_)son_=np.array(son_)son_=son_.T/son_.mean(axis=1)mom_=mom_/mom_.mean()foriinrange(son_.shape[1]):son_[:,i]=abs(son_[:,i]-mom_.T)Mmin=son_.min()Mmax=son_.max()cors=(Mmin+0.5*Mmax)/(son_+0.5*Mmax)Mmean=cors.mean(axis=0)# 为便于观察 扩大40倍nodes=[{"name":"播放","symbolSize":Mmean[0]*40},{"name":"评论","symbolSize":Mmean[1]*40},{"name":"收藏","symbolSize":Mmean[2]*40},{"name":"投币","symbolSize":Mmean[3]*40},{"name":"分享","symbolSize":Mmean[4]*40},{"name":"点赞","symbolSize":Mmean[5]*40},]links=[]foriinnodes:forjinnodes:links.append({"source":i.get("name"),"target":j.get("name")})c=(Graph().add("",nodes,links,repulsion=8000).set_global_opts(title_opts=opts.TitleOpts(title="综合得分计算指标")))c.render_notebook()

🧿 项目分享:大家可自取用于参考学习,获取方式见文末!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 7:40:38

基于单片机的饮食健康秤设计

一、设计背景与核心需求 现代生活中,饮食热量与营养摄入的精准管理对健康管理至关重要,传统厨房秤仅能测量重量,无法关联食物营养信息,难以满足健康饮食需求。基于单片机的饮食健康秤,融合称重功能与营养数据查询&…

作者头像 李华
网站建设 2026/2/5 1:35:31

AutoGPT能否自动生成思维导图?知识结构可视化

AutoGPT能否自动生成思维导图?知识结构可视化 在信息爆炸的时代,我们每天都在与海量文本打交道:学术论文、技术文档、会议纪要、学习资料……但真正能沉淀为“知识”的,往往是那些被梳理清楚、形成脉络的内容。而思维导图&#xf…

作者头像 李华
网站建设 2026/2/6 1:24:18

开源大模型新选择:Qwen3-8B中英文对话性能实测分析

开源大模型新选择:Qwen3-8B中英文对话性能实测分析 在如今AI技术加速落地的背景下,越来越多企业与开发者面临一个现实问题:如何在有限算力下,部署一个真正“能用、好用、敢用”的大语言模型?千亿参数模型虽然能力惊艳&…

作者头像 李华
网站建设 2026/2/4 10:21:31

LobeChat国际化支持现状:多语言环境下是否可用?

LobeChat国际化支持现状:多语言环境下是否可用? 在AI助手逐渐成为数字生活标配的今天,一个看似基础却常被忽视的问题浮出水面:当我们打开一款聊天工具,它真的“懂”我们吗?不只是理解输入的内容&#xff0c…

作者头像 李华
网站建设 2026/2/6 15:53:48

基于清华源加速的Qwen3-8B模型下载与ollama部署技巧

基于清华源加速的 Qwen3-8B 模型下载与 Ollama 部署实践 在大模型落地越来越频繁的今天,一个现实问题摆在许多开发者面前:如何在不依赖海外网络、有限算力和低运维成本的前提下,快速部署一款真正“能用”的中文大模型?尤其是在国内…

作者头像 李华
网站建设 2026/2/4 3:09:19

2025一篇通关:网络安全工程师从入门到精通的资源完全整合包

【2025网络安全趋势】从小白到专家:网安工程师入行指南(建议收藏) 文章详述2025年网络安全工程师入行路径,涵盖三大核心职责方向、需求薪资前景及权威认证报考指南。数据显示网安岗位需求年增37%,薪资上限高&#xff…

作者头像 李华