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

科技   2024-10-27 21:13   浙江  

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

数据可以找 老表Max 领取。

数据爬取

数据爬取方案:

存储字段说明:

字段名数据类型含义描述
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()

数据清理

基础清理逻辑和思考

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

首先,删除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')

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

数据可视化

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

评论者性别分布可视化

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

地图-散点图

地图- 热力图

柱状图

每日评论总数可视化

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

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

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

评分分布可视化

# 将 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)

词云可视化

公众号封面比例:

源码获取/一起学

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

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

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

扫码加我微信,回复:分析
一起迎接AI时代

简说Python
号主老表,自学,分享Python,SQL零基础入门、数据分析、数据挖掘、机器学习优质文章以及学习经验。
 最新文章