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 |
'딥러닝 모델 설계 > Machine Learning' 카테고리의 다른 글
Day 09_TimeSeries (0) | 2019.07.12 |
---|---|
Day 09_bitly_Json_Dictionary_List_Advenced (0) | 2019.07.12 |
Day 08.Baby Names Analysis_cumsum_pivot (0) | 2019.07.11 |
Day 08. MapFunc_OneHotEncode_Join (0) | 2019.07.11 |
Day 07_String_AggregationFuc (0) | 2019.07.10 |