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:视频弹幕统计分析相关推荐
- python爬取bilibili弹幕_用Python爬取B站视频弹幕
原标题:用Python爬取B站视频弹幕 via:菜J学Python 众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一 ...
- python爬取腾讯视频弹幕_用Python爬取腾讯视频弹幕
原标题:用Python爬取腾讯视频弹幕 via:菜J学Python 1.网页分析 本文以爬取<脱口秀大会 第3季>最后一期视频弹幕为例,首先通过以下步骤找到存放弹幕的真实url. 通过删减 ...
- python爬虫bilibili_Python爬虫 bilibili视频弹幕提取过程详解
两个重要点 1.获取弹幕的url是以 .xml 结尾 2.弹幕url的所需参数在视频url响应的 javascript 中 先看代码 import requests from lxml import ...
- python抓取腾讯视频弹幕_Python实战 | 如何抓取腾讯视频弹幕
原标题:Python实战 | 如何抓取腾讯视频弹幕 当代年轻人的快乐是网络给的. 如果有人吐槽周末太无聊,他们一定会反驳: 是追剧不香吗? 是吃鸡不好玩吗? 周末辣么短,怎么会无聊呢? 诚然,追剧和游 ...
- python 爬取腾讯视频弹幕
腾讯视频弹幕地址:http://mfm.video.qq.com/danmu?timestamp=0&target_id=xxxxx 1.在视频地址中获取target_id 2.通过视频cid ...
- python抓取腾讯视频弹幕_Python爬虫练习:腾讯视频弹幕数据采集
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于菜鸟学Python数据分析 1.网页分析 本文以爬取<脱 ...
- python爬取腾讯视频弹幕_网络爬虫实战(四):爬取腾讯视频电视剧弹幕-Go语言中文社区...
文章目录 实战背景 说到被翻拍最多的大概就是金庸先生的剧了,有华人的地方就会有金庸剧.而在他的多部小说中,翻拍次数最多的无疑就是<倚天屠龙记>了,而且次数已经高达十四次.最早的是1963香 ...
- python 爬取B站视频弹幕信息
获取B站视频弹幕,相对来说很简单,需要用到的知识点有requests.re两个库.requests用来获得网页信息,re正则匹配获取你需要的信息,当然还有其他的方法,例如Xpath. 进入你所观看的视 ...
- php 文字弹幕效果代码,视频弹幕特效代码
视频弹幕特效代码 弹幕 样式 字号 大号 中号 小号 颜色 #ffffff 点击输入弹幕(仅限25字以内) var thisColor,fontSize; $(function(){ $('.font ...
最新文章
- Java 洛谷 P1424 小鱼的航程(改进版)
- MGM Resorts和NRG Energy在美国完成最大屋顶光伏阵列的安装
- 怎么写出一份令人惊叹的设计文档?
- 自定义应用Crash时系统显示的对话框
- 第一章 计算机语言分类
- 东南亚ERP仓储管理系统怎么样?
- Jersey Restful WebService 接收 JSON 数组 对象
- java string返回_老生常谈Java String字符串(必看篇)
- ArcCatalog 连接远程SDE 连接字符
- IT服务体系工具支撑
- HIT 软件构造2019春 Lab2
- 『UE4数字孪生』开发流程浅析(持续更新)
- 网站建设-网站设计怎么样做的更好?
- 计算机win7卡顿如何解决方法,电脑win7系统出现卡顿怎么处理
- LAS语音识别框架发展简述
- The server time zone value 'xxx' is unrecognized or represents more than one time zone 问题的解决方法
- 普华i-VirtualCloud应用案例之--国家海洋局北海分局
- 本地调试(local debug)Hive源码
- 小飞鱼软件 大型生产企业设备档案管理系统介绍(图文)
- 互联网图像中的像素级语义识别
热门文章
- 数列的操作 div2
- 开发环境搭建---数据库环境搭建
- Xcode7 网络请求报错:The resource could not be loaded because the App Transport Security policy requir
- 57个机器人流程自动化应用场景:RPA深入指南[2019更新]
- 利用马青公式输出π的后任意位数字
- Day 18-Vue3 技术_新的组件
- 72.编辑距离105.前序中序遍历序列构造二叉树151.翻转字符串里的单词104.二叉树的最大深度76.最小覆盖子串110.平衡二叉树31.下一个排列
- vertical-align 与 line-height 傻傻分不清??
- 房山大数据北师大_北京师范大学2019级本科生新生大数据
- 遗传算法中常用的选择策略