国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

這篇具有很好參考價(jià)值的文章主要介紹了利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

????????

目錄

一、利用Python爬取彈幕

?二、利用幾行代碼直接生成詞云

三、將彈幕屬性和內(nèi)容放入mysql當(dāng)中

?四、分析彈幕在視頻各節(jié)點(diǎn)的數(shù)量

1、分析視頻各個(gè)片段出現(xiàn)的彈幕數(shù)量

2、分析視頻各大章節(jié)出現(xiàn)的彈幕數(shù)量

3.分析視頻各小節(jié)出現(xiàn)的彈幕數(shù)量

五、分析彈幕數(shù)量和日期的關(guān)系

1、分析不同日期的彈幕數(shù)量

2、上午、下午、晚上的彈幕數(shù)量

3、每天不同細(xì)分時(shí)間段的彈幕數(shù)量

六、利用LSTM網(wǎng)絡(luò)對(duì)彈幕數(shù)量進(jìn)行預(yù)測(cè)

七、利用SnowNLP庫(kù)對(duì)彈幕進(jìn)行情感分析

八、誰是彈幕發(fā)射器?

????????近期,GPT-4在網(wǎng)絡(luò)上引起了軒然大波,b站上也出現(xiàn)了許許多多關(guān)于GPT-4的解說視頻,其中有一個(gè)解說視頻受到了網(wǎng)友的熱烈追捧,目前已填充有2萬多的彈幕,這也引起了本人的極大興趣,因此對(duì)該視頻的彈幕進(jìn)行了爬取,并記錄于mysql數(shù)據(jù)庫(kù)中,以進(jìn)行數(shù)據(jù)分析、數(shù)據(jù)挖掘、彈幕數(shù)量預(yù)測(cè)和情緒分類等等。話不多說,正文開始。

一、利用Python爬取彈幕

? ? ? ? 首先打開以下鏈接,該鏈接便是彈幕的視頻來源,點(diǎn)擊以下鏈接并打開,右鍵點(diǎn)擊-檢查,查看網(wǎng)頁編寫代碼,再依此點(diǎn)擊--網(wǎng)絡(luò)--Fetch-XHR,然后播放視頻,隨著視頻中彈幕的出現(xiàn),右側(cè)出現(xiàn)一次次請(qǐng)求,直到看到cid代號(hào)的出現(xiàn),如下圖右下角,記下cid的值,將該值填入下述網(wǎng)址中:https://comment.bilibili.com/cid值.xml,打開該網(wǎng)址就可以看到一條條彈幕信息了,我們要爬取的對(duì)象便是這條網(wǎng)址了。(爬取技術(shù)請(qǐng)用于正途)

【漸構(gòu)】萬字科普GPT4為何會(huì)顛覆現(xiàn)有工作流;為何你要關(guān)注微軟Copilot、文心一言等大模型_嗶哩嗶哩_bilibili

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?確定了網(wǎng)址,下面開始利用python對(duì)該網(wǎng)址進(jìn)行爬取,代碼如下:

import requests
from bs4 import BeautifulSoup
response = requests.get("https://comment.bilibili.com/1054910356.xml") #要爬取的網(wǎng)址
response.encoding='utf8' #編碼方式
html = response.text
soup = BeautifulSoup(html) #使用beautifulsoup庫(kù)快速查找我們想要的信息
all_txt = soup.findAll("d") #尋找到所有包含d的行
txt=[all_txts.attrs ["p"]for all_txts in all_txt] #尋找到所有包含d的行中屬性為p的值,這里邊包含了彈幕的虛擬id等
txtss=[all_txts.string for all_txts in all_txt] #尋找到所有包含d的行中的字符串?dāng)?shù)據(jù),即彈幕內(nèi)容
txtsss=[txts.replace(' ','') for txts in txtss] #將字符串中的空格消除掉
print(txt,txtsss) ###打印便可看見一條條彈幕的屬性和內(nèi)容了。

輸出結(jié)果如下:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?二、利用幾行代碼直接生成詞云

danmustr=''.join(i for i in txtsss) #將所有彈幕拼接在一起
words=list(jieba.cut(danmustr))  ###利用jieba庫(kù)將彈幕按詞進(jìn)行切分
words=[i for i in words if len(i)>1] ###挑出長(zhǎng)度大于1的詞語(為去除諸如?,哈,啊等字符)
wc=wordcloud.WordCloud(height=1000,width=1000,font_path='simsun.ttc')#利用wordcloud庫(kù)定義詞云圖片的信息
wc.generate(' '.join(words))   ##生成圖片
print(wc)
plt.imshow(wc)
plt.show()

執(zhí)行上述代碼,得到以下詞云圖片:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?????????分析:從該詞云圖片信息可以知道,大量彈幕中都出現(xiàn)了就是人類、ai、中國(guó)等詞眼,看來大家都認(rèn)為gpt-4是一場(chǎng)重大變革,ai的智能程度或可比肩人類,另外大家也在討論中國(guó)應(yīng)當(dāng)如何應(yīng)對(duì)這次ai的巨大變革。

三、將彈幕屬性和內(nèi)容放入mysql當(dāng)中

????????為便于對(duì)彈幕數(shù)據(jù)的調(diào)用和處理,我們需要將其存入mysql數(shù)據(jù)庫(kù)中,代碼如下:

import pandas as pd
from datetime import datetime
from sqlalchemy import  create_engine,text

pg=pd.DataFrame({"paragraphs": txt,"comment":txtsss})#將彈幕屬性和彈幕內(nèi)容放入dataframe中
pg["time_happen"]=pg['paragraphs'].map(lambda x:x.split(',')[0]) #將彈幕的第一個(gè)屬性值拆分為time_happen列
pg["danmu_gundong"]=pg['paragraphs'].map(lambda x:x.split(',')[1]) #將彈幕的第二個(gè)屬性值拆分為danmu_gundong列
pg["danmu_size"]=pg['paragraphs'].map(lambda x:x.split(',')[2]) #與上類似
pg["danmu_color"]=pg['paragraphs'].map(lambda x:x.split(',')[3]) #與上類似
pg["danmu_ture_time"]=pg['paragraphs'].map(lambda x:x.split(',')[4]) #與上類似
pg["danmu_mode"]=pg['paragraphs'].map(lambda x:x.split(',')[5]) #與上類似
pg["user_id"]=pg['paragraphs'].map(lambda x:x.split(',')[6]) #與上類似
pg["danmu_ture_time"]=pg['danmu_ture_time'].apply(lambda x:datetime.fromtimestamp(int(x))) #將時(shí)間戳先轉(zhuǎn)換為datetime,可不轉(zhuǎn)
pg["danmu_ture_time"]=pg['danmu_ture_time'].apply(lambda x:x.date()) #將datetime轉(zhuǎn)換為date日期,可不轉(zhuǎn)
engine=create_engine('mysql+pymysql://root:123456@localhost/gpt') #利用sqlalchemy庫(kù)建立mysql的引擎
pg.to_sql(name='gptlast',con=engine,index=False,if_exists='replace')#記得安裝pymysql庫(kù)?。?,將數(shù)據(jù)寫入mysql

執(zhí)行上述代碼,便可寫入mysql當(dāng)中,如下:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?四、分析彈幕在視頻各節(jié)點(diǎn)的數(shù)量

1、分析視頻各個(gè)片段出現(xiàn)的彈幕數(shù)量

????????本文爬取了近萬條彈幕,繪制了彈幕數(shù)量與出現(xiàn)時(shí)間的曲線圖,繪制曲線圖的代碼如下:

import matplotlib
from matplotlib import pyplot as plt
engine=create_engine('mysql+pymysql://root:123456@localhost/gpt') #利用sqlalchemy庫(kù)建立mysql的引擎
df=pd.read_sql(text('select * from gptlast'),con=engine.connect())#從mysql數(shù)據(jù)庫(kù)中查找出所有彈幕信息
list_time_happen=df["time_happen"].tolist()
list_count_time_happen=[]
for i in range(500):
    count_time_happen = 0
    for j in range(7200):
        if i * 6.028 <= float(list_time_happen[j]) < (i + 1) * 6.028:
            list_time_happen[j]=i
            count_time_happen +=1
    list_count_time_happen.append(count_time_happen)
print(list_count_time_happen)
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.size']=12
plt.plot(list_count_time_happen,color='g',linewidth=2,label="視頻各時(shí)段的彈幕數(shù)量")
plt.xlabel("視頻的各個(gè)時(shí)段,以6.028s為一個(gè)區(qū)間")
plt.ylabel('視頻各個(gè)時(shí)段的彈幕數(shù)量',
           labelpad=-40,  #調(diào)整y軸標(biāo)簽與y軸的距離
           y=1.02,  #調(diào)整y軸標(biāo)簽的上下位置
           rotation=0)
plt.grid()
plt.show()

?繪制得到的曲線圖如下:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?????????可以看出,視頻的開頭和結(jié)尾彈幕數(shù)量較多,彈幕數(shù)量最多的時(shí)間段是視頻的48分23秒的位置,說明這個(gè)時(shí)間段的內(nèi)容廣受關(guān)注,本文查看視頻的該時(shí)間段可知,這段內(nèi)容講述了:中國(guó)已經(jīng)錯(cuò)了三次工業(yè)革命,不能再錯(cuò)過這次的gpt-4了,該段視頻截圖如下。

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類? ? ? ? 在筆者看來,這段內(nèi)容是整個(gè)視頻的重中之重,可以說是整個(gè)視頻的論點(diǎn)。因此引起了大家的廣泛關(guān)注,面對(duì)這場(chǎng)ai浪潮,我們到底該如何應(yīng)對(duì)?

2、分析視頻各大章節(jié)出現(xiàn)的彈幕數(shù)量

? ? ? ? 分析視頻各大章節(jié)出現(xiàn)的彈幕數(shù)量,以分析網(wǎng)友對(duì)各個(gè)章節(jié)的喜愛程度,代碼和上一小節(jié)類似,此處便不貼了。繪制直方圖和餅狀圖如下:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

? ? ? ? ?可以看出視頻第四章節(jié):未來影響,出現(xiàn)的彈幕最多,看來網(wǎng)友對(duì)GPT-4的未來影響比較感興趣。但是,以上兩圖統(tǒng)計(jì)的是各個(gè)章節(jié)的彈幕數(shù)量,然而各個(gè)章節(jié)的時(shí)間長(zhǎng)短不一,比如第一章引言只有幾分鐘,而其他幾章有十幾分鐘,十幾分鐘內(nèi)出現(xiàn)的彈幕數(shù)量當(dāng)然比幾分鐘內(nèi)出現(xiàn)的彈幕更多了,因此不區(qū)分章節(jié)時(shí)間長(zhǎng)度而進(jìn)行彈幕數(shù)量比較,是不太合理的,因此本文接著統(tǒng)計(jì)了各大章節(jié)每秒出現(xiàn)的彈幕數(shù)量,得到直方圖和餅狀圖如下:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

? ? ? ? ?從以上兩圖可以看出,第一章節(jié)開始逆襲,其每秒彈幕數(shù)量是最多的,因?yàn)槭且曨l的開頭,所以這是可以理解的,另外第三章每秒彈幕數(shù)量還是最少的,看來廣大網(wǎng)友對(duì)這個(gè)大模型如何訓(xùn)練的并不感興趣呀。

3.分析視頻各小節(jié)出現(xiàn)的彈幕數(shù)量

????????分析視頻各小節(jié)出現(xiàn)的彈幕數(shù)量,以分析網(wǎng)友對(duì)各個(gè)小節(jié)的喜愛程度,代碼和上上節(jié)類似,此處便不貼了。繪制直方圖和餅狀圖如下:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

? ? ? ? ?可以看出,4.3、5.3及4.2小節(jié)出現(xiàn)的彈幕數(shù)量最多,4.3是gpt-4的社會(huì)影響,5.3是gpt-4對(duì)國(guó)家競(jìng)爭(zhēng)力的影響,4.2是gpt-4的應(yīng)用價(jià)值,體現(xiàn)出了廣大網(wǎng)友憂國(guó)憂民和注重實(shí)踐應(yīng)用的共同點(diǎn)呀。

? ? ? ? 類似的,我們?cè)賮砜纯锤餍」?jié)的每秒彈幕數(shù)量,如下直方圖和餅狀圖:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

? ? ? ? ?通過上面兩圖可以發(fā)現(xiàn),還是視頻的開頭和結(jié)尾的每秒彈幕數(shù)量比較多,另外就是2.1實(shí)質(zhì)功能小節(jié)彈幕數(shù)量也比較多,這小節(jié)介紹了gpt-4的通俗原理,也引起了廣大網(wǎng)友的積極討論。

五、分析彈幕數(shù)量和日期的關(guān)系

1、分析不同日期的彈幕數(shù)量

import time
list_time_true=df["danmu_ture_time"].tolist() #將dataframe中的時(shí)間戳列轉(zhuǎn)換成列表
dt='2023-3-15 0:0:0' #彈幕最早出現(xiàn)時(shí)間
time_=time.strptime(dt,"%Y-%m-%d %H:%M:%S") #將dt轉(zhuǎn)換成strptime
time_small=time.mktime(time_) #將strptime轉(zhuǎn)換成時(shí)間戳
list_count_time_happen=[] 
for i in range(28):    #該視頻共公布28天,因此彈幕跨度為28天
    count_time_happen = 0 #用于記錄這28天每天的彈幕數(shù)量
    for j in range(7200):
        if  i*3600*24+time_small <= int(list_time_true[j]) < (i+1)*3600*24+time_small:
            list_time_true[j] = i #這行代碼可有可有
            count_time_happen += 1 #如果是當(dāng)天的彈幕,則+1
    list_count_time_happen.append(count_time_happen) #將28天每天的彈幕數(shù)量記錄于該列表中
print(list_count_time_happen) 
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.size']=12
color=['deepskyblue','orange']
plt.bar(range(28), list_count_time_happen,color=color,width=0.4)
plt.xlabel("發(fā)送彈幕的日期,從3月15開始,4月11結(jié)束")
plt.ylabel('每天彈幕數(shù)量',
           labelpad=-40,  #調(diào)整y軸標(biāo)簽與y軸的距離
           y=1.02,  #調(diào)整y軸標(biāo)簽的上下位置
           rotation=0)
plt.xticks([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],[15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11])
plt.show()

? ? ? ? 得到每天彈幕數(shù)量的直方圖如下:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?????????觀察以上直方圖我們可以發(fā)現(xiàn),彈幕數(shù)量會(huì)先增多再減少,持續(xù)波浪狀前進(jìn),視頻剛發(fā)布初期,彈幕增長(zhǎng)的速度是最快的,后期彈幕數(shù)量雖也有增長(zhǎng),但是勢(shì)頭沒有前期高。另外查詢?nèi)諝v可以發(fā)現(xiàn),彈幕數(shù)量比較高的幾天,幾乎都是周末,工作日的彈幕數(shù)量較少,因此彈幕數(shù)量會(huì)出現(xiàn)波峰波谷,波浪狀前進(jìn),看來廣大網(wǎng)友工作日都在努力搬磚,沒有過多空閑時(shí)間逛b站呀。

2、上午、下午、晚上的彈幕數(shù)量

? ? ? ? 分析上午、下午和晚上的彈幕數(shù)量會(huì)不會(huì)有不同?代碼思路和上節(jié)類似,這里便不貼了,繪制的直方圖和餅狀圖如下圖:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

???????觀察以上兩圖可知,下午和晚上的彈幕數(shù)量最多,估計(jì)大家上午的時(shí)間都非常倉(cāng)促,掙扎著起床就要去工作了,上午沒有屬于自己的時(shí)間,哈哈。下午的彈幕數(shù)量最高,估計(jì)大家在午休前都會(huì)逛會(huì)b站,筆者也是如此,晚上的情況大致也類似。

3、每天不同細(xì)分時(shí)間段的彈幕數(shù)量

????????上節(jié)分析了上午、下午與晚上的彈幕數(shù)量,但是時(shí)間跨度較大,分析比較粗糙,下面針對(duì)更細(xì)分的時(shí)間段進(jìn)行彈幕數(shù)量分析。將一天分成12個(gè)時(shí)間段,分別為0時(shí)~2時(shí),2時(shí)~4時(shí),4時(shí)~6時(shí)......22時(shí)~24時(shí),繪制了各個(gè)時(shí)間段的彈幕數(shù)量直方圖和餅狀圖:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

????????分析以上兩圖可知,20時(shí)~22時(shí)、22時(shí)~24時(shí)和12時(shí)~14時(shí)的彈幕數(shù)量最多,說明廣大網(wǎng)友都是晝伏夜出的,晚上的時(shí)間比較充足,另外中午午休也可以抽出時(shí)間逛逛b站。4時(shí)~6時(shí)、6時(shí)~8時(shí)及2時(shí)~4時(shí)的彈幕數(shù)量最小,廣大網(wǎng)友應(yīng)該進(jìn)入夢(mèng)鄉(xiāng)了。

六、利用LSTM網(wǎng)絡(luò)對(duì)彈幕數(shù)量進(jìn)行預(yù)測(cè)

? ? ? ? 由5.1可知,本文共收集了28天的彈幕數(shù)量,將28天的彈幕數(shù)量分為訓(xùn)練集和測(cè)試集,前22天的彈幕用作訓(xùn)練,后6天的彈幕用作測(cè)試,如下圖所示。本文以5天的彈幕數(shù)量為滑動(dòng)窗口,預(yù)測(cè)下一天的彈幕數(shù)量,因此可得到訓(xùn)練集17組,測(cè)試集6組。

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

????????使用雙層LSTM網(wǎng)絡(luò)作為預(yù)測(cè)模型,網(wǎng)絡(luò)每層神經(jīng)元個(gè)數(shù)為6個(gè)(因?yàn)楸疚臄?shù)據(jù)集較為簡(jiǎn)單,使用6個(gè)神經(jīng)元足以),LSTM網(wǎng)絡(luò)層后接一層全連接層。代碼如下:

####建立數(shù)據(jù)集
device=torch.device ('cuda:0' if torch.cuda.is_available() else 'cpu')
count_max=max(list_count_time_happen)
#歸一化
for i in range(28):
    list_count_time_happen[i]=list_count_time_happen[i]/count_max
train_data=list_count_time_happen[0:22]
test_data=list_count_time_happen[22:28]
train_data_x=torch.zeros((17,5))
train_data_y=torch.zeros((17,1))
for i in range(17):
    train_data_x[i,0]=torch.tensor(train_data[i])
    train_data_x[i, 1] = torch.tensor(train_data[i+1])
    train_data_x[i, 2] = torch.tensor(train_data[i+2])
    train_data_x[i, 3] = torch.tensor(train_data[i+3])
    train_data_x[i, 4] = torch.tensor(train_data[i+4])
    train_data_y[i,:]=torch.tensor((train_data[i+5]))
test_data_x=torch.zeros((6,5))
test_data_y=torch.zeros((6,1))
for i in range(6):
    test_data_x[i,0]=torch.tensor(list_count_time_happen[17+i])
    test_data_x[i, 1] =torch.tensor(list_count_time_happen[17 + i+1])
    test_data_x[i, 2] = torch.tensor(list_count_time_happen[17 + i+2])
    test_data_x[i, 3] = torch.tensor(list_count_time_happen[17 + i+3])
    test_data_x[i, 4] = torch.tensor(list_count_time_happen[17 + i+4])
    test_data_y[i,:]=torch.tensor(list_count_time_happen[17+i+5])
print(train_data_x.dtype,train_data_y.dtype,test_data_x.dtype,test_data_y.dtype)
####構(gòu)建網(wǎng)絡(luò)模型

class LsTM(nn.Module):
    def __init__(self):
        super(LsTM, self).__init__()
        # 定義LSTM
        self.rnn = nn.LSTM(1, 6,2,batch_first=True)
        # 定義回歸層網(wǎng)絡(luò),輸入的特征維度等于LSTM的輸出,輸出維度為1)
        self.reg = nn.Sequential(
            nn.Linear(6, 1)
        )

    def forward(self, x):
        x=x.reshape(-1,5,1)
        #x = x.view(x.size(0), -1)
        x, (ht,ct) = self.rnn(x)
        ht = ht.reshape(-1, 2, 6)
        ht=ht[:,1,:]
        x = F.sigmoid(self.reg(ht))
        return x

model = LsTM().to(device)

quanzhi_pipei=5000
criterion = nn.MSELoss()
optimizer_ExpLR = torch.optim.Adam(model.parameters(), lr=0.001,betas=(0.9,0.999),eps=1e-08,weight_decay=0,amsgrad=False)
epoch=0
a=3
for i in range(2000):
    epoch=epoch+1
    optimizer_ExpLR.zero_grad()
    outputs = model(train_data_x.cuda())
    target = train_data_y.cuda()
    loss = criterion(outputs, target)
    loss.backward()
    optimizer_ExpLR.step()
    with torch.no_grad():
        if epoch % 2 == 0:
            print("--------------歷經(jīng)第{}次循環(huán)------------".format(epoch))
            print('--------當(dāng)前的損失率等于:{}-------'.format(loss.item()))
test_outputs = model(test_data_x.cuda()).cpu().detach().numpy()
test_outputs=test_outputs.reshape((6,1))
####繪制真實(shí)值與預(yù)測(cè)值的對(duì)比圖
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.size']=12
plt.plot(range(6),test_data_y,range(6),test_outputs)
plt.legend(['true value','predicted value'])
plt.xlabel("時(shí)間")
plt.ylabel('彈幕數(shù)量占比',
           labelpad=-40,  #調(diào)整y軸標(biāo)簽與y軸的距離
           y=1.02,  #調(diào)整y軸標(biāo)簽的上下位置
           rotation=0)
plt.show()

得到預(yù)測(cè)值與真實(shí)值的對(duì)比圖如下:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?????????預(yù)測(cè)效果不太理想,但是這是情有可原的,因?yàn)橛?xùn)練集太小,只有17組!??!盡力了老鐵!

七、利用SnowNLP庫(kù)對(duì)彈幕進(jìn)行情感分析

????????利用snownlp庫(kù)對(duì)彈幕進(jìn)行情感分析,這個(gè)庫(kù)非常方便,直接調(diào)用其作為函數(shù)處理dataframe即可,返回對(duì)彈幕內(nèi)容的評(píng)分,評(píng)分越高越積極,所以代碼也是非常的簡(jiǎn)潔,如下所示:

import snownlp
import seaborn as sn
df['sentiment']=df["comment"].apply(lambda x:snownlp.SnowNLP(x).sentiments)
pd.set_option('display.max_rows', None)  # 顯示所有行
# print(df[["comment",'sentiment']])
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.size']=12
matplotlib.rcParams['axes.unicode_minus']=False
ax=sn.distplot(df['sentiment'],hist_kws={'color':'deepskyblue'},kde_kws={'color':'orange'},bins=20)
ax.set_title("GPT-4解說視頻整體情感傾向")
plt.show()

利用庫(kù)seaborn可得到如下整體彈幕情緒分析圖如下:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?????????從以上情感分析圖可知,彈幕中有很多積極地彈幕,但同時(shí),消極的彈幕也不少。進(jìn)一步的,筆者將情感評(píng)分>0.9分的彈幕選作為積極的彈幕,而情感評(píng)分<0.5的彈幕選作為消極的彈幕,如以下代碼所示:

sentiment_list=df['sentiment'].tolist()
count_=[0,0]
for i in range(7200):
    if sentiment_list[i]>=0.9:
        count_[0]=count_[0]+1
    elif sentiment_list[i]<0.5:
        count_[1]=count_[1]+1
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.size']=12
color=['deepskyblue','orange']
plt.bar(range(2),count_,color=color,width=0.3)
plt.xlabel("情緒種類")
plt.ylabel('各情緒種類的彈幕數(shù)量',
           labelpad=-40,  #調(diào)整y軸標(biāo)簽與y軸的距離
           y=1.02,  #調(diào)整y軸標(biāo)簽的上下位置
           rotation=0)
plt.xticks(range(2),['積極','消極'])
plt.show()

繪制得到積極彈幕數(shù)量和消極彈幕數(shù)量對(duì)比圖如下:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

? ? ? ? ?可以發(fā)現(xiàn),消極的彈幕比積極地彈幕更多,部分原因是國(guó)內(nèi)難以使用gpt-4,這引起了部分網(wǎng)友的怨言。

八、誰是彈幕發(fā)射器?

? ? ? ? 本節(jié)統(tǒng)計(jì)了這近萬條彈幕的虛擬id,得到了所有不同用戶發(fā)送的彈幕數(shù)量,如下圖所示:

利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類

?????????觀察上圖可知,第1名用戶發(fā)送了35條彈幕,第2名用戶發(fā)送了大概30條,依此遞減,大部分用戶都只發(fā)送了一條彈幕,大致是從第1200名用戶開始,至第4800名用戶,這三千多用戶都只發(fā)送了一條彈幕。發(fā)送了35條彈幕的這位用戶的彈幕內(nèi)容,多為對(duì)未來的思考和擔(dān)憂,可見這位用戶對(duì)中國(guó)未來充滿信心,又覺得中國(guó)的路還很長(zhǎng),足見其憂國(guó)憂民的形象。

????????以上便是本條博客的全部?jī)?nèi)容了,完結(jié),撒花~感謝觀看文章來源地址http://www.zghlxwxcb.cn/news/detail-513271.html

到了這里,關(guān)于利用python對(duì)b站某GPT-4解說視頻的近萬條彈幕進(jìn)行爬取、數(shù)據(jù)挖掘、數(shù)據(jù)分析、彈幕數(shù)量預(yù)測(cè)及情緒分類的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包