Code/Python

    [python] 대용량 csv 불러오는 패키지 dask 간단 리뷰

    목차 1. Dask란? Dask는 Python 라이브러리 중 하나로, 라이브러리 기능 면에서는 Apache Spark와 비슷하지만 numpy, pandas와 긴밀하게 연결되어있어서 Python 사용자들이 spark보다 빠르고 쉽게 활용한다. 2. dask가 빠른 이유 dask는 가상 데이터프레임을 쓰기 때문에 pandas 데이터프레임과 비슷한 기능을 제공하지만 실제로 모든 데이터가 메모리 상에 로드되어있는 것이 아니라 하나 이상의 파일 또는 데이터베이스에 존재한다. 그렇기 때문에 메모리 크기와 관계 없이 엄청나게 큰 csv 파일을 하나의 가상 데이터 프레임에 로드할 수 있다. 또한 dask는 대량의 데이터 분석 작업을 돕기 위해 작업 스케쥴러를 제공한다. 하나의 작업을 여러개의 쓰레드, 프로세스, 노드 ..

    [Python] inspect 모듈의 getsource() 함수

    우리가 쓰는 패키지는 대부분 소스코드와 함께 제공이 되고 있다. 또한 공식적인 패키지가 아니라면, 함수에 자세한 설명이 적혀있지 않은 경우도 많다. 이러한 경우, 함수의 소스코드를 직접 확인하고 참조해야 하는 경우가 있는데, 이럴 때 inspect의 get source를 사요하면 좋다. 1. inspect 설치 inspect 설치는 간단하다. pip install로 설치한다. pip install inspect 2. inspect의 기능 inspect는 모듈, 클래스, 함수에 대한 소스코드를 출력해준다. 다양한 기능이 있다고 하지만, getsource()함수 하나도 참 유용하다. getsource() 안에 클래스 이름을 써주면, 해당 클래스의 소스코드가 출력된다. from inspect import ge..

    [Python/Oracle] cx_Oracle timeout 설정하기

    Python 에서 DB 연결을 해서 Oracle에 접속하게 하는 패키지 cx_Oracle. 작은 데이터를 불러오는데는 크게 문제가 안되지만, 대용량 데이터를 불러올 때에는 오래 걸리는 시간 탓에 간혹 타임아웃 에러가 나고는 한다. 이유는 python 안에서 주어진 시간 안에 oracle 이 구동되어야 하는데 그 시간을 넘을 때 나는 애러이다. 그럴 때에는 timeout 시간을 설정하여 늘릴 수 있다. 1. 타임아웃 에러문 타임아웃 에러가 나는 문장은 대게 아래와 같다 DB Error : DPI-1080 : connection was closed by ORA-3156 Traceback (most recent call last): ~~~ cx_Oracle.DatabaseError: DPI-1010:not c..

    [Python] HTTP web server log dataframe으로 불러오기 (with pandas)

    이번에 프로젝트를 진행하면서 웹 로그 서버의 raw level을 직접 보고 전처리할 기회를 접하게 되었다. 어쨌든 웹로그를 데이터프레임화 시켜서 분포를 보고 데이터 탐색을 진행해야하기 때문에 공통된 룰로 전처리를 하고 데이터프레임화를 시켜야 해서 검색하다보니 아래와 같은 링크를 발견했고, 이에 대해 번역을 해서 기록해두려고 한다. https://mmas.github.io/read-apache-access-log-pandas Read Apache HTTP server access log with Pandas In this post we'll see how to read our Apache HTTP server access log into a Pandas dataframe. First of all, we s..

    [Python] 주피터 노트북 테마 변경하기

    로컬 상에서 jupyter notebook을 자꾸 사용하려니 흰 바탕에 눈의 피로감이 커지는 것은 사실인 것 같다. 요즘은 모바일 폰도 다크모드가 가능한 마당에, 주피터 노트북도 테마를 변경해서 어두운 모드로 사용하고 싶었다. 그래서 찾아본 것이 jupyter notebook 테마 사용하기!! 주피터 노트북 파일을 전부 설치가 되어있다고 가정하고 포스팅을 적으려 한다. 1. 주피터 노트북 테마 패키지 설치하기 주피터 테마를 설정하려면 먼저 'jupyterthemes'를 설치해야 한다. 터미널로 들어가 아래와 같이 명령어를 입력하여 jupyterthemes를 설치한다. pip install jupyterthemes 그럼 해당 패키지가 설치되고 사용할 수 있는 테마의 목록을 확인 할 수 있다. 아래와 같이 ..

    [Python]Pytorch - RuntimeError:Error(s) in loading state_dict ... : Missing key(s) in state_dict: ... Unexpected key(s) in state_dict:... GPU 병렬 사용 문제

    모델을 학습시킨 후 저장하고, 다시 불러오는 중에 아래와 같은 문제가 발생했다. torch.save(model.state_dict, '~~.pt')와 같은 방식으로 저장했고, model.load_state_dict(torch.load('~~.pt'))으로 불러왔을 뿐인데 에러는 다음과 같았다. 자세히 보면, model의 state_dict의 키가 맞지 않다는 것을 알 수 있다. 저장한 모델은 'module.' 키가 앞에 붙어있는 반면, 불러올 모델은 키가 붙지 않아 매핑이 안되는 문제였다. 이러한 문제가 생긴 이유는, 다중 GPU를 사용할 때 발생하는 것으로 파악됐다. 다중 GPU를 사용하면서 torch.nn.DataParallel을 사용하면 모델의 state_dict는 model.module의 형태로 ..

    [Python] Data Frame apply 함수 병렬처리 하는 방법

    파이썬에서 apply함수를 사용할 때 데이터의 용량이 크거나, 힘수가 복잡할 경우 수행시간이 매우 느리다는 단점이 있다. 그렇다면 여러개의 프로세스를 사용해서 처리하는 방법을 고려해야 한다. multiprocessing.cpu_count()를 통해 cpu 코어의 수를 가져와 함수를 생성 후 병렬처리를 할 수 있다. groupby를 사용하지 않고 단순 apply를 사용한다면 아래와 같은 함수를 만든 후 사용하면 된다. from multiprocessing import Pool import multiprocessing print('cpu counts:%d' % multiprocessing.cpu_count()) # cpu 최대 가용 수 확인 def parallelize_dataframe(df, func, n..

    [Python] Numpy Float(소수) 출력 표현 설정하기

    간혹 numpy array를 출력하다보면 소수점이 길거나, 지수표현으로 되어있어 수치를 정확히 파악하기가 어려운 경우가 있다. 이 때, numpy의 printoption 설정을 변경하면 손쉽게 설정할 수 있다. 자세한 옵션들은 아래 링크 참조 numpy.org/doc/stable/reference/generated/numpy.set_printoptions.html numpy.set_printoptions — NumPy v1.20 Manual If True, always print floating point numbers using fixed point notation, in which case numbers equal to zero in the current precision will print as z..