분석 Python/구현 및 자료(105)
-
Tabular) 좋은 피처 만드는 전처리 방법 정리해보기 (preprocessing)
정형 데이터를 딥러닝에 사용할 때 임베딩하는 방법에 대해서 정리해보고자 한다. 흔히 아는 머신러닝과 딥러닝의 차이를 이런 식으로 표현한다. (물론 딥러닝은 머신러닝의 부분집합이긴 해서 이렇게 구분하는 게 맞지는 않기는 한 것 같다) 여기서 말하는 머신 러닝은 흔히 이야기하는 tree 계열 알고리즘이나 회귀분석 같은 통계 기반의 방법론들을 생각해 주면 될 것 같다. 정형데이터 AI 모델 개발 방식 말하고자 하는 것은 흔히 딥러닝을 써서 얻을 수 있는 기대효과는 알아서 데이터에 대한 정보를 추출(feature extraction)할 수 있다는 믿음하에 딥러닝 방법론을 많이 사용하게 된다. 정형데이터 AI 모델 개발 방식 트렌드 크게 현재 데이터로 많이 사용하는 것이 tabular, image, text, g..
2023.10.04 -
Python) AVLTree Search를 통해서 특정 값의 범위 찾기 (ChatGPT와 함께)
FastAVLTree는 AVL 트리 데이터 구조의 구현을 제공하는 파이썬 라이브러리입니다. AVL 트리는 자체 균형 이진 검색 트리의 일종으로, Georgy Adelson-Velsky와 Evgenii Landis에 의해 1962년 처음 소개되었으며, 이들의 이름을 따서 명명되었습니다. AVL 트리는 모든 노드의 왼쪽과 오른쪽 서브트리의 높이 차가 최대 하나 이하인 이진 검색 트리입니다. 이는 트리가 항상 균형을 유지하므로 트리의 높이가 노드 수에 대해 로그 적이라는 것을 보장합니다. 이 속성은 AVL 트리가 검색, 삽입 및 삭제 작업을 빠르게 수행할 수 있도록 보장하며, 최악의 경우 시간 복잡도는 노드 수에 대해 O(log n)입니다. FastAVLTree는 Python에서 AVL 트리의 빠르고 메모리 ..
2023.03.22 -
git) submodule 다루기
submodule 추가하기 git submodule 추가하기 git submodule add 확인하기 cat .gitmodules 추가한 내용 반영하기 git commit -m "add submodule" git push # git push origin main # git push origin master 서브모듈을 최신 버전으로 업데이트 submodule 최신으로 업데이트하기 git submodule foreach git pull origin main submodule 안에 submodule이 없는 경우 git submodule update --remote submodule 안에 submodule이 있는 경우 git submodule update --remote --recursive 서브모듈이 있는 g..
2023.02.15 -
python) metaflow 파이썬 스크립트에서 실행해보기
metaflow를 이용해서 python script를 실행하는 방법에 대해서 공유 subprocess를 실행하고, 대기 상태를 건 다음에 다음 flow를 실행하게 해 봤다. import subprocess import time print("first") p = subprocess.Popen(['python', './metaflow/tutorials/02-statistics/stats.py','run']) while p.poll() is None: print('.', end='', flush=True) time.sleep(1) print('returncode', p.returncode) print("second") p = subprocess.Popen(['python', './metaflow/tutoria..
2023.02.10 -
Python) multiprocessing 코어 수 제한해서 돌리기
이 글의 목적은 병렬코드를 작성할 때 자기에게 주어진 코어가 제한되어 있는 경우에 대한 팁이 담겨 있는 글이다. 팁을 적기 전에 언제 병렬코드가 필요하고, 또 언제 코어 수를 제한해야 하는 지 생각해 보자. 작업을 하다 보면, loop를 쓰는 경우가 많고, task마다 다르겠지만, 각각의 job은 서로 관련이 없는 경우를 푸는 경우가 있다. 이럴 때 가장 쉽게 생각할 수 있는 것은 병렬로 코드를 짜는 것을 생각한다. 아래 그림처럼 100,000개를 처리할 때 각각의 record끼리 관계가 없다고 하면, 해당 작업을 끝내는 동안 계속 기다려야 한다. 바쁜 우리들은 할 게 많기 때문에 이 시간을 줄이고 싶다는 생각을 하게 되고, 결국 Multi-Processing을 사용하려고 검색을 하게 된다. 아래 그림처..
2023.02.04 -
Python) pyarrow 사용 방법
2022.11.26 - [분석 Python/구현 및 자료] - Python) pyarrow 다뤄보기 2022.12.21 - [분석 Python/구현 및 자료] - Python) pyarrow 사용 방법 라이브러리 import numpy as np import pyarrow.parquet as pq import pandas as pd from sklearn.datasets import make_classification 데이터 생성 X_pd= pd.DataFrame(X,columns =[ f"feature_{i}" for i in range(X.shape[1])]) X_pd['class'] =y 파티션별로 저장 X_pd.to_parquet( path="./test.parquet", engine='pyarr..
2022.12.21 -
Python) pyarrow 다뤄보기
2022.11.26 - [분석 Python/구현 및 자료] - Python) pyarrow 다뤄보기 2022.12.21 - [분석 Python/구현 및 자료] - Python) pyarrow 사용 방법 Apache Arrow란? (https://realsalmon.tistory.com/21) 직렬화(Serialization)란? (https://realsalmon.tistory.com/21) Zero-Copy 직렬화 Pyarrow란? 아파치 애로우(Apache Arrow)라는 메모리 내 분석을 위한 개발 플랫폼인데, 빅데이터를 빠르게 처리하고 이동할 수 있도록 하는 일련의 기술을 제공하는 라이브러리를 파이썬 PyArrow를 통해 구현할 수 있다. 기존의 pandas로 용량이 큰 csv파일을 로드하면 시간..
2022.11.26 -
(진행중) SHAP (Shapley Additive exPlanations) 이해하기
SHAP에 대해서 좀 더 이해를 해보고자 블로그를 참고하는데, 블로그를 보고 정확히 이해하려니 매우 어렵지만 이해해보려고 한다... 게임 이론 게임이론이란 우리가 아는 게임을 말하는 것이 아닌 여러 주제가 서로 영향을 미치는 상황에서 서로가 어떤 의사결정이나 행동을 하는지에 대해 이론화한 것을 말한다. 즉, 의사결정자는 자신의 결정뿐 아니라 상대방의 결정이 무엇이 될 것인가에 대해서 관심을 가지게 될 수밖에 없고 이러한 상황의 문제를 다루는 의사결정학의 한 분야라고 한다. 게임 이론 분류 Shapley value 개념 및 예시 게임 이론의 개념을 기반으로 하며 예측에 대한 각 피처의 기여도를 계산하여 기계 학습 모델의 예측을 설명하는 데 사용할 수 있습니다. Shap Value에 대한 간단한 이야기를 해..
2022.11.21 -
[Pandas][꿀팁] string 데이터를 pandas data frame으로 바꾸기
매번 csv나 특정 파일로 떨꾸는 것이 귀찮을 때 사용할 수 있는 방법 공유합니다. :) 매번 read csv하려고 파일 옮겨서 하기 귀찮을 때 메모장에 있는 텍스트를 가져오거나, 엑셀에 있는 것을 복사에서 붙여 넣어서 사용할 수 있어서, 빠르게 검증하고자 할 때 유용합니다. :) 구현 아래처럼 특정 패턴으로 되어 있는 파일을 복사해서 붙여 놓고, 아래 명령어를 실행하면 됩니다. []에 있는 부분을 object 패턴에 맞게 변경해주면 됩니다. from io import StringIO import pandas as pd pd.read_csv(StringIO( [object] ),sep= [sep] ) 예시 from io import StringIO t = """ COLACOLBCOLCCOLD 1234 5..
2022.09.09 -
Python) Data Drift 탐지 KS로 구현해보기
다른 참고자료들을 보면서 이런 식으로 구현해볼 수 있지 않을까 해서 구현해봅니다. 한 가지 남은 이슈로는 이 코드 구현에서는 데이터의 히스토그램 정보를 저장하다 보니, 누적해서 계속 비교하는 것은 어떻게 해야 할지가 고민입니다. 이 부분 혹시 아이디어나 의견 있으면 댓글 부탁드려요! DATA DRIFT란? 다양한 Drift 문제가 있는데 여기서는 Data Drift를 다루려고 합니다. Data Drift란 간단히 말해서 시간이 변하면서, 데이터의 분포가 변하는 것을 의미합니다. 그래서 모델을 훈련하는 데 사용되는 데이터 세트와 실제 운영에서 받는 데이터를 모방하지 않을 때 발생합니다. 이것은 모델이 이상하게 작동하고 성능이 저하되기 시작하는 때입니다. 그래서 이러한 문제를 성능과 직결되는 문제를 가지고 ..
2022.09.03 -
Python) csv 파일을 parquet 파일로 만드는 방법
특정 파일을 paruqet으로 만드는 방법에 대해서 알아야 해서 정리해봅니다. Library Load import pandas as pd import pyarrow as pa import pyarrow.parquet as pq TXT (CSV) FILE TO Parquet file 변환 csv_file = "./ml-25m/movies.csv" parquet_file = "./my.parquet" chunksize = 500 csv_stream = pd.read_csv(csv_file, sep=',', chunksize=chunksize, low_memory=False) chunk =next(iter(csv_stream)) chunk로 schema를 추정할 수 있지만, 미리 정해져 있다면, 그 형식에 맞..
2022.09.03 -
Python) 특정 코드의 패턴 조합 찾기
사람도 코드로 정렬한다면, 유니크한 코드로 구성할 수 있지만, 집단이나 특색을 표현하기 위해서는 몇 가지의 코드를 구성해서 사람들을 나누게 된다. 예를 들어 특정 사람에 대해서 속성을 만든다고 하면, 이 사람의 성별, 직업, 결혼 여부, 자녀 여부, 주택 여부 등 다양한 속성으로 사람들을 나눌 수 있다. 그렇다면 이것과 마찬가지로 특정 상품이 있다면 해당 상품을 특정 카테고리로 분류해야 사람들이 쉽게 볼 수 있을 것이다. 아래 그림처럼 특정 상품에 대해서 여러 개의 코드를 정해서 해당 상품을 표현하게 된다. 그리고 이러한 상품을 거래하게 되면 데이터베이스 같은 곳에서는 다음과 같이 적재될 것이다. 특정 상품을 고객이 사면 고객이 어떤 날짜에 어떤 제품을 샀는데, 이것에 해당하는 코드들은 적재될 것이다. ..
2022.08.28