본문 바로가기

Development/Python18

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.
Python 설치 및 삭제하기 python을 src부터 빌드하는 것은 절대로 해서는 안될 짓이다. 컴파일이 굉장히 복잡하고 엄청나게 오래걸리며, 버전 변경또한 어렵기 때문이다. 무조건 pyenv를 쓰거나, apt-get도 별로 좋지 않다.(버전관리가 안됨). 가장 좋은 방법은 python을 conda로 설치해서 관리하는 것이다. 왜냐하면 conda는 완전한 동작을 보장하는 dependency로 설치해주기 때문이다. Conda를 이용해 Python 설치하기# 특정 버전의 Python 설치하기1) conda를 쓴다.- Conda: python을 위한 전용 virtualenv # miniconda 설치 방법wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh .. 2020. 2. 27.
Python subprocess와 Multi-process System Commandpython에서 command line으로 명령을 내리는 방법은 os.system()을 이용하는 방법과, subprocess를 이용하는 방법 두가지가 있다. 그러나 여러가지 이유로 os.system()보다는 subprocess를 이용하는 것이 훨씬 더 많은 기능을 제공하고, 더 권장되는 방법이다.https://stackoverflow.com/questions/89228/calling-an-external-command-from-python Python에서 Subprocess 사용하기 subprocess 명령어는 윈도우에서 커맨드라인 명령어를 System() 함수로 호출 하듯, 리눅스의 OS명령어를 파이썬에서 실행시키는 기능이다. from subprocess import Popen.. 2020. 2. 20.
Python에서 directory 관련 명령어 cp --parents 명령어 구현하기def make_safe_dir(dir): if not os.path.exists(dir): os.makedirs(dir) def remove_safe_dir(dir): if os.path.isfile(dir) or os.path.exists(dir): shutil.rmtree(dir) def cp_parents(cwd, full_file_path, tmpdir): dir_diff = full_file_path.replace(cwd, "").split("/")[1:-1] file_name = full_file_path.split("/")[-1] target_dir = "" if len(dir_diff): target_dir = os.path.join(*dir_diff.. 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 환경에서 실행 방법(아나콘다에서)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 Concurrency Programming Python에서 asyncio를 이용한 concurrency에 대해 알아본다. 아래의 문서를 참고하여 내용을 작성하였다. Async IO in Python: A Complete Walkthrough - Real Python Parallelism은 concurrency의 하위 개념이다. 즉 동시성을 구현하는 방법 중 하나가 병렬화라고 얘기할 수 있을 것이다. 또는 threading이 concurrency에 보다 가까운 개념이다.Concurrency의 핵심은 single cpu에서 동작하는 것 처럼 보이는 코딩을 통해 동시성을 구현할 수 있다는 것이다. 즉 짜기가 쉽다. 그리고 여기에는 coroutine이라는 핵심 개념이 등장한다.이러한 concurrency를 설명.. 2020. 1. 9.
Python 프로젝트 패키지화 및 다른 패키지 가져오기 개발한 python 프로젝트를 배포하는 방법들1. pip install로 설치할 수 있게 한다.2. submodule로 사용할 수 있게 한다.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.
Pandas Pandas 팁데이터 분석을 하다보면 numpy보다 pandas가 더 편한 경우가 종종있다. 물론 연산 속도는 numpy가 훨씬 빠르다. 1. SettingWithCopyWarning 해결하기 Pandas 에서 특정 row의 특정 column에 value를 집어 넣을 때 흔히 발생하는 에러이다. 이는 문법적으로 iloc함수에 대한 python에서 해석이 불분명하기 때문에 발생한다. Indexing and selecting data - pandas 0.25.0 documentation 해결 방법은 매우 간단하다. 아래와 같이 iloc대신 loc를 사용하면 된다. How to deal with SettingWithCopyWarning in Pandas? # Groupby특정 column을 지정하고, 해당 c.. 2018. 6. 29.
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.
연구용 파이썬 에디터 찾기 : IPython, Notepad++, PyCharm, Atom, Sublime Text 3 서버에 있는 python 코딩을 IPython으로만하다가 한계를 느끼고 PyCharm을 도입하기로 했다. 우선 IPython을 사용해서 웹으로만 하면, 스크립트 코딩시 찾기 기능이 잘 안되고, 한번에 이름을 못바꾸고, 탭키 사용이 제한적인 등 많은 불편함이 있다. Notepad++의 경우 직관적이고 쉬운 사용법이 강점이지만 체계적인 프로젝트 관리와 ssh를 직접실행할 수 없는 단점이 있다. 이에 PyCharm의 경우 제대로 설정만 한 번 해놓으면 거의 모든 작업을 다 할수가 있다. 1) PyCharm 유료/무료 : 유료버젼의 경우 가격이 1년에 90달러로 상당히 비싸다. 그리고 유료(Professional)버전을 사용해야만 원격 서버에 있는 파이썬 코딩을 할 수 있기 때문에 반드시 필요하다. https:.. 2016. 11. 29.
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.
Python 프로그래밍 # Python의 변수 호출/참조: Call by Objective Reference 대충, call by reference(포인터)랑 비슷한데, 다만 함수안에 전달될 때에는 지역변수 tag가 붙기 때문에 레퍼런스가 사라진다. 또한 List와 같이 mutable한 정보를 담는 자료구조는 indexing을 할 경우 call by reference처럼 행동한다. http://devdoggo.netlify.com/post/python/python_objective_reference/ ## Python에서는 + 와 += 가 다르다. a += b 는 inplace이지만, a = a+b 는 새로운 메모리를 할당한다. https://docs.python.org/3.2/library/operator.html#inpla.. 2014. 6. 17.