set_tfidf
설명
가장먼저 실행되는 DAG로 학습 말뭉치의 TFIDF를 구하는 DAG이다. 모든 파이프라인 중 가장 먼저 작동해야 한다.
→ 서버와 연결된 후에 가장 먼저 실행이 되어야 한다.
create_db_table
가장 먼저 실행이되면 Postgre 데이터베이스에 필요한 테이블을 추가하는 단계이다.
로우 쿼리를 보내어 테이블을 생성하게 된다.
set_train_file_dfs
학습 파일의 document frequency를 Postgre 데이터베이스에 저장을 하는 테스크
성능상 개선점
다른 라이브러리를 사용하지 않고 for을 이용해서 루프를 돌면서 쿼리를 보내게된다.
보내는 쿼리의 횟수를 줄이고, 라이브러리를 적극 활용하여 최적화를 시켜보자
개선
pandas와 sklearn를 사용하자
문제
라이브러리를 사용하여 위와 같은 db 테이블과 같은 방식으로 사용이 가능하다.
성능
2시간이 넘는 상황에서 db와의 연결이 중간에 끊어지는 문제가 발생한것 같다.
라이브러리를 적극 사용한 결과
6분 정도 걸리는 것 같다.
set_embedding
데이터 전처리
열 합치기
map을 이용하여 title, description, memo 합치지
SQLAlchemy를 활용한 쿼리 불러오기
engine = db.create_engine('DB_URI')
connection = engine.connect()
request = "you query"
result = engine.execute(request)
df 데이터를 counterVectorizer에 붙이기
쿼리를 통해 불러온 데이터의 경우 column이 term, value로 구성된 형태 → transpose
https://www.it-gundan.com/ko/python/왜-numpyexp에-대해-'ufunc의-루프가-int-유형의-인수-0을-지원하지-않습니다'오류가-발생합니까/812946215/
np를 사용할 때에, 관련 타입을 명시해주지 않아서 나타나는 에러라고 한다.
astype
을 적용해서 float임을 명시한다.
pandas 행끼리 곱하기
기본적으로 pandas는 column만 일치한다면 연산자 *
를 이용해서 해결이 가능하다.
각 row 당 최대 column index 추출 → np.argsort
https://stackoverflow.com/questions/44308153/how-to-find-column-index-of-top-n-values-within-each-row-of-huge-dataframe
axis를 설정해서 coulm에 대한 최대값들을 추출할 수 있다.
tfidf와 임베딩 벡터간의 곱을 진행
https://www.pythonpool.com/only-size-1-arrays-can-be-converted-to-python-scalars-error-solved/ → mapping 함수 실행시 발생하는 에러
https://stackoverflow.com/questions/18522216/multiplying-across-in-a-numpy-array
기본 연산자를 이용할 수 있다 → 열에 대해서 적용이 되기 때문에 전치를 활용한다.
쿼리를 줄이고 docs frequency를 업데이트 하는 방식
초기
DELETE 후(차이 268)
UPDATE 후(376 증가)
re_embedding
db 커넥션 에러
db와의 connection에서 계속 에러가 발생한다.
로그를 보면 db에 접근하는 횟수를 알 수 있다.
마지막 db에서 postgres_default로 들어왔음을 볼 수 있다.
PostgresHook을 사용하여 연결을 하는과정에서 문제가 발생한것 같다.
**kwargs
로 받는다, keyword를 어떻게 설정하냐에 영향을 받을 수 있다.
이미 스키마가 있다는 에러가 발생하였다.
pandas에 있는 to_sql
을 살펴보면 다음과 같은 설명이 있다.
그렇다면 append 옵션을 주어 덫붙이도록 하자
데이터를 INSERT하는 부분에서 에러가 발생하였다.
DataFrame을 넣어줄 때 index까지 같이 넣어주었기 때문에 발생한것 같다.
바로 아래에 index와 관련된 설정이 존재하였다. False로 바꿔주자
성공하였다!
Document Frequency 관련 오류
pandas 대용량 오류
https://www.reddit.com/r/learnpython/comments/fo8ind/pandas_unable_to_allocate_memory/