今日看点

案例 (五)电视剧《沉默的真相》数据分析

发表于话题:沉默的真相解析
发布时间:2021-06-09
image.png

代码及数据下载链接见文章末尾

一、导库

这里主要用的库有数据科学相关的numpy, pandas, 正则表达式re库,中文分词的jieba库,以及画图相关的pycharts库等。另外,为了能够在jupyter lab中直接画图,需要设置一下环境变量,声明画图的环境。

# 数据科学 import numpy as np import pandas as pd # 正则表达式 import re import jieba # 画图相关 from pyecharts.charts import Pie, Bar, Map, Line, Page from pyecharts import options as opts from pyecharts.globals import SymbolType, WarningType WarningType.ShowWarning = False pd.options.display.max_rows = 1000 # 设置画图环境,jupyter lab 中直接画图 from pyecharts.globals import CurrentConfig, NotebookType CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB import stylecloud from IPython.display import Image # 用于在jupyter lab中显示本地图片 from collections import Counter

二、读取数据

2.1、读入数据:

直接读取的豆瓣的评论数据

df = pd.read_excel('../数据/沉默的真相豆瓣短评.xlsx') print(df.shape) print(df.info()) image.png

查看读入数据的前几条。

df.head() image.png

2.2、查看重复值和空值

让我们来看看是否有重复值和空值。

# 查看重复值和空值 print(df.duplicated().sum()) print(df.isnull().sum()) image.png

结果没有重复值,空值,省去了数据的清洗这一步了。

三、数据预处理

3.1、删除列:

删除地址栏这一列,对我们分析没有起到作用。

# 删除列 df = df.drop('page_url', axis=1)

3.2、星级转换:

力荐,推荐,这些字符是纯中文的,没有明确的可量化比较的地方。所以将力荐,推荐,还行,较差,很差这些中文替换成星级的打分。

# 定义字典 def transform_rating(x): if x == '立荐': return '5星' elif x == '推荐': return '4星' elif x == '还行': return '3星' elif x == '较差': return '2星' elif x == '很差': return '1星' else: return '5星' # 异常值使用众数替换 # apply函数 df['rating_num'] = df.rating_num.apply(transform_rating)

查看星级的统计情况:

df.rating_num.value_counts() image.png

我们看到打5分的占到了绝大多数,说明这部电视剧的好评率还是蛮高的。

3.3、时间类型转换:

将时间转换到年月日,小时

comment_hour = df.comment_time.str.split(':').str[0] comment_hour = comment_hour.value_counts().sort_index() comment_hour[:5] image.png

3.4、分词处理:

我们需要从评论中提取关键有用信息,所以要先对评论进行分词处理。同时对停用词进行过滤,减少噪音的干扰。

# 定义分词函数 def get_cut_words(content_series): # 读入停用词表 stop_words = [] with open(r"../数据/stopword.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

四、可视化

4.1、星级分布情况:

让我们来具体看看星级的分布情况:

# 数据对 data_pair = [list(z) for z in zip(rating_num.index.tolist(), rating_num.values.tolist())] # 绘制饼图 pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px')) pie1.add('', data_pair=data_pair, radius=['35%', '60%']) pie1.set_global_opts(title_opts=opts.TitleOpts(title='总体评分分布'), legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_right='2%')) pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%")) pie1.set_colors(['#FF7F0E', '#1F77B4', '#2CA02C', '#D62728', '#946C8B']) pie1.load_javascript(); # 分号表示去除打印

load_javascript() 和 render_notebook() 在jupyter lab中换行执行,这样可以直接在jupyter lab中画图

pie1.render_notebook() image.png

5星好评率达到了92.8%,口碑爆棚啊,有没有。

4.2、评论时间走势

接下来,我们看看评论的时间分布情况。

# 选取数据 x_data = [i.replace('2020-','') for i in comment_hour.index] y_data = comment_hour.values.tolist() # 折线图 line1 = Line(init_opts=opts.InitOpts(width='1350px', height='750px')) line1.add_xaxis(x_data) line1.add_yaxis('', y_data, areastyle_opts=opts.AreaStyleOpts(opacity=0.5), markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]), label_opts=opts.LabelOpts(is_show=False) ) line1.set_global_opts(title_opts=opts.TitleOpts(title='评论时间走势图'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate='60')), visualmap_opts=opts.VisualMapOpts(max_=30)) line1.set_series_opts(linestyle_opts=opts.LineStyleOpts(width=3)) line1.load_javascript();

还是老规矩,换一行执行。

line1.render_notebook() image.png

我们可以看到评论最多的时间集中在9月16日,这大概是《沉默的真相》刚上映没多久的时间。

4.3、绘制关键词词云

最后,我们看一下评论的词云绘制情况。

text = get_cut_words(content_series=df.short_comment) # 绘制词云图 stylecloud.gen_stylecloud(text=' '.join(text), max_words=1000, collocations=False, font_path=r'C:\Windows\Fonts\msyh.ttc', icon_name='fas fa-chart-pie', size=653, output_name='../数据/沉默的真相-豆瓣短评.png') Image(filename='../数据/沉默的真相-豆瓣短评.png') image.png

可以看到,最关键的几个词是江阳,是案情的受害者,演技说明大家对这部戏的普遍的演员演技讨论的很多,看来是非常认可演技啊。原著和还原,说的是这部戏从小说改编过来。

资料下载:
源码下载:源码下载
数据下载:数据下载
停用词下载:停用词下载

标签组:[大数据

本文来源:https://www.kandian5.com/articles/30325.html

相关阅读

《望江南·多少恨》:李煜写于亡国后

文学特点赏析:“多少恨,昨夜梦魂中。”开头陡起,小词中罕见。所“恨”的当然不是“昨夜梦魂中”的情事,而是昨夜这场梦的本身。梦中的情事固然是词人时时眷恋着的,但梦醒后所面对的残酷现实却使他倍感难堪,所以...

2025-08-01

李煜《望江南·多少恨》:古之伤心人

《望江南·多少恨》是五代十国时期南唐后主李煜亡国入宋被囚后创作的一首记梦词。词人以词调名本意回忆江南旧游,抒写了梦中重温旧时游娱生活的欢乐和梦醒之后的悲恨,以梦中的乐景抒写现实生活中的哀情,表达对故国...

2025-08-01

李煜《蝶恋花·春暮》全文赏析

蝶恋花·春暮作者:李煜遥夜亭皋闲信步。才过清明,渐觉伤春暮。数点雨声风约住。朦胧淡月云来去。桃杏依稀香暗渡。谁在秋千,笑里轻轻语。一寸相思千万绪。人间没个安排处。译文夜间在亭台上踱着步子,不知道为何清...

2025-08-01

《浪淘沙·往事只堪哀》:孤寂凄苦

浪淘沙·往事只堪哀作者:李煜往事只堪哀,对景难排。秋风庭院藓侵阶。一任珠帘闲不卷,终日谁来。金锁已沉埋,壮气蒿莱。晚凉天净月华开。想得玉楼瑶殿影,空照秦淮。译文往事回想起来,只令人徒增哀叹;即便面对多...

2025-08-01

李煜和大周后的爱情故事

周娥皇出生在五代十国时期的南唐,自幼容貌出众,加之父母的悉心教导,很快便是远近闻名的才女。周娥皇十九岁时,嫁给当时的吴王李煜,这李煜也是性情中人,文采风流,两人也算是知音,后来李煜登基后,册封周娥皇为...

2025-08-01

李煜《长相思·云一緺》:夜长人奈何

《长相思·云一緺》是五代十国时期南唐后主李煜前期的词作。此词写女子秋雨长夜中的相思情意,分两片,上下片各十八字,上片刻画女子的形貌情态,下片续写秋夜的环境和女子的心情。长相思·云一緺云一緺,玉一梭,澹...

2025-08-01

《菩萨蛮·蓬莱院闭天台女》译文及创作背景

《菩萨蛮·蓬莱院闭天台女》是五代十国时期南唐词人李煜所写的一首词。词的上片主要写情郎初入少女居处,暗见少女睡态的情景,词的下片写少女醒后与情郎欢会调情的情景。全词写私情幽会但又不涉低级庸俗,写男女欢情...

2025-08-01

《乌夜啼·昨夜风兼雨》

《乌夜啼·昨夜风兼雨》是南唐后主李煜的作品,这首词应是诗人亡国入宋后的作品,借梦境写故国春色,表达了囚居生活中的故国情思和现实痛楚。《乌夜啼·昨夜风兼雨》昨夜风兼雨,帘帏飒飒秋声。烛残漏滴频欹枕,起坐...

2025-08-01

长相思·云一緺:秋夜愁思闺怨词

《长相思·云一緺》文学赏析:这首词是描写一位女子秋夜愁思的闺怨词。“云一緺,玉一梭”两句,分写女子发式、头饰之美,用语清新而形象。“淡淡衫儿薄薄罗”,续写女子淡雅衣着,虽未明写容颜,但这种比喻和衬托却...

2025-08-01

《菩萨蛮·蓬莱院闭天台女》赏析

这首词是写男女私会,男子悄然行至女子的寝所,时间则是在正午。词中所写只是二人相对的一个片刻,女子写得娇羞妩媚,男子写得温柔体贴,一片脉脉深情。首句中“蓬莱”、“天台”的形容,不仅暗寓女子的美貌,也代指...

2025-08-01