实操 | 复习Pandas一些常用操作

腾讯课堂 | Python网络爬虫与文本分析

我挺喜欢看B站up主-老师好我叫何同学 , 所以今天就用bsite库采集一下何同学的视频信息及评论数据,每个视频的评论以csv文件存储于data/comments内。

bsite库 | 采集B站视频信息、评论数据

本文涉及

  1. pandas读取数据

  2. 选取某列

  3. 多个dataframe的合并

  4. dataframe中某字段(series)的统计

  5. 中文分词

  6. 词频统计

  7. os库文件操作

一、视频

何同学视频相关信息

import pandas as pd

df = pd.read_csv('data/videos.csv')
df.head()

authorbvidaidmidcreatedlengthcommentdescriptionpicplaysubtitletitle
0老师好我叫何同学BV1TV411S7pw414410641163637592159878659405:3111874动画:joyteeth yami\n特效:flashyami\n感谢九老师对本期视频的巨大帮助!https://i2.hdslb.com/bfs/archive/cf4dbe6189b8d...5236179NaN【何同学】“看不见”的未来 小米透明电视使用体验
1老师好我叫何同学BV1Nt4y1D7pW626524324163637592159637023210:331742593D动画:joyteeth\n开头特效:flashyami\n制片:九老师\n感谢木头老师对...https://i2.hdslb.com/bfs/archive/3c1a8b5f76251...10823508NaN【何同学】我拍了一张600万人的合影...
2老师好我叫何同学BV1Xi4y1x7eM540601597163637592158876641805:0417924简介:\n滑屏程序:罗工\n网站 :银翼的魔术师MX\n动画:何同学 joyteeth ch...https://i2.hdslb.com/bfs/archive/d8713881cbcaf...6378068NaN【何同学】我用一万行备忘录做了个动画...
3老师好我叫何同学BV1wV411d7Dc412909688163637592158756103805:2517201感谢233同学帮助制作本期视频\n感谢橙同学借我的Mate XShttps://i2.hdslb.com/bfs/archive/a5f5b0e965137...4995826NaN【何同学4K】3299真香?iPhone SE使用体验
4老师好我叫何同学BV1YK4y1C7CU882566744163637592158565895007:5123851感谢@贰_33为本期视频加了音效\n开头是对马男波杰克S04E06的拙劣模仿https://i2.hdslb.com/bfs/archive/67b9aed25aa4c...6082972NaN【何同学】一只鸽子的自白

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 文件为例。该文件对应的视频为

  • 【何同学】我拍了一张600万人的合影...

import pandas as pd

df = pd.read_csv('data/comments/626524324.csv')
df.head()

contentdevicelikercountctimeavatarlevelsexsignunamemidoiddiag
0谢谢你为了一个个不知所云的网名特意做了这张照片。\n我也会记得曾有人如此地在意过一个我,尽管...NaN15940130NaNhttp://i1.hdslb.com/bfs/face/9b63957c5d35e4eaa...5保密羽猫今天码字了吗?Vf羽猫45165730626524324原评论
1[热词系列_泪目]真的好感动啊……明明是陌生人的我们被温柔地连在一起了NaN5090NaNhttp://i1.hdslb.com/bfs/face/6848c37c1b0389013...5保密NaN梧越1502390626524324原评论
2真的太浪漫了太有心了,不知道怎么夸了,全程张着嘴看完的,何同学真的太值得粉了![打call]NaN2830NaNhttp://i2.hdslb.com/bfs/face/1ad0b2e00938fe40c...5菜鸟就是我了_Real_me200720380626524324原评论
3我们和小何是双向的爱啊NaN1260NaNhttp://i1.hdslb.com/bfs/face/13fe65d8c9350e92d...4保密NaN子服呀411480205626524324原评论
4没啥说的,转就是了phone37913141NaNhttp://i2.hdslb.com/bfs/face/c1733474892caa459...6商务合作/广告/宣传片/影视摄制私信影视飓风946974626524324原评论

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)

contentdevicelikercountctimeavatarlevelsexsignunamemidoiddiag
0“麻麻,你看又来啦”哈哈哈哈哈哈phone15854NaNhttp://i0.hdslb.com/bfs/face/02198be3bfa559e74...5保密xzq 鞋 来打 胶热爱薛洁洁的阿新8636689419780443原评论
12020年来打破[微笑]NaN60NaNhttp://i0.hdslb.com/bfs/face/1496caccaea826e53...3保密这个b很懒,什么也没留下( ˘•ω•˘ )来自星星的冰心49631460719780443原评论
2回复 @来自星星的冰心 :哈哈哈哈哈哈哈phone20NaNhttp://i0.hdslb.com/bfs/face/02198be3bfa559e74...5保密xzq 鞋 来打 胶热爱薛洁洁的阿新8636689419780443原评论
3两年1200赞1回复,是真滴惨NaN10NaNhttp://i1.hdslb.com/bfs/face/c72123fd8ba16689e...5NaN黑兔不吃草33886805419780443原评论
4听口音就怀疑是太原小后生了 姐姐我太喜欢你这种有才华的人了哈哈phone257352NaNhttp://i2.hdslb.com/bfs/face/286d8afc470353007...4保密NaNDu锦荣792605819780443原评论

#评论数
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

近期文章

Python网络爬虫与文本数据分析
bsite库 | 采集B站视频信息、评论数据

rpy2库 | 在jupyter中调用R语言代码
tidytext | 耳目一新的R-style文本分析库
reticulate包 | 在Rmarkdown中调用Python代码
plydata库 | 数据操作管道操作符>>
plotnine: Python版的ggplot2作图库

七夕礼物 | 全网最火的钉子绕线图制作教程

读完本文你就了解什么是文本分析

文本分析在经管领域中的应用概述  
综述:文本分析在市场营销研究中的应用

plotnine: Python版的ggplot2作图库
小案例: Pandas的apply方法  
stylecloud:简洁易用的词云库 
用Python绘制近20年地方财政收入变迁史视频  
Wow~70G上市公司定期报告数据集

漂亮~pandas可以无缝衔接Bokeh  
YelpDaset: 酒店管理类数据集10+G  


  • 分享”和“在看”是更好的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值