爬取数据存储在文件../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_time
和user_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开发等教学服务,想一起学习的朋友可以加我微信。