《霍比特人3:五军之战》34765条影评数据可视化分析

ee2f648f92dbd8786142d7c1e5c8899a.png

爬取数据存储在文件../1016/2973079/all_34768.xlsx 中,爬取方法暂不开放,确实想学,可以再咨询 老表Max,微信:pythonbrief

数据可以找 老表Max 领取。

数据爬取

数据爬取方案:

ddb864809f362fb6eb62bb663cb51d3a.png

存储字段说明:

字段名数据类型含义描述
comment字符串评论内容
rating_value数值用户评分,最高5星,最低0星
vote_count数值评论有用数(点赞数),数值越大说明越多人认可
create_time日期时间评论创建时间
user_loc_name字符串用户位置
user_reg_time日期时间用户注册时间
user_gender字符串用户性别,F表示女性,M表示男性,U表示用户没填写
user_in_blacklist布尔值用户是否被拉黑了,True表示被拉黑,False表示未被拉黑
ip_location字符串用户评论IP地址的地理位置
  • comment: 该字段存储用户的评论内容,类型为字符串。

  • rating_value: 该字段存储评论的打分情况,最高5星,最低0星,类型为数值。

  • vote_count: 该字段存储评论的有用数或点赞数,数值越大说明越多人认可,类型为数值。

  • create_time: 该字段存储评论的创建时间,类型为日期时间。

  • user_loc_name: 该字段存储用户的地理位置(城市),类型为字符串。

  • user_reg_time: 该字段存储评论用户的注册时间,类型为日期时间。

  • user_gender: 该字段存储评论用户的性别,F表示女性,M表示男性,U表示用户没填写,类型为字符串。

  • user_in_blacklist: 该字段存储用户是否被拉黑的信息,True表示用户被拉黑,False表示用户未被拉黑,类型为布尔值。

  • ip_location: 该字段存储用户评论IP地址的地理位置,类型为字符串。

代码有点多,数据可以找 老表Max 领取。

数据读取

使用 pandas 从 excel 读取数据,并进行简单清理:根据 comment 、user_reg_time 字段进行去除重复行,最后得到总 comment 数量:34765 条。

import pandas  as pd
file_path = "../1016/2973079/all_34768.xlsx"
data = pd.read_excel(file_path).drop_duplicates(subset=['comment', 'user_reg_time'])
print(data.info())
data.head()
afd4ce5fdadd435542284bcbc8e69f24.png

数据清理

基础清理逻辑和思考

基础清理的核心是确保数据的完整性和一致性。

首先,删除comment列中为空值(NaN)的行,目的是避免后续分析时因缺失值导致的偏差。接着,对create_timeuser_reg_time列进行日期类型转换,确保时间相关数据的正确格式。如果转换失败,标记为NaN并删除对应的行。这一步清理不仅提高了数据的质量,还减少了由于格式不正确导致的数据分析错误。

# 1.1 删除 comment 为 NaN 的行
data = data.dropna(subset=['comment'])

# 1.2 将 create_time 和 user_reg_time 设置为日期类型
# 首先尝试将 create_time 转换为日期,如果失败则标记为 NaN
data['create_time_converted'] = pd.to_datetime(data['create_time'], errors='coerce')

# 筛选出 create_time 无法转换为日期的行
invalid_create_time_rows = data[data['create_time_converted'].isna()]

# 打印出 create_time 列不是日期的行(可选步骤)
print(invalid_create_time_rows)

# 删除 create_time 列不是日期的行
data = data[data['create_time_converted'].notna()]

# 删除辅助列 create_time_converted
data = data.drop(columns=['create_time_converted'])

针对性清理逻辑和思考

针对性清理更侧重于填补缺失值和数据类型的规范化。

首先,对rating_value中的NaN值以平均值进行填充,确保评分数据的完整性。接着,将vote_count转换为浮点型,便于数值运算。在地理信息清理中,通过user_loc_name来填补ip_location中的缺失值,若两者均为空,则默认设置为“中国”,保证了地理位置的有效性。最后,填充user_gender列中的缺失值为“U”,确保数据在性别分类上的完整性。

# 2.1 将 create_time 和 user_reg_time 设置为日期类型
data['create_time'] = pd.to_datetime(data['create_time'])
data['user_reg_time'] = pd.to_datetime(data['user_reg_time'])

# 3.1 将 rating_value 中的 NaN 值替换为平均值
rating_mean = data['rating_value'].mean()
data['rating_value'] = data['rating_value'].fillna(rating_mean)

# 3.2 将 vote_count 转换为 float 类型
data['vote_count'] = data['vote_count'].astype(float)

# 4. 将 ip_location 中的 NaN 值替换为对应 user_loc_name 的值
# 如果 user_loc_name 也是 NaN,则设置为 中国
data['ip_location'] = data.apply(
    lambda row: '中国' if pd.isna(row['ip_location']) and pd.isna(row['user_loc_name']) 
    else (row['user_loc_name'] if pd.isna(row['ip_location']) else row['ip_location']),
    axis=1
)
# 删除 user_loc_name
data = data.drop(columns=['user_loc_name'])

# 5. 将 user_gender 中的 NaN 值替换为 'Y'
data['user_gender'] = data['user_gender'].fillna('U')

清理完成后,各列数据总数统一了,数据格式也正确了。

4811d92a7511170281530ebd60b81f84.png

数据可视化

数据处理好,接下来就是简单的数据可视化分析了,以下将从观影评论用户性别、位置分布、省份、评论数量、评分等方面进行分析。

评论者性别分布可视化

07a69b6f185b9ffdf7c1220a9cb31fc2.png

评论者所在城市分布可视化

地图-散点图

6a3df95ea34ea3f576fb3034673876ec.png

地图- 热力图

cfdc82635b59f95ae7dacf543e17a97a.png

柱状图

a2feb487ad52c916fa952917b8805ec6.png

每日评论总数可视化

606c15cee65567de02eb31c15f8be55b.png

评论者注册时间和评论、点赞数关系可视化

不同注册时间段用户评分和评论有用总数情况

aff94cd0c5b8c47838e7209cbdc4b8ee.png

不同注册时间段用户评分和人数情况

9254b66978267a1f55378295da8756d8.png

评分分布可视化

# 将 rating_value 分段,每2分一个等级
bins =[0,1,2,3,4,5]
labels =['0-1','1-2','2-3','3-4','4-5']
df['rating_level']= pd.cut(df['rating_value'], bins=bins, labels=labels, right=False)

# 计算每个评分等级的用户数及其占比
rating_summary = df['rating_level'].value_counts(normalize=True).reset_index()
rating_summary.columns =['rating_level','percentage']
rating_summary['percentage']=(rating_summary['percentage']*100).round(2)

# 查看结果
print(rating_summary)
acc3333e4f39d4e5d84eef52504263ca.png

词云可视化
975a8c607e756783ad8432fa816ad67c.png

公众号封面比例:

f234847c73927d94910e611d69748473.png

源码获取/一起学

为了能让需要的用户真的从中学到东西,避开白嫖党,本文源码不免费提供,扫下方二维码加我微信,备注:分析,微信通过后转我19.9元以上金额即可获得完整源码+代码相关答疑服务。(解释到会,有付出有收获)

如果你确实手头紧,也可以联系我,我告诉你其他方式让你先赚到这个钱,再付费学代码。

另外提供Python 入门、爬虫、数据分析、自动化办公、web开发等教学服务,想一起学习的朋友可以加我微信。

e9d874d20db76862c5a537647eab1933.jpeg

扫码加我微信,回复:分析,

一起迎接AI时代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简说Python

多多少少都是爱,感谢充电。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值