Languages/Python

Languages/Python

[Python] 2D 리스트를 1D로 Flatten하게 변환하기

Python으로 데이터들을 재조합하고 파싱 할 때 차원을 변경해야 하는 일이 종종 생긴다. 2차원 리스트를 1차원으로 변경시키는 방법은 대표적으로 itertools라는 라이브러리를 사용하는 방식, list comprehension, 좀 독특한 방법이지만 sum을 이용한 방법이 있다. Itertools itertools를 이용한 방법은 두 가지가 있다. *(Asterisk)을 이용한 방법과 from_iterable 메소드를 사용하는 방법이다. 우선 *(Asterisk)을 이용한 방법이다. Asterisk는 조금 생소할 수 있지만 Pythonic한 코드를 작성하도록 도와줄 수 있다. Asterisk의 사용은 아래와 같은 상황에서 사용할 수 있다. 곱셈 및 거듭제곱 연산으로 사용 리스트형 컨테이너 타입의 데이..

Languages/Python

[Python] Anaconda 이용 중 Pyinstaller를 사용해 패키징 시 exe파일 용량이 커지는 이유

Pyinstaller는 Python으로 실행파일을 생성해 배포하기 위해 사용되는 패키지이다. cx_Freeze나 py2exe 등의 패키지도 있지만 개인적으로 가장 사용이 간편하다고 느껴진다. 하지만 고객이 실행파일만 메일로 받고싶어하는 경우도 있고, 실행시 프로그램 부팅 속도를 빠르게 하기위하거나 등 여러가지 이유로 용량이 작은 것이 더 선호된다. 이 때 Anaconda를 사용하여 패키지를 import하고 Pyinstaller를 이용해 마지막으로 패키징을 위해 실행파일을 생성하면 예상보다 훨씬 큰 용량이 되는 것을 볼 수 있다. 거기다 onefile을 사용하지 않으면 훨씬 더 큰 용량으로 패키징이 된다. Anaconda를 사용해 패키지를 설치하면 mkl 계열 dll 파일들이 함께 패키징되기 때문이다. M..

Languages/Python

[Python] pandas의 Dataframe과 list의 삽입 수행 속도 차이

30만 개 정도의 데이터를 Dataframe을 이용해 append 연산을 하는 작업을 수행하다 비정상적으로 느리게 동작하는 것을 발견했다. 아무리 느린 파이썬이라 해도 이 정도로 삽입 연산이 느린 것은 잘 와닿지 않아 실험을 해보았다. 아래와 같이 7가지 테스트를 진행하였다. pandas append pandas concat pandas loc dict in list dict list comprehension list append list comprehension 1, 2, 3 번은 각각 Dataframe 첫 행 생성 후 append, concat, loc를 이용하여 데이터를 삽입한다. 4번은 dictionary를 list에 append하며 생성하고 Dataframe으로 변환시켰고, 5번은 diction..

Languages/Python

[Python] 파이썬 속도에 영향을 주는 GIL(Global Interpreter Lock)과 Garbage Collection

주요 개념 병렬처리 GIL(Global Interpreter Lock) Garbage Collection(GC) Thread 파이썬은 일반적으로 컴파일 언어보다 속도가 느리다. 이는 GIL(Global Interpreter Lock) 때문인데 이는 파이썬 객체에 대한 다중 접근을 보호하기 위한 Mutex(Mutual Exclusion, 상호 배제)로서 여러 쓰레드가 동시에 병렬적(Parallel)으로 실행하지 못하도록 하는 것이다. 따라서 한 파이썬 프로세스는 파이썬 인터프리터에 의해 한 쓰레드만이 작업 공간을 점유할 수 있다. 즉 파이썬에서 멀티 쓰레딩을 사용하게 되면 시분할 방식으로 프로세스들이 돌아가며 작업을 수행한다. 병렬 처리, 분산 처리를 통해 속도를 향상시키는 여러 기술이 나왔지만 파이썬은 ..

Languages/Python

[Python] 라이브러리(library), 패키지(package), 모듈(module)의 차이와 함수(function), 메소드(method)의 차이

주요 개념 라이브러리(library) 패키지(package) 모듈(module) 함수(function) 메소드(method) 비단 파이썬에서만 사용되는 용어는 아니지만 가끔 혼동해서 말하는 경우가 있어 정리해 둘 필요가 있을 것 같다. 먼저 라이브러리(library)는 여러 패키지와 모듈들을 모아놓은 것을 의미한다. 패키지(package)는 특정 기능과 관련된 여러 모듈을 한 폴더 안에 넣어 관리하는데 이를 패키지라고 한다. 예를 들어 Test라는 폴더 안에 __init__.py, test.py와 같은 파일들이 모여있는 것이다. 모듈(module)은 함수, 변수, 클래스를 모아놓은 것을 말한다. 일반적으로 한 파일을 말하는데 예를 들어 .py와 같은 하나의 파일 안에 함수와 변수, 클래스가 모여있는 것으..

Languages/Python

[Python] *args와 **kwargs 사용법

파이썬의 라이브러리 안을 보다 보면 *args나 **kwargs와 같은 함수의 파라미터 부분에서 보인다. 마치 c++에서 아래와 같은 구문과 유사하게 보인다. 하지만 다행히 파이썬에서 *와 **는 포인터를 의미하는 것은 아니다. 파이썬에선 주소에 직접 접근해서 코딩을 하지는 못하기 때문이다. 아래는 c++ 코드이다. int main(int argc, char **argv) { return 0; } c++에서 argc는 argument의 개수, argv는 배열 형태로 argv[0]에는 실행 파일명이 저장되고 이후 argv[1], argv[2]...에는 입력한 인자(argument)값들이 들어가게 된다. 참고로 매개변수(parameter)와 전달인자(argument)는 혼용해서 사용하기도 하는데 일반적으로 ..

alien_coder
'Languages/Python' 카테고리의 글 목록