본문 바로가기

728x90

Programming/Python

(19)
[Python] dictionary 타입에서 default 값 가져오기 파이썬에서 사용하는 데이터 타입 중에는 "dictionary(딕셔너리)"라는 데이터 타입이 있습니다. 우리가 사전을 볼 때 단어를 찾으면 단어의 의미가 사전에 적혀있는 것과 동일한 형태의 데이터 구조라고 생각하면 됩니다. 다음은 과일이라는 key값을 찾아가면 가격이라는 value를 담고 있는 딕셔너리의 예제입니다. fruits = {"apple" : 1000, "banana" : 1500, "strawberry" : 500} 이번 글에서는 딕셔너리의 default 값에 대하여 간단하게 정리하겠습니다! 딕셔너리를 사용하여 코드를 짜다보면 종종 딕셔너리에서 값을 가져올 때 해당하는 키 값이 딕셔너리에 없는 경우가 있습니다. 없는 키에 접근을 하면 당연히 value를 불러 올 수 없습니다. 그렇다면 딕셔너리에..
Pandas Dataframe에서 One Hot Encoding을 Label Encoding으로 바꾸는 법 Dataframe에서 상황에 따라 one-hot encoding을 label encoding으로 변환해서 사용해야하는 경우가 있다. One hot encoding을 사용할 때는 get_dummies를 사용하면 쉽게 변환이 가능하다. 반대로 label encoding으로 변환하고 싶다면 다음과 같은 방식으로 손쉽게 변환이 가능하다! onehot_encoding_list = [...] # one_hot encoding으로 표현되어 있는 feature 이름 df['label_encoding'] = np.argmax(np.asarray(df[onehot_encoding_list]), axis=1)
[Python] IndexError: tensors used as indices must be long, byte or bool tensors 문제 해결 subgraph를 추출하는 과정에서 만난 에러! 그래프 내 특정 타겟 노드에 대해서만 다음과 같은 에러가 발생하는 것을 확인할 수 있었다. IndexError: tensors used as indices must be long, byte or bool tensors tensor를 인덱스로 사용 시 반드시 long, byte, bool이어야 한다는 것. 코드를 확인해보니 특정한 경우에는 인덱스로 사용되는 tensor가 empty하여 이런 에러가 발생한 것을 확인할 수 있었다. 그렇다면 이런 경우는 따로 예외처리를 해야할까? 물론 예외처리를 할 수도 있지만 인덱스로 사용되는 tensor를 numpy 객체로 변환하여 사용하여 문제없이 사용가능하다!
[Python] 난수 생성 시 가중치 (weights) 적용하기 python에서는 random 내장 라이브러리를 사용해서 난수를 쉽게 생성할 수 있습니다. >>> import random >>> random.choice(range(1, 6)) 4 그런데 만약에! 뽑히는 숫자에 확률을 더해주고 싶다면? 즉, 랜덤이긴 하지만 특정 숫자가 자주 뽑히도록 확률을 조정하고 싶다면? 바로 weights을 추가해주면 됩니다! >>> random.choices(range(1, 6), weights = [0.2, 0.3, 0.1, 0.1, 0.3]) [2] weights 변수에 넣어주면 뽑히는 대상이 뽑힐 확률을 적용해줄 수가 있습니다! 만약 한 숫자에 가중치를 몰아주게 되면 랜덤이지만 계속 같은 숫자가 나오는 것을 확인 할 수 있습니다! >>> random.choices(range..
[Python] ImportError: cannot import name 'A' from partially initialized module 'B' (most likely due to a circular import) 코드를 돌리다가 마주친 ImportError! 처음에는 import하려는 코드에 오류가 있어서 안되는건가 했는데 뒤에 설명을 보니 circular import 때문에 나타나는 경우가 많다고 써있었다! 알고보니 A.py 에서는 import B, B.py에서는 import A로 순환식으로 import를 하고 있어서 발생한 문제였다!
[Python] TypeError: cannot perform reduce with flexible type (에러 해결 - list_eval, dtype) 데이터프레임을 csv 파일로부터 읽어와 np.mean을 하는데 만난 에러! TypeError: cannot perform reduce with flexible type 테스트 후 저장 할 때까지는 잘 작동했는데 다시 load하니 이런 에러를 만났다. 찾아보니 주로 이 에러는 수치형 데이터가 아닌 데이터로 수치형 연산을 하려할 때 발생한다고 한다. 그래서 확인해보니 나는 분명 수치형 데이터를 저장해주었는데 다시 load하는 과정에서 살펴보니 str 객체로 바뀌어있었다. 왜그럴까?! 찾아보니 pandas의 read_csv 함수 같은 경우 첫 번째 행의 데이터를 기준으로 각 column 별 데이터형 타입을 자동으로 맞추어주는데 종종 잘못 매칭을 해주는 경우가 있다고 한다. 그래서 굳이 데이터타입이 잘못 매칭되..
[Python] Function Annotation (':', '->' 이란?) project_azua github 코드를 분석하던 중 함수에서 -> symbol을 만나게 되었다. 예전에는 그냥 무심코 지나갔었는데 코드를 하나하나 분석하다보니 궁금증이 생겼다. 파이썬은 다른 언어에 비해 문법의 제약이 적은 편이다. 이로인해 유연성이 높고 쉬운 반면 작성된 코드를 봤을 때 해석하기에 비교적 모호할 수가 있다. 예를 들면 파이썬에서는 함수를 선언 할 때 파라미터의 타입을 따로 지정할 필요가 없어 개발자는 신경 쓸 부분이 훨씬 적다. 그러나 코드 작성자가 아닌 다른 개발자는 코드를 봤을 때 어떤 타입형이 들어가야 직관적으로 알기 힘들다. 따라서 이런 문제를 해결해주기 위해 사용하는 기능이 바로 "Function Annotation"이다. (Type hints) 공식 문서의 예시를 통해서 ..
[tqdm] tqdm 진행바에 설명 추가하기 (set_description, set_postfix) tqdm 라이브러리를 사용하면 코드의 진행 상태를 진행바(progress bar)로 확인할 수 있어 매우 편리하다. 특히 시간이 오래 걸리는 코드같은 경우 종종 정말 이 코드가 돌아가고있는게 맞는건지 멈춘건 아닌지.. 대체 어느정도 더 기다려야하는지 의문일 때 tqdm 라이브러리는 매우 유용하다. 사용방법도 매우 간단하다. 아래와 같이 tqdm 라이브러리를 설치해준 후 !pip install tqdm 다음과 같이 코드를 돌려보면 a = range(10000000) for _ in tqdm(a) : continue 이렇게 진행상황을 살펴볼 수 있다. 주로 학습을 할 때 학습이 어느정도 진행되었는지 확인하는 용으로 많이 사용한다. tqdm은 단순하게 진행 상태만 확인할 뿐만 아니라 간단한 설명을 추가하여 현..

728x90