코딩일지/WIL: Weekly I Learned

20221106 WIL

야언 2022. 11. 7. 01:53

이번주 한 일

  • 추천 시스템 프로젝트 - 백엔드

 

 

추천 시스템 프로젝트

 

https://github.com/A7-Lucky/NWRS

 

GitHub - A7-Lucky/NWRS

Contribute to A7-Lucky/NWRS development by creating an account on GitHub.

github.com

 

 

  • 뼈대 구성

webtoon model

- webtoon

- genre

-bookmark(many to many 모델, user)

 

review model

- user (foreignkey)

- webtoon (foreignkey)

 

user model

 

  • 데이터 생성(json)

네이버 웹툰 크롤링과 강의에 쓰였던 ratings.csv(더미) 데이터를 id를 통해 merge시켜 아이템 기반 협업 필터링 적용 

추후에 유저기반 평점 데이터가 쌓이면 ratings.csv 대체

 

collaborative_filtering.py

import pandas as pd
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
# from webtoon.models import Webtoon

ratings = pd.read_csv('webtoon/ratings.csv')
webtoons = pd.read_csv('webtoon/naver_webtoon.csv')

# 데이터프레임을 출력했을때 더 많은 열이 보이도록 함
pd.set_option('display.max_columns', 10)
pd.set_option('display.width', 300)
# id를 기준으로 ratings 와 movies 를 결합함
webtoon_ratings = pd.merge(ratings, webtoons, on='id')

user_title = webtoon_ratings.pivot_table('rating', index='title', columns='userId')

user_title = user_title.fillna(0)

item_based_collab = cosine_similarity(user_title, user_title)

item_based_collab = pd.DataFrame(item_based_collab, index=user_title.index, columns=user_title.index)




def item_based_filtering(webtoon):
    webtoon_list = item_based_collab[webtoon].sort_values(ascending=False)[1:21]
    return webtoon_list.index

 

 

  • 포스트맨을 통해 CRUD 기능 확인

각 모델별 get, post, put, delete 기능 확인

 

 

 

 

프론트엔드

 

  • 회원가입, 로그인 페이지 구현
  • 메인페이지 시 웹툰 랜덤 추천 리스트 형성 및 클릭 시 웹툰 디테일 페이지로 이동
  • 웹툰 디테일 리스트 페이지에 아이템 협업 기반 필터링 리스트 추가

 

 

 

다만 db에서 받아온 데이터를 별도의 작업 없이 띄우기만 하는 정도의 자바스크립트 함수로, 받은 정보를 다듬어서 표현하려면 ajax등을 이용해야할듯.. ex) 썸네일 url도 받아온 정보를 img src를 통해 구현하기