728x90
반응형
추천시스템
다음은 분석에 사용될 파일입니다.
In [1]:
import pandas as pd
pd.__version__
Out[1]:
영화 데이터¶
다음은 분석에 사용할 영화 데이터 입니다.
In [2]:
movies_df = pd.read_csv('./np-ratings.csv')
print(movies_df.shape)
movies_df.head()
Out[2]:
In [3]:
movies_df.mean().sort_values(ascending=False)[:3]
Out[3]:
평점 카운트¶
다음은 가장 많은 평점을 받은 3개의 영화들입니다.
가장 많은 평점을 받았다는 것은 다른말로 하면 많은 사람들이 본 영화를 의미합니다.
가장 많은 평점수(리뷰)가 매겨진 영화들은 다음과 같습니다:
- 토이스토리 (Toy Story)
- 양들의침묵 (Silence of the Lambs, The)
- 스타워즈 4 (Star Wars: Episode IV - A New Hope)
In [4]:
movies_df.count().sort_values(ascending=False)[:3]
Out[4]:
4+평점¶
다음은 평점 4를 받은 가장 많이 받은 영화들입니다.
- 스타워즈 4 (Star Wars: Episode IV - A New Hope)
- 쇼생크탈출 (Shawshank Redemption, The)
- 양들의침묵 (Silence of the Lambs, Th)
In [5]:
four_plus_df = movies_df[movies_df >= 4.0]
four_plus_df.count().sort_values(ascending=False)[:3]
Out[5]:
In [2]:
rating_counts = movies_df.count()
toy_story = rating_counts['1: Toy Story (1995)']
result_df = (toy_story + rating_counts) / toy_story
result_df.sort_values(ascending=False).drop('1: Toy Story (1995)').head(3)
Out[2]:
피어슨 유사도¶
연과성분석 외에도 다른 유사도를 사용할 수 있습니다.
다음은 가장 많이 사용되는 유사도 중 하나인 피어슨 유사도를 사용한 상관관계 입니다.
$$pearson(x,y) = \frac{\sum_{i \in I_{xi}}(r_{xy} - \mu_x) \cdot (r_{yi} - \mu_y)}{\sqrt{\sum_{i \in I_{xy}} (r_{xi} - \mu_x)^2} \cdot \sqrt{\sum_{i \in I_{xy}} (r_{yi} - \mu_y)^2}}$$
피어슨 유사도를 사용해 가장 관련있는 영화 3개를 뽑아본 결과입니다.
In [6]:
movies_df.corr('pearson')['1: Toy Story (1995)'].drop('1: Toy Story (1995)').sort_values(ascending=False).head(3)
Out[6]:
In [7]:
users_df = pd.read_csv('./np-users.csv').rename({'Gender (1 =F, 0=M)': 'Gender'}, axis=1)
users_df.head()
Out[7]:
성별별 평균 평점¶
다음은 영화별로 각 성별의 평균 평점을 계산한 결과입니다.
In [5]:
movies_df['Gender'] = users_df.Gender
mean_df = movies_df.groupby('Gender').mean()
mean_df
Out[5]:
성별간 상위 3개 평점¶
각 성별별로 가장 평점이 높았던 영화들은 다음과 같습니다:
- 레이더스 (Raiders of the Lost Ark)
- 쉰들러리스트 (Schindler's List)
- 그라운드호그데이 (Groundhog Day)
In [6]:
print("Male")
display(mean_df.iloc[0].sort_values(ascending=False).head(3))
print("Female")
display(mean_df.iloc[1].sort_values(ascending=False).head(3))
성별간 차이가 가장 큰 평점¶
각 성별별로 평점의 차이가 가장 큰 영화들은 다음과 같습니다:
- 레이더스 (Raiders of the Lost Ark), 평점차: 1.66667
- 셰익스피어인러브 (Shakespeare in Love), 평점차: 2.107143
In [7]:
print("Male - Female")
display((mean_df.iloc[0] - mean_df.iloc[1]).sort_values(ascending=False).head(1))
print("Female - Male")
display((mean_df.iloc[1] - mean_df.iloc[0]).sort_values(ascending=False).head(1))
본 포스팅은 Minnesota대학교의 Intro to Recommender Systems코세라 강좌를 정리한 내용입니다.
https://www.coursera.org/learn/recommender-systems-introduction?specialization=recommender-systems
728x90
반응형
'데이터사이언스 > 추천시스템' 카테고리의 다른 글
추천시스템 - (10) 추천시스템의 학습 (0) | 2020.08.04 |
---|---|
추천시스템 - (9) 컨텐츠 기반 추천 (0) | 2020.07.19 |
추천시스템 - (7) 제품연관성 (0) | 2020.06.26 |
추천시스템 - (6) 인구통계 (0) | 2020.02.23 |
추천시스템 - (5) 기술통계 (0) | 2020.02.21 |