Python数据分析实战——《哪吒之魔童降世》情感分析

本案例将豆瓣电影中《哪吒之魔童降世 》的短评进行分析情感分析,相关短评获取方法这里通过软件采集。
需求一 :电影上映后每天的评论数量走势
需求二:电影上映后每天的评分走势
需求三:查看5个评分的各自占比情况
最后用词云展示影评数据

导入相关包及数据

import jieba
import wordcloud
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] # 指定字体  
plt.rcParams['axes.unicode_minus']=False #解决的图像中 - 显示为方块的问题
filepath='./nezha.csv'
data=pd.read_csv(filepath,header=None,names=['date','rate','title','uses','name','comment'])
data.head()

在这里插入图片描述

查看数据详细信息

data.info() 

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 980 entries, 0 to 979
Data  columns (total 6 columns):
date       980 non-null object
rate       760 non-null float64
title      760 non-null object
uses       980 non-null int64
name       979 non-null object
comment    980 non-null object
dtypes: float64(1), int64(1), object(4)
memory usage: 46.1+ KB

可以看到这六列数据的长度都不一样,例如 date 列有980行,而rate列只有760行。这时候就需要进行数据的清洗操作。

数据清洗

由于在获取数据时已经做了 去除重复值的处理,所以这里不需要再去除重复值

删除有空值的行

因为每列的数据长度不同,所以必定的有空值,这里删除所有有空值的数据。

data.dropna(axis=0, inplace=True) #去除空数据

data.info() #再次查看数据
<class 'pandas.core.frame.DataFrame'>
Int64Index: 759 entries, 0 to 759
Data columns (total 6 columns):
date       759 non-null object
rate       759 non-null float64
title      759 non-null object
uses       759 non-null int64
name       759 non-null object
comment    759 non-null object
dtypes: float64(1), int64(1), object(4)
memory usage: 41.5+ KB

可以看到所有数据列长度都是759行,说明成功去除空数据。

数据分析

需求一 :电影上映后每天的评论数量走势

import pandas as pd
import matplotlib.pyplot as plt

# 读取文件
df = pd.read_csv("./nezha.csv", 
                 names=["date", "rate", "title", "uses", "name", "comment"], 
                 usecols=[0, 1, 2, 3, 4, 5])

# 去掉带null字段的数据
df.dropna(axis=0, inplace=True)

# 处理日期字段,保留年月日,去掉时分秒
df["date"] = df["date"].apply(lambda x: str(x).split(" ")[0])
df["count"] = 1

# 筛选出上映之后的评论数据
df1 = df[df["date"] > "2019-07-26"]

# 按天统计评论的个数
df_result = df1.groupby("date")["count"].agg(["count"])

df_result.plot(kind='bar')
plt.show()

在这里插入图片描述
图中可以看出 7月27号开始每天的评论数量在下降 ,到8月6号和7号,评论数量则急剧上升,可能是前期电影刚上映,还没有引起足够多的关注度,到后面越来越多的人观看 ,影评数量也就自然上升了。

需求二:电影上映后每天的评分走势

import pandas as pd
import matplotlib.pyplot as plt

# 读取文件
df = pd.read_csv("./nezha.csv",
                 names=["date", "rate", "title", "uses", "name", "comment"],
                 usecols=[0, 1, 2, 3, 4, 5])

# 去掉带null字段的数据
df.dropna(axis=0, inplace=True)

# 处理日期字段,保留年月日,去掉时分秒
df["date"] = df["date"].apply(lambda x: str(x).split(" ")[0])

# 筛选出上映之后的评论数据
df1 = df[df["date"] > "2019-07-25"]

# 统计每天评论的平均分,并且按照天数排序
# df_result = df1.groupby("date")["rate"].agg(["mean"]).sort_values("mean", ascending=False)
# 统计每天评论的平均分
df_result = df1.groupby("date")["rate"].agg(["mean"])

df_result.plot(kind='bar')
plt.show()

在这里插入图片描述
总体上电影《哪吒之魔童降世》的口碑还是不错的,评分普遍在2.5以上,而且到8月7号评分狂飙4.0。

需求三:查看5个评分的各自占比情况

import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# 读取文件
df = pd.read_csv("./nezha.csv",
                 names=["date", "rate", "title", "uses", "name", "comment"],
                 usecols=[0, 1, 2, 3, 4, 5])

# 去掉带null字段的数据
df.dropna(axis=0, inplace=True)

# 处理日期字段,保留年月日,去掉时分秒
df["date"] = df["date"].apply(lambda x: str(x).split(" ")[0])
df["count"] = 1

# 筛选出上映之后的评论数据
df1 = df[df["date"] > "2019-07-26"]

# 按天统计评论的个数
df_result = df1.groupby("rate")["count"].agg(["count"])

# 绘图
df_result.plot.pie(subplots=True, figsize=(6, 6), fontsize=18, counterclock=False, startangle=-270)
plt.title("评分饼图", fontsize=16, fontweight="bold")
plt.ylabel("", fontsize=12, fontweight="bold")
plt.show()

在这里插入图片描述
从饼图中可以看出,电影评分占比最多的是3.0分,其次是2.0、4.0、5.0,总体上观众对电影给予了相当大的认可和喜爱。

词云展示评论

filepath = "./nezha.csv"
file = open(filepath, mode="r", encoding="utf-8")
content = file.read().replace("推荐", "").replace("力荐", "")
file.close()

# 分词,并生成词云图
ls = jieba.lcut(content)
txt = " ".join(ls)
w = wordcloud.WordCloud(font_path='c:\windows\Fonts\STZHONGS.TTF', # 若是文本中有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
width=1200, height=500, background_color='white')
w.generate(txt)
plt.imshow(w)
plt.axis("off")
plt.show()

在这里插入图片描述
词云图中可以展现出观众们关注更多的是电影的人物、故事、剧情以及对国漫的期待。

本文旨在掌握数据分析的方法和思路,由于技术原因,影评数据截止到2019年8月7日,数据量少,分析结果仅供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值