본문 바로가기

Language/파이썬

[Python] pandas 판다스는 파이썬에서 데이터 처리를 위해 사용하는 라이브러리이다. 일반적으로 행과 열로 구성된 2차원 데이터를 다룬다. DataFrame은 여러 개의 행과 열로 이루어진 2차원 데이터를 담는 데이터 구조체이다. 데이터셋은 kaggle의 Titanic - Machine Learning from Disaster의 데이터셋 중 train.csv 파일을 사용했다. import pandas as pd pandas 모듈을 pd라는 이름으로 가져온다. df = pd.read_csv("train.csv") train.csv 파일을 읽어 Dataframe으로 로딩한다. df.head() 데이터의 일부를 직접 확인할 수 있다. df.info() RangeIndex: 891 entries, 0 to 890 Data colum..
[Python] Dependency Injector (1) 의존성 주입 패턴(Dependency Injection Pattern)은 일반적으로 객체 생성 시, 해당 객체가 의존하는 다른 객체를 직접 생성하는 것이 아니라 외부에서 주입받도록 하는 방법이다. 이를 통해 객체 간의 결합도가 낮아지기 때문에, 유지보수 및 코드 재사용성이 높일 수 있다. Dependency Injector는 Python에서 의존성 주입 패턴을 구현할 수 있게 도와주는 라이브러리 중 하나이다. 이를 사용해 객체 간의 결합도를 낮추고, 코드의 유연성과 확장성을 높일 수 있다. 처음에는 이런 개념이 잘 와닿지 않았다. 이러한 Dependency Injector의 개념과 기능들을 코드 예시와 함께 설명하면 좀 더 쉽게 이해할 수 있다. class Database: def __init__(sel..
[Python] ensure_future asyncio를 사용하다가 혼동되는 부분이 많다. 대표적으로는 Task와 Future의 차이가 있을 것이다. asyncio.create_task()와 asyncio.ensure_future() 또한 혼동되는 부분이다. 예제 코드를 찾아보면 ensure_future를 사용하는 코드도 간간히 볼 수 있었다. 두 함수 모두 코루틴을 실행하기 위해 사용될 수 있기 때문에 혼용해서 쓰는 경우가 많은 것 같다. 각 함수의 역할을 더 정확히 알아보고 이에 대해 정리했다.​ximport asyncio​async def f(): pass​coro = f()loop = asyncio.get_event_loop()​task1 = loop.create_task(coro)assert isinstance(task1, asynci..
[Python] Queue 멀티 쓰레드 프로그래밍을 할 때 큐와 쓰레드를 혼합해 사용하면 비교적 간단하게 문제를 해결할 수 있다. 작업 큐를 만들어 처리할 작업들을 큐에 저장하고 각 쓰레드는 큐에서 작업들을 하나씩 가져와 처리하는 방식이 일반적이다. 파이썬에서는 이를 위해 멀티 쓰레드 환경에서 사용할 수 있는 Queue를 제공한다.Queue의 핵심 함수는 아래 3개가 있다. 이외에도 qsize(), empty(), full()이 있는데 적절히 사용하면 된다.put/get : 큐에 데이터를 삽입/삭제한다.task_done : 큐에서 작업이 완료되었다.join : 큐의 모든 작업이 끝날때까지 대기한다.put/get은 일반적인 큐와 동일하게 데이터를 삽입하고 가져오는 함수이다. 그 이외 task_done과 join은 기존 큐에서는 볼 ..
[Python] GIL CPython은 파이썬의 표준 구현이며 두 단계를 거쳐 파이썬 프로그램을 실행한다. 먼저 소스 코드를 구문 분석해서 바이트 코드로 변환 후, 인터프리터를 통해 실행한다. 이 떄 CPython은 GIL(Global Interpreter Lock)을 사용해 일관성을 강제로 유지한다. 따라서 파이썬에서 멀티 쓰레드 프로그램을 개발하는데는 한계가 있다.GIL이 멀티 쓰레딩에 어떤 영향을 주는지 코드를 통해 살펴본다. 처리하는데 오래 걸리는 함수를 작성하고 쓰레드를 사용했을 때와 사용하지 않았을 때의 시간을 측정해본다.xxxxxxxxxxdef factorize(n): for i in range(1, n + 1): if n % i == 0: yield i​import timenumbers = [135254,1341..
[Python] Flask 간단한 API 호출을 위한 웹 서버가 필요해서 flask 프레임워크를 사용해 구축하려고 한다. Spring, PHP, nodejs, django 등 많은 프레임워크가 있고 쓸 수도 있겠지만 두 가지 이유에서 flask를 선택했다. 간단하고 빠르게 개발이 가능하고 파이썬 언어를 사용하기 때문이다. 혼자서 개발하고 규모도 크지 않아 적절한 선택이라고 생각한다. flask로 직접 개발해본적은 없지만 쉽게 원하는 기능을 만들 수 있을것 같다.개발 환경은 ubuntu16.04LTS, python3.6으로 진행했다. 모듈 설치flask도 파이썬 모듈이기 때문에 pip로 설치 가능하다.pip install flask 앱 생성app.py파일을 만들고 코드를 작성한다.xfrom flask import Flaskapp =..
[Python] 함수 인자 파이썬으로 작성된 코드를 보다보면 함수 인자에 *args, **kwargs라는 생소한 인자가 들어간다. 이 키워드들이 어떤 것인지, *가 무엇을 의미하는지 확인해본다.packing/unpackingpacking은 여러 인자를 하나의 값으로 묶어주는 기능이다. 함수 인자의 이름 앞에 *를 붙여주면 된다.xdef foo1(*args): print("type", type(args)) print("value", args)​foo1(1, 2, 3, 4)위 코드를 실행하면 아래와 같이 출력된다.xxxxxxxxxxtype value (1, 2, 3, 4)foo1함수의 인자에 1, 2, 3, 4를 전달했으며 함수는 이 값들을 튜플의 형태로 가져온다. 따라서 인자의 갯수에 상관없이 함수를 호출할 수 있다.unpackin..
[Python] Pyenv 보통 파이썬 개발환경을 구축하는데 virtualenv를 사용한다. 프로젝트별 설치 패키지를 분리해서 관리하기 위해서이다. 개발하는데 파이썬 버전이 문제가 되서 새로 설치하려다가 pyenv를 통해 파이썬 버전도 관리할 수 있는 것을 봤다. 이것을 사용해서 프로젝트에 파이썬 버전까지 따로 관리를 할 수 있게 됐다.설치설치는 ubuntu18.04, 16.04 모두 확인했다.설치하기 전에 아래의 패키지들을 설치해야한다. 그래야 pyenv를 정상적으로 사용할 수 있다.xxxxxxxxxx$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm lib..