日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python熊猫弹幕_Pandas+Matplotlib:视频弹幕统计分析

發布時間:2023/12/20 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python熊猫弹幕_Pandas+Matplotlib:视频弹幕统计分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

彈幕[dàn mù] (danmaku),中文流行詞語,指的是在網絡上觀看視頻時彈出的評論性字幕。源自日本彈幕視頻分享網站(niconico動畫),國內首先引進為Acfun以及后來的嗶哩嗶哩網站。

大量吐槽評論從屏幕飄過時效果看上去像是飛行射擊游戲里的彈幕,所以NICO網民將這種有大量的吐槽評論出現時的效果做彈幕。

在中國,本來只有大量評論同時出現才能叫彈幕,但是隨著誤用單條評論也能叫彈幕了。

想法:彈幕量與視頻中的高曝光片段出現時間段是否有關?彈幕量與自然時間之間是否有一定關聯性?

數據:從嗶哩嗶哩網站上爬下來的彈幕數據

分析過程:爬下來的Excel數據文件,里面是啥樣的?數據是否完整?如何通過視頻時間和自然時間分別統計彈幕量?如何以可視化的形式表達?

上述就是整個分析流程,下面開始一步步進行

任務一:對于 '熱點事件.xlsx' 文件的Sheet3表單而言,需要統計視頻時間中每秒內彈幕的數量并可視化展示

import pandas as pd

import matplotlib.pyplot as plt

①讀入數據

fpath = './datas/熱點事件.xlsx'

df = pd.read_excel(fpath,sheet_name='Sheet3')

這里,我已知分析所用數據在Sheet3表單中,所以直接調用了。

其實在不知情的情況下,應該先對Excel文件進行“結構性”讀取(自己理解的)。

如何“結構性”讀取,在后面會用到。

②查看數據的“樣子”

df.head()

一看,有用的就前兩列,第一列是彈幕發送的視頻時間,第二列是數量。

df.shape # 結果為(1048575, 6)

好大的數據量啊,有問題!EXCEL表格文件最多就只有1048575行。

df.dropna(axis="index", how='all', inplace=True)

先刪除全部為空值的行試試。

df.shape # 結果為(501, 6)

這里一看,好家伙,全是空值.....還好進行了空值處理。最終需要處理的總共501行數據。

其實這里回頭想,少了一步,我們看了開頭的五行數據,其實也可以看看結尾的五行數據是啥樣子的。

后面重新做的時候我發現,在原始表格第1048575行的數據是統計了有多少行數據= =|||,這里應該是人為操作失誤。

③按照視頻時間的每秒進行彈幕量統計

df.loc[(0 <= df['時間']) & (df['時間'] < 1),'數量'].sum() # 運行結果為8.0

由于"時間"列中均是精確到秒后三位小數,這里利用df.loc進行區域限定,然后借助"數量"列進行求和。

這樣就統計出了0至1秒,也就是1秒內的彈幕量,如法炮制,求出每秒的彈幕量。

# 基于上述方法,寫一個for循環,解決戰斗

for i in range(501):

count = df.loc[(i <= df['時間']) & (df['時間'] < i+1),'數量'].sum()

print('第{}秒內共有{}條彈幕'.format(i, count))

運行結果如下圖所示。

通過上述代碼運行結果會發現,在109秒后出現的都是0條彈幕。

為啥是這樣?因為雖然是501條,但是要計算每1秒內的彈幕量,這樣累加之后,總行數就遠遠低于501行了。

這樣看來,欠考慮。應該基于最后一條彈幕的秒數,給range()里面的參數賦值。

# 按照前面所想,可以看出以秒為單位的時間段最終為109.420秒

# 因此,給range()賦值110即可,為啥不是109?因為range()里面是左閉右開區間,取110意味著[0,110)

for i in range(110):

count = df.loc[(i <= df['時間']) & (df['時間'] < i+1),'數量'].sum()

print('第{}秒內共有{}條彈幕'.format(i, count))

為啥做上述的優化?

其實是我做到可視化部分發現的問題,回過頭來在這里優化了。

④可視化展示

# 最后用柱狀圖可視化展示

# 這里要注意plt.bar()函數默認顏色循環使用,如果這里不指定一個顏色,柱狀圖會變得五顏六色

for i in range(110):

count = df.loc[(i <= df['時間']) & (df['時間'] < i+1),'數量'].sum()

#print('第{}秒內共有{}條彈幕'.format(i, count))

plt.bar(i, count, color='#008B8B')

plt.show() # 這里相當于在一塊畫布上每次畫一條柱狀圖,直到for循環結束,輸出結果

看看每5秒統計一次的結果。

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

# 最后,以5秒為一個間隔,看看彈幕的分布情況(有時候精細未必是好事,擴大間隔有助于分析問題)

for i in range(0, 110, 5):

count = df.loc[(i <= df['時間']) & (df['時間'] < i+5),'數量'].sum()

plt.bar(i, count, width=1, color='#008B8B') # 給定個寬度,出圖看的緊湊些

plt.xlabel('彈幕時間(秒)', fontsize=12)

plt.ylabel('彈幕量(條)', fontsize=12)

plt.savefig('fix11.svg', dpi=500) # 保存

plt.show() # 這里相當于在一塊畫布上每次畫一條柱狀圖,直到for循環結束,輸出結果

從上圖上就能很明顯看出:

在視頻時間10至25秒、65至75秒、90至95秒以及最后時刻,彈幕量較為集中。

再次觀看視頻發現,這些彈幕集中的某些視頻時間段剛好對應視頻中的高潮片段,符合觀眾觀看行為。

任務二:對于 '熱點事件.xlsx' 文件的原數據表單而言,需要統計以自然時間每天的彈幕數量并可視化展示

這里,假設我們不清楚拿到的Excel文件內部啥樣子,你可以這樣打開觀察。

先看看文件中有多少個sheet(表單)。

但是按照以往讀取Excel文件,你會發現,只能讀取到第一個表單的數據(默認的)。

import pandas as pd

import matplotlib.pyplot as plt

file_path = './datas/熱點事件.xlsx'

xx = pd.read_excel(file_path)

有同學說,你可以加上表單名稱參數啊。但是剛說過了,我們假設拿到的數據,你完全不知道里面啥樣。怎么辦?

這時候可以用另一種Excel文件讀取方式:pd.ExcelFile( )

data = pd.ExcelFile(file_path)

data.sheet_names

這樣就可以將讀取Excel數據的所有表單名稱打印出來了,如下圖。

假設我需要的數據在表單名為‘原數據’中,則通過如下代碼:

df = data.parse('Sheet5')

這樣就回到了我們之前的DataFrame的操作流程上來了。

如上圖所示,又出現了新問題。讀取時,原文件開始有空行,所以造成讀取后,原本的列標簽變成了數據。這里只需要設定指定一行為索引即可,代碼如下:

df = data.parse('Sheet5', header=1)

完美解決,開始數據分析。

①首先將第一列(日期)作為標簽列

df = df.set_index('行標簽') # 將“行標簽”設置為index

這時又發現,其中columns的值為‘以下項目的計數:數量’,太繞口,寫起來太麻煩。

利用rename( )修改列名,以字典的形式傳入值,進行修改,代碼如下:

df_clearn = df.rename(columns={'以下項目的計數:數量':'counts'})

②以天為單位進行統計

df_clearn.resample('d').sum()['counts']

如果只統計2018年全年的,可以使用如下代碼:

df_day = df_clearn.resample('d').sum()['counts']

df_2018 = df_day['2018']

③可視化展示

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

plt.figure(figsize=(10,4))

plt.plot(df_2018.index, df_2018, color='#008B8B')

plt.xlabel('自然時間(天)',fontsize=12)

plt.ylabel('彈幕量(條)',fontsize=12)

plt.savefig('picture.svg', dpi=500)

plt.show()

從上圖上就能很明顯看出:

隨著自然時間的推移,熱點事件的評論熱度會慢慢降低直至“冷卻”,符合常理。

今天的分享到這里就結束了,我最近收獲最大的就是拿到一個簡單的實際問題,通過自己所學,查漏補缺,這樣進步會很快,我還是不建議類似于A到Z的背單詞方法,其實背作文何嘗不是一種背單詞的方法呢?

哈哈,隱喻,自行理解~

END

總結

以上是生活随笔為你收集整理的python熊猫弹幕_Pandas+Matplotlib:视频弹幕统计分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99热这里只有精品在线 | 午夜激情在线 | 国产九九热 | 波多野结衣av一区二区全免费观看 | 特黄做受又粗又大又硬老头 | 国产欧美日韩三区 | 亚洲电影在线看 | 成人福利视频在线 | 国产亚洲精久久久久久无码苍井空 | 婷婷成人综合网 | 国产剧情在线一区 | 欧美xxxx18| 中国男人操女人 | www.操操操 | 精品无码人妻一区二区三区品 | 一级性毛片 | 美女污软件 | 岛国精品一区二区三区 | 麻豆av电影在线观看 | 日韩 欧美 亚洲 国产 | 亚洲永久精品一区 | 裸体男女树林做爰 | 精品乱码一区二区三四区视频 | 亚洲av永久纯肉无码精品动漫 | 日本熟妇色xxxxx日本免费看 | heyzo久久 | 亚洲国产欧洲 | 欧美在线观看成人 | 欧美做受高潮中文字幕 | 蘑菇福利视频一区播放 | 国产欧美一区二区三区在线看蜜臀 | 日韩福利 | 亚洲精华液一区二区 | 国产中文欧美日韩在线 | 一卡二卡在线观看 | 天天干天天操天天干 | а√天堂中文在线资源8 | www久久com| 日本欧美一本 | 国产三级小视频 | 日韩一区二区三区精品视频 | 黄色污网站在线观看 | 中文字幕无码日韩专区免费 | 欧美xxxbbb| 男生尿隔着内裤呲出来视频 | 国产性猛交xxxⅹ交酡全过程 | 国产黄色精品 | 自拍偷拍第一页 | 色七七桃花综合影院 | 乖疼润滑双性初h | 久久免费公开视频 | 夜夜躁狠狠躁日日躁av | 一区二区三区免费在线视频 | 高潮白浆女日韩av免费看 | 人人妻人人澡人人爽人人dvd | 中文字幕一区二区三区人妻 | 国模av在线 | 狠狠操狠狠操狠狠操 | 人人爱国产 | 色哟哟国产精品 | 一级大毛片 | 小香蕉av | 欧美日韩国产一级片 | 欧美日本黄色 | 新天堂网| 高清欧美精品xxxxx在线看 | 对白超刺激精彩粗话av | 精品成人18 | av片在线观看 | 午夜精品一区二区三区在线播放 | 嫩草影院国产 | 亚洲一区偷拍 | 巨乳xxx | 中文字幕91视频 | 亚洲不卡在线播放 | 黄色小网站入口 | 国产精品久久精品三级 | 亚洲视频在线播放免费 | 亚洲天堂一区二区在线 | 汗汗视频| 欧美射射 | 欧美裸体xxxx极品少妇 | 精品无人国产偷自产在线 | 在线观看aaa | 极品少妇网站 | 国产成人二区 | 久久久久成人精品无码中文字幕 | 综合激情在线 | 蘑菇福利视频一区播放 | 精品视频99 | 亚洲欧美日韩在线播放 | 日日摸夜夜添狠狠添欧美 | 天天摸日日摸狠狠添 | 久久精品综合视频 | 久久精品免费在线 | 免费的av网址| 中文字幕国内自拍 | 亚洲青青草原 | 国产免费视频一区二区三区 |