1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# -*- coding: utf-8 -*-
"""Day 08_Movielens.ipynb
Automatically generated by Colaboratory.
Original file is located at
"""
 
from google.colab import drive
drive.mount('/gdrive')
 
# /gdrive/My Drive/Colab Notebooks/resources/ <==  My resource path
 
# %matplotlib inline
 
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd
import seaborn as sns
import time
 
from scipy.stats import norm, multivariate_normal
# installing packages for interactive graphs
import ipywidgets as widgets
from IPython.display import display
from ipywidgets import interact, interactive, fixed, interact_manual, IntSlider
 
@interact( x =IntSlider(0,0,12) )
def test_model( x ):
    print(x)
 
users    = pd.read_csv("/gdrive/My Drive/Colab Notebooks/resources/movielens/users.dat", header = None , sep = "::"  , names = ['user_id''gender','age','ocupation','zip' ])
movies   = pd.read_csv("/gdrive/My Drive/Colab Notebooks/resources/movielens/movies.dat", header = None , sep = "::" , names = ['movie_id''title','genres'  ])
ratings  = pd.read_csv("/gdrive/My Drive/Colab Notebooks/resources/movielens/ratings.dat", header = None , sep = "::", names = ['user_id''movie_id','rating','timestamp'  ])
 
#pd.merge()
movies[:2]
 
data = pd.merge(pd.merge(ratings, users), movies)
 
## 성별에 따른 각 영화의 평균 평점을 출력
 
data.groupby( ['title','gender'])['rating'].mean()
 
mean_ratings = data.pivot_table( 'rating', index = 'title' ,columns = 'gender', aggfunc = np.mean)
 
mean_ratings.shape
 
## 타이틀로 그룹화한 사이즈는 같은 영화에 대해서 평점의 갯수라고 볼 수 있다.
 
## 그룹화한 변수가 행 인덱스로 들어가게 된다. 즉 행 인덱스를 무엇으로 줄것인지 그룹화 해서 지정할 수 있다.
ratings_by = data.groupby(['title']).size()
 
## 제목이 인덱스로 사용되고 있고 , 값이 각 그룹별 size로 하겠다. 라는 뜻이다.
 
ratings_by.values
ratings_by.index
 
active_titles = ratings_by[ratings_by >= 250].index
 
len(active_titles)
 
##active_titles에 있는 제목에 맞는 행만 출력한다. 중요 스킬
mean_ratings = mean_ratings.loc[active_titles]
 
## 여성이 낮게 평점을 준 영화와 높게준영화
 
 
## 데이터 프레임을 F 컬럼에 대해서 내림차순으로 정렬
top_female_ratings = mean_ratings.sort_index(by = 'F', ascending = False)
 
mean_ratings['Diff'= mean_ratings['F'- mean_ratings['M']
 
#Diff값이 제일 큰 영화들은 무엇 일까
 
 
## 남자보다 여자가 선호하는 영화
mean_ratings.sort_index( by = 'Diff', ascending = False)
 
 
## 여자보다 남자가 선호하는 영화
mean_ratings.sort_index( by = 'Diff', ascending = True )
 
 
## 그냥 남자여자 취향차이가 나는 영화
mean_ratings['Diff'= np.abs(mean_ratings['F'- mean_ratings['M'])
 
sorted_by_diff = mean_ratings.sort_index( by = 'Diff' )
 
sorted_by_diff.shape
 
## 뒤에서 부터, 즉 정렬 순서룰 내림차순, 오름차순을 쉽게 변경가능
sorted_by_diff[::-1][:2]
 
## 각 그룹별 평점에 대한 표준편차, 분산이 크다? => 평점의 호불호가 크다.
data.groupby('title')['rating'].std()
data.groupby('title')['rating'].mean()
 
 
cs


+ Recent posts