1. 数据说明

这里只是为了学习,利用python爬取它的第1,2和3集danmu评论数据,具体的过程就不细述了,下面我们来细说,处理和分析《雪中悍刀行》的danmu评论。

2. 数据处理

首先,读取并采用concat方法合并各集danmu评论数据,同时,增加一列标签,以区两个合并后的数据来自哪一集。

import pandas as pddf1 = pd.read_csv("./data/雪中悍刀行第1集弹幕.csv")
df1["集数"] = "1"
df2 = pd.read_csv("./data/雪中悍刀行第2集弹幕.csv")
df2["集数"] = "2"
df3 = pd.read_csv("./data/雪中悍刀行第3集弹幕.csv")
df3["集数"] = "3"df = pd.concat([df1, df2, df3])
# 保存合并后的数据
df.to_csv("./data/雪中悍刀行第123集danmu.csv", encoding = "utf_8_sig", index=False)
# 查看数据属性信息
print(df.info())
df.sample(10)

预览如下

2.1 查看各列整体是否有缺失值,重复值情况

# 查看一下各列整体的缺失值
df.isnull().sum(axis=0)

结果

用户名      8
评论id     0
内容       4
类型       0
评论时间点    0
评论点赞     0
集数       0
dtype: int64
# 再查看一下每一行数据是否存在重复值
df.duplicated().sum()

得到竟然有61373行数据是存在重复值。

通过上面,观察数据,发现数据存在以下几个问题:
字段名称可调整;用户名字列和内容列有缺失值,可删除;评论时间点字段类型需要调整;数据存在重复值删除。

# 重命名字段
df = df.rename(columns={'用户名':'用户昵称','内容':'弹幕内容','评论时间点':'发送时间','评论id':'弹幕id'})

删除重复数据。根据列的唯一性,可以把它作为作为参照,如存在多行相同,那么只保留最开始出现的一行。

df.drop_duplicates(subset=['弹幕内容','发送时间'], keep='first', inplace=True)
# 重置索引
df.reset_index(drop=True, inplace=True)
df.shape

缺失值处理

df.dropna(how = 'all') #只删除全是缺失值的行

发送时间处理

# 发送时间列单位是秒数,这里自定义一个time_change函数进行处理
def time_change(seconds):m, s = divmod(seconds, 60)h, m = divmod(m, 60)ss_time = "%d:%02d:%02d" % (h,m, s)print(ss_time)return ss_time
time_change(seconds=6666)# 将time_change函数用于发送时间列
df["发送时间"] = df["发送时间"].apply(time_change)

设置为需要的时间格式

df['发送时间'] = pd.to_datetime(df['发送时间'])
df['发送时间'] = df['发送时间'].apply(lambda x: x.strftime('%H:%M:%S'))

2.2 danmu评论去重处理
这里的danmu评论内容去重,使用机械压缩去重方法:机械压缩去重即数据句内的去重,我们发现弹幕内容存在,例如:"你你你们也来学习学习真的真的很好很好"这种数据,而实际做情感分析时,只需要一个“你们也来学习真的很好”即可。

# 机械压缩去重:自定义机械压缩函数
def yasuo(st):for i in range(1,int(len(st)/2)+1):for j in range(len(st)):if st[j:j+i] == st[j+i:j+2*i]:k = j + iwhile st[k:k+i] == st[k+i:k+2*i] and k<len(st):   k = k + ist = st[:j] + st[k:]    return st
print(yasuo(st="你你你们也来学习学习真的真的很好很好"))
# out:'你们也来学习真的很好'# 调用机械压缩函数,对弹幕内容进行句子进行去重
df["弹幕内容"] = df["弹幕内容"].apply(yasuo)

2.3 特殊字符过滤
特殊字符直接利用正则表达式过滤,只保留中文内容。

# 提取中文内容
df['弹幕内容'] = df['弹幕内容'].str.extract(r"([\u4e00-\u9fa5]+)")
df = df.dropna()  #纯表情直接删除

同时,过短的danmu评论内容一般很难看出情感倾向,这里过滤掉评论字数少于2个字的评论。

df = df[df["弹幕内容"].apply(len)>=2]
df = df.dropna()
# 保存清洗后的数据
df.to_csv("./data/清洗后_雪中悍刀行第123集danmu.csv",encoding="utf-8",index=False)
# 清洗后数据,如下所示
df.sample(10)

3. 简单可视化分析

3.1 danmu评论发送量 Top10

# 幕发送量Top10榜单
danmu_counts = df.groupby('弹幕内容')['弹幕id'].count().sort_values(ascending= False).reset_index()
danmu_counts.columns = ['弹幕','累计发送弹幕数']
danmu_counts.head(10)

可视化更直观地看:

from pyecharts.charts import *
import pyecharts.options as opts
from pyecharts.globals import ThemeTypedanmu_counts = df['弹幕内容'].value_counts()[:10].sort_values()
x_data = danmu_counts.index.tolist()
y_data = danmu_counts.values.tolist()b = (Bar().add_xaxis(x_data).add_yaxis('',y_data).set_global_opts(title_opts = opts.TitleOpts(title='累计发送弹幕发送量Top10句子')).set_series_opts(label_opts=opts.LabelOpts(is_show=True,position='right')).reversal_axis()
)
b.render_notebook()

可以看到第一,‘徐凤年’ 2417次,第二,‘北椋铁骑’2389次。这两个词遥遥领先。

3.2 各集danmu评论数量对比

lt = df['集数'].value_counts().sort_values()
x_data = lt.index.tolist()
y_data = lt.values.tolist()b = (Bar().add_xaxis(x_data).add_yaxis('',y_data).set_global_opts(title_opts = opts.TitleOpts(title='各集的弹幕数')).set_series_opts(label_opts=opts.LabelOpts(is_show=True,position='right')).reversal_axis()
)
grid = Grid(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))
grid.add(b, grid_opts=opts.GridOpts(pos_left="20%"))
grid.render_notebook()


3.3 danmu评论的类型

rt = df["类型"].value_counts()[:10].sort_values().tolist()
print(rt)
b = (Pie().add("", [list(z) for z in zip(["0", "2"], rt)]).set_global_opts(title_opts = opts.TitleOpts(title='类型')).set_series_opts(label_opts=opts.LabelOpts(is_show=True,position='right'))
)
grid = Grid(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))
grid.add(b, grid_opts=opts.GridOpts(pos_left="20%"))
grid.render_notebook()


3.4 谁是danmu评论王

df5 = df["用户昵称"].value_counts()[0:10]
df5 = df5.sort_values(ascending=True)
df5 = df5.tail(10)
print(df5.index.to_list())
print(df5.to_list())c = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)).add_xaxis(df5.index.to_list()).add_yaxis("",df5.to_list()).reversal_axis() #X轴与y轴调换顺序.set_global_opts(title_opts=opts.TitleOpts(title="弹幕用户TOP10",subtitle="数据来源:腾讯视频",pos_left = 'left'),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改横坐标字体大小yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改纵坐标字体大小).set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right')))
c.render_notebook()


用户昵称是*。* 的观众的danmu评论数量最多,其次是*.*用户昵称的观众。下面随机抽取10条数据,看看第一用户发了什么弹幕。

3.5 danmu评论都在说什么

import jieba
import stylecloud
import matplotlib.pyplot as plt
from IPython.display import Image# 定义分词函数
def get_cut_words(content_series):# 读入停用词表stop_words = [] with open("./stop_words.txt", 'r', encoding='utf-8') as f:lines = f.readlines()for line in lines:stop_words.append(line.strip())# 可添加关键词my_words = ['']  for i in my_words:jieba.add_word(i) # 可自定义停用词my_stop_words = ['']  stop_words.extend(my_stop_words)               # 分词word_num = jieba.lcut(content_series.str.cat(sep='。'), cut_all=False)# 条件筛选word_num_selected = [i for i in word_num if i not in stop_words and len(i)>=2]return word_num_selected
# 绘制词云图
text1 = get_cut_words(content_series=df['弹幕内容'])
stylecloud.gen_stylecloud(text=' '.join(text1), max_words=300,collocations=False,font_path='STXINWEI.TTF',icon_name='fas fa-square',size=653,output_name='./雪中悍刀行.png')
Image(filename='./雪中悍刀行.png')

通过danmu评论词云图,我们发现,出现概率最大的弹幕有“北椋铁骑、徐凤年、排面、姜泥、公主、老黄和可爱”等。

Python分析《雪中悍刀行》danmu,看看网友们观看时有什么吐槽相关推荐

  1. Python爬虫+数据分析+数据可视化(分析《雪中悍刀行》弹幕)

    Python爬虫+数据分析+数据可视化(分析<雪中悍刀行>弹幕) 哔哔一下 爬虫部分 代码部分 效果展示 数据可视化 代码展示 效果展示 视频讲解 福利环节 哔哔一下 雪中悍刀行兄弟们都看 ...

  2. Python爬取了《雪中悍刀行》数据,数据可视化分析

    Python爬取了<雪中悍刀行>数据,数据可视化分析 如何查找视频id 项目结构 制作词云图 制作最近评论数条形图与折线图 制作每小时评论条形图与折线图 制作最近评论数饼图 制作每小时评论 ...

  3. 为什么这么火?用 Python 爬取并分析了《雪中悍刀行》数据,发现了其中的秘密

    大家好,今天本文我们对腾讯热播剧<雪中悍刀行>的一次爬虫与数据分析,总爬取条数1W条评论并对数据进行可视化分析,喜欢本文记得收藏,点赞.关注.需要进交流群可以文末进来. 干货推荐 Pyth ...

  4. Python可视化分析《雪中悍刀行》,看看它为什么这么火?

    本期是对热播网剧<雪中悍刀行>的一次爬虫与数据分析,总爬取条数1W条评论,很适合新人练手.案例中还特别加入了对评论的情绪文本分析处理,供大家参考. 爬虫方面:由于腾讯的评论数据是封装在js ...

  5. 用 Python 爬取了《雪中悍刀行》数据,终于知道它为什么这么火了

    转载来源/志斌的python笔记 绪论 大家好,我是J哥. 本期是对腾讯热播剧--雪中悍刀行的一次爬虫与数据分析,耗时一个小时,总爬取条数1W条评论,很适合新人练手. 爬虫方面:由于腾讯的评论数据是封 ...

  6. 用Python采集《雪中悍刀行》弹幕做成词云实例

    大家好,本篇文章主要讲的是用Python采集<雪中悍刀行>弹幕做成词云实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下.编程学习资料点击免费领取 目录 前言 知识点介绍 环境介 ...

  7. 《雪中悍刀行》你追了吗?他凭什么这么火。有啥不知情的内容吗?Python来告诉你。

    本期是对热播网剧<雪中悍刀行>的一次爬虫与数据分析,总爬取条数1W条评论,很适合新人练手.案例中还特别加入了对评论的情绪文本分析处理,供大家参考. 爬虫方面:由于腾讯的评论数据是封装在js ...

  8. 通过学习Python+request,爬取《雪中悍刀行》小说

    @TOC获取雪中悍刀行的小说章节 1.获取雪中悍刀行的小说网址:https://www.37zw.net/0/761/ 先获取需要爬取小说的网址,然后再在当前页面中解析,它每一章的具体后缀网址信息和章 ...

  9. R语言 基于共现提取《雪中悍刀行》人物关系并画网络图

    概述 雪中悍刀行作为现象级的网文,电视剧版即将上映,作为曾经的一员"妖孽"书粉,按捺不住想做点啥.最近在研究知识图谱,就以此为契机展开相关研究吧. 本文将基于简单共现关系,编写 R ...

最新文章

  1. 适用于Linux命令的10个R函数
  2. 原生js——四种对话框
  3. ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程
  4. 如何插入页面,PDF怎么插入页面
  5. java-Java可以对方法进行序列化?
  6. Spring中日期格式转换
  7. 华为 鸿蒙只是物联网,“鸿蒙”不只是手机系统,任正非:是为物联网所打造的系统...
  8. springboot嵌入thymeleaf后css404_SpringBoot2整合Thymeleaf
  9. Dijkstra的理解和实现
  10. 前端全栈大佬是如何使用javaScript实现一个焦点图
  11. linux mysql 删除表脚本_linux shell脚本自动删除mysql表前3个月的数据
  12. java 递归_采用递归算法求解迷宫问题(Java版) | 附代码+视频
  13. 自学python顺序-Python学习之调换顺序
  14. 黑群DS3617xs 6.2.3套件中心无法添加第三方源/添加第三方源失败解决方案/群晖套件中心无效的位置解决
  15. 如何刷新微信服务器小程序版本,微信小程序线上更新版本流程及如何运用
  16. Visual Studio NuGet程序包找不到源
  17. 超简单的wf日记程序
  18. Latex大括号及多行公式
  19. 笔记本电脑无法进入睡眠状态_笔记本电脑进入睡眠状态后无法通过鼠标或键盘来唤醒屏幕怎么解决...
  20. IPEmotion数据处理-分类元件的灵活运用——车辆制动次数的多样计算

热门文章

  1. Kubernetes实战(部署+生产案例)
  2. 投影串口测试程序_投影机串口码
  3. k8s排查无法访问服务
  4. Linux必备软件之SSH
  5. block中断 virtio_virtio-blk浅析[转]
  6. 哈希表题目:设计哈希映射
  7. 两台笔记本实现无线投屏且分屏(适用win10系统)
  8. 精典电子画册(杂志)制作,值得一看--转载
  9. 小米官网竖直导航栏html,演示:小米首页纵向导航栏特效(上)
  10. Java判断回文序列