用python爬取冰冰B站千条评论,我发现了这些...

255 阅读4分钟

Python爬取 冰冰 第一条B站视频的千条评论,绘制词云图,看看大家说了什么吧

B站当日弹幕获取
冰冰B站视频弹幕爬取原理解析

数据分析

import pandas as pd 

data = pd.read_excel(r"bingbing.xlsx")data.head() 

用户

性别

等级

评论

点赞

0

食贫道

6

[呆][呆][呆]你来了嘿!

158457

1

毕导THU

6

我是冰冰仅有的3个关注之一[tv_doge]我和冰冰贴贴

148439

2

老师好我叫何同学

6

[热词系列_知识增加]

89634

3

央视网快看

保密

6

冰冰来了!我们要失业了吗[doge][doge]

118370

4

厦门大学

保密

5

哇欢迎冰冰!!!

66196

原文链接

数据预处理

数据描述

data.describe() 

等级

点赞

count

1180.000000

1180.000000

mean

4.481356

2200.617797

std

1.041379

10872.524850

min

2.000000

1.000000

25%

4.000000

4.000000

50%

5.000000

9.000000

75%

5.000000

203.750000

max

6.000000

158457.000000

删除空值

data.dropna() 

用户

性别

等级

评论

点赞

0

食贫道

6

[呆][呆][呆]你来了嘿!

158457

1

毕导THU

6

我是冰冰仅有的3个关注之一[tv_doge]我和冰冰贴贴

148439

2

老师好我叫何同学

6

[热词系列_知识增加]

89634

3

央视网快看

保密

6

冰冰来了!我们要失业了吗[doge][doge]

118370

4

厦门大学

保密

5

哇欢迎冰冰!!!

66196

...

...

...

...

...

...

1175

黑旗鱼

保密

5

11小时一百万,好快[惊讶]

5

1176

是你的益达哦

6

冰冰粉丝上涨速度:11小时107.3万,平均每小时上涨9.75万,每分钟上涨1625,每秒钟...

5

1177

快乐风男崔斯特

4

军训的时候去了趟厕所,出来忘记是哪个队伍了。看了up的视频才想起来,是三连[doge][滑稽]

5

1178

很认真的大熊

5

我觉得冰冰主持春晚应该问题不大吧。[OK]

5

1179

飞拖鞋呀吼

保密

5

《论一个2级号如何在2020年最后一天成为百大up主》

5

1180 rows × 5 columns

删除空值

data.drop_duplicates() 

用户

性别

等级

评论

点赞

0

食贫道

6

[呆][呆][呆]你来了嘿!

158457

1

毕导THU

6

我是冰冰仅有的3个关注之一[tv_doge]我和冰冰贴贴

148439

2

老师好我叫何同学

6

[热词系列_知识增加]

89634

3

央视网快看

保密

6

冰冰来了!我们要失业了吗[doge][doge]

118370

4

厦门大学

保密

5

哇欢迎冰冰!!!

66196

...

...

...

...

...

...

1175

黑旗鱼

保密

5

11小时一百万,好快[惊讶]

5

1176

是你的益达哦

6

冰冰粉丝上涨速度:11小时107.3万,平均每小时上涨9.75万,每分钟上涨1625,每秒钟...

5

1177

快乐风男崔斯特

4

军训的时候去了趟厕所,出来忘记是哪个队伍了。看了up的视频才想起来,是三连[doge][滑稽]

5

1178

很认真的大熊

5

我觉得冰冰主持春晚应该问题不大吧。[OK]

5

1179

飞拖鞋呀吼

保密

5

《论一个2级号如何在2020年最后一天成为百大up主》

5

1179 rows × 5 columns

可视化

点赞TOP20

df1 = data.sort_values(by="点赞",ascending=False).head(20) 

from pyecharts import options as optsfrom pyecharts.charts import Barfrom pyecharts.faker import Faker c1 = (    Bar()    .add_xaxis(df1["评论"].to_list())    .add_yaxis("点赞数", df1["点赞"].to_list(), color=Faker.rand_color())    .set_global_opts(        title_opts=opts.TitleOpts(title="评论热度Top20"),        datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],    )    .render_notebook())c1 

等级分布

data.等级.value_counts().sort_index(ascending=False) 

6    1655    5024    3123    1382     63Name: 等级, dtype: int64 

from pyecharts import options as optsfrom pyecharts.charts import Piefrom pyecharts.faker import Faker c2 = (    Pie()    .add(        "",        [list(z) for z in zip([str(i) for i in range(2,7)], [63,138,312,502,165])],        radius=["40%", "75%"],    )    .set_global_opts(        title_opts=opts.TitleOpts(title="等级分布"),        legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),    )    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))    .render_notebook())c2 

性别分布

data.性别.value_counts().sort_index(ascending=False) 

from pyecharts import options as optsfrom pyecharts.charts import Piefrom pyecharts.faker import Faker c4 = (    Pie()    .add(        "",        [list(z) for z in zip(["男","女","保密"], ["404",'103','673'])],        radius=["40%", "75%"],    )    .set_global_opts(        title_opts=opts.TitleOpts(title="性别分布"),        legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),    )    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))    .render_notebook() )c4 

绘制词云图

from wordcloud import WordCloudimport jiebafrom tkinter import _flattenfrom matplotlib.pyplot import imreadfrom PIL import Image, ImageDraw, ImageFontimport matplotlib.pyplot as pltwith open('stoplist.txt', 'r', encoding='utf-8') as f:    stopWords = f.read()with open('停用词.txt','r',encoding='utf-8') as t:    stopWord = t.read()total = stopWord.split() + stopWords.split()def my_word_cloud(data=None, stopWords=None, img=None):    dataCut = data.apply(jieba.lcut)  # 分词    dataAfter = dataCut.apply(lambda x: [i for i in x if i not in stopWords])  # 去除停用词    wordFre = pd.Series(_flatten(list(dataAfter))).value_counts()  # 统计词频    mask = plt.imread(img)    plt.figure(figsize=(20,20))    wc  = WordCloud(scale=10,font_path='C:/Windows/Fonts/STXINGKA.TTF',mask=mask,background_color="white",)    wc.fit_words(wordFre)    plt.imshow(wc)    plt.axis('off')my_word_cloud(data=data["评论"],stopWords=stopWords,img="1.jpeg")

天气好冷,我整个人都是冰冰的

天气好冷,我整个人都是冰冰的

好了,今天的分享就到这,如果你对Python感兴趣,欢迎加入我们【python学习交流裙】,免费领取学习资料和源码。