11/03 오늘의 시간표
09:00 ~ 10:00 [프로젝트] 장고 클론코딩 프로젝트2
10:00 ~ 11:00 [프로젝트] 장고 클론코딩 프로젝트2
11:00 ~ 12:00 [프로젝트] 장고 클론코딩 프로젝트2
12:00 ~ 13:00 [프로젝트] 장고 클론코딩 프로젝트2
13:00 ~ 14:00 점심식사
14:00 ~ 15:00 [프로젝트] 장고 클론코딩 프로젝트2
15:00 ~ 16:00 [프로젝트] 장고 클론코딩 프로젝트2
16:00 ~ 17:00 [프로젝트] 장고 클론코딩 프로젝트2
17:00 ~ 18:00 [프로젝트] 장고 클론코딩 프로젝트2
18:00 ~ 19:00 저녁식사
19:00 ~ 20:00 [프로젝트] 장고 클론코딩 프로젝트2
20:00 ~ 21:00 [프로젝트] 장고 클론코딩 프로젝트2
추천시스템 프로젝트
오늘부터 본격적인 프로젝트에 들어간다. 내가 담당한 파트는 메인이 되는 홈 페이지를 만드는 것인데 홈 페이지에는 도서에 대한 정보가 나와야하기 때문에 데이터셋을 구하고 DB를 구축하는 작업이 우선시 되어야 했다.
데이터셋은 기획 구상단계에서 찾아보았던 문화 빅데이터라는 사이트에 프리소스로 제공되는 국립 중앙도서관의 도서 상세정보 데이터셋을 활용하기로 했다.
데이터셋 출처
이제 이 데이터셋을 DB에 올려야하는데 첫번째로는 csv파일을 파이썬에서 다루는법을 모른다는 것이 문제였고 두번째로는 그 csv파일의 정보들을 DB에 넣는 방법을 모른다는 것이다. 두가지 문제점도 해결하고 이후에 작업을 어떻게할지도 상담하기 위해서 튜터님에게 가서 질문하였고 csv에서 정보를 추출하는 함수를 구글링으로 찾아서 필요한 데이터만 뽑아낸 후 DB에 올리기로 했다.
그 전에 우선 모델을 생성해야했다.
from django.db import models
# Create your models here.
class Book(models.Model):
class Meta:
db_table = "book"
title = models.CharField(max_length=1200, primary_key=True)
author = models.CharField(max_length=1000, null=True)
publisher = models.CharField(max_length=1000, null=True)
pub_date = models.CharField(max_length=10, null=True)
img_url = models.CharField(max_length=1000, null=True)
description = models.TextField(null=True)
isbn13 = models.CharField(max_length=13, null=True)
def __str__(self):
return self.title
DB에 도서정보들을 올리기 위해 모델을 생성해 주었다. 데이터셋을 가져온 사이트에 컬럼 정의서도 있어서 필드값을 지정할때 매우 편했다.
#임포트
import os
import sys
import csv
import django
#환경변수 세팅(뒷부분은 프로젝트명.settings로 설정한다.)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "b4after.settings")
django.setup()
# model import
from books.models import Book
#읽어들일 csv 디렉토리를 각 변수에 담는다.
CSV_PATH = r"C:\Users\gudql\Desktop\B4AFTER\B4AFTER-Back-\books\csv\test.csv"
#함수 정의하기 (row부분엔 해당 table의 row명을 적어준다.)
def insert_Book():
with open(CSV_PATH,"rt",encoding='UTF8') as csv_file:
data_reader = csv.reader(csv_file)
next(data_reader, None)
for book in data_reader:
if book[3]:
title = book[3]
author = book[4]
publisher = book[5]
pub_date = book[14]
img_url = book[9]
description = book[10]
isbn13 = book[1]
# 데이터 추출이 잘 되었는지 확인용
# li = [title, author, publisher, pub_date, img_url, description, isbn13]
# print(li)
try:
Book.objects.create(title = title, author = author, publisher = publisher, pub_date = pub_date, img_url = img_url, description = description, isbn13 = isbn13)
except:
continue
# 중복방지용 코드작성중(미완성)
# exist_title = Book.objects.filter(title=title)
# if exist_title:
# return
# else:
# Book.objects.create(title = title, author = author, publisher = publisher, pub_date = pub_date, img_url = img_url, description = description, isbn13 = isbn13)
# DB 업데이트 완료시 메시지 출력
print('PRODUCT DATA UPLOADED SUCCESSFULY!')
insert_Book()
코드를 참고한 블로그 주소
해당 링크를 참조해서 내가 만든 Book 모델에 테이블값들이 맞도록 함수를 수정해 함수를 만들었다. 모델같은경우 DB에 올릴 때 같은 데이터가 여러번 중복되어 올라가는 것을 방지하기 위해 title필드를 primary키로 지정하였고 데이터가 이상없이 잘 올라가기는 했는데 여기서 또 다른 문제가 발생했다.
DB에 올라갈 데이터가 생각보다 많아서 파일 용량이 너무 커진다는 점이랑 각 도서마다 모든 정보가 들어있는 것이 아니라 비어있는 정보가 많다는 점이 걸렸다.
이렇게 발견된 문제점들은 내일 해결법을 찾아보도록 하겠다.
오늘 하루를 마치며
DB를 구축한다는게 생각보다 시간이 오래걸리는 작업이었다. 좋은 데이터셋을 확보하는 것도 쉽지 않으며 좋은 데이터셋을 구한다 하더라도 프로젝트에 사용할 수 있도록 데이터셋을 다듬는 것 또한 만만치 않은 작업이다. 저번 프로젝트도 그렇고 이번에도 그렇고 내가 특히 DB와 머신러닝쪽을 다루게 되는 느낌인데 차라리 내가 이쪽으로 방향성을 잡고 전문화되어서 작업하는 것도 나쁘지 않을 것 같다는 생각도 든다.