본문 바로가기

Development/Python21

Python Profiling Line Profilerhttps://lothiraldan.github.io/2018-02-18-python-line-profiler-without-magic/python script를 한줄 단위로 profiling해줌 아래의 code snippets으로 쉽게 decorator로 구현 가능https://gist.github.com/kylegibson/6583590 cProfileimport cProfile, pstats, io from pstats import SortKey pr = cProfile.Profile() pr.enable() self.train_run() pr.disable() s = io.StringIO() sortby = SortKey.CUMULATIVE ps = pstats.Stats(.. 2020. 10. 21.
Python Callback Callback Method Callback Method에 변수 전달 방법callback method에는 오직 global variable만이 전달될 수 있다. 만약 이것이 문제가 될 것 같다면 global variable만 가지고 있는 global class를 만들어서 이를 전달하는 방법이 좋다.https://stackoverflow.com/questions/51959978/how-to-pass-a-value-to-callback-for-anonymization-without-global-variables Callback 함수에 전역 변수를 전달하는 가장 효과적인 방법Singleton을 사용한다. 싱글톤은 전역변수이기 때문에 쉽게 callback에 전달 가능하고, 디자인도 깔끔해진다. https://n.. 2020. 8. 13.
Python Subprocess Subprocess VS Multi-processSubprocess는 python으로 다른 프로그램을 실행하기 위한 기능이다. 즉 단순히 system command를 실행하기 위함이라고 이해할 수 있다. 따라서 subprocess로 실행된 프로그램과는 오직 stdin/stdout만으로 통신 할 수 밖에 없다.반대로 multiprocess는 python 내에서 task를 쪼개 여러 cpu에서 실행하며, 좀 더 communication이 용이하다. Subprocess로 System Command 실행하기python에서 command line으로 명령을 내리는 방법은 os.system()을 이용하는 방법과, subprocess를 이용하는 방법 두가지가 있다. 그러나 여러가지 이유로 os.system()보다는 .. 2020. 8. 13.
Python Audio Processing Realtime Fast Audio Library: sounddevice소리를 녹음하거나 재생하려면 sounddevice라는 라이브러리를 사용하는 것이 가장 빠르다. Sounddevice는 PortAudio라는 library의 python wrapper에 해당하며 Audio stream을 numpy로도 다룰 수 있게 해준다.단, Windows 10의 WSL 1을 사용하는 경우 사운드에 대한 device접근이 불가능해서 동작이 안된다. 이러한 경우 WSL 2(?)가 해당 기능을 제공하거나, 혹은 anaconda를 사용해야한다. https://www.reddit.com/r/learnpython/comments/9cpkql/fastest_possible_implementation_for_recording/ht.. 2020. 5. 2.
한글을 Sub-character level로 파싱하기(python으로 유니코드 파싱) # -*- coding: utf-8 -*- cho = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ" # len = 19 jung = "ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ" # len = 21 jong = "ㄱ/ㄲ/ㄱㅅ/ㄴ/ㄴㅈ/ㄴㅎ/ㄷ/ㄹ/ㄹㄱ/ㄹㅁ/ㄹㅂ/ㄹㅅ/ㄹㅌ/ㄹㅍ/ㄹㅎ/ㅁ/ㅂ/ㅂㅅ/ㅅ/ㅆ/ㅇ/ㅈ/ㅊ/ㅋ/ㅌ/ㅍ/ㅎ".split('/') # len = 27 test = cho + jung + ''.join(jong) hangul_length = len(cho) + len(jung) + len(jong) # 67 def is_valid_decomposition_atom(x): return x in test def decompose(x): in_char = x if x < ord('가') or x > ord.. 2020. 4. 16.
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.
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.
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.
Python game programming. Pygame + PyBox2D Python으로 2차원 게임 환경을 구현하여 강화학습을 실험하기http://projectlog.ferranfabregas.info/python-box-2d-pygame-demo-bumper-cars/ 1. Pygame : 파이썬 게임 엔진, rendering을 담당한다.(필요에 따라 pygame 대신 opencv나 pyglet등으로 대체 가능)sudo pip install pygame 2. PyBox2D : 파이썬 게임 물리 엔진swig 최신 버전 설치 : http://www.linuxfromscratch.org/blfs/view/7.6/general/swig.htmlsudo apt-get install libpcre3 libpcre3-dev wget https://downloads.sourceforge.. 2017. 1. 16.
Python에서 유용한 라이브러리 설치 프로그램easy_install, pip : python package 설치 프로그램. 근데 pip가 최신임. easy_install은 곧 사라질 녀석임apt-get : 리눅스 터미널 명령어. 전역 프로그램 패키지를 다운로드하고 설치해줌. # 주의사항 : apt-get으로도 설치하고, pip로도 설치하면 둘이 서로 꼬여버린다. 둘중하나로만 깔아야함.(한쪽을 지우든지) pip와 easy_install의 관계는 모르겠음 꼬일지 안꼬일지. http://blog.outsider.ne.kr/346http://egloos.zum.com/mcchae/v/11023238 deb 파일 설치 방법: sudo dpkg -i 패키지.debhttp://jjeong.tistory.com/664 Scrapy쓰기 좋은 웹 크롤러.. 2016. 2. 23.
Sampling, Detailed Balance, Gibbs Sampling, Rejection Sampling MCMC, Dirichlet Process, RBM, Particle Filtering Sampling - C.D.F , P.D.F샘플링을 하려면 P.D.F 가 아닌 C.D.F 의 역함수를 알아야한다. PDF는 확률이 아니다. 확률의 미분값이다(적분한 값이 확률이므로). 따라서 0~1 사이의 확률에 대해 uniform distribution을 가지고 샘플링을 하려면, y축에 대해 [0,1]로 샘플링을 한 다음, C.D.F에서 그 y축에 해당하는 x값을 알아내는 것이 바로 샘플링이다.당연히 이를 위해서는 CDF의 역함수를 알아야 한다. (y축의 값이 어떤 x에 해당하는지 알아야함.)그러나 CDF의 역함수는 일반적으로 구하기가 매우 어렵다.가우시안 분포에서도 CDF가 적분으로 정의만 되어있지 계산이 안된다. 그러나 가우시안 분포는 엔지니어링적으로 샘플링이 거의 가능해서 proposal로 많이사.. 2015. 1. 27.