파이썬
[python] 이진탐색 라이브러리 bisect
이진탐색 알고리즘을 푸는 경우 유용한 bisect 라이브러리를 활용해본다. bisect_left(a,x) : 정렬된 순서를 유지하면서 배열 a에 x를 삽입할 가장 왼쪽 인덱스 반환 bisect_right(a,x) : 정렬된 순서를 유지하면서 배열a에 x를 삽입할 가장 오른쪽 인덱스 반환 bisect를 이용하여 값이 특정 범위에 속하는 데이터 개수 구하기 from bisect import bisect_left, bisect_right def count_by_range(a,left_value, right_value): right_index = bisect_right(a,right_value) left_index = bisect_left(a,left_value) return right_index - left_..
[python] 예외처리 / EOF / try,except
늘 조건문을 작성할 때는 if/else로 작성했기에 오류에 대한 예외처리를 해주는 try/except를 사용할 때는 흔하지 않았다. 하지만 백준 A+B-4 문제를 해결할 때는 try/except과정이 필수적으로 요구되었기에 다시금 들여다볼 수 있었다. 또한 input()과, sys.stdin.readline()의 구체적인 차이까지 다시 숙지했다. 1) input()과 sys.stdin.readline() 우선 input()과 달리 굳이 sys.stdin.readline()을 쓰는 이유는 많은 양의 데이터를 받아오는 상황에서 보다 효율을 높이기 위해 사용한다. 그래서 input() 한 단어로 간결하게 불러올 수 있는 것도 import sys: sys.stdin.readline()으로 받아오는 것이다. 하지..
[python] zip함수 정리
프로그래머스로 문제를 풀고 나서 다른 사람들의 풀이를 볼 때 흔히 zip()함수를 쓰는 것을 볼 수 있다. 늘 리스트나 문자열의 원소를 for문을 돌려서 자료를 하나씩 빼곤 했는데 여러 원소를 한 번에 빼내야 하는 경우 zip함수의 가독성이 더욱 높다고 판단했다! 1) 여러 변수의 객체를 인자로 받아 차례로 반환 * for문을 사용하는 경우 numbers = [1,2,3] letters = ['A','B','C'] for i in range(3): pair = (number[i],letters[i]) print(pair) *zip 함수를 사용하는 경우 number = '12345' upper = 'ABCDE' lower = 'abcde' for n,u,l in zip(number, upper, lower..
[python] 재귀함수 파헤치기
코딩테스트를 위해서는 알고리즘과 자료구조 공부가 필수적이라고 생각해 알고리즘 공부를 하고 있다. 여러 내용들 중에도 재귀함수가 은근 헷갈리고 어렵게 다가와 복습 겸 정리해보려고 한다. 우선 공부에 활용한 도서는 '모두의 알고리즘 with 파이썬'으로 '더북' 사이트에서는 각 챕터별로 내용이 요약되어 있어 해당 사이트를 활용하고 있다. https://thebook.io/006935/ 더북(TheBook): 모두의 알고리즘 with 파이썬 thebook.io 재귀함수 ? 우선 재귀함수란 함수가 자기 자신을 다시 호출하는 것을 뜻하는 함수이다. 가장 기본적인 예시로 def hello(): print('hello') hello() ## 함수 다시 호출 hello() 좋지 않은 예시이기는 하지만 이를 출력하면 '..
[python] SMOTE를 활용한 오버샘플링
이번에는 SMOTE를 활용한 오버샘플링을 적용해보겠습니다. 일반적으로 언더샘플링보다 오버샘플링이 예측 성능상 더 유리한 경우가 많아 주로 사용됩니다. ## 오버샘플링? 이상 데이터와 같이 적은 데이터 세트를 증식하여 학습을 위한 충분한 데이터를 확보하는 방법으로, 동일한 데이터의 단순 증식은 과적합을 유발할 수 있기 때문에 의미가 없으므로 원본 데이터의 피처값들을 아주 약간씩 변형하여 증식 여기서 주의할 점은 SMOTE를 적용할 때는 반드시 학습 데이터 세트만 오버샘플링을 해야합니다!!! 검증 데이터 세트 혹은 테스트 데이터 세트를 오버샘플링 하는 경우 결국 원본 데이터가 아닌 데이터 세트에서 검증되기 때문에 올바른 검증이 되지 않습니다. 캐글의 Credit Card Fraud Detection 데이터를..
[python] LGBMClassifier 단번에 성능 높이기
Light GBM은 XGBoost보다 개선된 성능과 빠른 수행률을 보여주어 많은 대회의 상위 랭커들이 활용하는 모델이라고 할 수 있습니다! 저는 LGBMClaasifier 모델을 활용할 때 특히 주의해야 할 부분을 짚어보려고 하는데요, LGBMClassifier hyper parameter 중 'boost_from_averge' 설정입니다. Light GBM이 버전업 됨에 따라 boost_from_average 파라미터의 디폴트 값이 False에서 True로 변경되었습니다. 레이블 값이 극도로 불균형한 분포인 데이터의 경우 boost_from_average = True 값은 재현율과 roc_auc_score를 매우 저하시킵니다! Light GBM 2.1.0이상 버전이거나, 불균형한 데이터 세트에서 예측 ..
[python] 교차검증을 간단하게 cross_val_score()
sklearn은 kfold 교차검증을 보다 편리하게 수행할 수 있는 API를 제공합니다. 바로 cross_val_score() 인데요! 기존에 폴드 세트를 지정하고, for 루프에서 반복으로 학습 및 테스트 데이터의 인덱스를 추출하고, 반복적으로 학습과 예측을 수행하는 일련의 과정을 한번에 수행해주는 API입니다. 특히 classifier 학습을 진행하는 경우 자동으로 stratified KFold 방식을 진행해주기 때문에 더할나위 없이 편하다고 할 수 있겠네요! cross_val_score() 사용법 cross_val_score(estimator, X, y, scoring=평가지표, cv=교차 검증 폴드 수) 까지가 주요 파라미터라고 할 수 있습니다. * 여기서 estimator가 classifier ..
[python] 공공 데이터 포털 API 불러오기
python을 활용하여 공공데이터 포털에 존재하는 Open API 형태의 데이터 불러오기 불러온 데이터를 테이블 데이터로 변환해주는 실습 진행 - !! 실습 데이터 https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15028195 공공데이터 포털의 전국과속방지턱표준데이터를 활용해보았다 ※ 일반 파일 데이터는 로그인 없이도 다운이 가능하지만, API 신청을 위해서는 로그인이 요구됨 실습전 API 활용신청을 해야하며, 개인마다 주어지는 API KEY값을 활용한다 공공데이터 포털에서 공개되는 API는 대부분 바로 자동 승인이 이루어진다! 활용신청 이렇게 승인처리된 데이터를 눌러주면 개인에게 주어진 인증키를 볼 수 있는 창으로 넘어가게..
[python] colab pycaret 설치
코랩에서 여러 모델의 성능을 비교해볼 수 있는 pycaret을 사용하기 위해 설치를 하려고 기존에 다른 패키지를 설치하는 것처럼 설치했더니,, !pip install pycaret 오류가 발생한다.. sklearn 버전에 맞게 재설치 우선 설치된 sklearn의 버전이 0.23.2로 맞추어져야 한다고 오류가 떠서 버전에 맞게 sklearn을 삭제 및 재설치 해준다 !pip uninstall sklearn -y !pip install --upgrade sklearn !pip install scikit-learn==0.23.2 --user 위 코드를 실행시킨 다음 런타임 재실행 후 다시 sklearn의 버전을 확인하여야 0.23.2 버전으로 설치된 것을 확인할 수 있다 import sklearn sklear..
[python] LabelEncoder
범주형 컬럼을 인코딩하려는 데 컬럼이 너무 많아서 원핫인코딩을 사용할 수 없는 상황이다 그래서 LabelEncoder를 사용하려고 했으나 array가 1차원 형식이어야 한다는 조건 때문에 train데이터에 적용이 안되는 문제가 있었다 LabelEncoder 사용시 전체 컬럼에 적용할 것인지, 또는 특정 컬럼에 적용할 것인지에 따라 약간씩 코드가 달라진다 하나의 컬럼에 LabelEncoder 적용하기 인코딩 할 컬럼이 몇 개 되지 않는 경우에는 하나씩 적용하면 사용하면 좋다!원래 LabelEncoder를 사용할 시 여러 개를 한 번에 돌리는 것보다 하나의 컬럼을 각각 확인해가며 변환하는 것이 가장 좋은 방법이라고 한다 from sklearn.preprocessing import LabelEncoder en..