我挺喜欢看B站up主-老师好我叫何同学 , 所以今天就用bsite库采集一下何同学的视频信息及评论数据,每个视频的评论以csv文件存储于data/comments内。 bsite库 | 采集B站视频信息、评论数据
本文涉及
一、视频何同学视频相关信息 import pandas as pd
df = pd.read_csv('data/videos.csv') df.head()
| author | bvid | aid | mid | created | length | comment | description | pic | play | subtitle | title |
---|
0 | 老师好我叫何同学 | BV1TV411S7pw | 414410641 | 163637592 | 1598786594 | 05:31 | 11874 | 动画:joyteeth yami\n特效:flashyami\n感谢九老师对本期视频的巨大帮助! | https://i2./bfs/archive/cf4dbe6189b8d... | 5236179 | NaN | 【何同学】“看不见”的未来 小米透明电视使用体验 |
---|
1 | 老师好我叫何同学 | BV1Nt4y1D7pW | 626524324 | 163637592 | 1596370232 | 10:33 | 174259 | 3D动画:joyteeth\n开头特效:flashyami\n制片:九老师\n感谢木头老师对... | https://i2./bfs/archive/3c1a8b5f76251... | 10823508 | NaN | 【何同学】我拍了一张600万人的合影... |
---|
2 | 老师好我叫何同学 | BV1Xi4y1x7eM | 540601597 | 163637592 | 1588766418 | 05:04 | 17924 | 简介:\n滑屏程序:罗工\n网站 :银翼的魔术师MX\n动画:何同学 joyteeth ch... | https://i2./bfs/archive/d8713881cbcaf... | 6378068 | NaN | 【何同学】我用一万行备忘录做了个动画... |
---|
3 | 老师好我叫何同学 | BV1wV411d7Dc | 412909688 | 163637592 | 1587561038 | 05:25 | 17201 | 感谢233同学帮助制作本期视频\n感谢橙同学借我的Mate XS | https://i2./bfs/archive/a5f5b0e965137... | 4995826 | NaN | 【何同学4K】3299真香?iPhone SE使用体验 |
---|
4 | 老师好我叫何同学 | BV1YK4y1C7CU | 882566744 | 163637592 | 1585658950 | 07:51 | 23851 | 感谢@贰_33为本期视频加了音效\n开头是对马男波杰克S04E06的拙劣模仿 | https://i2./bfs/archive/67b9aed25aa4c... | 6082972 | NaN | 【何同学】一只鸽子的自白 |
---|
1.1 播放量视频平均播放量(单位: 万) df['play'].mean()/10000
379.38345675675674
1.2 评论量# 视频平均评论量 df['comment'].mean()
12769.243243243243
# 评论总量 df['comment'].sum()
472462
1.3 视频时长视频平均时长(单位: min) def minute2second(minute): info = minute.split(':') return int(info[0])*int(info[1]) df['length'].apply(minute2second).mean()/60
3.433333333333333
1.4 词频统计对何同学视频的description字段数据进行汇总,分词、词频统计 import jieba import re
# 整理数据 df['description'] = df['description'].astype(str) description = ''.join(df['description'])
#清洗数据 description = ''.join(re.findall('[\u4e00-\u9fa5]+', description))
# 分词&词频统计个 words = jieba.lcut(description) wordfreqs = [] for word in set(words): freq = words.count(word) wordfreqs.append((word, freq))
# 保存结果 data = pd.DataFrame(wordfreqs, columns=['word', 'freq']) data.to_csv('output/视频词频.csv', index=False)
1.5 关键词使用stylecloud进行词云图可视化 import stylecloud
stopwords = open('data/stopwords.txt', encoding='utf-8').read().split('\n')
stylecloud.gen_stylecloud(file_path='output/视频词频.csv', font_path='data/SourceHanSansCN-Regular.otf', output_name='output/何同学的视频关键词.png', size=500, custom_stopwords=stopwords)
output/何同学的视频关键词.png)二、评论2.1 评论文件查看所有评论csv数据存储于data/comments文件夹内,查看下csv import os
os.listdir('data/comments')
['19780443.csv', '28684677.csv', '540601597.csv', '79091085.csv', '.DS_Store', '412909688.csv', '23278605.csv', '17703816.csv', '15196234.csv', '69358135.csv', '60043361.csv', '54737593.csv', '35049732.csv', '882566744.csv', '414410641.csv', '19205223.csv', '27469164.csv', '42349835.csv', '29437173.csv', '81516881.csv', '15147368.csv', '47180907.csv', '66210564.csv', '49432234.csv', '33249554.csv', '16581287.csv', '33489311.csv', '22042515.csv', '43248892.csv', '20209991.csv', '37220850.csv', '74166406.csv', '30630027.csv', '92699533.csv', '32146794.csv', '44080002.csv', '52466874.csv', '626524324.csv']
## 评论文件个数(视频个数) len(os.listdir('data/comments'))
38
2.2 查看某评论csv评论文件夹内有很多字段,这里以 data/comments/626524324.csv 文件为例。该文件对应的视频为 import pandas as pd
df = pd.read_csv('data/comments/626524324.csv') df.head()
| content | device | like | rcount | ctime | avatar | level | sex | sign | uname | mid | oid | diag |
---|
0 | 谢谢你为了一个个不知所云的网名特意做了这张照片。\n我也会记得曾有人如此地在意过一个我,尽管... | NaN | 15940 | 130 | NaN | http://i1./bfs/face/9b63957c5d35e4eaa... | 5 | 保密 | 羽猫今天码字了吗? | Vf羽猫 | 45165730 | 626524324 | 原评论 |
---|
1 | [热词系列_泪目]真的好感动啊……明明是陌生人的我们被温柔地连在一起了 | NaN | 509 | 0 | NaN | http://i1./bfs/face/6848c37c1b0389013... | 5 | 保密 | NaN | 梧越 | 1502390 | 626524324 | 原评论 |
---|
2 | 真的太浪漫了太有心了,不知道怎么夸了,全程张着嘴看完的,何同学真的太值得粉了![打call] | NaN | 283 | 0 | NaN | http://i2./bfs/face/1ad0b2e00938fe40c... | 5 | 女 | 菜鸟就是我了 | _Real_me | 200720380 | 626524324 | 原评论 |
---|
3 | 我们和小何是双向的爱啊 | NaN | 126 | 0 | NaN | http://i1./bfs/face/13fe65d8c9350e92d... | 4 | 保密 | NaN | 子服呀 | 411480205 | 626524324 | 原评论 |
---|
4 | 没啥说的,转就是了 | phone | 37913 | 141 | NaN | http://i2./bfs/face/c1733474892caa459... | 6 | 男 | 商务合作/广告/宣传片/影视摄制私信 | 影视飓风 | 946974 | 626524324 | 原评论 |
---|
2.3 评论词频统计文件比较多,处理过程较慢 import pandas as pd import os
#获取所有csv路径 files = os.listdir('data/comments') files = ['data/comments/'+f for f in files if 'csv' in f]
dfs = [] #打开所有的csv, 合并多个df for file in files: df = pd.read_csv(file) dfs.append(df)
alldf = pd.concat(dfs) alldf.head()
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3063: DtypeWarning: Columns (2,3,4,6,10,11) have mixed types.Specify dtype option on import or set low_memory=False. interactivity=interactivity, compiler=compiler, result=result)
| content | device | like | rcount | ctime | avatar | level | sex | sign | uname | mid | oid | diag |
---|
0 | “麻麻,你看又来啦”哈哈哈哈哈哈 | phone | 1585 | 4 | NaN | http://i0./bfs/face/02198be3bfa559e74... | 5 | 保密 | xzq 鞋 来打 胶 | 热爱薛洁洁的阿新 | 86366894 | 19780443 | 原评论 |
---|
1 | 2020年来打破[微笑] | NaN | 6 | 0 | NaN | http://i0./bfs/face/1496caccaea826e53... | 3 | 保密 | 这个b很懒,什么也没留下( ˘·ω·˘ ) | 来自星星的冰心 | 496314607 | 19780443 | 原评论 |
---|
2 | 回复 @来自星星的冰心 :哈哈哈哈哈哈哈 | phone | 2 | 0 | NaN | http://i0./bfs/face/02198be3bfa559e74... | 5 | 保密 | xzq 鞋 来打 胶 | 热爱薛洁洁的阿新 | 86366894 | 19780443 | 原评论 |
---|
3 | 两年1200赞1回复,是真滴惨 | NaN | 1 | 0 | NaN | http://i1./bfs/face/c72123fd8ba16689e... | 5 | 男 | NaN | 黑兔不吃草 | 338868054 | 19780443 | 原评论 |
---|
4 | 听口音就怀疑是太原小后生了 姐姐我太喜欢你这种有才华的人了哈哈 | phone | 2573 | 52 | NaN | http://i2./bfs/face/286d8afc470353007... | 4 | 保密 | NaN | Du锦荣 | 7926058 | 19780443 | 原评论 |
---|
#评论数 len(alldf)
440898
数据采集时遇到网络问题,所以跟之前的评论总数472462对不上. 评论者性别分布为了省事,这里假设评论者只发一条评论,直接对alldf的sex字段进行性别统计 alldf['sex'].value_counts()
保密 228191 男 128857 女 83848 sex 2 Name: sex, dtype: int64
alldf['sex'].value_counts(normalize=True)
保密 0.517560 男 0.292260 女 0.190176 sex 0.000005 Name: sex, dtype: float64
没想到保密的占了一半,如果排除保密,还是男粉多一些。 评论者设备分布alldf['device'].value_counts()
phone 88384 pad 20793 android 5003 unknown 1671 device 2 Name: device, dtype: int64
alldf['device'].value_counts(normalize=True)
phone 0.762898 pad 0.179477 android 0.043184 unknown 0.014423 device 0.000017 Name: device, dtype: float64
本文代码和数据集 下载链接:https://pan.baidu.com/s/1rDlhFhEniGv2CsZ9OqO7Iw 密码:1fv7
|