数据分析案例-电影数据分析

简介: 数据分析案例-电影数据分析

电影数据集介绍

用户信息

#u.user
#列名称
'user_id','age','gender','occupation','zip_code'
#数据
1|24|M|technician|85711  
2|53|F|other|94043  
3|23|M|writer|32067  
4|24|M|technician|43537  
5|33|F|other|15213  

评分表

# u.data
#列名称
'user_id','movie_id','rating','unix_timestamp'
196 242 3 881250949  
186 302 3 891717742  
22 377 1 878887116  
244 51 2 880606923  
166 346 1 886397596  
298 474 4 884182806  
115 265 2 881171488  
253 465 5 891628467  
305 451 3 886324817 

电影表

#u.item
#列名称
'movie_id','movie_title','release_date','video_release_date','imdb_url'
1|Toy Story (1995)|01-Jan1995||http://us.imdb.com/M/title-exact?
Toy%20Story%20(1995)|0|0|0|1|1|1|0|0|0|0|0|0|0|0|0
2|GoldenEye (1995)|01-Jan1995||http://us.imdb.com/M/title-exact?
GoldenEye%20(1995)|0|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0
3|Four Rooms (1995)|01-Jan1995||http://us.imdb.com/M/title-exact?
Four%20Rooms%20(1995)|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0  
4|Get Shorty (1995)|01-Jan1995||http://us.imdb.com/M/title-exact?
Get%20Shorty%20(1995)|0|1|0|0|0|1|0|0|1|0|0|0|0|0|0|0
5|Copycat (1995)|01-Jan1995||http://us.imdb.com/M/title-exact?
Copycat%20(1995)|0|0|0|0|0|0|1|0|1|0|0|0|0|0|0|0|1

加载数据

import numpy as np
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
user_cols=['user_id','age','gender','occupation','zip_code']
users = pd.read_csv('ml100k/u.user',sep='|',names=user_cols,encoding='latin-1')
# 加载电影信息 movie id | movie title |release date | video release date | IMDb URL
movie_cols=['movie_id','movie_title','release_date','video_release_date','imdb_url']
movies=pd.read_csv('ml100k/u.item',sep='|',names=movie_cols,usecols=range(5),encoding='latin-1')x`
# 加载评分信息 user id | item id | rating |timestamp
rating_cols=['user_id','movie_id','rating','unix_timestamp']
ratings = pd.read_csv('ml100k/u.data',sep='\t',names=rating_cols,encoding='latin-1')
# 为了后续分组统计数据方便,将3个DataFrame进行合并
# 和并用户 评分
user_ratings = pd.merge(users,ratings)
data = pd.merge(user_ratings,movies)

数据探索和清洗

基本信息描述

data.describe()
#对评分男性和女性人数统计
data['gender'].value_counts()

缺值处理

data.shape()
#每列缺值情况
data.info()
data.isnull().sum()
#删除video_release_date列
data.dropna(axis=1,how='all',inplace=True)

重复值查看

# 重复值查看
data.duplicated().any()

评分最多的电影

# 按照电影标题分组,统计分组中数据个数,即得到评分次数
g = data.groupby('movie_title')
data.groupby('movie_title').size().sort_values(ascending=False).head(20)
#或者data.groupby('movie_title')['movie_title'].count()
#或者data['movie_title'].value_counts().head(20).plot(kind='bar')


评分最高的电影

# 根据电影标题分组,对分组中评分求均值,均值越高,评分也就越高
data.groupby('movie_title')
['rating'].mean().sort_values(ascending=False).head(10)
#使用agg()函数
data.groupby('movie_title').agg({'rating':'mean'})
['rating'].sort_values(ascending=False).head(10)
#统计评分人数和评分的均值
data.groupby('movie_title')
['rating'].agg(['size','mean']).sort_values(by=['mean','size'],ascending=False).head(10)
# movie_scores
# 过滤,评分人数必须大于等于100
data_group = data.groupby('movie_title')
['rating'].agg(['count','mean'])
most_100 =data_group[data_group['count']>100]
top10 = most_100.sort_values(by=['mean','count'],ascending=False).head(10)
top10['mean'].plot(kind='bar',title='评分最高的电影')


评分与年龄的关系

# 简单看下年龄分布
data['age'].describe()
data['age'].plot(kind='hist',bins=30,figsize=(12,6))
# 自定义年龄区间,分布不同年龄组对电影评分总体状况
# 0-9 10-19 20-29 ...70-79
labels = ['0-9','10-19','20-29','30-39','40-49','50-59','60-69','70-79']
data['age_group'] =pd.cut(data['age'],np.arange(0,81,10),right=False,labels=labels)
data.groupby('age_group').agg({'rating':['size','mean']})
#年龄越大的区间,对电影打分越高



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

# 因为电影数据比较多,现在只分析评分次数排在前100的电影--》如何得到评分次数在前100的电影
# 得到评分次排在前100的电影的id信息,同时将数据movie_id列设置为行索引,利用索引数组来获得评分次数排在前100的电影的数据
# 得到评分次数在前100的电影
# 得到评分次排在前100的电影的id信息
most_100=data['movie_id'].value_counts().head(100)
# most_100
# 数据movie_id列设置为行索引
data.set_index('movie_id',inplace=True)
by_age_group =data.loc[most_100.index].groupby(['movie_title','age_group'])
by_age_group['rating'].mean().unstack(1).fillna(0).head(10)



目录
相关文章
|
15天前
|
数据可视化 数据挖掘
R语言生存分析数据分析可视化案例(下)
R语言生存分析数据分析可视化案例
|
29天前
|
数据采集 机器学习/深度学习 数据可视化
数据科学项目实战:完整的Python数据分析流程案例解析
【4月更文挑战第12天】本文以Python为例,展示了数据分析的完整流程:从CSV文件加载数据,执行预处理(处理缺失值和异常值),进行数据探索(可视化和统计分析),选择并训练线性回归模型,评估模型性能,以及结果解释与可视化。每个步骤都包含相关代码示例,强调了数据科学项目中理论与实践的结合。
|
5天前
|
机器学习/深度学习 数据采集 数据可视化
R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
|
15天前
|
数据可视化 数据挖掘
R语言生存分析数据分析可视化案例(上)
R语言生存分析数据分析可视化案例
|
22天前
|
数据可视化 数据挖掘 Linux
如何在Linux部署DataEase数据分析服务并实现无公网IP远程分析内网数据信息
如何在Linux部署DataEase数据分析服务并实现无公网IP远程分析内网数据信息
|
24天前
|
数据采集 数据可视化 数据挖掘
Seaborn在数据分析中的应用:案例分析与实践
【4月更文挑战第17天】本文介绍了Seaborn在数据分析中的应用,它是一个基于Python的可视化库,简化了复杂数据的图表创建。通过一个销售数据分析的案例,展示了数据加载、描述性统计、相关性分析、多变量分析及高级可视化步骤。实践技巧包括数据清洗、图表选择、颜色使用、注释标签和交互性。Seaborn助力高效数据探索和理解,提升分析效率。注意,实际使用需根据数据集和目标调整,并参考最新文档。
|
25天前
|
存储 数据挖掘
R语言Kaggle泰坦尼克号性别阶级模型数据分析案例
R语言Kaggle泰坦尼克号性别阶级模型数据分析案例
|
25天前
|
供应链 搜索推荐 数据挖掘
Pandas实战案例:电商数据分析的实践与挑战
【4月更文挑战第16天】本文通过一个电商数据分析案例展示了Pandas在处理销售数据、用户行为分析及商品销售趋势预测中的应用。在数据准备与清洗阶段,Pandas用于处理缺失值、重复值。接着,通过用户购买行为和商品销售趋势分析,构建用户画像并预测销售趋势。实践中遇到的大数据量和数据多样性挑战,通过分布式计算和数据标准化解决。未来将继续深入研究Pandas与其他先进技术的结合,提升决策支持能力。
|
25天前
|
存储 数据可视化 数据挖掘
实战案例:Pandas在金融数据分析中的应用
【4月更文挑战第16天】本文通过实例展示了Pandas在金融数据分析中的应用。案例中,一家投资机构使用Pandas加载、清洗股票历史价格数据,删除无关列并重命名,将日期设为索引。接着,数据被可视化以观察价格走势,进行基本统计分析了解价格分布,以及计算移动平均线来平滑波动。Pandas的便捷功能在金融数据分析中体现出高效率和实用性。
|
1月前
|
存储 机器学习/深度学习 数据采集
数据分析师如何处理数据以进行分析?
【4月更文挑战第4天】数据分析师如何处理数据以进行分析?
21 9