毕业设计 大数据B站数据分析与可视化 – python 数据分析 大数据

文章目录

0 前言

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

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

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

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

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

🧿 选题指导, 项目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md

1 课题背景

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

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

2 实现效果

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

; 3 数据获取

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

python爬虫简介

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。爬虫对某一站点访问,如果可以访问就下载其中的网页内容,并且通过爬虫解析模块解析得到的网页链接,把这些链接作为之后的抓取目标,并且在整个过程中完全不依赖用户,自动运行。若不能访问则根据爬虫预先设定的策略进行下一个 URL的访问。在整个过程中爬虫会自动进行异步处理数据请求,返回网页的抓取数据。在整个的爬虫运行之前,用户都可以自定义的添加代理,伪 装 请求头以便更好地获取网页数据。爬虫流程图如下:

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

爬虫相关代码

import requests
from bs4 import BeautifulSoup
import xlwt
import time
import urllib3
import requests
import json

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()
    response = requests.get(url, headers=headers)
    content = json.loads(response.text)

    statue_code = content.get('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)

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)

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

Original: https://blog.csdn.net/HUXINY/article/details/127153280
Author: DanCheng-studio
Title: 毕业设计 大数据B站数据分析与可视化 – python 数据分析 大数据

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/692637/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球