군침이 싹 도는 코딩

추천 영화 작업 자동화 파이프라인 본문

Python/Pandas

추천 영화 작업 자동화 파이프라인

mugoori 2023. 1. 3. 13:00
similar_movies_list = pd.DataFrame()
for i in range( myRatings.shape[0] ) :
  movie_title = myRatings['Movie Name'][i]
  recom_movies = corr_movie[movie_title].dropna().sort_values(ascending=False).to_frame()
  recom_movies.columns = ['correlation']
  recom_movies['weight'] = recom_movies['correlation'] * myRatings['Ratings'][i]
  similar_movies_list = similar_movies_list.append( recom_movies )

# 추천 영화 작업 자동화 파이프라인이다 이것을 하나씩 풀어서 보자

 

 

 

similar_movies_list = pd.DataFrame()

# 비어있는 데이터 프레임을 만든다

 

 

 

 

 

for i in range( myRatings.shape[0] ) :
  movie_title = myRatings['Movie Name'][i]

myRatings

# myRatings 라는 데이터 프레임은 내가 본 영화의 데이터 프레임이다

이것의 영화제목이 필요하므로 이것만을 따로 억세스해서 반복문의 range 안에 넣어주도록한다

그리고 그것을 받아 변수에 저장한다

 

 

 

 

  recom_movies = corr_movie[movie_title].dropna().sort_values(ascending=False).to_frame()
  recom_movies.columns = ['correlation']

# 이제 전체 데이터 프레임의 상관관계에서 내가 본 영화의 제목을 집어넣어 그 영화들과의 상관관계만 뽑아낸다

그것에서 비어있는 데이터를 지우고(dropna) 내림차순 정렬( sort_values(ascending=False) )을 한 뒤

데이터 프레임으로 만들고(to_frame) 이것의 컬럼 이름을 바꿔준다 (recom_movies.columns)

 

 

 

 

  recom_movies['weight'] = recom_movies['correlation'] * myRatings['Ratings'][i]
  similar_movies_list = similar_movies_list.append( recom_movies )

# recom_movies 에 weight라는 새 컬럼을 만들어 correlation 컬럼에 내가 준 별점만큼의 가중치를 준 뒤 저장한다

마지막으로 만들었던 빈 데이터 프레임에 이것을 저장한다

 

 

 

 

similar_movies_list = similar_movies_list.sort_values('weight', ascending=False)

# 반복문을 통해 자동화를 했으면 이것을 새로만든 컬럼 weight로 내림차순 정렬을 해준다

여기서 문제가 생기는데 이렇게하면 가장 가중치가 높은것은 내가본 영화가 된다

이를 삭제해주어야한다

 

 

 

 

 

drop_index_list = myRatings['Movie Name'].to_list()
for name in drop_index_list  :
  if name in similar_movies_list.index :
    similar_movies_list.drop(name, axis = 0, inplace=True)

# 먼저 내가 본 영화의 제목을 리스트로 만들어 변수에 저장해준다

반복문을 사용해 내가 본 영화의 제목이 similar_movies_list에 있다면 이것을 삭제하게한다

 

 

 

similar_movies_list

# 결과를 보면 가중치 순으로 내가 본 영화를 제외하고 잘 정렬이 되어있다 하지만 영화가

중복되어 들어가는 경우도 발생한다 따라서 중복된 영화가 있으면 이것을 제거해줘야한다

방법은 영화 이름별로 웨이트가 가장 높은 데이터를 가져오는것이다

 

 

 

similar_movies_list.reset_index()['title'].value_counts()

# 중복된 데이터가 있는지를 먼저 확인한다

 

 

 

 

similar_movies_list.groupby('title')['weight'].max().sort_values(ascending=False)
>>>
title
Being There (1979)                                                             1.700037
Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb (1963)    1.571663
Independence Day (ID4) (1996)                                                  1.555910
Clockwork Orange, A (1971)                                                     1.552285
Citizen Kane (1941)                                                            1.481653
                                                                                 ...   
Firm, The (1993)                                                              -0.670396
Fried Green Tomatoes (1991)                                                   -0.682234
Beauty and the Beast (1991)                                                   -0.686290
Last of the Mohicans, The (1992)                                              -0.746177
Air Force One (1997)                                                          -1.131976
Name: weight, Length: 198, dtype: float64

# 그룹바이를 사용해서 웨이트의 max값만을 뽑아내 그것을 내림차순 정렬하면 된다