东风地区网站建设公司,山亭 网站建设,网站建设服务器的搭建方式,国家免费培训网站文章目录0 前言1 课题背景2 实现效果3 数据获取4 数据可视化0 前言
#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升#xff0c;传统的毕设题目缺少创新和亮点#xff0c;往往达不到毕业答辩的要求#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统…文章目录0 前言1 课题背景2 实现效果3 数据获取4 数据可视化0 前言这两年开始毕业设计和毕业答辩的要求和难度不断提升传统的毕设题目缺少创新和亮点往往达不到毕业答辩的要求这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。并且很难找到完整的毕设参考学习资料。为了大家能够顺利以及最少的精力通过毕设学长分享优质毕业设计项目提供大家参考学习今天要分享的是大数据B站数据分析与可视化学长这里给一个题目综合评分(每项满分5分)难度系数3分工作量3分创新点4分选题指导, 项目分享见文末1 课题背景目前视频行业可以分为爱优腾为代表的长视频赛道快手抖音为代表的短视频赛道以及B站B站的视频内容十分的丰富因为独特的社区属性和基于UP主们的原创内容打造了一个通过内容交流给用户带来愉悦感的社区型平台。本项目基于Pythonflaskpyecharts实现了对哔哩哔哩排行榜大数据的可视化分析。2 实现效果3 数据获取本次数据来源于哔哩哔哩排行榜服务器后台中每5min对排行榜数据爬取通过jQuery Ajaxflask实时更新到网页上。python爬虫简介网络爬虫是一种按照一定的规则自动地抓取万维网信息的程序或者脚本。爬虫对某一站点访问如果可以访问就下载其中的网页内容并且通过爬虫解析模块解析得到的网页链接把这些链接作为之后的抓取目标并且在整个过程中完全不依赖用户自动运行。若不能访问则根据爬虫预先设定的策略进行下一个 URL的访问。在整个过程中爬虫会自动进行异步处理数据请求返回网页的抓取数据。在整个的爬虫运行之前用户都可以自定义的添加代理伪 装 请求头以便更好地获取网页数据。爬虫流程图如下爬虫相关代码importrequestsfrombs4importBeautifulSoupimportxlwtimporttimeimporturllib3importrequestsimportjson# 爬取B站热榜排行# 格式解析[0-当前排名1-视频标题2-播放数目3-弹幕数量4-综合得分5-作者6-视频地址7-时长8-评论数9-收藏数10-投币数11-分享数12-点赞数]# 格式化defwhitespace(st):stst.replace(\n,)stst.strip()stst.replace( ,)returnst# 详情页definfo_Page(bv):urlhttp://api.bilibili.com/x/web-interface/view?bvidbv 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中消除警告responserequests.get(url,headersheaders)contentjson.loads(response.text)# 很迷获取到的是str字符串 需要解析成json数据statue_codecontent.get(code)# print(statue_code)ifstatue_code0:durationcontent[data][duration]# 时长replycontent[data][stat][reply]# 评论favoritecontent[data][stat][favorite]# 收藏coincontent[data][stat][coin]# 投币sharecontent[data][stat][share]# 分享likecontent[data][stat][like]# 点赞returnduration,reply,favorite,coin,share,likewhile(True):urlhttps://www.bilibili.com/v/popular/rank/allheaders{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}rankrequests.get(url,headersheaders)# 请求页面soupBeautifulSoup(rank.text,lxml)all_ranksoup.find_all(li,class_rank-item)num0lst[]foriinall_rank:record[]rank_numi.find(div,class_num).text# 获取排名infoi.find(div,class_info)# 筛选出视频详细信息的标签hrefinfo.find(a,class_title).attrs[href]# 获取链接titleinfo.find(a,class_title).text# 获取标题play_numinfo.find(i,class_b-icon play).parent.text# 获取播放量view_numinfo.find(i,class_b-icon view).parent.text# 获取弹幕数authorinfo.find(i,class_b-icon author).parent.text# 获取作者名scoresinfo.find(div,class_pts).find(div).text# 获取综合得分# 播放弹幕作者play_numwhitespace(play_num)view_numwhitespace(view_num)authorwhitespace(author)bvhref.split(/)[-1]duration,reply,favorite,coin,share,likeinfo_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)num1lst.append(record)# 爬取的数据存入文件避免多次爬取且提高响应速度withopen(./bilibili.txt,w,encodingutf-8)asf:forlineinlst:foriinline:f.write(str(i),)f.write(\n)time.sleep(300)#print(lst[0])4 数据可视化可视化呈现方案综合得分计算指标哔哩哔哩综合得分是视频是否能排上排行榜的依据若能知道其规则对于视频内容的倾向up主是否需要请求“一键三连”观众们需不需要吝啬手中的币是有很大的价值的所以在此首先进行综合得分计算指标的分析及其可视化此处采取灰色关联度分析Grey Relation AnalysisGRA来进行数据的处理。首先是要确定子母序列母是结果子是影响因子那么毫无疑问综合得分就是母其他均为影响因子。将其分别存入mom_以及son_中代码如下withopen(./bilibili.txt,r,encodingutf-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(axis1)mom_mom_/mom_.mean()foriinrange(son_.shape[1]):son_[:,i]abs(son_[:,i]-mom_.T)Mminson_.min()Mmaxson_.max()cors(Mmin0.5*Mmax)/(son_0.5*Mmax)Mmeancors.mean(axis0)最终结果B站综合得分与播放、评论、收藏、投币、分享、点赞几个因素都具有很强的相关性。灰色关联度介绍GRA是一种多因素统计分析的方法。简单来讲就是在一个灰色系统中我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱本项目中就是说我们假设B站综合得分可能是与播放、评论、收藏、投币、分享、点赞几个因素相关的那么我们想知道综合得分与这几个因素中的哪个相对来说更有关系而哪个因素相对关系弱一点把这些因素排个序得到一个分析结果我们就可以知道哔哩哔哩综合得分与因素中的哪些更相关因而也就可以看出观众的一键三连的作用以及up主们更应该求的是赞、币亦或是其他。相关代码# 灰色关联度分析版本importnumpyasnpfrompyechartsimportoptionsasoptsfrompyecharts.chartsimportGraphwithopen(./bilibili.txt,r,encodingutf-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(axis1)mom_mom_/mom_.mean()foriinrange(son_.shape[1]):son_[:,i]abs(son_[:,i]-mom_.T)Mminson_.min()Mmaxson_.max()cors(Mmin0.5*Mmax)/(son_0.5*Mmax)Mmeancors.mean(axis0)# 为便于观察 扩大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,repulsion8000).set_global_opts(title_optsopts.TitleOpts(title综合得分计算指标)))c.render_notebook() 项目分享:大家可自取用于参考学习获取方式见文末!