1. nb_conda
기존에 수업 들을 땐 그냥 설치하라고 해서 용도를 몰랐는데,
jupyter notebook 상에서 anaconda 가상환경과 설치된 패키지들을 관리할 수 있다! Conda라는 tab이 생김..
2. numpy boolean indexing
- x[x > 3]
- x[x == 1]
- x[~(x==1)]: ~는 not
- x[(x > 3) & (x < 8)]
a = np.arange(20).reshape(4, 5)
print(a)
print(a > 3)
print(a[a > 3])
print(a[a == 1])
print(a[~(a == 1)]) # ~는 Not
print(a[(a > 3)&(a < 8)])
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]
# [15 16 17 18 19]]
# [[False False False False True]
# [ True True True True True]
# [ True True True True True]
# [ True True True True True]]
# [ 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
# [1]
# [ 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
# [4 5 6 7]
3. numpy concatenate
- np.concatenate([x, y]): 배열을 연결
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
- np.concatenate([x, y], axis = 1): 열을 기준으로 연결
array([[ 0, 1, 2, 3, 4, 10, 11, 12, 13, 14],
[ 5, 6, 7, 8, 9, 15, 16, 17, 18, 19]])
4. numpy split
- np.split(x, 4): 배열을 분해
결과: [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8]), array([ 9, 10, 11])]
- np.split(x, 2, axis=1): 열을 기준으로 분해
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]),
array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
5. numpy broadcast
6. numpy 연산 및 집계함수
- np.linalg.inv(x) # 역행렬
- np.linalg.det(x) # 행렬식
- np.cumsum(x) # 누적합
- np.cumprod(x) # 누적곱
- np.min(x) # 최솟값
- np.argmin(x) #최솟값 위치
- np.argmax(x) # 최댓값 위치
- np.any(x > 4) # 하나라도 참이어야 참
- np.all(x > 4) # 모든 요소가 참이어야 참
- np.where(x > 4) # 조건에 맞는 위치
- np.where(x > 4, x, -100) # 조건, True일 경우, False일 경우
7. 쉘 스크립트로 Anaconda env(가상환경) 활성화하고 Jupyter Notebook 실행하기
vim JupyterAuto.sh # 스크립트 파일 생성
""" # vim 편집기로 스크립트 작성(i - 입력 모드, esc - 입력 종료, :wq - 저장 및 닫기)
#!/bin/bash # bash 실행
__conda_setup="$('/home/jeon2/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/jeon2/anaconda3/etc/profile.d/conda.sh" ]; then
. "/home/jeon2/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/home/jeon2/anaconda3/bin:$PATH"
fi
fi # conda 경로 잡기
echo "Hello, Angela! Jupyter Notebook(Study env) will begin soon on chrome. :D"
conda activate study # env(가상환경) 활성화
jupyter notebook # 주피터 노트북 실행
exit 0 # 성공하면 exit
""" # 스크립트 저장 후 닫기
sh JupyterAuto.sh # 스크립트 실행
8. crontab
windows 사용할 때는 작업 스케줄러 GUI가 있어서 시작 프로그램 설정하기가 쉬웠는데,
리눅스는 crobtab으로 지정한 시간에 지정한 작업을 하도록 설정해야 한다.
crontab -l # 기존 예약작업 있는지 확인. "no crontab for jeon2"
crontab -e # 편집기 선택 후 예약작업 작성하고 :wq
crontab -r # 예약작업 삭제
service cron start # crontab 시작
service cron restart # crontab 재시작(or reload). 예약작업 작성 후 restart해야 함
service cron status # crontab 작동 여부 확인
cat /var/log/syslog | grep cron # crontab는 백그라운드에서 돌기 때문에 오류 발생 시 로그를 봐야함
# (CRON) info (No MTA installed, discarding output) 로그에 좌측과 같이 뜨면, MTA(메일 전송 관리자)가 설치되지 않아서 생기는 오류
sudo apt-get install postfix # MTA 설치
ps -ef | grep cron # cron이라는 이름으로 돌고 있는 프로세스 있는지 확인
kill -9 '프로세스 번호'
되는 놈(?)이 걸려라라는 마음으로 다양한 버전으로 crontab을 작성했는데,
시간 지정, 리부트, cron restart/reload 해도 자동 실행이 안 된다.. 어렵잖아!! 🤢
어제부터 혼자 끙끙대다가 창현님이 원격(Open SSH Server 설치→방화벽 SSH 허용→이미 깔려있는 Client로 username@ip_address 접속)으로 .sh에 실행 권한을 주고,
기존에 작성해둔 .py 파일에 config.yaml를 절대 경로로 잡아주니 해결이 되었다.. 😇
ft. 파일에 실행 권한 부여하는 방법!
-rwxrwxrwx: 이 파일은 소유자/그룹/모두가 읽고 쓰고 실행할 수 있음
r == 4, w == 2, x == 1, -(아무 권한 없음) == 0. r + w + x = 7
ls -l # 권한을 줄 파일이 위치한 디렉터리로 이동 후 각 파일별로 어떤 권한을 가졌는지 확인
chmod 777 JupyterAuto.sh # 소유자/그룹/모두에게 읽기, 쓰기, 실행 권한 부여
>> vim StockAuto.sh
#!/bin/bash
echo $(date '+%Y-%m-%d %H:%M:%S')
python3 /mnt/FE0A5E240A5DDA6B/workspace/jeon2_package/KoreaStockAutoTrade.py
>> crontab -e # 로그가 남도록 옵션을 줬음
#@reboot /mnt/FE0A5E240A5DDA6B/workspace/jeon2_package/StockAuto.sh >> /mnt/FE0A5E240A5DDA6B/workspace/jeon2_package/StockLog.log 2>&1
0 9 * * 1-5 /mnt/FE0A5E240A5DDA6B/workspace/jeon2_package/StockAuto.sh >> /mnt/FE0A5E240A5DDA6B/workspace/jeon2_package/StockLog.log 2>&1
월 ~ 금 오전 9시에 StockAuto.sh가 실행되고, StockLog.log에 기록을 남긴다.
윈도우에서처럼 디스코드 알림도 잘 오고, 한국투자증권 API도 잘 작동하고 해당 디렉터리에 로그도 잘 남는다.. 끝!!
cf. crontab을 사용하면 스크립트들이 많아지고 서로 의존성이 커지고 컨트롤하기 어려워,
그에 대한 대체로 Airflow(?)를 쓴다고 한다!
'SeSAC 금융데이터 분석가 > 파이썬 프로그래밍' 카테고리의 다른 글
8/25 목 ft. OpenSSH Key (0) | 2022.08.25 |
---|---|
8/24 수 (0) | 2022.08.24 |
8/23 화 (0) | 2022.08.24 |