프로젝트 개발일지(진실의 방)
업데이트:
프로젝트를 시작한지 기간이 좀 지났지만, 이번주부터라도 매일매일 뭘 했는지 남겨보려한다.
Week 3~4, May
05-25 이전
- 프로젝트 주제선정 (약 1주 소모)
- 주제 선정에 따른 교보재 신청
- 프로젝트 docs에 md파일 작성(pandas, gitignore 관련)
- django 기본 프로젝트 생성
- django models.py 자동생성 및 swagger 설정
- 데이터 전처리(데이터 : 국토교통부 실거래가 조회시스템)
- 주소를 가지고 카카오 API를 이용해서 위도, 경도 저장
- 계약년월, 일 칼럼을 계약년월일로 맞추기와 같은 컬럼 값 스키마에 맞춰 변경
- 위도, 경도를 가지고 카테고리 별 데이터를 받아오는 함수 작성
시행 착오 1:
위도, 경도를 가지고 카테고리 별 데이터를 받아올 때 여러 페이지의 결과가 있을 경우,
페이지를 돌면서 데이터 명을 str로 다 받아서 붙였다.
-> API호출이 너무 많아서 일일 허용 트래픽을 넘김
-> 일일 허용량을 넘은 경우 에러가 남, 이때 try except로 에러코드를 저장하게 했는데
에러코드가 있는 데이터를 조회하려고 할 때, 몇몇 카테고리 데이터의 길이가 너무 길다보니 속도가 너무 느림(비효율적)
해결 1: 카테고리 별 데이터를 str로 받지말고 갯수만 int로 받자 !
장점, 페이지네이션을 돌지 않아도 되서 기존보다는 호출 횟수가 적음
(기존 : 1 row * 11카테고리 + a(페이지 수))
(개선 : 1 row * 11카테고리)
Week 5, May
2020-05-25(월)
- 강의 듣기(인프런 : 공공데이터로 파이썬 데이터 분석 시작하기)
- 전처리한 데이터프레임을 서버 데이터베이스에 저장
- 전처리하면서 만든 ipynb파일들을 정리 및 깃에 업로드
2020-05-26(화)
- 강의 듣기(오전엔 강의를 듣자..)
- 이미지 수집을 위한 Selenium 코드 작성 및 코드 돌리기
- 프로젝트 docs에 md파일 작성(Selenium관련)
- 이미지 약 4000개 수집 !!
2020-05-27(수)
- 강의 듣기
- building 데이터에 ‘ho’칼럼(랜덤으로), image 수집한 내용 추가
- building 데이터 다시 서버에 업로드
- 취업 특강
2020-05-28(목)
- 강의 듣기(1챕터 끝)
- 개발일지 작성하기(오늘부터 시작)
- 로컬 데이터베이스 환경에 데이터 저장하기 및 백업 데이터 생성
- 전세, 월세, 매매 시각화를 위해 django에서 rest api 만들기(작업중)
- 월세의 경우 보증금 + 월세를 같이 뿌려줄건지
- 동 단위 결과 인덱스 값과 건물 단위 결과 인덱스 값이 다를 때 어떻게 뿌려줄건지
- frontend에서 차트 실험용을 위한 테스트 페이지 제작 및 기본 차트 구성
2020-05-29(금)
- 강의 듣기(2챕터 시작)
- 시각화 끝(label 고정방식, 데이터가 없어도 그래프 뿌려줌, 월세의 경우 보증금,월세 라인 추가)
- 데이터킷 배부(around 테이블을 위한 api를 db화 하는 내용, 일일호출량때문에 팀원들에게 지역별로 분배)
Week 1, June
2020-06-01(월)
- serializer 생성
- 지역(시도,시군구)과 선호 카테고리를 입력 받았을 경우 상위 6개 거래이력과 카테고리 값 보여주기
- 거래 이력을 보여줄 때 어떤 거래이력을 보여줄지에 대한 값 계산이 필요
- 나이대에 따른 거래 이력을 추천하기 위한 준비(views)
- 선호 지역에 따른 필터링 추가 필요
- 선호도를 저장하는 테이블 생성
- 저번주 베스트멤버 당첨(너무 좋다 !!!)
2020-06-02(화)
- db 변경한 것 dump sql생성 및 django(models, serializers,,)에 적용
- 서버 데이터베이스에 업로드 하기위해 노트북파일 일부 수정
- 비회원인 경우 처음 메인에 전체 이력 랭킹 9개 보여주는 api
- 회원인 경우 등록한 카테고리와 관심지역 기반에 따른 이력 전달하는 api
- 나이, 성별, 카테고리에 따른 거래 이력을 카테고리 개수, 평점 순으로 보여주는 api
2020-06-03(수)
- 기존 거래이력 단위에서 건물단위로 바꿈(ㅠㅠ설계의 중요성)
- 추천, 찜, 최근 본 이력 등등 단위가 건물단위로 변경됨(건물 추천, 건물 찜, 최근 본 건물 ..)
- 변경사항 : 메인 3개씩뿌려주는거, 검색서비스 …
- django orm docs 작성
- 추천모듈 개발을 위한 surprise탐색 중
2020-06-04(목)
- content based system 연구
- 유저가 평가를 한 항목이 없는 경우(신규유저일때) 어떤 것들을 보여줘야 할지,,
- 선호도와 가중치를 어떤식으로 연산할지, 유저 정보 없이 아이템간의 유사도를 할지, 유저프로필을 생성해서 유사도를 찾을지..
- ucc촬영 ~~~ 웹드라마출연하는 기분이었다. 너무 너무 좋아 ~!!
2020-06-05(금)
- 백엔드랑 프론트 연동작업
- 성별, 연령대, 선호도에 따른 랭킹을 보여줄 때 api 각각 날리는 부분을 1번 호출 시 결과 3개를 주는 것으로 변경
- 해당 유저의 성별, 연령대와 같은 다른 유저들의 집합을 or로 묶지 않고 filter로 적용(속도 빨라짐, 함수 생성)
- 데이터베이스를 로컬에서 서버로 옮김
- 더미데이터(user, interest,favorite) 생성 후 적용
2020-06-07(일)
- 오늘 새 칼럼이름 맞춰서 moels.py 조금 수정(favorite테이블)
- user based model api 작업 나머지 처리
- RMSE가 1 초반이여서 살짝 의심이 감..
- 추천 api쪽 백엔드랑 붙이기
- 더미데이터 더 생성 (유저 1000명에서 -> 2000명)
- django backend AWS 배포(ubuntu를 Ubuntu로 썼다가 gunicorn fail을 겪고 원인을 알고난 후 눈물 1방울..)
- around에 데이터 새로 넣는 API 작성(아무도 안해서.. 내가 만들었다..)
Week 2, June
2020-06-08(월)
- 데이터 전처리에 썼던 노트북파일들과 파일에 대한 설명을 적은 readme 업데이트
- 데이터베이스 백업파일 만들기
- 발표자료 준비
- 발표 스크립트 검토
- 밤을 꼴딱 새버린… 시행착오
- contract 데이터의 address부분에 ‘동’ 제거해야함(도로명 주소 자체로 검색이 불가, 이걸 이제알다니)
- https 인증서를 끼니 vue에서 django 통신할때 mixed content가 뜸
- 여러번 시도하다가 http로 하니까 cors가 뜸.. (왜지?)
- vue에서 indexPython 파일에서 header 부분 제거
2020-06-09(화)
- 프로젝트 발표
2020-06-10(수)
- 데이터 수정
- contract, around에서 주소칼럼에서 ‘동’ 제거
- sd, sgg, emd 칼럼 제거
- favorite 다시 생성(평점 1~5점 랜덤 -> 2,3,4점대의 비율이 더 높도록 수정)
- contract랑 around랑 관계로 묶어줌(contract에 around fk를 가짐)
- contract의 위도/경도를 around로 옮김
- 데이터베이스 백업
2020-06-11(목)
- 오전 강의듣기(2챕터 끝)
- contract에 is_expired랑 created_at 컬럼 생성
- 변경한 칼럼대로 테이블 새로 생성 및 어제 작업한 데이터 넣기
- 데이터베이스 백업
- views 수정
2020-06-12(금)
- 오늘은 한게 없다.. 반성 ..
- views.py 수정 완료
- around 추가하는 api를 post로 변경(기존에 왜 get으로 했었을까..)
- around 삭제하는 api 추가
- 기타 다른 기존에 있던 api를 새로운 데이터베이스 형식에 맞춰서 변경
- around에 등록되지 않은 주소의 상태이력이나 거래 이력을 등록할 시 시나리오 정립
1. 사용자가 이력등록할때 폼을 입력한다
2. 프론트에서 입력받은 주소를 우선 python으로 요청 -> around 생성해 !
3. python 백에서 around가 있으면 around id를 리턴한다
없으면 자료 만들어서 생성한 다음 around id를 리턴한다
4. 프론트에서 받아서 around_id + 사용자가 입력한 값으로 자바 백엔드로 등록 요청을 보낸다.
자바백에서 등록이 성공하면 contract-id를 반환한다
실패 시 -1 같은 실패의 결과를 보낸다
5. 프론트는 등록이 실패한 경우 python 백엔드로 해당 주소 around를 삭제하라고 요청을 보낸다
6. python 백엔드에서 삭제 요청을 받은 경우 생성한 around를 삭제한다
댓글남기기