目录

  • 1. 简介
  • 2. 弹幕数据的获取
    • 2.1 导包
    • 2.2 获取数据
  • 3. 分析数据
    • 3.1 统计每个Id的弹幕数,看是否有恶意刷屏
  • 4. 热度统计
    • 4.1 涉及每名成员的弹幕数量
    • 4.2 涉及每名成员的弹幕所属ID数量
    • 4.3 热度排名
    • 4.4 热力图
  • 5. 构建词云
  • 6. 链接
  • 代码中出现的文档

1. 简介

  • 这个博客是B站up主葩葩数据小姐姐的有关THE9爱奇艺扫楼 弹幕热度排名及词云图制作 视频的代码整理,有兴趣的同学可以参考 视频讲解,希望能给小姐姐多多点赞投币,以后有时间会把小姐姐的其他视频代码整理出来.

2. 弹幕数据的获取

2.1 导包

# 导入所需的包
import requests
import zlib
import re
import jieba
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import numpy as np
import PIL.Image as image
from wordcloud import WordCloud

2.2 获取数据

数据来自于6.11爱奇艺扫楼活动回放视频的弹幕

# 导入所需的包
url_base='https://cmts.iqiyi.com/bullet/56/00/16811915600_300_'
content_l=[]
id_l=[]for i in range(1,30):try:url = url_base+str(i)+'.z'res = requests.get(url).contentprint('Page '+str(i)+' loading...')res_byte = bytearray(res)xml = zlib.decompress(res_byte).decode('utf-8')findContent = re.compile(r'<content>(.*)</content>')findID = re.compile(r'<uid>(.*)</uid>')content_l += re.findall(findContent, xml)id_l += re.findall(findID, xml)except:print('Over')  break

运行结果:

3. 分析数据

d = {'Content':content_l,'ID':id_l}   # 词云图本身是不用id的  但是这里统计一下每个id的留言次数 看是不是恶意刷屏
df = pd.DataFrame(d)
df

运行结果:

3.1 统计每个Id的弹幕数,看是否有恶意刷屏

id_d = {}
for id in id_l:if not id in id_d:id_d[id] = 1else:id_d[id] += 1id_sort = sorted(id_d.items(), key=lambda x:x[1], reverse=True)
for id in id_sort[:15]:print('ID:'+str(id[0][:6])+'xxxx 次数'+str(id[1]))

运行结果:

# 看一下排名前5的id 究竟发了什么
for id in id_sort[:5]:print('ID '+str(id[0][:6])+'xxxx:')print(df[['Content']][df["ID"]==id[0]])

运行结果:

4. 热度统计

# 制作词典
name_d={}
name_d['刘雨昕']=['雨','昕','刘老师','刘雨欣']
name_d['虞书欣']=['欣欣','虞','鱼']
name_d['许佳琪']=['许','佳','ki','Ki','KI']
name_d['喻言']=['喻','言','忙内','特种兵']
name_d['谢可寅']=['寅','shaking','Shaking','SHAKING','虎子']
name_d['安崎']=['崎','陈雅馨','安琦','安琪']
name_d['赵小棠']=['赵','棠','铁牛']
name_d['孔雪儿']=['雪','孔','大壮','猪猪']
name_d['陆柯燃']=['陆','柯','燃','小陆公主']
name_d['THE9']=['the9','The9','THE9','NINE','Nine','nine','团','组合']
name_d

运行结果:

for name in name_d:nickname_str = name_d[name][0]try:for nickname in name_d[name][1:]:nickname_str+='|'+nicknameexcept:nonedf[name]=df.Content.str.contains(nickname_str)
df

运行结果:

其中,True代表这条弹幕中包含了对应列(姓名)的关键字。

4.1 涉及每名成员的弹幕数量

name_l = list(name_d.keys())
df_count = df.replace(True,1)
df_sum=df_count.groupby('ID')[name_l].sum()
df_sum_distinct=df_sum.replace(range(1,500),1)
df_sum.sum().sort_values(ascending=False)  # 按照弹幕条数进行统计

运行结果:

4.2 涉及每名成员的弹幕所属ID数量

df_sum_distinct.sum().sort_values(ascending=False)  # 按照发弹幕的人数进行统计

运行结果:

4.3 热度排名

name_bar_l=df_sum_distinct.sum().sort_values(ascending=False).index.tolist()
num_bar_l=df_sum_distinct.sum().sort_values(ascending=False).values.tolist()%matplotlib inline
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # 用来正常显示中文标签
title = '弹幕讨论热度排名'
plt.figure(figsize=(18,9))
plt.title(title)
plt.xlabel('姓名')
plt.ylabel('弹幕提及人数')
plt.bar(name_bar_l, num_bar_l)
plt.show()

运行结果:

4.4 热力图

# 计算相关性
d_corr = {}
for name in name_l:d_corr[name]=df_sum_distinct.loc[(df_sum_distinct[name]==1)].sum().values.tolist()
df_corr = pd.DataFrame(d_corr, index=name_l)
df_corr = df_corr.replace(df_sum_distinct.sum().values.tolist(),0)
df_corr

运行结果:

fig = plt.figure(figsize=(19, 10))
ax = sns.heatmap(df_corr, annot=True, linewidths=0.5, cmap='coolwarm')
bottom, top = ax.get_ylim()
ax.set_ylim(bottom+0.5,top-0.5)
ax.set_title('被同一ID提及', fontdict={'fontsize':12,'fontweight':'heavy'})

运行结果:

5. 构建词云

content = ""
for line in df.Content[df['刘雨昕']==True].tolist():  # 之前再df已经对每个人的评论做了分类 提及就为Truecontent += line
content

运行结果:

jieba.load_userdict('The9') # The9 关键词词库:根据切词结果 不断完善
stopwords = [line.strip() for line in open('stopwords').readlines()]  # stopwords 停用词:根据词频 不断完善
cutcontent = jieba.lcut(content)finalContent=[]
for word in cutcontent:if not word in stopwords:finalContent.append(word)
sta = {}
for word in finalContent:sta[word] = sta.get(word, 0) + 1sorted(sta.items(), key = lambda x : x[1], reverse = True)

运行结果:

def wordCount(name):content = ""for line in df.Content[df[name]==True].tolist(): content += line cutcontent = jieba.lcut(content)finalContent=[]for word in cutcontent:if not word in stopwords:finalContent.append(word)sta = {}for word in finalContent:sta[word] = sta.get(word, 0) + 1return sorted(sta.items(), key = lambda x : x[1], reverse = True)def wordcouldContent(name):content = ""for line in df.Content[df[name]==True].tolist(): content += line cutcontent = jieba.lcut(content)finalContent=[]for word in cutcontent:if not word in stopwords:finalContent.append(word)text = " ".join(finalContent)  # 注意这里分号之间要有空格return text
wordCount("虞书欣")

运行结果:

def wordcloudShow(name):text = wordcouldContent(name)mask = np.array(image.open("a.png"))wordcloud = WordCloud(# mask = mask,  #可以自定义词云的轮廓background_color='white',max_words=15,width=8000, height=6000,font_path='/System/Library/Fonts/PingFang.ttc',collocations=False, # 防止出现重复词regexp = r"\w[\w']*").generate(text)   plt.imshow(wordcloud)plt.axis("off")plt.show()

运行结果:

6. 链接

  • 关于 代码对应的视频讲解 ,参考 这儿.

代码中出现的文档

1、stopwords.txt

!
了
?
的
啊
吗
我
是
在
有
好
你
就
都
吧
呀
和
,
;
,
&#
;
什么
这么
不
想
怎么
时候
说
'
多
看
要
很
可以
太
感觉
那
那个
~
这
这个
她
哈
哈哈
哈哈哈
哈哈哈哈
真的
被
给
也
一直
刘雨昕
虞书欣
许佳琪
喻言
谢可寅
安崎
赵小棠
孔雪儿
陆柯燃
人
一个
一条
小
让
啦
——
没
又
还
嘛
死
哦
能
不能
么
自己
别人
到
个
我们
没有
一下

2、THE9.txt

刘雨昕
虞书欣
许佳琪
喻言
谢可寅
安崎
赵小棠
孔雪儿
陆柯燃
THE9
the9
The9
节奏病
c位
绝对c位
欣欣子
许你佳景
琪聚山顶
狮子猫
忙内
南风有叙
还是喻言
小哭包
果汁美貌
小陆公主
螺蛳粉
反手撑
男团舞

THE9爱奇艺扫楼 弹幕热度排名及词云图制作相关推荐

  1. 爱奇艺世界大会|开幕式速览:智能制作助推影视工业化,匠心构筑行业健康生态...

    5月13日,以"向新生 共未来"为主题的2021爱奇艺世界·大会在上海举行.两天的会议期间,17场论坛汇聚来自全球的行业专家.学者.合作伙伴,围绕内容与科技.会员经济.IP生态.新 ...

  2. 爱奇艺评论爬虫、词频统计、词云、PaddleHub内容审核

    需求 第一步:爱奇艺<青春有你2>评论数据爬取(参考链接:https://www.iqiyi.com/v_19ryfkiv8w.html#curid=15068699100_9f9bab7 ...

  3. 用Python爬取B站、腾讯视频、芒果TV和爱奇艺视频弹幕

    众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列.通过分析弹幕,我们可以快速洞察广大观众对于视频 ...

  4. 爱奇艺手机html页面,手机爱奇艺弹幕消失了

    为什么我的爱奇艺弹幕没有了,是什么问题?是手机 为什么苹果手机上爱奇艺没有弹幕开关的设置按钮了 爱奇艺的那些评论和弹幕我怀疑就是他们工作人员或视频节目组人员发的,一般观众的根本不可能让你发出来,太恶心 ...

  5. 《声入人心》收官盛典终极来袭,爱奇艺弹幕应援发射嗨满屏

    <声入人心>收官之作, 即将惊艳来袭! "梅溪湖36子"神仙集结, 回顾比赛历程超强催泪. 成员终极一战, 舞台大秀.声光盛宴再度升级, 更有迪玛希.黄明昊等各行业代表 ...

  6. 从财报看爱奇艺增长想象 长视频巨头要说“10分钟”新故事

    北京时间2020年2月28日, 爱奇艺公布截至到2019年12月31日的第四季度和全年未经审计的财务报告.财报数据显示,2019财年爱奇艺总营收达到290亿元(约42亿美元),同比增长16%,其中第四 ...

  7. 爱奇艺世界大会|刘文峰:科技创新如何为用户和艺术家服务?

    科技创新和娱乐结合会擦出怎样的火花?艺术家和工程师要如何无间合作? 5月13日,以"向新生·共未来"为主题的2021爱奇艺世界·大会在上海举行.开幕式上,爱奇艺CTO兼基础架构和智 ...

  8. 比翼新电影计划”十大人气漫改网大片单发布 爱奇艺将独家上线

    5月26日,"比翼新电影计划"首次举行发布会,爱奇艺与腾讯影业.二十世纪福斯国际制作.新片场.新浪娱乐.伯乐影业.毒舌电影旗下好家伙影业七家业内知名公司组成强强联盟,正式公布十部改 ...

  9. 会员向上,广告向下:爱奇艺权衡之道不轻松

    作为流媒体界的网红,爱奇艺一直备受关注. 北京时间2019年2月22日,爱奇艺公布了截至2018年12月31日第四季度及全年未经审计的财务报告.财报显示,2018年爱奇艺总营收达到了250亿人民币,同 ...

最新文章

  1. java socket监控_ZeroMQ(java)中监控Socket
  2. Ubuntu升级到18.04
  3. Spotlight监控工具使用
  4. 数据结构-----基于双数组的Trie树
  5. 并发编程实践之公平有界阻塞队列实现
  6. 42 可写成成三个整数的立方和
  7. Linux 修复严重的内核代码执行漏洞
  8. 29muduo_net库源码分析(五)
  9. Python Tkinter教程–第1部分
  10. 第一章 Shiro简介——《跟我学Shiro》[张开涛]
  11. Android系统架构
  12. js 实现图片上传
  13. Android简易计算器的制作(源码)(两种方法)
  14. 《el-descriptions》 边框重叠问题
  15. java设置图片_JAVA 设置背景图片
  16. 使用dnsmasq作为dns服务器
  17. 2012 Android手机市场趋势大胆猜想
  18. Servlet 和Session的关系
  19. 人民日报终发文:国航“避重就轻、不作为、护犊子、体验差、听不进批评”...
  20. arm-none-eabi-gcc编译、链接选项详解

热门文章

  1. 无人机仿真SLAM_gazebopromethues
  2. Navicat Premium 12.1.20.0安装与激活
  3. Linux shuf, 数据采样
  4. php 防止注入函数,php 防止SQL注入函数
  5. 03 VS项目编译报错warning C4005: “AF_IPX”: 宏重定义warning C4005: “AF_IPX”: 宏重定义
  6. js中的对象转数组,数组转对象
  7. 基于php的校园通讯录电话号码查询系统
  8. 计算机组装配件选型,谈谈电脑安装及配件选择的经验教训(散件篇)
  9. linux --- Ansible篇
  10. linux 终端 渐变色,QT学习笔记-渐变填充