Art Cinema 프로젝트 개발일지5

LILY YOON·2020년 2월 24일
0

Art Cinema

목록 보기
5/5

고객이 선호하는 장르의 영화 추천하는 알고리즘

앞에서 가상의 고객DB 20명의 데이터를 만드는 코드를 짰다.
그리고 고객DB에 있는 메인장르와 서브장르에 맞는 단편영화를 추천해주는 알고리즘을 짰다.

먼저 구현할 알고리즘을 나열하자면,

  1. 모든 고객의 정보를 하나의 list에 저장한다.
  2. 모든 단편영화 정보를 하나의 list에 저장한다.
  3. 고객정보(이름과 ID)를 받는다( 이것은 프론트 엔드 구현시, 직접 정보를 받을 것이고 지금은 가상으로 지정해준다 예)sparta0 스파르타0)
  4. 고객 정보 list를 for문으로 돌린다.
  5. 받은 고객정보와 고객list에 있는 정보가 일치하면,
  6. 그 고객의 메인장르와 서브장르를 추출한다.
  7. 단편영화 list를 for문으로 돌린다.
  8. 고객의 메인장르와 같은 장르의 단편영화들을 하나의 임시 list에 저장한다(서브장르도 마찬가지)
  9. 임시 list에서 단편영화 3개를 추출해서 추천해준다.

1번과 2번 - 정보들을 하나의 list에 저장하기

# all_short_movie 라는 변수에 DB값 담기(지금 단편영화 db가 없어서 장편영화 db로 함)
all_long_movie = list(db.Long_movie_1.find({}))
# all_customer 라는 변수에 DB값 담기
all_customer = list(db.Customer.find())

3번- 고객정보받기 (임의로 지정)

#임의의 고객정보 설정
customer_name = "스파르타1"
customer_Id = "sparta1"

4번- 고객정보 list for문

for i in range(len(all_customer)):

5번, 6번- 받은 고객정보와 db고객정보가 일치하면 선호장르 추출

if (customer_name == all_customer[i].get('name')) & (customer_Id == all_customer[i].get('Id')):
        #선호 장르 1,2 값 저장
        customer_genre1 = all_customer[i].get('main_genre')
        customer_genre2 = all_customer[i].get('second_genre')

7. 단편영화 list for문

for k in range(len(all_long_movie)):

여기서 장르값만 따로 임시로 저장해준다(고객의 장르와 비교하기 위해서)

temp_genre = all_long_movie[k].get('main_genre').split('\n')[1]

8. 고객이 선호하는 장르와 일치한다면, 그 장르의 단편영화를 임시리스트에 저장

if customer_genre1 == temp_genre :
            #그 영화들을 하나의 리스트로 모아둔다.
            temp_main_genre_movie.append(all_long_movie[k])
            # 만약에 고객 서브 장르와 단편영화의 임시장르가 같으면,
if customer_genre2 == temp_genre:
            temp_second_genre_movie.append(all_long_movie[k])
else:
            continue

9. 임시리스트에서 영화3개 추천해주기

#그 리스트 중에 샘플뽑기/ 첫번째 선호장르 영화3개 두번째 선호장르 영화 3개
print("첫번째 선호하는 장르영화는", customer_genre1)
print(random.sample(temp_main_genre_movie, 3)[0])
print(random.sample(temp_main_genre_movie, 3)[1])
print(random.sample(temp_main_genre_movie, 3)[2])

print("두번째 선호하는 장르영화는", customer_genre2)
print(random.sample(temp_second_genre_movie, 3)[0])
print(random.sample(temp_second_genre_movie, 3)[1])
print(random.sample(temp_second_genre_movie, 3)[2])

0개의 댓글