苏州相城区最新楼盘价格,一个刚做好的网站怎么做seo,上海做网站公司,如何免费做网站推广文章目录 0 前言1 课题背景2 实现效果3 数据获取4 数据可视化5 最后 0 前言
#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升#xff0c;传统的毕设题目缺少创新和亮点#xff0c;往往达不到毕业答辩的要求#xff0c;这两年不断有学弟学妹告诉学长自己做… 文章目录 0 前言1 课题背景2 实现效果3 数据获取4 数据可视化5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升传统的毕设题目缺少创新和亮点往往达不到毕业答辩的要求这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设学长分享优质毕业设计项目今天要分享的是 大数据B站数据分析与可视化
学长这里给一个题目综合评分(每项满分5分)
难度系数3分工作量3分创新点4分
1 课题背景
目前视频行业可以分为爱优腾为代表的长视频赛道快手抖音为代表的短视频赛道以及B站B站的视频内容十分的丰富因为独特的社区属性和基于UP主们的原创内容打造了一个通过内容交流给用户带来愉悦感的社区型平台。
本项目基于Pythonflaskpyecharts实现了对哔哩哔哩排行榜大数据的可视化分析。
2 实现效果 3 数据获取
本次数据来源于哔哩哔哩排行榜服务器后台中每5min对排行榜数据爬取通过jQuery Ajaxflask实时更新到网页上。
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, headersheaders) 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, headersheaders) # 请求页面 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,encodingutf-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 AnalysisGRA来进行数据的处理。
首先是要确定子母序列母是结果子是影响因子那么毫无疑问综合得分就是母其他均为影响因子。将其分别存入mom_以及son_中代码如下
with open(./bilibili.txt, r,encodingutf-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(axis1)
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,encodingutf-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(axis1)
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, repulsion8000) .set_global_opts(title_optsopts.TitleOpts(title综合得分计算指标))
)
c.render_notebook() 5 最后