python数据科学(七):实例——MovieLens 电影数据分析

MovieLens 电影一百万个数据分析

数据科学(七)

  • 数据集
  • 功能
  • 代码

数据集

数据集下载链接

功能

  • 数据读取、查看
    .dot 使用read_table函数
  • 数据合并
    merge
  • 统计电影平均得分
  • 统计活跃电影
    活跃含义: 获得评分的次数越多说明电影越活跃
  • 女生最喜欢的电影排行榜
  • 男生最喜欢的电影排行榜
  • 男女生评分差距最大的电影 ->
    差距大含义:某类电影女生喜欢,但男生不喜欢
  • 最具争议的电影排行榜
    最具争议含义:评分的方差最大

代码

series格式的,不能加by;dataframe格式的,要加by;dataframe经过groupby之后的 又变成了series格式的 ,不能加by

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#数据读取
##用户数据
user_names = ['user_id', 'gender', 'age', 'occupation', 'zip']
##sep分割符 read_table有python和c两个形式
users = pd.read_table('data/users.dat', sep='::', header=None, names=user_names, engine='python')

##评分数据
rating_names = ['user_id', 'movie_id', 'rating', 'timestamp']
ratings = pd.read_table('data/ratings.dat', sep='::', header=None, names=rating_names, engine='python')

##电影数据
movie_names = ['movie_id', 'title', 'genres']
movies = pd.read_table('data/movies.dat', sep='::', header=None, names=movie_names, engine='python')

print('查看')
print(users.head(5))
print(ratings.head(5))
print(movies.head(5))

#数据合并
data = pd.merge(pd.merge(users, ratings), movies)
print('合并')
print(data.head(10))


#统计电影平均得分
mean_ratings = data.pivot_table(values='rating',index='title',aggfunc='mean')
print('统计电影平均得分')
print(type(mean_ratings))
print(mean_ratings.dtypes)
print(mean_ratings.head(5))
print(mean_ratings.sort_values(ascending=False).head(10))


#男女生评分差距最大的电影
mean_ratings_gender = data.pivot_table(values='rating', index='title', columns='gender', aggfunc='mean')
print(mean_ratings_gender.head(10))
print('性别平均分')
mean_ratings_gender['chaju'] = mean_ratings_gender.F - mean_ratings_gender.M
print('男女评分差距大')
print(mean_ratings_gender.head(10))
##女生喜欢,男生不喜欢
girllike = mean_ratings_gender.sort_values(by = ['chaju'],ascending=True).head(10)
print(girllike)
##男生喜欢,女生不喜欢
boylike=mean_ratings_gender.sort_values(by = ['chaju'],ascending=False).head(10)
print(boylike)

# 活跃电影排行榜
ratings_by_movie_title = data.groupby('title').size()
print('活跃电影排行榜')
print(ratings_by_movie_title.head(5))
##降序
print(ratings_by_movie_title.sort_values(ascending=False).head(10))

#热门和高分相互查找
#法一
##前十大活跃电影 评分
top_10_movie = ratings_by_movie_title.sort_values(ascending=False).head(10)

print('前十大活跃电影 评分')
print(top_10_movie.index)
#print(mean_ratings[top_10_movie.index])

##前十大高分电影 热度
mean_ratings = data.pivot_table(values='rating',index='title',aggfunc='mean')
top_10_mean_ratings = mean_ratings.sort_values(ascending=False).head(10)
print('前十大高分电影 热度')
print(ratings_by_movie_title[top_10_mean_ratings.index])

#法二
hot_movies = ratings_by_movie_title[ratings_by_movie_title>1000]
print(hot_movies.head(10))

hot_movies_rating = mean_ratings[hot_movies.index]
top_10_best = hot_movies_rating.sort_values(ascending=False).head(10)
print(top_10_best)

你可能感兴趣的:(python数据科学)