모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original)
해당 강의와 파이썬 클린 코드 책을 병행해서 공부하는 중입니다. 파이썬 클린 코드 책에 따르면, 클래스 내 변수를 접근하지 못하게 할 때, _ 를 써서 접근을 하지 말라는 의도를 담으라 되어있습니다. 그리고 _ _의 경우에는 클래스의 상속 과정에서 네이밍이 겹치는 걸 방지하기 위해 만들어져있다고 되어있구요. 여기서 중요한 건, _ _ 의 경우 이름 변경을 통해 접근을 의도적으로 막는 것으로 설계되지 않았다는 점입니다. 애초에 영상에서도 보여주셨듯 클래스를 사용하는 입장에서 굳이 _ 를 써서까지 private variable에 접근할 이유가 없고, 만약 그럴 의도가 있다면 _ _로 숨겼다 해도 접근 자체는 가능하니까요. 따라서 이 부분이 pythonic 하지 않다... 라고 책에서 나와있네요. 사소한 차이일 수 있겠으나 파이썬에서 기능 개발의 의도를 오해할 수도 있을 것 같아 글 남깁니다.
안녕하세요. 유사한 질문을 찾아보았으나 의문이 해결되지 않아 질문드립니다. anova 테이블을 만들기 전 적합한 데이터 형태를 만들기 위해 melt 함수를 사용하시더라구요. anova 테이블을 만들 때 필요한 특정한 데이터 형태가 있는건가요? 왜 melt함수를 적용해 주어야 하는지 아직 이해하지 못해서 질문드려요. 답변 기다리겠습니다. 감사합니다.
name: Deploy TO EC2 on: push: branches: - main jobs: Deploy: runs-on: ubuntu-latest # SSH로 접속하는 명령어를 쳐주자. # 일일이 다 쳐도 되지만 불편하기때문에 github actions의 라이브러리를 사용하면 편하다 # uses는 내가 어떤 라이브러리를 쓸 건지 기재하는 곳이다. steps: # SSH는 다른 원격 컴퓨터로 접속하는 프로토콜이다. # Github Actions도 하나의 컴퓨터고, EC2도 하나의 컴퓨터이므로 SSH를 통해서 원격 접속을 진행해주자. - name: SSH(원격 접속)로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.HOST }} # IP 주소를 말함 username: ${{ secrets.EC2_USERNAME }} # EC2를 연결할 때 사용자 이름 key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2에 접근할 때 사용하는 키 페어 script_stop: true # run이 아닌 script로 실행하는 라이브러리도 있으니 예제파일을 참고하자 # EC2에 접속해서 실행한 명령어들을 차례대로 작성해주자 # 1. 프로젝트의 해당 경로로 이동 # 2. github에서 프로젝트 pull # 3. gradlew 재 빌드 # 4. 포트번호 8080서버를 끄거나 서버가 이미 꺼져있어도 true # 5. SNAPSHOT.jar로 끝나는 파일을 실행. 로그는 output이라는 파일에 남김 script: | cd /home/ubuntu/personal-cicd-server git pull origin main ./gradlew clean build sudo fuser -k -n tcp 8080 || true sudo java -jar /personal-cicd-server/build/libs/*SNAPSHOT.jar > ./output.log 2>&1 & 메모리 부족 문젠가 싶어서 https://velog.io/@kwontae1313/AWS-EC2-%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%9A%A9%EB%9F%89-%EC%A6%9D%EC%84%A4 위 링크를 보며 메모리 용량 증설 도 해주었으나, 이후에도 안되어서 t3.small로 인스턴스 유형을 변경하였습니다. 근데 계속 Killed이 뜨네요..ㅠㅠ 다시 서버를 실행시키면 코드가 변경은 되어있구요.. 왜 계속 프로세스가 죽는걸까요..??
선생님의 코딩 # LightGBM import lightgbm as lgb lg = lgb.LGBMClassifier(random_state=0, verbose=-1) lg.fit(X_tr, y_tr) pred = lg.predict(X_val) print("lightgbm") print(f1_score(y_val, pred, average='macro')) # 최종 제출 파일 (lightGBM) pred = lg.predict(test) result = pd.DataFrame({'pred':pred}) result.to_csv("result.csv", index=False) 저의 코딩 from lightgbm import LGBMClassifier lg = LGBMClassifier(random_state=0, verbose=-1) model = lg.fit(X_tr, y_tr) pred = model.predict(X_val) pred.shape f1_score(y_val,pred, average='macro') # basic # 0.9257472552209252 pred = lg.predict(test) submit = pd.DataFrame({'pred' : pred}) submit.to_csv('result.csv', index=False) pd.read_csv('result.csv') 여쭙고싶은 것은 선생님께서는 lg.fit을 어떤 변수에 넣지 않고 바로 학습시킨 뒤 그것으로 예측 및 검증을 하고 최종 test 예측까지 수행하시는데, 저는 lg.fit을 model이란 변수에 넣은뒤 예측 및 검증을하고, 최종적으로는 lg로 test 예측을 수행합니다. 혹시 이 차이에서 최종 예측성능에 차이가 생길까요?
교수님 안녕하십니까? 3회 기출유형 (작업형2)를 혼자 풀면서 심사위원분들께서 채점을 할 때, 사용자 코드를 보고 채점 코드를 변경하시는지 혹은 일괄적인 코드로 채점을 하시는지 궁금함이 생겼습니다. 궁금한 점 1) 테스트 데이터값을 예측할 때 -> pred = rf.predict_proba(test)[:,1] 로 하지 않고, -> pred = rf.predict_proba(test) 로 테스트 데이터를 예측한 이후, 아래와 같이 진행하면 심사위원분들이 유동적으로 채점 코드를 변경하시나요? test_index = test.index[:] test_index submit = pd.DataFrame({'index':test_index,'y-pred':pred[:,1]}) submit.to_csv('result.csv',index=False) pd.read_csv('result.csv') ※ 교수님이 주신 채점 코드를 아래와 같이 제 임의로 변경하면 채점이 되는것을 확인했습니다. roc_auc_score(y_test,pred) -> roc_auc_score(y_test,pred[:,1]) ※ 다만, 사용자 데이터를 보지않고 채점 코드를 일괄적으로 적용하면, 정해진 제출형식에 어긋나게 작성해서 0점을 받을까 걱정이되서 문의드립니다!