본문 바로가기

프로그래머스 데브 코스/TIL

[6기] 프로그래머스 인공지능 데브코스 107일차 TIL

1216

[17주차 - Day2] Recommendation system

무비렌즈 데이터를 활용한 사용자 협업 필터링

# 데이터 로딩 및 분석 부분 실습 코드 정리

 

from surprise import Dataset
from surprise import Reader
from collections import defaultdict
import numpy as np
import pandas as pd

movies = pd.read_csv("https://grepp-reco-test.s3.ap-northeast-2.amazonaws.com/movielens/movies.csv")
ratings = pd.read_csv("https://grepp-reco-test.s3.ap-northeast-2.amazonaws.com/movielens/ratings.csv")

movies.head()

 

ratings.head()

 

movie_ratings = pd.merge(movies, ratings, left_on='movieId', right_on='movieId')
movie_ratings.head()

 

 

 

데이터 분석

  • 영화별 평점수: min, max, median, mean
  • 가장 평점이 많은 영화 10개는?
  • 영화별 평점 평균: min, max, median, mean
  • 가장 평점이 높은 영화 10개는? (100개 이상 평점이 있는 영화 중)
movie_ratings_summary = movie_ratings[['movieId', 'rating']].groupby(['movieId']).agg(['count', 'median', 'mean'])
movie_ratings_summary.head()

 

movie_ratings_summary.columns = ['count', 'median', 'mean']

movie_ratings_summary.sort_values('count', ascending=False).head(10)

 

movie_ratings_summary.sort_values('mean', ascending=False).head(10)

 

movie_ratings_summary[movie_ratings_summary['count'] > 100].sort_values('mean', ascending=False).head(10)

 

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(16,8))
sns.distplot(a=movie_ratings_summary['mean'], kde=True, color='r')

 

sns.distplot(a=movie_ratings_summary['count'], kde=True, color='g')

 

user_rating_summary = movie_ratings[['userId', 'rating']].groupby(['userId']).agg(['count', 'median', 'mean'])
user_rating_summary.columns = ['count', 'median', 'mean']

user_rating_summary.sort_values('median', ascending=True).head(10)

 

sns.distplot(a=user_rating_summary['mean'], kde=True, color='r')

 

sns.distplot(a=user_rating_summary['count'], kde=True, color='r')

 

- 여기까지 데이터 분석 및 정리 > 내일은 이 데이터들로 사용자 기반 추천 시스템 제작