Giter Site home page Giter Site logo

mbtify's People

Contributors

dependabot[bot] avatar dustin-kang avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

kimmocee

mbtify's Issues

[DAY4] Release

Job Description

마저 마무리 짓지 못한 BootStrap으로 웹페이지를 꾸밉니다.

배포

  • Heroku를 사용하여 배포를 진행합니다.
heroku login
# 헤로쿠 계정 로그인

Flask 웹 구축

☑️ 작업 완료

  • 의존성 기록하기 requirement.txt
  • index 페이지 구축하기
  • 응답페이지 구축하여 POST HTTP 페이지 넘기기
  • 404 페이지 구축하기
  • 머신러닝 모델 적용하기

🏄‍♂️ 작업 사항

의존성 기록

$ pip freeze > requirements.txt
$ pip install -r requirements.txt

index 페이지 구축하기

 $ export FLASK_APP=mbtifyapp (환경변수 지정)
환경변수 지정하여 `flask run`으로 자동 실행

🤔 미흡한 점 또는 추후 논의 사항

XGBOOST 오류

xgboost.core.XGBoostError: [16:44:04] /Users/runner/work/xgboost/xgboost/python-package/build/temp.macosx-10.9-x86_64-cpython-38/xgboost/src/learner.cc:1222: Check failed: header == serialisation_header_: 
  If you are loading a serialized model (like pickle in Python, RDS in R) generated by
  older XGBoost, please export the model by calling `Booster.save_model` from that version
  first, then load it back in current version. See:

    https://xgboost.readthedocs.io/en/latest/tutorials/saving_model.html

  for more details about differences between saving model and serializing.

Stack trace:
  [bt] (0) 1   libxgboost.dylib                    0x000000012ad22615 dmlc::LogMessageFatal::~LogMessageFatal() + 117
  [bt] (1) 2   libxgboost.dylib                    0x000000012ae2f019 xgboost::LearnerIO::Load(dmlc::Stream*) + 2697
  [bt] (2) 3   libxgboost.dylib                    0x000000012ad2ffc2 XGBoosterUnserializeFromBuffer + 146
  [bt] (3) 4   libffi.dylib                        0x00007ff82a03d912 ffi_call_unix64 + 82
  [bt] (4) 5   ???                                 0x000070000d052650 0x0 + 123145520752208


127.0.0.1 - - [03/Nov/2022 16:44:04] "POST /recv HTTP/1.1" 500 -

⛔️ 제한 사항

📄 참고자료

웹사이트 리뉴얼 디자인

☑️ 작업 완료

  • 메인 페이지 html & css 디자인
  • 404 페이지 및 505 페이지 리뉴얼 디자인
  • 응답 페이지 리뉴얼 디자인

🏄‍♂️ 작업 사항

  • 상세하게 작성 부탁드립니다.
  • 링크 제목를 통해 링크를 작성할 수 있습니다.
  • 로 이미지를 업로드할 수 있습니다.

🤔 미흡한 점 또는 추후 논의 사항

  • css 파일이 적용이 되지 않는다.
    • css 세팅은 rl_for를 이용하면 해당 폴더의 url을 자동으로 세팅해준다.

⛔️ 제한 사항

📄 참고자료

부트스트랩 페이지

[Refactoring] 기존 프로젝트 리팩터링 시작

Job Description

  • 데이터 수집 부분에서 오탈자로 인해 사용하지 못했던 함수를 재사용.
  • .gitignore를 이용하여 보안에 신경 써야할 파일 수정
  • 함수 주석 아래와 같이 정리
    • 함수 제목
    • 함수 설명
    • 파라미터 값
    • 리턴 값

☑️ 작업 완료

  • Spotify 개발자 홈페이지에서 클라이언트를 생성하여 증명 토큰을 받아오는 작업
  • Spotify 개발자 홈페이지에서 플레이리스트 데이터를 크롤링하는 작업
  • 트랙을 추출하여 MBTI 별 JSON 파일로 저장하는 작업

🏄‍♂️ 작업 사항

Spotify Client Credentials Flow

AuthG_ClientCredentials

- 위 흐름대로 요청하여 토큰을 받았으며 중간에 ascill 코드를 base64 코드로 바꾸었다.

트랙을 추출하여 JSON 파일로 저장하는 작업

  • get_token.py 에서 클라이언트 증명 토큰을 가져옵니다.
  • get_track.py 에 있는 함수를 통해 데이터를 가져와 json 파일로 저장

🤔 미흡한 점 또는 추후 논의 사항

  • 플레이리스트 별 트랙 데이터를 Json 파일로 저장하는데 시간 단축이 필요함.
  • infp, infj 플레이리스트만 가져오지 못했다. 무슨 이유인지 확인해봐야겠다.
    • 플레이리스트를 가져오는 함수에서 limit 쿼리스트링을 늘려 요청을 보내야하는데 제한된 갯수만 불러왔다. (수정완료)

⛔️ 제한 사항

📄 참고자료

[DAY2] Storing JSON Data

Job Description

Json 파일의 데이터를 문서형 데이터베이스인 MongoDB를 이용해 가져온다.

Org : codestateAI
Project : mbti_spotify
cluster. : tracksdb

[DAY5] Keynote day

Job Description

작업 내용을 적어주세요.

Keynote

  • 발표 전 다시 한번 체크 합니다.
  • 발표 자료를 만듭니다.
  • 발표를 진행해봅니다.

MBTI 예측을 위한 전처리, 머신러닝 모델링

☑️ 작업 완료

  • JSON 파일을 하나의 CSV로 변환하는 작업
  • CSV 데이터 전처리 작업
  • 머신러닝 모델링

🏄‍♂️ 작업 사항

Convert JSON to CSV

# json 데이터를 불러오는 경우
    with open(f'{path}/{file}', 'r', encoding='utf-8') as input_file:
        data = json.load(input_file)

# csv 데이터로 출력하는 경우 
    with open(f'data/mbti/csv/{filename}.csv', 'w', encoding='utf-8') as output_file:
        f = csv.writer(output_file)
        f.writerow([])
  • mbti json 데이터들을 불러와 하나의 CSV 파일로 통합한다.
  • 중복된 데이터가 있을 수 있으므로 drop_duplicated을 사용해 중복된 데이터를 제거한다.

CSV 데이터 전처리 작업 및 머신러닝 모델링

  • 특성상 loudness 특성은 음의 정수로 되어 있기 때문에 스케일링 작업을 진행하였다.
  • mbti 문자열을 소문자로 통일하는 작업을 진행하였다.
  • XGboost를 이용하여 머신러닝 모델링하였다.

🤔 미흡한 점 또는 추후 논의 사항

⛔️ 제한 사항

📄 참고자료

테스팅 및 간단 유지보수

☑️ 작업 완료

  • 불필요한 파일 정리
  • 의존성 관리
  • 테스팅

🏄‍♂️ 작업 사항

의존성 관리

# 모듈 버전 txt 파일로 저장하기
pip freeze > requirement.txt

파이썬 버전 확인

  • pyenv : 파이썬 버전을 관리하는 툴
  • pyenv-virtualenv : 파이썬 환경을 격리하는 툴
pyenv versions
# 파이썬 버전들 리스트로 보기
pyenv global 3.7.4
# 3.7.4 버전 전역 변수로 두기
pyenv install 3.7.4
# 3.7.4 버전 설치하기
pyenv uninstall <가상환경이름>
# 파이썬 특정버전 삭제
pyenv install —list
# 설치가능한 파이썬 버전 확인

불 필요한 파일 정리 및 테스팅

├── application.py
├── crawling_app.py
├── requirements.txt
├── screts_key.py
├── static
│   ├── css
│   │   ├── bootstrap.min.css
│   │   └── main.css
│   └── img
│       └── logo.png
├── templates
│   ├── 404.html
│   ├── 500.html
│   ├── main.html
│   ├── recv.html
│   └── search.html
├── tracks.csv
└── xgb.model

🤔 미흡한 점 또는 추후 논의 사항

⛔️ 제한 사항

📄 참고자료

파이썬 버전 관리: pyenv, virtualenv, autoenv

[DAY3] Machine Learning Web Application

Job Description

머신러닝을 이용한 웹 어플리케이션을 만듭니다.

  • 우선 토의적으로 Colab을 이용하여 머신러닝을 시범해봅니다.
  • flask 를 이용하여 웹 어플리케이션을 만듭니다.
pip install flask
  • 플라스크와 BootStrap을 이용해 웹페이지를 꾸밉니다.
  • 머신러닝 모델을 객체화하여 파일을 저장합니다.
  • 머신러닝 모델을 이용한 대시보드를 만듭니다.
  • 배포할 준비를 합니다.

[Day1] Importing Spotify API Token

Job Description

image

Request

  1. 우선 Spotify Developer 에서 자신의 Client에 로그인 하여 IDSecret ID를 확인한다.

Screen Shot 2021-12-08 at 1 46 31 PM

위 링크를 통해 자세한 내용을 확인할 수 있다.

  1. 처음에는 Spotify에서 권한부여(authorization) 를 받아야 한다.
    소스 코드의 예를 통해 어떻게 소스코드를 작성해야 권한부여를 받을 수 있을지 잘 설명 되어있다.

  2. CODE 작성
    curl -X "POST" -H "Autorization: Basic Zj....Y0NDQ=" -d grant_type=client_credentials https://accounts.spotify.com/api/token

import json
import requests
import base64
from secrets import * # 우선 같은 경로에 다른 파이썬 파일에 client 정보를 저장해 두었다.

authUrl = "https://accounts.spotify.com/api/token"
authHeader = {}
authData = {}

def getAccessToken(clientID, clientSecret):
      message = f"{clientID}:{clientSecret}" # secret.py에 사용자 정보 불러오기
      message_bytes= message.encode('ascii') # 메세지 ascii code로 인코딩
      base64_bytes = base64.b64encode(message_bytes)  
      base64_message = base64_bytes.decode('ascii')
  
      # print(base64_message) 
  
      authHeader['Authorization'] = "Basic " + base64_message
      authData['grant_type'] = "client_credentials"
  
      res = requests.post(authUrl, headers=authHeader, data=authData)
  
      print(res) # <Response [200]> 
  
      responseObject = res.json() # json 파일화 시키기
      # print(json.dumps(responseObject, indent=2))  # indent 옵션 : JSON 문자열을 읽기 편하게 할 필요가 있을 경우
  
      # 토큰을 받았으면, 아래와 같이 토큰을 가져올 수 있습니다.
  
      accessToken = responseObject['access_token']
  
      return accessToken

token = getAccessToken(clientID, clientSecret)

print(token) 

위와 같은 방식으로 User Access token 을 가져올 수 있다.

[DAY2-3] Immigrate sqlite DB

Job Description

이전 작업 설명

  1. Spotify API를 이용해 받은 플레이리스트 데이터를 Track 데이터로 변경하였다. (Spotify Tracks ID)
  2. 트랙데이터가 나열된 JSON 파일을 MongoDB를 이용하여 저장하였다.
  3. 클라우드 DB에 저장된 mongoDB compass를 이용해 필요한 field만 선별하여 csv 파일로 다운 받는다.

CSV 파일을 Sqlite3 모듈과 Pandas 라이브러리를 이용하여 문자열 가공과 local DB에 저장하는 작업을 진행할 것이다.

  • 우선 json 파일로 인해 가공되지 않았던 field를 pandas를 이용하여 수정할 것이다.
  • 그다음 sqlite3로 이용하여 local DB에 저장할 것이다.

[Day1] Pulling Playlist Datasets

Job Description

no. mbti link mbti description playlist_id
1 INFJ https://open.spotify.com/playlist/2fHK41mb288anu6dQDNuB8 the Visonary 2fHK41mb288anu6dQDNuB8
2 INFP https://open.spotify.com/playlist/5TW1TKTM7Q99Z3p4NvtReA the Mediator 5TW1TKTM7Q99Z3p4NvtReA
3 INTJ https://open.spotify.com/playlist/0qBVUmdHvl7vaQnNtQatlC the Architect 0qBVUmdHvl7vaQnNtQatlC
4 INTP https://open.spotify.com/playlist/3g57PuPnoAVo1lfJhQZeDj the Scholar 3g57PuPnoAVo1lfJhQZeDj
5 ENTJ https://open.spotify.com/playlist/2L6Dxf2WAqoIQX50Zg4wFR the Commandar 2L6Dxf2WAqoIQX50Zg4wFR
6 ENTP https://open.spotify.com/playlist/4RdPgciqwk1Pzo8OXKVCZB the debater 4RdPgciqwk1Pzo8OXKVCZB
7 ENFJ https://open.spotify.com/playlist/6th4JW4Dky7UjeEhHuQeQd the protagonist 6th4JW4Dky7UjeEhHuQeQd
8 ENFP https://open.spotify.com/playlist/5GQ1YxFYw0pxC9LmAVcCXZ the individualist 5GQ1YxFYw0pxC9LmAVcCXZ
9 ISTJ https://open.spotify.com/playlist/00Ni0Ve2XMw43uPE6g73RN the logistician 00Ni0Ve2XMw43uPE6g73RN
10 ISFJ https://open.spotify.com/playlist/3ZXgVNRlimnET5ceMz7XXQ the protector 3ZXgVNRlimnET5ceMz7XXQ
11 ESTJ https://open.spotify.com/playlist/1KIdUNGcJLOPTkewJimsQ7 the administrator 1KIdUNGcJLOPTkewJimsQ7
12 ESFJ https://open.spotify.com/playlist/3aVsLjJaHunrEhlVRp9AxT the authentic 3aVsLjJaHunrEhlVRp9AxT
13 ISTP https://open.spotify.com/playlist/3RqQRynMWJoP9JkEc7YrOE the prodigy 3RqQRynMWJoP9JkEc7YrOE
14 ISFP https://open.spotify.com/playlist/4phCnknfZ5LhEYmArdUJXv the creative 4phCnknfZ5LhEYmArdUJXv
15 ESTP https://open.spotify.com/playlist/4OnGyVyLPdmBev3HBT0tYu the rul breaker 4OnGyVyLPdmBev3HBT0tYu
16 ESFP https://open.spotify.com/playlist/4pi2j0t6uT4YtBXnT2gAa4 the entertainer 4pi2j0t6uT4YtBXnT2gAa4

배포

☑️ 작업 완료

  • 도메인 생성하기
  • 도메인 서버 만들기
  • 도메인과 서버 연결하기
  • 웹 어플리케이션 구축하기
  • 웹 어플리케이션 배포하기
  • 로드 밸런싱 리스너 추가하기

🏄‍♂️ 작업 사항

AWS EB

  • 배경
    우선, 이전에 사용했던 Heroku는 현재 웹 서비스 프로젝트 개발에 최적화된 웹 어플리케이션이다. 플랫폼 대용으로 만들기가 쉽고 dynos를 조정하여 성능을 변화시킬 수 있는 어플리케이션이다. 하지만 이번 AWS EB를 사용하여 이전에 발생했었던 성능 이슈를 어느정도 해결하고 싶은 것도 있었고 아직 사용해본적이 없었기 때문에 인프라 용도에 쓰이는 EB를 사용해보았다.
  • 사용 과정
    EB, Router 53(EC2) 을 통해 아마존 웹 서비스를 이용하였다.

AWS Router 53

  1. FreeNom 사이트에서 무료 도메인을 발급받을 수 있다.
  2. 발급 받은 도메인을 Router 53 콘솔에서 호스팅 영역을 생성해준다.
  3. 발급 받은 도메인의 네임 서버에 호스팅 영역에 있는 네임서버 값 4개를 전부 복사한다. (AWS가 도메인을 관리하게됨)
  4. ACM(Certificate Manager)에서 도메인을 입력하여 인증서를 요청한다. -> 53 레코드 생성

Elastic Beanstalk

  1. 우선 프로젝트에 의존성 관리를 진행한후 (#15) run() 함수를 지워준다.
  2. EB 콘솔에서 어플리케이션과 환경을 생성한다.
  3. 어플리케이션 배포는 두가지 방법이 있는데, zip()파일로 묶거나 cli를 통해 하는 방법이 있다. (나는 cli로 했다...)
  4. pip install awsebcli으로 ebcli 모듈을 설치한 후, eb init으로 초기화를 진행한다.
  5. 본인 계정의 추가 증명 설정에 접근 키(Acess Key)를 입력한다. (IAM에서 확인할 수 있다.)
  6. 리전, 환경, 버전, 로드밸런싱 타입을 입력하면 배포가 완료된다.

로드밸런싱 리스너 추가하기

  1. EB 로드밸런싱에서 리스너를 추가한다. (443/HTTPS/리스너 , 80/HTTP/인스턴스)로 추가한다.
  2. 53에서 레코드를 생성한다. (www 레코드와 빈 레코드로 EB와 연결시켜 라우팅)

🤔 미흡한 점 또는 추후 논의 사항

  • AWS Router 53은 추가 요금이 발생하니 추후 크레딧이 종료되면 도메인을 종료할 예정이다.

⛔️ 제한 사항

📄 참고자료

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.