计算机毕设 大数据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.rhkb.cn/news/146893.html

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

相关文章

有时候,使用 clang -g test.c 编译出可执行文件后,发现 gdb a.out 进行调试无法读取符号信息,为什么?

经过测试,gdb 并不是和所有版本的 llvm/clang 都兼容的 当 gdb 版本为 9.2 时,能支持 9.0.1-12 版本的 clang,但无法支持 16.0.6 版本的 clang 可以尝试使用 LLVM 专用的调试器 lldb 我尝试使用了 16.0.6 版本的 lldb 调试 16.0.6 的 clan…

kafka客户端应用参数详解

一、基本客户端收发消息 Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可&#xff1a; <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka_2.13</artifactId><version>3.4.0</version></depend…

Java后端模拟面试,题集①

1.Spring bean的生命周期 实例化 Instantiation属性赋值 Populate初始化 Initialization销毁 Destruction 2.Spring AOP的创建在bean的哪个时期进行的 &#xff08;图片转载自Spring Bean的完整生命周期&#xff08;带流程图&#xff0c;好记&#xff09;&#xff09; 3.MQ如…

2023年哪款PDF虚拟打印机好用?

PDF文档想必大家都不陌生&#xff0c;在工作中经常会用到该格式的文档&#xff0c;那么有哪些方法能制作PDF文档呢&#xff1f;一般都是借助PDF虚拟打印机的&#xff0c;那么有哪些好用的软件呢&#xff1f; pdfFactory不仅为用户提供了丰富的PDF文档生成、打印功能&#xff0…

【JavaEE】JavaScript

JavaScript 文章目录 JavaScript组成书写方式行内式内嵌式外部式&#xff08;推荐写法&#xff09; 输入输出变量创建动态类型基本数据类型数字类型特殊数字值 String转义字符求长度字符串拼接布尔类型undefined未定义数据类型null 运算符条件语句if语句三元表达式switch 循环语…

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石③

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石③ 第十九章 驱动程序基石③19.5 定时器19.5.1 内核函数19.5.2 定时器时间单位19.5.3 使用定时器处理按键抖动19.5.4 现场编程、上机19.5.5 深入研究&#xff1a;定时器的内部机制19.5.6 深入研究&#xff1a;找到系统滴答 1…

数学建模Matlab之检验与相关性分析

只要做C题基本上都会用到相关性分析、一般性检验等&#xff01; 回归模型性能检验 下面讲一下回归模型的性能评估指标&#xff0c;用来衡量模型预测的准确性。下面是每个指标的简单解释以及它们的应用情境&#xff1a; 1. MAPE (平均绝对百分比误差) 描述: 衡量模型预测的相对…

VRRP配置案例(路由走向分析,端口切换)

以下配置图为例 PC1的配置 acsw下行为access口&#xff0c;上行为trunk口&#xff0c; 将g0/0/3划分到vlan100中 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname acsw [acsw] Sep 11 2023 18:15:48-08:00 acsw DS/4/DATASYNC_CFGCHANGE:O…

【Spring Cloud】Ribbon 实现负载均衡的原理,策略以及饥饿加载

文章目录 前言一、什么是 Ribbon二、Ribbon 实现负载均衡的原理2.1 负载均衡的流程2.2 Ribbon 实现负载均衡的源码剖析 三、Ribbon 负载均衡策略3.1 负载均衡策略3.2 演示 Ribbon 负载均衡策略的更改 四、Ribbon 的饥饿加载4.1查看 Ribbon 的懒加载4.2 Ribbon 的饥饿加载模式 前…

Python无废话-办公自动化Excel修改数据

如何修改Excel 符合条件的数据&#xff1f;用Python 几行代码搞定。 需求&#xff1a;将销售明细表的产品名称为PG手机、HW手机、HW电脑的零售价格分别修改为4500、5500、7500&#xff0c;并保存Excel文件。如下图 Python 修改Excel 数据&#xff0c;常见步骤&#xff1a; 1&…

Ubuntu20 QT6.0 编译 ODBC 驱动

一、新建测试项目 新建一个控制台项目&#xff0c; // main.cpp #include <QCoreApplication> #include <QSqlDatabase> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 获取当前Qt支持的驱动列表QStringList driv…

1300*C. Coin Rows(枚举模拟)

解析&#xff1a; 两人都绝对聪明&#xff0c;Alice先走&#xff0c;尽量让Bob所能拿的分数最少&#xff0c;Alice有一次往下走的机会&#xff0c;剩余没走过的点正好分为两断断开的区域&#xff0c;所以Bob的最大分数要么在第一格向下或者在最后一列向下。 遍历区间&#xff0…

stm32之1602+DHT11+继电器

描述&#xff1a; 1、DHT11监测温室度&#xff0c;并显示到1602液晶上 2、通过串口打印&#xff08;或通过蓝牙模块在手机上查看&#xff09; 3、当温度大于24度时&#xff0c;开启继电器。小于时关闭继电器&#xff08;继电器可连接风扇---假想O(∩_∩)O哈哈~&#xff09; 一、…

软件测试基础学习

注意&#xff1a; 各位同学们&#xff0c;今年本人求职目前遇到的情况大体是这样了&#xff0c;开发太卷&#xff0c;学历高的话优势非常的大&#xff0c;公司会根据实际情况考虑是否值得培养&#xff08;哪怕技术差一点&#xff09;&#xff1b;学历稍微低一些但是技术熟练的…

画CMB天图使用Planck配色方案

使用Planck的配色方案&#xff1a; 全天图&#xff1a; 或者方形图&#xff1a; 使用下面设置即可&#xff1a; import pspy, pixell from pspy.so_config import DEFAULT_DATA_DIR pixell.colorize.mpl_setdefault("planck")此方法不会改变matplotlib默认配色方案…

zemax场曲/畸变图与网格畸变图

网格畸变是XY两个方向上的几何畸变&#xff0c;是不同视场实际像高与近轴像高的偏差。 垂轴放大率在整个视场范围内不能保持常数 当一个有畸变的光学系统对一个方形的网状物体成像时,若δy>0&#xff0c;则主光线的交点高度y比理想像高y低,视场越大&#xff0c;低得越多&a…

Xmake v2.8.3 发布,改进 Wasm 并支持 Xmake 源码调试

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量&#xff0c;没有任何依赖&#xff0c;因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建&#xff0c;相比 makefile/CMakeLists.txt&#xff0c;配置语法更加简洁直观&#xff0c;对新手非常友好&#x…

知识工程---neo4j 5.12.0+GDS2.4.6安装

&#xff08;已安装好neo4j community 5.12.0&#xff09; 一. GDS下载 jar包下载地址&#xff1a;https://neo4j.com/graph-data-science-software/ 下载得到一个zip压缩包&#xff0c;解压后得到jar包。 二. GDS安装及配置 将解压得到的jar包放入neo4j安装目录下的plugi…

CTP:关于cc和bindgen库及rust工程组织

有三个工程目录&#xff0c;cpt-api, ctp-sdk,ctp-strategy 1、ctp-sdk&#xff1a; 主要的目的是基于bindgen库生成与cpp的.h文件相对应一个binding.rs文件&#xff0c;后面供策略使用。 在这个目录下&#xff0c;建一个build.rs,用bindgen库生成cpp.h的头文件相应的rust绑定…

Cortex-A9 架构

一、Cortex-A 处理器运行模式 Cortex-A9处理器有 9中处理模式&#xff0c;如下表所示&#xff1a; 九种运行模式 在上表中&#xff0c;除了User(USR)用户模式以外&#xff0c;其它8种运行模式都是特权模式&#xff0c;在特权模式下&#xff0c;程序可以访问所有的系统资源。这…