天天看點

基于阿裡雲平台的大資料教學案例 —— B站彈幕資料分析

一、實驗題目

基于所學的大資料處理知識,結合阿裡雲大資料相關産品,分組完成一個大資料分析項目,資料集可以使用開源資料集或自行爬取,最終完成一個完整的實驗報告:

1、 能夠使用阿裡雲大資料相關産品完成資料分析、資料模組化與模型優化

2、 能夠基于分析結構建構可視化門戶或可視化大屏,分析和呈現不少于5個

3、 分析案例有實用價值并能夠形成有效結論

4、 能夠将開源技術與阿裡雲産品結合,綜合利用提升開發效率,降低成本

5、 能夠完成資料分析報告和結果展示

二、實驗目的

靈活利用所學的阿裡雲大資料相關技術和大資料處理知識,綜合完整地完成一個大資料分析項目。

三、實驗難點

SQL語句有點難,機器學習預測不好調整。資料太多人工清洗有點難度。

四、實驗過程(截圖)

首先要觀察資料集的各個屬性,了解資料的梗概和特點。本次,我們研究的是B站彈幕文化,機器應用場景。

爬取資料的代碼如下:

import csv
import time

import requests
from bs4 import BeautifulSoup
url = "https://api.bilibili.com/x/v1/dm/list.so?oid=132084205"
csv_headers = ['彈幕内容','發送位置','發送時間','彈幕類型','彈幕字型大小','發送者id']
# print(response.content)
# divs = soup.find_all(_class = "threadlist_title pull_left j_th_tit ")
# for div in divs:
#     print(str(div))
#     print(div.a["href"])
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate',
    'Connection': 'close'
}
def get_page(url):
    # threadLock.acquire()
    # start_request = True
    NETWORK_STATUS = True
    response = requests.get(url,headers=headers,verify=True,timeout=20)
    # threadLock.release()
    if response.status_code == 200:
        # start_request = False
        return response.content
    else:
        print('error')

def parse_page(html):
    soup = BeautifulSoup(html,'lxml')
    ds = soup.find_all('d')
    # print(len(ds))
    for d in ds:
        rows = []
        text = d.text
        p = str(d['p'])
        attrs = p.split(',')
        time_sec = int(attrs[0].split('.')[0])
        time_int = int(time_sec/60)
        time_float = time_sec%60
        mytime = str(time_int) + '分' + str(time_float) + '秒'
        # print(time)
        if int(attrs[1]) == 4:
            type = "底部彈幕"
        elif int(attrs[1]) == 5:
            type = "頂部彈幕"
        elif int(attrs[1]) == 6:
            type = "逆向彈幕"
        elif int(attrs[1]) == 7:
            type = "精準定位"
        elif int(attrs[1]) == 8:
            type = "進階彈幕"
        else:
            type = "普通彈幕"
        fint_size = attrs[2]
        timeArray = time.localtime(int(attrs[4]))
        date = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
        id = attrs[6]
        rows.append([text,mytime,date,type,fint_size,id])
        save_to_csv('b站彈幕(BV1He41147Rs).csv',rows)
        print(text + ' ' + mytime + ' ' + date + ' ' + type + ' ' + fint_size + ' ' + id)


def save_to_csv(csv_name,rows):
    # is_exist = False
    # if os.path.exists(csv_name):
    #     is_exist = True
    with open(csv_name, 'a',encoding='utf-8',newline='')as f:
        # if is_exist is False:
        #     f_csv = csv.writer(f)
        #     f_csv.writerow(csv_headers)
        f_csv = csv.writer(f)
        f_csv.writerows(rows)

def main():
    html = get_page(url)
    # print(html)
    parse_page(html)

if __name__ == '__main__':
    with open('b站彈幕(BV1He41147Rs).csv', 'a',encoding='utf-8-sig',newline='')as f:
        # if is_exist is False:
        #     f_csv = csv.writer(f)
        #     f_csv.writerow(csv_headers)
        f_csv = csv.writer(f)
        f_csv.writerow(csv_headers)
    main()
           

将相關表和資料導入DataWorks,并進行相關部署。

基于阿裡雲平台的大資料教學案例 —— B站彈幕資料分析

各種彈幕的發送時間

通過統計各類彈幕發送時間來确定哪個時間段的内容更受觀衆的歡迎。

基于阿裡雲平台的大資料教學案例 —— B站彈幕資料分析

各個彈幕的大小

通過統計各個彈幕發送的不同大小可以看出更多的人會選擇使用移動觀看,移動端觀看BILIBILI已經很普遍了

基于阿裡雲平台的大資料教學案例 —— B站彈幕資料分析

各個彈幕的發送位置

可以看出更多的人發的是普通彈幕,少數人會發送更加精準的頂部彈幕和底部彈幕。

基于阿裡雲平台的大資料教學案例 —— B站彈幕資料分析
基于阿裡雲平台的大資料教學案例 —— B站彈幕資料分析

機器學習模組化及預測

基于阿裡雲平台的大資料教學案例 —— B站彈幕資料分析
基于阿裡雲平台的大資料教學案例 —— B站彈幕資料分析

混淆矩陣

基于阿裡雲平台的大資料教學案例 —— B站彈幕資料分析

精準率=tp/(tp+fp)=100/(10+100)=0.909

召回率=tp/(tp+fn)=100/(100+5)=0.95

五、 結論

通過實驗,我們組發現更多的人還是選擇在移動端觀看視訊,移動觀看視訊已經是人們的首選了。

其次我們發現人們更喜歡新蘭CP和酒廠,因為在這個時間段發送的彈幕最多,是以我們可以認為在有這兩個作為封面時,可以吸引更多的人觀看視訊,或者以這幾個人作為周邊可以賣的會更好。

最後我們發現,更多的人發送的彈幕是普通彈幕,而極少數人會選在固定的時間發送頂部彈幕或者底部彈幕,證明大多數人不會去特意調整彈幕位置。