计算机毕设大数据B站数据分析与可视化--巨蟒数据分析大数据
作者:小教学发布时间:2023-12-07分类:程序开发学习浏览:84
文章目录
- 0个前言
- 1个课题背景
- 2个实现效果
- 3个数据获取
- 4个数据可视化
- 5个最后
0个前言
🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求.
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩大数据B站数据分析与可视化
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3个分
- 工作量:3个分
- 创新点:4个分
1个课题背景
目前视频行业可以分为爱优腾为代表的长视频赛道,快手抖音为代表的短视频赛道,以及B站,B站的视频内容十分的丰富,因为独特的社区属性和基于up主们的原创内容,打造了一个通过内容交流给用户带来愉悦感的社区型平台.
本项目基于蟒蛇+烧瓶+果胶实现了对哔哩哔哩排行榜大数据的可视化分析。
2个实现效果
3个数据获取
本次数据来源于哔哩哔哩排行榜,服务器后台中每5分钟对排行榜数据爬取,通过jQuery AJAX+烧瓶实时更新到网页上。
蟒蛇爬虫简介
网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.爬虫对某一站点访问,如果可以访问就下载其中的网页内容,并且通过爬虫解析模块解析得到的网页链接,把这些链接作为之后的抓取目标,并且在整个过程中完全不依赖用户,自动运行.若不能访问则根据爬虫预先设定的策略进行下一个url的访问。在整个过程中爬虫会自动进行异步处理数据请求,返回网页的抓取数据.在整个的爬虫运行之前,用户都可以自定义的添加代理,伪装请求头以便更好地获取网页数据.爬虫流程图如下:
爬虫相关代码
import requests
from bs4 import BeautifulSoup
import xlwt
import time
import urllib3
import requests
import json
# 爬取B站热榜排行
# 格式解析,[0-当前排名,1-视频标题,2-播放数目,3-弹幕数量,4-综合得分,5-作者,6-视频地址,7-时长,8-评论数,9-收藏数,10-投币数,11-分享数,12-点赞数]
# 格式化
def whitespace(st):
st = st.replace('\n', '')
st = st.strip()
st = st.replace(' ', '')
return st
# 详情页
def info_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)
if statue_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'] # 点赞
return duration,reply,favorite,coin,share,like
while(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 = 0
lst=[]
for i in all_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 += 1
lst.append(record)
# 爬取的数据存入文件,避免多次爬取且提高响应速度
with open('./bilibili.txt', 'w',encoding='utf-8') as f:
for line in lst:
for i in line:
f.write(str(i)+',')
f.write('\n')
time.sleep(300)
#print(lst[0])
4个数据可视化
可视化呈现方案
综合得分计算指标:哔哩哔哩综合得分,是视频是否能排上排行榜的依据,若能知道其规则,对于视频内容的倾向,Up主是否需要请求“一键三连”,观众们需不需要吝啬手中的币,是有很大的价值的,所以在此首先进行综合得分计算指标的分析及其可视化,此处采取灰色关联度分析(灰色关联分析,GRA)来进行数据的处理。
首先是要确定子母序列,母是结果,子是影响因子,那么,毫无疑问,综合得分就是母,其他均为影响因子.将其分别存入MOM_以及SON_中,代码如下:
with open('./bilibili.txt', 'r+',encoding='utf-8') as f1:
lst2=[]
for line in f1.readlines():
lst2.append(line.split(','))
mom_ = [int(i[4]) for i in lst2[0:50:]]
view = []
reply = []
favorite = []
coin = []
share = []
like = []
for i in lst2[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()
for i in range(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主们更应该求的是赞、币亦或是其他.
相关代码
# 灰色关联度分析版本
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Graph
with open('./bilibili.txt', 'r+',encoding='utf-8') as f1:
lst2=[]
for line in f1.readlines():
lst2.append(line.split(','))
mom_ = [int(i[4]) for i in lst2[0:50:]]
view = []
reply = []
favorite = []
coin = []
share = []
like = []
for i in lst2[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()
for i in range(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 = []
for i in nodes:
for j in nodes:
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()
5个最后
- 上一篇:Css响应式布局(自适应布局)
- 下一篇:KONVA基本处理流程和相关架构设计
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)
- 8[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 9鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版