计算机毕设 大数据B站数据分析与可视化 - python 数据分析 大数据

文章目录

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


0 前言

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

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

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

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

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

1 课题背景

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

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

2 实现效果

在这里插入图片描述

3 数据获取

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

python爬虫简介

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。爬虫对某一站点访问,如果可以访问就下载其中的网页内容,并且通过爬虫解析模块解析得到的网页链接,把这些链接作为之后的抓取目标,并且在整个过程中完全不依赖用户,自动运行。若不能访问则根据爬虫预先设定的策略进行下一个 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主是否需要请求“一键三连”,观众们需不需要吝啬手中的币,是有很大的价值的,所以在此首先进行综合得分计算指标的分析及其可视化,此处采取灰色关联度分析(Grey Relation Analysis,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]

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

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 最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/97364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云轻量应用服务器有月流量限制吗?

阿里云轻量应用服务器限制流量吗?部分限制,2核2G3M和2核4G4M这两款轻量应用服务器不限制月流量,其他的轻量服务器套餐有月流量限制。 腾讯云轻量应用服务器价格便宜,活动页面:aliyunbaike.com/go/tencent 细心的同学看…

第四课 递归、分治

文章目录 第四课 递归、分治lc78.子集--中等题目描述代码展示 lc77.组合--中等题目描述代码展示 lc46.全排列--中等题目描述代码展示 lc47.全排列II--中等题目描述代码展示 lc226.翻转二叉树--简单题目描述代码展示 lc98.验证二叉搜索树--中等题目描述代码展示 lc104.二叉树的最…

八大排序详解(默认升序)

一、直接插入排序 直接插入排序:直接插入排序就是像打扑克牌一样,每张牌依次与前面的牌比较,遇到比自己大的就将大的牌挪到后面,遇到比自己小的就把自己放在它后面(如果自己最小就放在第一位),所有牌排一遍后就完成了排…

GitHub工具之云资产管理

文章目录 0x01 介绍0x02 软件架构0x03 下载地址0x04 更新记录0x05 实现功能0x06 使用截图1、云存储工具-资产列表2、云存储工具-阿里云3、云存储工具-七牛云4、云存储工具-腾讯云5、云存储工具-亚马逊6、云存储工具-京东云7、云存储工具-金山云8、云存储工具-其他9、云存储工具…

【Kotlin精简】第1章 基础类型

1 Kotlin基础类型 Kotlin中,我们可以调用任何变量的成员函数和属性,从这个角度来说,一切皆对象。某些类型可以有特殊的内部表现。例如:数字、字符和布尔型在运行时可以表现为基础类型(primitivetypes)。 …

Stable diffusion的架构解读(本博客还是以unet架构为主)

博客只是简单的记录一下自己学的,基于自己的一些情况,所以简单了一些只是将来忘记,用来回顾用。 论文的大体框架 unet结构位于 unet会接受prompt特征、latent特征、和t时间步特征,最后生成新一轮的特征 可以参考知乎大佬htt…

Android之App跳转其他软件

文章目录 前言一、效果图二、实现步骤1.弹框xml(自己替换图标)2.弹框utils3.两个弹框动画4.封装方便调用5.调用6.长按事件方法7.跳转步骤8.复制utils 总结 前言 最近遇到一个需求,就是App内大面积需要长按复制并跳转指定App,没办法,只能埋头…

大语言模型之十六-基于LongLoRA的长文本上下文微调Llama-2

增加LLM上下文长度可以提升大语言模型在一些任务上的表现,这包括多轮长对话、长文本摘要、视觉-语言Transformer模型的高分辨4k模型的理解力以及代码生成、图像以及音频生成等。 对长上下文场景,在解码阶段,缓存先前token的Key和Value&#…

SpringCloud Alibaba - Sentinel 高级玩法,修改 Sentinel-dashboard 源码,实现 push 模式

目录 一、规则持久化 1.1、什么是规则持久化 1.1.1、使用背景 1.1.2、规则管理的三种模式 a)原始模式 b)pull 模式 c)push 模式 1.2、实现 push 模式 1.2.1、修改 order-service 服务,使其监听 Nacos 配置中心 1.2.2、修…

RocketMQ 5.0 新版版本新特性总结

1 架构变化 RocketMQ 5.0 架构上的变化主要是为了更好的走向云原生 RocketMQ 4.x 架构如下: Broker 向 Name Server 注册 Topic 路由信息,Producer 和 Consumer 则从 Name Server 获取路由信息,然后 Producer 根据路由信息向 Broker 发送消…

2023年中国石化行业节能减排发展措施分析:用精细化生产提高生产效率,降低能耗[图]

2022年,我国石油和化工行业克服诸多挑战取得了极其不易的经营业绩,行业生产基本稳定,营业收入和进出口总额增长较快,效益比上年略有下降但总额仍处高位。2022年,我国石油化工行业市场规模为191761.2亿元,同…

macbook电脑磁盘满了怎么删东西?

macbook是苹果公司的一款高性能笔记本电脑,受到很多用户的喜爱。但是,如果macbook的磁盘空间不足,可能会导致一些问题,比如无法开机、运行缓慢、应用崩溃等。那么,macbook磁盘满了无法开机怎么办,macbook磁…

Qt实现 图片处理器PictureEdit

目录 图片处理器PictureEdit1 创建工具栏2 打开图片3 显示图片4 灰度处理5 颜色反转6 马赛克 图片处理器PictureEdit 创建工程&#xff0c;添加资源文件 1 创建工具栏 widget.h中 #include <QWidget> #include<QPixmap> #include<QFileDialog> #include&l…

【赠书活动】如何让AI在企业多快好省的落地

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【LeetCode: 2034. 股票价格波动 | 有序表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

[极客大挑战 2019]BabySQL 1

#做题方法# 进去之后做了简单的注入发现有错误回显&#xff0c;就进行注入发现过滤了sql语 后面进行了双写and payload&#xff1a; ?usernameadmin%27%20aandnd%20updatexml(1,concat(0x7e,dAtabase(),0x7e,version()),1)%20--&passwordadmi 接下来又 ?usernameadm…

yolov5及yolov7实战之剪枝

之前有讲过一次yolov5的剪枝&#xff1a;yolov5实战之模型剪枝_yolov5模型剪枝-CSDN博客 当时基于的是比较老的yolov5版本&#xff0c;剪枝对整个训练代码的改动也比较多。最近发现一个比较好用的剪枝库&#xff0c;可以在不怎么改动原有训练代码的情况下&#xff0c;实现剪枝的…

李沐深度学习记录5:13.Dropout

Dropout从零开始实现 import torch from torch import nn from d2l import torch as d2l# 定义Dropout函数 def dropout_layer(X, dropout):assert 0 < dropout < 1# 在本情况中&#xff0c;所有元素都被丢弃if dropout 1:return torch.zeros_like(X)# 在本情况中&…

超自动化加速落地,助力运营效率和用户体验显著提升|爱分析报告

RPA、iPaaS、AI、低代码、BPM、流程挖掘等在帮助企业实现自动化的同时&#xff0c;也在构建一座座“自动化烟囱”。自动化工具尚未融为一体&#xff0c;协同价值没有得到释放。Gartner于2019年提出超自动化&#xff08;Hyperautomation&#xff09;概念&#xff0c;主要从技术组…

【动手学深度学习】课程笔记 04 数据操作和数据预处理

目录 数据操作 N维数组样例 访问元素 数据操作实现 入门 运算符 广播机制 节省内存 转换为其他Python对象 数据预处理实现 数据操作 N维数组是机器学习和神经网路的主要数据结构。 N维数组样例 访问元素 数据操作实现 下面介绍一下本课程中需要用到的PyTorch相关操…