mbtify's People
Forkers
kimmoceembtify's Issues
[DAY4] Release
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 -
⛔️ 제한 사항
📄 참고자료
웹사이트 리뉴얼 디자인
[Refactoring] 기존 프로젝트 리팩터링 시작
Job Description
- 데이터 수집 부분에서 오탈자로 인해 사용하지 못했던 함수를 재사용.
.gitignore
를 이용하여 보안에 신경 써야할 파일 수정- 함수 주석 아래와 같이 정리
- 함수 제목
- 함수 설명
- 파라미터 값
- 리턴 값
☑️ 작업 완료
- Spotify 개발자 홈페이지에서 클라이언트를 생성하여 증명 토큰을 받아오는 작업
- Spotify 개발자 홈페이지에서 플레이리스트 데이터를 크롤링하는 작업
- 트랙을 추출하여 MBTI 별 JSON 파일로 저장하는 작업
🏄♂️ 작업 사항
Spotify Client Credentials Flow
- 위 흐름대로 요청하여 토큰을 받았으며 중간에 ascill 코드를 base64 코드로 바꾸었다.트랙을 추출하여 JSON 파일로 저장하는 작업
get_token.py
에서 클라이언트 증명 토큰을 가져옵니다.get_track.py
에 있는 함수를 통해 데이터를 가져와 json 파일로 저장
🤔 미흡한 점 또는 추후 논의 사항
- 플레이리스트 별 트랙 데이터를 Json 파일로 저장하는데 시간 단축이 필요함.
infp
,infj
플레이리스트만 가져오지 못했다. 무슨 이유인지 확인해봐야겠다.- 플레이리스트를 가져오는 함수에서
limit
쿼리스트링을 늘려 요청을 보내야하는데 제한된 갯수만 불러왔다. (수정완료)
- 플레이리스트를 가져오는 함수에서
⛔️ 제한 사항
📄 참고자료
버전 V2.0.0 배포 후 관련 유지보수
☑️ 작업 완료
- 11.07 배포
🏄♂️ 유지 보수 사항
초반 급격히 증가하는 request에 관한 서버 문제 (22.11.07)
- ELB의 auto-scaling 시간이 부족하여 발생. 수분 내에 자동으로 해결됨 (https://www.magnon.kr/23)
[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
🤔 미흡한 점 또는 추후 논의 사항
⛔️ 제한 사항
📄 참고자료
[DAY3] Machine Learning Web Application
Job Description
머신러닝을 이용한 웹 어플리케이션을 만듭니다.
- 우선 토의적으로 Colab을 이용하여 머신러닝을 시범해봅니다.
- flask 를 이용하여 웹 어플리케이션을 만듭니다.
pip install flask
- 플라스크와 BootStrap을 이용해 웹페이지를 꾸밉니다.
- 머신러닝 모델을 객체화하여 파일을 저장합니다.
- 머신러닝 모델을 이용한 대시보드를 만듭니다.
- 배포할 준비를 합니다.
[Day1] Importing Spotify API Token
Job Description
Request
- 우선 Spotify Developer 에서 자신의 Client에 로그인 하여
ID
와Secret ID
를 확인한다.
위 링크를 통해 자세한 내용을 확인할 수 있다.
-
처음에는 Spotify에서 권한부여(authorization) 를 받아야 한다.
소스 코드의 예를 통해 어떻게 소스코드를 작성해야 권한부여를 받을 수 있을지 잘 설명 되어있다. -
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 을 가져올 수 있다.
- reference : Python의 Base64 인코딩
[DAY2-3] Immigrate sqlite DB
Job Description
이전 작업 설명
- Spotify API를 이용해 받은 플레이리스트 데이터를 Track 데이터로 변경하였다. (Spotify Tracks ID)
- 트랙데이터가 나열된 JSON 파일을 MongoDB를 이용하여 저장하였다.
- 클라우드 DB에 저장된 mongoDB compass를 이용해 필요한 field만 선별하여 csv 파일로 다운 받는다.
CSV 파일을 Sqlite3
모듈과 Pandas
라이브러리를 이용하여 문자열 가공과 local DB에 저장하는 작업을 진행할 것이다.
- 우선 json 파일로 인해 가공되지 않았던 field를
pandas
를 이용하여 수정할 것이다. - 그다음
sqlite3
로 이용하여 local DB에 저장할 것이다.
[Day1] Pulling Playlist Datasets
Job Description
배포
☑️ 작업 완료
- 도메인 생성하기
- 도메인 서버 만들기
- 도메인과 서버 연결하기
- 웹 어플리케이션 구축하기
- 웹 어플리케이션 배포하기
- 로드 밸런싱 리스너 추가하기
🏄♂️ 작업 사항
AWS EB
- 배경
우선, 이전에 사용했던 Heroku는 현재 웹 서비스 프로젝트 개발에 최적화된 웹 어플리케이션이다. 플랫폼 대용으로 만들기가 쉽고 dynos를 조정하여 성능을 변화시킬 수 있는 어플리케이션이다. 하지만 이번 AWS EB를 사용하여 이전에 발생했었던 성능 이슈를 어느정도 해결하고 싶은 것도 있었고 아직 사용해본적이 없었기 때문에 인프라 용도에 쓰이는 EB를 사용해보았다. - 사용 과정
EB, Router 53(EC2) 을 통해 아마존 웹 서비스를 이용하였다.
AWS Router 53
- FreeNom 사이트에서 무료 도메인을 발급받을 수 있다.
- 발급 받은 도메인을 Router 53 콘솔에서 호스팅 영역을 생성해준다.
- 발급 받은 도메인의 네임 서버에 호스팅 영역에 있는 네임서버 값 4개를 전부 복사한다. (AWS가 도메인을 관리하게됨)
- ACM(Certificate Manager)에서 도메인을 입력하여 인증서를 요청한다. -> 53 레코드 생성
Elastic Beanstalk
- 우선 프로젝트에 의존성 관리를 진행한후 (#15)
run()
함수를 지워준다. - EB 콘솔에서 어플리케이션과 환경을 생성한다.
- 어플리케이션 배포는 두가지 방법이 있는데,
zip()
파일로 묶거나 cli를 통해 하는 방법이 있다. (나는 cli로 했다...) pip install awsebcli
으로 ebcli 모듈을 설치한 후,eb init
으로 초기화를 진행한다.- 본인 계정의 추가 증명 설정에 접근 키(Acess Key)를 입력한다. (IAM에서 확인할 수 있다.)
- 리전, 환경, 버전, 로드밸런싱 타입을 입력하면 배포가 완료된다.
로드밸런싱 리스너 추가하기
- EB 로드밸런싱에서 리스너를 추가한다. (443/HTTPS/리스너 , 80/HTTP/인스턴스)로 추가한다.
- 53에서 레코드를 생성한다. (www 레코드와 빈 레코드로 EB와 연결시켜 라우팅)
🤔 미흡한 점 또는 추후 논의 사항
- AWS Router 53은 추가 요금이 발생하니 추후 크레딧이 종료되면 도메인을 종료할 예정이다.
⛔️ 제한 사항
📄 참고자료
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.