2020年B站跨年晚会弹幕内容分析

来源:互联网 编辑:wan玩得好手游小编更新:2024-11-10 16:41:51 人气:

倒计时5天|Python&Stata数据分析课冷假任务坊 

不雅后感只有两个字




昨天刷B站看到B站跨年晚会9.9分好评,抱着尝尝的态度,后果操作不住本身刷了两遍,书到用时方恨少,只想用两个字概括"卧槽"。

B站内容安置出色,拿捏住了不同年代的情怀点,比如1980-1990的港台风、1990-2000年代数码宝物柯南、2000-2020年代魔兽世界,每团体的时代联结略有不同,这仅是我本身的感受。

除内容,弹幕互动也是挺令人舒爽的事情,出色落临时刻也就是弹幕大军压镜的时候,我把我认为比拟出色的局部截图制作成了蔑视频。

此次我收集了跨年晚会的两种数据

  • 弹幕数据,正在不雅看时用户的感受

  • 评论数据,已不雅看完成的用户感受

爬虫制作成视频教程已上传至千聊课程中,感喜好的同学可以存眷一下

Python网络爬虫与文本数据分析(学术)   

本文的小目的





我们只是想看一下在时间线上弹幕量的散布状况,下图是怎么做出的

  • 横坐标为分钟刻度

  • 纵坐标为弹幕量


数据预备(清洗)





B站晚会有三个篇章,每一个篇章视频长度大概60-70min。我们收集的数据集字段包孕:

  • Date:收集时间2019.01.03,所以有三天的弹幕

  • Chapter: 第几个篇章,B站跨年有三个篇章,每一个篇章60min安排

  • VideoTime: 在Chapter中的此刻播放时间(相关于篇章开始的秒数)

  • SenderId: 弹幕发送者的匿名ID

  • DanMuContent: 弹幕文本内容

  1. import pandas as pd


  2. df = pd.read_csv('data/弹幕new.csv')

  3. #剔往反复项

  4. df.drop_duplicates(inplace=True)

  5. #查验 反省数据个数

  6. print(len(df))

  7. #显示前5行

  8. df.head()

VideoTime很可以是字符串,我们先将其变成浮点数。然后我们查验 反省每一个章节最大时间长度。

  1. def str2float(string):

  2. #将VideoTime从字符串变成浮点数

  3. try:

  4. return float(string)

  5. except:

  6. return 0.0


  7. df['VideoTime'] = df['VideoTime'].apply(str2float)

  8. print('Chapter 1', df[df['Chapter']==1]['VideoTime'].max())

  9. print('Chapter 2', df[df['Chapter']==2]['VideoTime'].max())

  10. print('Chapter 3', df[df['Chapter']==3]['VideoTime'].max())

  1. Chapter 1 4253.188

  2. Chapter 2 4000.27

  3. Chapter 3 4555.0

我们想做弹幕的时间线上的散布,所以需要把三个在时间上思索先后

  1. chapter1 = df[df['Chapter']==1]

  2. chapter2 = df[df['Chapter']==2]

  3. chapter3 = df[df['Chapter']==3]


  4. #将时间放在一个时间线上

  5. chapter2['VideoTime'] = chapter2['VideoTime']+ 4253.188

  6. chapter3['VideoTime'] = chapter3['VideoTime']+ 4253.188 + 4000.27


  7. #兼并chapter1, chapter2, chapter3

  8. chapter = pd.concat([chapter1, chapter2, chapter3])

  9. #VideoTime升序

  10. chapter.sort_values(by='VideoTime', ascending=True, inplace=True)

  11. chapter

我们想看一下各个章节在时间上弹幕量的散布状况(以min为单位),

  • 横坐标为分钟刻度

  • 纵坐标为弹幕量

  1. def second2minute(second):

  2. #将VideoTime从秒数变成分钟数

  3. try:

  4. return int(float(second)/60)

  5. except:

  6. return 0



  7. chapter['VideoTime'] = chapter['VideoTime'].apply(second2minute)

  8. chapter

  1. import matplotlib.pyplot as plt

  2. %matplotlib inline


  3. plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']

  4. danmudf = chapter.groupby('VideoTime').agg({'DanMuContent': ['count']})

  5. danmudf.plot(kind='line', figsize=(20, 10), legend=False)

  6. plt.title("2020年B站跨年晚会弹幕量趋向图", fontweight='bold', fontsize=25)

  7. plt.xlabel('时间点', fontweight='bold', fontsize=20)

  8. plt.ylabel('弹幕量', fontweight='bold', fontsize=20, rotation=0)

  9. plt.show()

从上图可以看到用户发弹幕量相对比拟集中的区间为:

  • (37, 63)

  • (100, 120)

  • 以后都是独峰

37-63阶段

这是第一篇章中后期,也是全部晚会高潮迭起的阶段。依次有冯提莫、动漫歌曲(如butterfly)、种花组曲(如钢铁激流举行曲)三种不同类型的扮演杂糅在一路。

冯提莫的甜美

动漫歌曲的青春回想

有一种家叫“国度”

115四周

115min,也就是第二篇章40min四周。四周的节目

自豪的少年(曲子是《那年那兔那些事》)

后面的比拟陡峭的小山峰时间点上还有几个大碗,比如邓紫棋、吴亦凡、五月天,就不粘贴截图了。


整体内容分析





  1. import re

  2. import jieba

  3. import csv

  4. from pyecharts import options as opts

  5. from pyecharts.charts import Page, WordCloud

  6. from pyecharts.globals import SymbolType



  7. # 读取文件中的文本

  8. text = ''.join(df['DanMuContent'])

  9. #剔除非中文的内容(只保存中文)

  10. text = ''.join(re.findall(r'[u4e00-u9fa5]+', text))

  11. wordlist = jieba.lcut(text)

  12. wordset = [w for w in set(wordlist) if len(w)>1]

  13. wordfreq = []

  14. #词语计数

  15. for word in wordset:

  16. freq = wordlist.count(word)

  17. wordfreq.append((word, freq))

  18. # 词频排序

  19. wordfreq = sorted(wordfreq, key=lambda k:k[1], reverse=True)


  20. wordcloud =WordCloud()

  21. wordcloud.add("",

  22. wordfreq,

  23. word_size_range=[20,100])

  24. wordcloud.set_global_opts(title_opts=opts.TitleOpts(title="2020年B站跨年晚会"))

  25. wordcloud.render('B站跨年.html')

  26. wordcloud.render_notebook()

这几个大词“啊啊啊”、“哈哈哈”、“卧槽”、 “新年兴奋”, “哔哩”, 

凑在一路觉得就是

在B站有一群逗比陪你一途经年,这觉得很欢乐啊哈哈。


局部内容分析(暂无)





弹幕随时间的起起伏伏,我临时想到的是可以做的

  • 弹幕量维持在较高水平的阶段,弹幕内容有什么特点

  • 弹幕质变化的拐点四周,弹幕内容有什么特点

今日分享的时间区间是固定长度,是一个个的1min,干脆求整数就解决了。

但是要做上面提到的两个标题问题,时间区间就是不固定的,递次比拟智能的划分红几个区间。嘿嘿,我这里没有谜底,不要寻我问????



近期文章






Python网络爬虫与文本数据分析(学术)

杭州见|Python&Stata数据分析课冷假任务坊

综述:文天职析在市场营销研究中的应用

Lazy Prices公司年报内容变化碰上股价偷懒

使用pandas做数据可视化

用statsmodels库做计量分析

YelpDaset: 酒店治理类数据集10+G

NRC词语心情词典和词语色彩词典

Loughran&McDonald金融文本情感分析库

股评师分析呈文文本情感分析猜测股价

使用分析师呈文中含有的情感信息猜测上市公司股价变化

【召开视频课】Python语法快速进门

【召开视频课】Python爬虫快速进门

一行pandas代码生成哑变量

使用Python读取图片中的文本数据

代码不到40行的超燃动态排序图




jupyter notebook代码猎取方式,群众号后台回答要害词“20200104” 




欢迎玩家到【wan玩得好手游】查看最新变态版手游攻略,只需要在百度输入【wan玩得好手游】就可以浏览最新上线送满vip的变态手游攻略了,更多有关BT手游的攻略和资讯,敬请关注玩得好手游!

更多...

热门推荐

更多...

相关文章