본문 바로가기

Development110

MongoDB에서 특정 오브젝트 삭제하기 주피터나 python 스크립트를 이용해서 삭제할 수도 있지만, 가능하면 GUI툴을 이용해 보다 안전하게 처리해보자. 먼저 Robomongo 3T라는 gui기반 몽고DB tool을 portable로 설치한다.https://robomongo.org/download 그 다음 query에 아래를 입력하여 원하는 조건의 항목을 나열한다. db.getCollection('ccai_cdr').find({"record_date":"200406"}) 그다음 나열된 항목들을 전체 선택한 뒤 우클릭해서 delete document를 클릭하면 안전하게 데이터를 삭제할 수 있다. 물론 db.getCollection('ccai_cdr').remove({"record_date":"200406"}) 로 한방에 삭제할 수도 있지만, .. 2020. 4. 9.
Linux 운영체제별 사용 팁 리눅스 버전 확인uname -o cat /proc/version CentOSapt-get 대신 yum을 사용한다. Ubuntuyum대신 apt-get을 사용한다. 기본 패키지 설치 방법 - apt-get 설치wget http://security.ubuntu.com/ubuntu/pool/main/a/apt/apt_2.0.1_amd64.deb - dpkg 설치yum install dpkg 2020. 4. 6.
CSV파일 인코딩(Encoding) CSV파일 인코딩(Encoding) 문제 해결하기 1. 현재 가지고 있는 csv파일에서 encoding이 무엇인지 알아내기 import chardet import pandas as pd filename = "Data_kr_v2.0.0_no_label_all_train3.csv" with open(filename, 'rb') as f: result = chardet.detect(f.readline()) # or read() if the file is small. print(result['encoding']) 이와 같은 방식으로 해당 라인의 encoding이 무엇인지 알아낼 수 있다. 2. Excel에서 csv 저장할 때 encoding변경하기 그런데 실제로 이렇게 옵션을 주고 해봐도, 제대로 encodin.. 2020. 3. 23.
On demand와 On the fly On demand: As soon as possible유저의 요청을 하면, 그 즉시 시작해서 최대한 빨리 return 해주는 시스템 On the fly: While in progress유저가 요청을 하면, 그 과정에서 멈추지 않고 무언가를 처리해서 return 해주는 시스템 https://ell.stackexchange.com/questions/140402/how-to-describe-the-difference-between-on-demand-and-on-the-fly ML에서의 예시On demand 전처리 : 유저가 학습 버튼을 클릭하면, 그 즉시 전체 데이터에 대한 전처리가 이뤄짐On the fly 전처리 : 유저가 학습 버튼을 클릭하면, 전체 데이터에 대한 전처리가 끝날 때까지 기다리지 않고 즉시(.. 2020. 3. 19.
ML Python 프로젝트의 test code만들기(feat. Pytest) Test Code의 필요성ML뿐만 아니라, 거대한 규모의 프로그램을 개발할 때에는 반드시 테스트 코드가 필요하다. 물론 협업을 하고, 대규모 프로젝트를 오랜 기간 서비스하기 위해서도 테스트 코드는 반드시 필요하다. 머신러닝 코드는 특히나 numerical한 연산을 다루기 때문에 버그를 잡기가 쉽지 않고, 엄청나게 많은 configuration이 존재하고, 학습의 재현성이 필요하기 때문에 코드의 검증이 오래 걸린다. 또한 협업을 하다보면 누군가가 추가하면서 바꾼 기능 때문에 내가 예전에 쓰던 코드가 동작하지 않는 일이 너무나 빈번하다. 이러한 일을 막고 버그를 줄이는 방법은 테스트 코드를 작성하는 것이다. Test for ML project머신러닝 프로젝트에 대해서도 공동 개발을 할 경우에는 pytest를.. 2020. 3. 16.
Conda로 Python 버전 별 설치, 관리, 삭제하기 Ubuntu에 다른버전의 Python 설치하기필자처럼 다른 버전의 python을 설치하려고 src부터 빌드하는 것은 절대로 해서는 안될 짓이다. 컴파일 과정이 굉장히 복잡하고 또 엄청나게 오래걸리며, 버전 변경 또한 어렵기 때문이다. 그런데 pyenv를 쓰거나, apt-get도 버전 관리가 안되기 때문에 별로 좋지 않은 방법이다. 결국 가장 좋은 방법은 python을 conda로 설치해서 관리하는 것이다. 왜냐하면 conda는 완전한 동작을 보장하는 dependency들을 한방에 설치해주고, 자유로운 버전 변경도 가능하기 때문이다. 게다가 여러 버전을 동시에 사용할 수 있는 가상환경도 쉽게 만들 수도 있다. Conda 설치하기conda는 linux에서 배포되는 매우 다양한 종류의 프로그램을 설치할 수 있.. 2020. 2. 27.
Python Multiprocessing 가이드 Multiprocessing 가이드공식 레퍼런스 문서를 참고하여 작성하였다. 다음이 요소들이 multiprocessing의 가장 기본이고, 우선 이 네가지만 잘 알면된다. ProcessPoolQueuePipe Process단일 프로세스를 생성하는 경우, Process()를 사용한다. from multiprocessing import Process, Queuequeue = Queue()p = Process(target = my_function) #, args=(queue, 1))p.start()# p.join() # this blocks until the process terminates# result = queue.get()https://stackoverflow.com/questions/2046603/i.. 2020. 2. 20.
Python에서 directory 관련 명령어 가장 간단한 형태의 glob을 이용 wild_card copy(recursive 보장 안됨) import os import glob import shutil def glob_copy(src, dst, name_pattern="*"): if not os.path.exists(dst): os.mkdir(dst) shutil.copystat(src, dst) including = glob.glob(os.path.join(src, name_pattern)) print("including:", including) for file in os.listdir(src): print("file:", file) file = os.path.join(src, file) if file in including and os.path.. 2020. 2. 19.
Python 코드 안에서 git과 pip 사용하기 Python 코드 안에서 pip install하기import sys import subprocess def pip_install(package): subprocess.check_call(["sudo", sys.executable, "-m", "pip", "install", package]) def pip_install_requirements(requirements_dir): subprocess.check_call(["sudo", sys.executable, "-m", "pip", "install", "-r", requirements_dir.rstrip(".txt")+".txt"]) https://stackoverflow.com/questions/12332975/installing-python-module.. 2020. 2. 19.
Advanced Python Scheduler Advanced Python Scheduler (APScheduler) Python으로 이뤄진 전처리나 ETL 을 주기적으로 실행해야하는 경우, dynamic task scheduler가 팔요하다. 이에 대한 선택지로는 Airflow나 dask, zenkins 등이 있으나, 매우 간단하게 single machine에서의 job scheduling으로는 좀 오버스팩이 아닐 수 없다. 이러한 경우에 APS를 사용하면 편리하다. 설치방법pip install apscheduler API문서https://apscheduler.readthedocs.io/en/stable/modules/schedulers/base.html#module-apscheduler.schedulers.base 간단한 예제from dateti.. 2020. 2. 18.
Airflow Airflow튜토리얼 에어플로우는 dask와 유사한 프로젝트로, 분산 환경에서의 python 자동 실행 스케줄러이다. 그런데 dask에서 더 나아가서 자동으로 지정된 시간과 조건에 따라 스크립트를 순차적으로 실행시켜주는 젠킨스(?) 와 같은기능도 한다. Airflow에 새로운 패키지 설치하기worker, scheduler, webserver 세군데에 모두 동일한 python 패키지를 설치해주어야만 에러가 나지 않는다. 실제 실행되는 환경은 worker이지만, scheduler와 webserver도 실행할 수 있어야 에러가 나지 않는다.(이는 dask와 동일한 부분) 그래서 requirements.txt를 생성해서 각각의 컨테이너에 전달하여 간단한 패키지는 쉽게 설치할 수 있다. 그러나 복잡한 설치를 요하.. 2020. 2. 11.
Black: Uncompromising Python Coding Convetion Black: Uncompromising Python Coding ConvetionPython의 coding convention에 따라서 강제로 현재의 소스코드를 reformatting 시켜주는 오픈소스프로젝트이다.Window에서 Pycharm anaconda 환경에서 setup하기pipi install blackC:\ProgramData\Anaconda3\Scripts\black.exe 경로 복사Pycharm에서 File-Setting-Tools-External Tools에서 추가버튼 누르고, 다음을 입력 Name: BlackDescription: Black is the uncompromising Python code formatter.Program: Arguments: "$FilePath$" 사용법: .. 2020. 2. 4.
Python 파일을 exe파일로 컴파일하기 Windows anaconda 환경에서 실행 방법(아나콘다 cmd 상에서)pip install auto-py-to-exeauto-py-to-exe.exe 를 윈도우에서 실행시킨다.(혹은 anaconda prompt에서 실행해도됨)아래와 같이 해당 python파일의 경로를 입력하고 conver를 누른다. https://pypi.org/project/auto-py-to-exe/ 2020. 2. 4.
작은 따옴표, 아포트트로피, 그레이브 악센트 구분 아포스트로피: I'll 같이 말을 생략하거나, Google's와 같은 소유격에 사용되는 특수문자.보통 작은따옴표를 사용한다.https://ko.wikipedia.org/wiki/%EC%95%84%ED%8F%AC%EC%8A%A4%ED%8A%B8%EB%A1%9C%ED%94%BC Quote: 따옴표. 마찬가지로 작은따옴표나 큰따옴표를 사용한다.He said, "I can't swim." Grave Accent: 특정한 발음기호를 가진 알파벳을 나타낼 때 사용한다.ESC아래에 있는 ` 키로 입력한다. https://en.wikipedia.org/wiki/Grave_accent 2020. 1. 30.
Librosa, Numba 에러 해결 Librosa install하기pip install librosa혹은conda install -c conda-forge librosaRuntimeError: cannot cache function '__jaccard': no locator available for file '/opt/conda/lib/python3.6/site-packages/librosa/util/matching.py'원인0.7이 넘어가는 librosa에서 numba cache를 사용하는데, numba cache dir에 대한 권한이 없어서 생기는 문제이다, https://github.com/numba/numba/issues/4032https://github.com/ska-sa/montblanc/issues/253 해결책: 다음 셋 중.. 2020. 1. 23.
Z-shell ( zsh ) 사용하기 zsh ( z-shell ) zsh은 bash shell에서는 제공하지 않는 사소하지만 정말 편리하고 우아한 기능들을 제공하는 shell이다. zsh 설치과정1. sudo apt-get install zsh 2. oh-my-zsh 설치 sh -c "$(wget -O- https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 3. zsh-syntax-highlighting git clone echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc source ./zsh-syntax-hig.. 2020. 1. 17.
Numpy Optimization and Parallelization 1. 문제상황 [100000, 1000] 크기의 matrix를 10만차원 축으로 cumsum을 했더니 약 2.3초가 걸려서 이를 더 빠르게 하고싶음. 기본 실험: 해당 matrix에 대해서 np.sum과 np.cumsum 을 수행해봄. 3번과 4번 cell에서는 cumsum을 한번에 모든 dim에대해 한것과 하나씩 바꿔가면서 한 실험 결과임 cumsum의 경우 메모리에 writing하는 연산이 많아 sum보다 많이 느림. 그런데 3번과 4번에서 속도차이가 나는 것이 이상해서, inplace cumsum으로 바꾸니 속도가 동일해짐. 2. C로 최적화?여기서 더 빠르게 하기 위해, Numpy를 C로바꾸면 더 빨라질까? 결론은 Numpy가 C보다 더 빠르다,. Python VS C https://medium... 2020. 1. 17.
Python Concurrency Programming Multi-thread vs Multi-Processing vs AsyncIOhttps://code.luasoftware.com/tutorials/python/python3-threading-vs-multiprocessing-vs-asyncio/ Python의 default interpreter인 CPython은 GIL(Global Interpreter Lock)이 걸려 있어서 multi-thread를 구현해도, 여러 thread가 정말로 동시에 실행될 수는 없다. 그래서 대개의 경우 multi-processing을 통해서 병렬성(parallelism)를 구현한다. 그러나 multi-processing은 "almost independent"하게 job을 쪼갤 수 있는 CPU 연산이 heavy한 task에.. 2020. 1. 9.
Python 프로젝트 배포 및 다른 패키지 가져오기 Python 프로젝트를 export 또는 import하는 방법1. pip install을 사용한다.2. module관리 도구를 사용한다.3. git clone을 한다. 1. Pip install 사용하기먼저 pip로 install하게 하기 위해서는 setup.py와 requirements.txt를 작성해야한다.그 다음으로 해야할 일은 python 에서 import가 가능한 프로젝트를 패키지 구조로 만드는 것이다. 즉 import 의 파이썬 코드로 사용할 수 있도록 그에 맞는 프로젝트의 구조를 만들어야한다. # 패키지 구조 만들기출처: https://github.com/chakki-works/seqeval 위와 같이 따라서 setup.py와 requirements.txt 등 실제 실행되지 않을 코드를 제외.. 2020. 1. 9.
Python Coding Convention: PEP 8 PEP 8https://www.python.org/dev/peps/pep-0008/ 이름 짓기 - 클래스: ClassName- 예외 처리: WrongNameError- 상수: CONSTANT_VALUE- public 함수나 변수: lower_case- private 함수나 변수: _lower_case- 패키지나 모듈: lower_short - __이름: 은 특별한 python의 기능이 생긴다. 상속된 다른 class의 변수와 이름이 겹치지 않기위한 것으로, 다른이름으로 자동 변경된다. 이름 금지사항- mixedCase- mixedCASE- Capitalized_Words_With_Underscores 기본적인 Coding Convention1. 모든 문자열에는 큰따옴표를 쓴다. 주석에는 """ 을 """.. 2019. 12. 17.