본문 바로가기

728x90

Programming

(34)
[Pandas] shift란? Pandas에서 제공하는 기능 중 shift라는 기능이 있다. 우리가 알고 있는 의미 그대로 '이동시키다'라고 해석하면 어떤 기능인지 잘 와닿을 것 같다! 말 그대로 현재 데이터를 n칸 씩 앞으로 또는 뒤로 손쉽게 밀 수 있다. 공식 문서에 있는 예제를 살펴보자. 아래와 같은 예시의 데이터 프레임이 있을 때 >>> df = pd.DataFrame({"Col1": [10, 20, 15, 30, 45], ... "Col2": [13, 23, 18, 33, 48], ... "Col3": [17, 27, 22, 37, 52]}, ... index=pd.date_range("2020-01-01", "2020-01-05")) >>> df Col1 Col2 Col3 2020-01-01 10 13 17 2020-01-..
[Pandas] groupby 사용법 이해하기 Pandas에서 groupby는 데이터를 이해하고 분석할 때 굉장히 편리하고 좋은 도구입니다! 굉장히 많이 쓰이는 기능임에도 의외로 사용법이 쉽게 이해가 되지는 않습니다. 최근 부스트캠프에서 groupby를 굉장히 이해하기 쉽게 설명해주신 것이 있어 정리 및 공유해보려고 합니다! 우선 groupby의 가장 기본적인 사용법은 다음과 같습니다. (데이터프레임).groupby(분리할KEY).agg({합치고싶은특성: 어떻게합칠지, ...}) 예를 들어보자면, 만약 어떤 고객이 어떤 물건을 구매했는지에 대한 구매이력 데이터프레임이 우리에게 있다고 가정해봅시다. 여기서 각 고객 별로 몇 개의 물건을 구매했는지 살펴보고 싶다면, df.groupby("userID").agg({"buy": "count"}) 이렇게 되는..
[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 객체로 변환하여 사용하여 문제없이 사용가능하다!
[PyTorch] 모델 내 일부 레이어 freeze 하기 pretrained 모델을 가져와서 나의 데이터에 맞게 학습시킬 때 기존 모델의 전체적인 weight은 그대로 가져오고 classifier 역할을 하는 마지막 레이어만 내 데이터에 맞게 학습시키고 싶어졌다. 모델 내 레이어를 부분적으로 freeze 하기 위한 방법을 찾아보니 다음과 같이 모델의 파라미터를 불러와 requires_grad를 False로 두어 freeze하고 싶은 부분은 freeze하고, 가중치 업데이트를 하고 싶은 부분은 그대로 두면 된다! 나같은 경우는 모델의 마지막 레이어 'fc'만 학습을 시키고 싶어 아래와 같이 코드를 구성했다. for name, param in model.named_parameters(): if name.split('.')[1] == 'fc' : pass else ..
[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..
[PyTorch] IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1) torch.nn.CrossEntropyLoss() 를 사용해서 loss를 구하는 과정에서 만난 에러! 다름이 아니라 아무 생각 없이 accuracy를 구할 때처럼 argmax로 target을 넣어 loss를 구해서 난 에러였다! crossentropy의 계산 공식을 생각해보면 말도 안된다는 걸 알 수 있다. 당연히 각 타겟 별로의 confidence 값이 있어야 crossentropy를 구할 수 있는 것인데! 따라서 CrossEntropyLoss를 구할 때에는 argmax로 예측한 target을 넣기 전 confidence 값을 그대로 넣어주어야 한다.

728x90