Python----数据分析(电影数据分析)

一、数据来源

数据网址 http://grouplens.org/datasets/movielens/

数据集包含3个文件,文件中包含电影信息表,评分用户信息,评分信息。

二、数据加载

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt
#支持中文显示
plt.rcParams['font.family']='Kaiti'
# 使用非unicode的负号,当使用中文时候要设置
plt.rcParams['axes.unicode_minus']=False

加载用户信息 user id | age | gender | occupation | zip code

python 复制代码
user_names=['user_id' , 'age' , 'gender' , 'occupation' , 'zip_code']
user_df=pd.read_table('./ml-100k/u.user',sep='|',names=user_names)
user_df

加载电影信息 movie id | movie title | release date | video release date | IMDb URL

python 复制代码
movie_names=['movie_id', 'movie_title' , 'release_date' , 'video_release','date' , 'IMDb_URL' ]
movie_df=pd.read_table('./ml-100k/u.item',sep='|',names=movie_names,encoding='iso8859-1',usecols=range(6))
movie_df

加载评分信息 user id | item id | rating | timestamp

python 复制代码
data_names=['user_id' , 'item_id' , 'rating' , 'timestamp' ]
data_df=pd.read_table('./ml-100k/u.data',sep='\t',names=data_names)
data_df

数据合并

python 复制代码
user_data_df=pd.merge(user_df,data_df)
all_df=pd.merge(user_data_df,movie_df,left_on='item_id',right_on='movie_id')
all_df

三、数据清洗

把不需要的列删除

python 复制代码
all_df.drop(columns=['item_id'],inplace=True)

查看有无缺失值

python 复制代码
all_df.info()

思考缺失值对数据的影响,对缺失值进行操作

python 复制代码
all_df.drop(columns=['video_release'],inplace=True)

python 复制代码
all_df.dropna(axis=1,how='all',inplace=True)

查看是否有异常值

python 复制代码
all_df.describe()

查看是否有重复值

python 复制代码
all_df.duplicated(subset=['user_id','movie_id']).any()

四、数据分析

查看性别对于观看电影是否有影响

python 复制代码
all_df['gender'].value_counts().plot(kind='pie',autopct='%.2f%%')

获取评分次数最多的前10部电影

python 复制代码
all_df['movie_title'].value_counts().sort_values(ascending=False).head(10)

python 复制代码
all_df.groupby('movie_title')['movie_title'].count().sort_values(ascending=False).head(10)
python 复制代码
all_df.groupby('movie_title')['movie_title'].count().sort_values(ascending=False).head(10).plot(kind='bar')

获取评分最高的前10部电影

python 复制代码
all_df.groupby('movie_title')['rating'].mean().sort_values(ascending=False).head(10)

python 复制代码
all_df.groupby('movie_title').agg({'rating':'mean'})['rating'].sort_values(ascending=False).head(10)

因思考到有些电影观看人数较为稀少,通过某一人偏爱,导致分值较高,导致数据不准确,添加人数限制,以求数据相对准确

python 复制代码
all_100=all_df.groupby('movie_title')['rating'].agg(['mean','count'])['count']>100
all_df.groupby('movie_title')['rating'].agg(['mean','count'])[all_100].sort_values(by=['mean','count'],ascending=False).head(10)
python 复制代码
all_df.groupby('movie_title')['rating'].agg(['mean','count'])[all_100].sort_values(by=['mean','count'],ascending=False).head(10).plot(kind='bar',y='count')

不同年龄段对某部电影的评分

查看年龄描述分布

python 复制代码
all_df['age'].describe()

对年龄进行直方分布

python 复制代码
all_df['age'].plot(kind='hist',bins=20)

对年龄进行分组,每十岁分为一组

python 复制代码
age_bins = np.arange(0,81,10)
pd.cut(all_df['age'],bins=age_bins,right=False)

添加新的标签列,查看该所属年龄属于哪个区间

python 复制代码
all_df['age_group']=pd.cut(all_df['age'],bins=age_bins,right=False)

对年龄区间进行分组,查看该年龄段对电影评分的平均值和评分数量

python 复制代码
all_df.groupby('age_group')['rating'].agg(['mean','count'])

对电影名称和年龄区间进行分组,计算出评分的平均值,然后进行列重组,将空值填充为0

python 复制代码
all_df.groupby(['movie_title','age_group'])['rating'].mean().unstack().fillna(0)

获取评分次数top100电影的id

python 复制代码
args=all_df['movie_id'].value_counts().sort_values(ascending=False).head(100)

查看 电影id有没有在前100里面

python 复制代码
all_df[all_df['movie_id'].isin(args.index)]

对电影标题和年龄区间进行分组 ,然后对电影评分如上操作

python 复制代码
all_df[all_df['movie_id'].isin(args.index)].groupby(['movie_title','age_group'])['rating'].mean().unstack().fillna(0)

通过索引筛选 不同年龄段对某部电影的评分

python 复制代码
all_df.set_index('movie_id').loc[args.index].groupby(['movie_title','age_group'],observed=False)['rating'].mean().unstack().fillna(0)
相关推荐
njxiejing8 分钟前
C语言中的scanf函数(头文件、格式控制、取地址符号分析)
c语言·开发语言
Tadas-Gao9 分钟前
微服务可观测性的“1-3-5”理想:从理论到实践的故障恢复体系
java·开发语言·微服务·云原生·架构·系统架构·可观测
Nᴏsᴛᴀʟɢɪᴀ念12 分钟前
多线程奇幻漂流:从单核到多核质变(一)
java·开发语言·jvm·多线程
ss27319 分钟前
手写MyBatis第88弹:从XML配置到可执行SQL的完整旅程
java·开发语言·mybatis
Never_Satisfied20 分钟前
在JavaScript / HTML中,实现`<iframe>` 自适应高度
开发语言·javascript·html
Cx330❀24 分钟前
《C++ STL:vector类(上)》:详解基础使用&&核心接口及经典算法题
开发语言·c++·经验分享·算法
那我掉的头发算什么26 分钟前
【数据结构】二叉树的高频热门面试题大全
java·开发语言·数据结构·python·算法·链表·intellij idea
一人の梅雨32 分钟前
买家秀接口深度开发:从内容解析到情感分析的全链路实现
开发语言·php
遇安.YuAn41 分钟前
JAVA之求平方根
java·开发语言·算法
飞翔的佩奇1 小时前
【完整源码+数据集+部署教程】 小麦病害分割系统: yolov8-seg-dyhead
python·yolo·计算机视觉·数据集·yolov8·小麦病害分割系统