전체 글 9

[HiveQL] substr 사용법

파이썬의 문자열 슬라이싱은 아래와 같이 시작 인덱스와 끝 인덱스를 표시하는 것으로 가능하다. string = 'ragupasta' print(string[0:4]) # 결과: ragu print(string[:4]) # 결과: ragu print(string[0:1000]) # 결과: ragupasta 반면, HiveQL은 SUBSTR 함수를 사용하는데, SUBSTR(문자열, 시작 인덱스, 길이)의 형식으로 사용한다. '길이' 자리에 끝 인덱스를 넣어서 잘못된 결과를 출력하지 않도록 주의해야 한다. SELECT SUBSTR('ragupasta', 1, 4); -- 'ragupasta'의 1번째부터 4글자 출력 -- 결과: ragu Enjoy your querying:)

Development/SQL 2023.08.23

[Python] 폴더 생성 및 삭제(os, shutil)

ML프로덕트를 배포하다보면 주기적으로 배포 환경의 폴더 내부를 비워줘야할 때가 있다. 파이썬 코드 상으로 폴더나 파일을 삭제할 때는 아래와 같이 os 모듈을 주로 쓴다. 다만 os.rmdir는 'your_own_directory'가 비어있지 않은 경우 OSError가 발생한다. ### anti-pattern ### import os os.mkdir('your_own_directory') # 폴더 생성 os.rmdir('your_own_directory') # (비어있는) 폴더 삭제 # 'your_own_directory'가 비어있지 않을 경우 # -> OSError: [Errno 39] Directory not empty: 'your_own_directory' 이 경우 shutil 패키지의 rmtree ..

Development/Python 2023.08.23

[Python] XGBoost 사용 시 ValueError: DataFrame.dtypes for data must be int, float,

아래와 같이 XGBClassifier나 XGBRegressor를 사용할 때, 범주형 변수에 대한 고려 없이 데이터가 그대로 들어갈 경우 제목과 같은 ValueError가 발생할 수 있다. ### anti-pattern ### import xgboost as xgb # 데이터셋은 준비되어 있다고 가정 clf = xgb.XGBClassifier(random_state=42, verbosity=1) clf.fit(X_train, y_train) 이를 해결하기 위해 보통 범주형 변수를 인코딩하는데, 그렇게 하지 않고도 바로 XGBoost를 training할 수 있는 방법이 에러 메시지 두 번째 문장에 나온다. ValueError: DataFrame.dtypes for data must be int, float,..

Development/Python 2023.08.23

[추천시스템] Wide & Deep model

Google Play에서 User의 Item(모바일 앱) 검색 query를 기반으로 적합한 후보 앱들을 정렬해서 보여주는 모델이다. 이름 그대로 Wide component와 Deep component로 나누어져 있으며, Google Play상에서의 Online test를 통해 실질적인 효과를 측정했다는 것에 확실한 contribution이 있는 연구이다. 0. App impression & acquisition에 대한 정의 1) App impression : 앱에 대한 단순 관심의 표현을 의미, Google Play 상에서 클릭해본 앱이라고 생각하면 될 것 같다. 2) App acquisition : 실제 설치까지 이어진 앱 -> 본 연구에서는 아래 인용한 문구처럼, User-Item 사이의 Intera..

[Python] TypeError: {함수명} missing 1 required positional argument: {함수 인자명}

쉬운 케이스와 어려운 케이스가 있다. 1. 쉬운 케이스 ### anti-pattern ### def sum(a, b, c): return a + b + c sum(a, b) ## TypeError: sum() missing 1 required positional argument: 'c' sum()이라는 함수의 인자를 세 개 정의했는데, 실제 사용 시 세 개 미만으로 입력 시 발생한다. 이런 경우는 함수 정의를 다시 살피고 정의한 인자 개수만큼 넣어주면 해결할 수 있다. 2. 어려운 케이스 ### anti-pattern ### class Recommender: def __init__(self, df): self.df = df def sum(self, a, b, c): return a + b + c Reco..

Development/Python 2023.06.17

[추천시스템] ALS(Alternating Least Square)

추천시스템 중 잠재변수 모델(Latent factor model)에 해당하는 ALS에 대한 정보를 공유하고자 한다. 먼저 추천시스템을 설명할 때 흔히 쓰는 세 가지 용어에 대해 정의하고, MF에 대한 설명을 한 후에 ALS가 MF에 비해 앞서나간 점이 무엇인지 살펴보고자 한다. 0. 추천시스템 관련 용어 정리 1) User : 추천을 받을 누군가(ex. 유튜브나 넷플릭스를 보는 개개인) 2) Item : 추천해줄 객체(ex. 유튜브 숏츠나 넷플릭스에 업로드된 영화 등) 3) Interaction : User와 Item 간의 상호작용(ex. 유튜브 숏츠를 시청하거나, 좋아요를 누르거나, 댓글을 다는 등의 행위) 1. MF(matrix factorization) ALS를 이해하려면 먼저 MF에 대한 이해와 ..

[Python] 판다스(pandas) read_csv() 함수로 파일 읽을 때 'Unnamed: 0' 제거하기

pandas의 read_csv() 함수로 파일을 읽어올 때 아래와 같이 그냥 파일 경로만 넣으면 'Unnamed:0'과 같은 달갑지 않은 컬럼이 붙어서 읽혀질 때가 있다. ### anti-pattern ### import pandas as pd sample_txt = pd.read_csv('file_dir') read_csv() 함수 인자 중 index_col이 따로 특정되지 않아서 발생하는 문제이다(default setting은 index_col=None). index_col을 아래와 같이 원하는 컬럼으로 지정해주면 해결된다. ### best-practice ### import pandas as pd sample_txt = pd.read_csv('file_dir', index_col=0) Enjoy y..

Development/Python 2023.06.14

[HiveQL] timestamp로 되어있는 것을 string으로 변환하기

HiveQL에서 timestamp로 밀리세컨드 단위까지 나와있는 것을 string으로 변환해서 쓰고 싶다면 DATE_FORMAT('timestamp you wanna convert', 'format') 위와 같이 DATE_FORMAT으로 쉽게 바꿀 수 있으며, 'format' 부분은 'dd-MM-yyyy', 'yyyyMMdd', ...와 같이 원하는대로 바꾸어 사용할 수 있다. SELECT DATE_FORMAT('2023-06-14 20:43:11.029','yyyyMMdd'); -- result : 20230614 Enjoy your querying:)

Development/SQL 2023.06.14

[Python] Keras import 시 발생할 수 있는 에러들(ImportError: cannot import name 'get_config' 등)

Keras가 확실히 날것의 TensorFlow를 사용하는 것보다 편하긴 한데, import할 때 아래와 같은 두 가지 에러가 연달아 발생할 수 있다. 유명한 에러지만 이 둘을 연달아 정리한 글은 많지 않은 것 같다. 1. ImportError: cannot import name 'get_config' TensorFlow와 Keras의 버전이 맞지 않을 때 발생하는 에러이다. 아래와 같이 각각 import를 하면 발생할 수 있다. ### anti-pattern ### import tensorflow as tf import keras from keras.models import Sequential from keras.layers.core import Dense Line 2처럼 TensorFlow로부터 Ker..

Development/Python 2023.06.14