Pandas 1.5 数据分析实战:电影评分数据集 6 项统计指标计算与可视化
Pandas 1.5 电影评分数据分析实战:从基础统计到可视化洞察
电影评分数据是推荐系统、用户行为分析和市场研究的重要基础。本文将带您使用Pandas 1.5完成一个完整的电影评分数据分析项目,涵盖数据加载、6项核心统计指标计算以及3种关键可视化图表制作。通过这个实战案例,您不仅能掌握Pandas的最新特性,还能学会如何将原始数据转化为有价值的业务洞察。
1. 环境准备与数据加载
在开始分析之前,我们需要搭建合适的工作环境并加载数据。推荐使用Jupyter Notebook作为开发环境,它能够直观地展示数据分析过程和结果。
首先安装必要的Python库:
pip install pandas==1.5.0 matplotlib seaborn jupyter典型的电影评分数据集通常包含以下字段:
- user_id: 用户唯一标识
- movie_id: 电影唯一标识
- rating: 评分值(如1-5星)
- timestamp: 评分时间戳
假设我们有一个名为"movie_ratings.csv"的数据文件,使用Pandas加载数据:
import pandas as pd # 加载数据集 df = pd.read_csv('movie_ratings.csv', names=['user', 'movie', 'rating', 'timestamp'], header=0) # 查看前5行数据 print(df.head())数据加载后,我们可以进行初步检查:
# 检查数据类型和缺失值 print(df.info()) # 描述性统计 print(df.describe())提示:在实际项目中,建议使用
pd.to_datetime()将timestamp列转换为datetime类型,便于时间序列分析。
2. 基础统计分析
了解数据集的基本特征是任何分析工作的第一步。我们将计算6个核心统计指标:
- 用户数
- 电影数
- 评分数目
- 平均评分
- 最高评分
- 最低评分
使用Pandas 1.5的新特性进行计算:
def basic_statistics(data): stats = { '用户数': data['user'].nunique(), '电影数': data['movie'].nunique(), '评分数目': len(data), '平均评分': data['rating'].mean(), '最高评分': data['rating'].max(), '最低评分': data['rating'].min() } return pd.Series(stats) basic_stats = basic_statistics(df) print(basic_stats)Pandas 1.5在性能上的改进使得这些聚合计算更加高效,特别是对于大型数据集。我们可以进一步分析评分的分布:
# 评分分布统计 rating_dist = df['rating'].value_counts().sort_index() print(rating_dist)3. 深入数据分析
基础统计只能提供数据的概览,深入分析能揭示更有价值的模式。我们将从用户和电影两个维度进行深入分析。
3.1 用户评分分析
计算每个用户的平均评分:
user_avg_rating = df.groupby('user')['rating'].mean().reset_index(name='avg_rating') user_avg_rating = user_avg_rating.sort_values('avg_rating', ascending=False) print(user_avg_rating.head(10))3.2 电影评分分析
同样地,我们可以分析电影的评分情况:
movie_avg_rating = df.groupby('movie')['rating'].mean().reset_index(name='avg_rating') movie_avg_rating = movie_avg_rating.sort_values('avg_rating', ascending=False) print(movie_avg_rating.head(10))3.3 评分时间分析
将时间戳转换为日期后,我们可以分析评分的时间模式:
df['date'] = pd.to_datetime(df['timestamp'], unit='s').dt.date daily_ratings = df.groupby('date').size() print(daily_ratings.head())4. 数据可视化
可视化是理解数据的关键步骤。我们将创建3种核心图表来展示分析结果。
4.1 评分分布直方图
使用Matplotlib绘制评分分布:
import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(10, 6)) sns.histplot(data=df, x='rating', bins=5, kde=True) plt.title('电影评分分布') plt.xlabel('评分') plt.ylabel('数量') plt.show()4.2 用户/电影平均评分Top10条形图
展示评分最高的用户和电影:
# 用户平均评分Top10 plt.figure(figsize=(12, 6)) sns.barplot(data=user_avg_rating.head(10), x='user', y='avg_rating') plt.title('平均评分最高的10位用户') plt.ylim(0, 5) plt.show() # 电影平均评分Top10 plt.figure(figsize=(12, 6)) sns.barplot(data=movie_avg_rating.head(10), x='movie', y='avg_rating') plt.title('平均评分最高的10部电影') plt.ylim(0, 5) plt.show()4.3 评分时间趋势图
分析评分数量随时间的变化:
plt.figure(figsize=(12, 6)) daily_ratings.plot() plt.title('每日评分数量变化') plt.xlabel('日期') plt.ylabel('评分数量') plt.grid(True) plt.show()5. 高级分析与技巧
除了基础分析外,Pandas 1.5还提供了一些高级功能可以帮助我们更深入地理解数据。
5.1 评分偏差分析
计算每部电影的评分标准差,了解评分的离散程度:
movie_rating_std = df.groupby('movie')['rating'].std().reset_index(name='rating_std') movie_stats = movie_avg_rating.merge(movie_rating_std, on='movie') print(movie_stats.sort_values('rating_std', ascending=False).head())5.2 用户活跃度分析
识别最活跃的用户:
user_activity = df['user'].value_counts().reset_index() user_activity.columns = ['user', 'rating_count'] print(user_activity.sort_values('rating_count', ascending=False).head(10))5.3 电影流行度与评分关系
探索电影受欢迎程度与其评分的关系:
movie_popularity = df['movie'].value_counts().reset_index() movie_popularity.columns = ['movie', 'popularity'] movie_stats = movie_stats.merge(movie_popularity, on='movie') plt.figure(figsize=(10, 6)) sns.scatterplot(data=movie_stats, x='popularity', y='avg_rating', alpha=0.6) plt.title('电影流行度与平均评分关系') plt.show()6. 实际应用与扩展
掌握了这些分析技术后,我们可以将其应用于实际业务场景:
- 推荐系统优化:基于用户评分模式改进推荐算法
- 异常检测:识别评分异常的电影或用户
- 市场分析:了解不同类型电影的表现差异
- 用户分群:根据评分行为对用户进行分群
Pandas 1.5在性能上的改进特别适合处理大规模评分数据。例如,它的内存使用更高效,对于包含数百万评分的数据库也能流畅处理。
# 示例:使用Pandas 1.5的eval()进行高效计算 result = pd.eval("df['rating'] > 3") print(result.mean()) # 评分高于3的比例电影评分数据分析是一个持续的过程。随着新评分的不断加入,定期更新分析结果可以帮助我们捕捉最新的趋势和模式。
