컬럼별 유니크 값 처리하는 코드가 마음에 들어서 기록해봄
https://www.kaggle.com/code/goooora/exercise-categorical-variables/edit
코드
# Get number of unique entries in each column with categorical data
object_nunique = list(map(lambda col: X_train[col].nunique(), object_cols))
d = dict(zip(object_cols, object_nunique))
# Print number of unique entries by column, in ascending order
sorted(d.items(), key=lambda x: x[1])
- 앞에서 csv로부터 pandas 객체를 만들어서 X_train 까지 만들어 놓은 상태
(X_train은 pandas 객체임)
- object_cols는 pandas 에서 column 이름들의 모임
map
- 소스를 대상으로 변환해주는 역할을 함
- map(int, input().split()) 를 주로 사용했는데
- input() : "111 222 333"
- input().split() : "111" "222" "333"
- int로 변환 : 111 222 333
- 111 222 333이 어딘가 떠돌테고(map 객체?) 적절히 사용
- map(lambda, object_cols)는 object_cols를 lambda를 통해 변환을 시키고
- list(map(...)) 을 통해서 변환된 것을 list 객체로 생성
lambda
- object_cols의 하나에 대해서
- X_train[col].nunique() 즉 그 컬럼의 nunique() 값을 구함
- map에서 사용되니 결과적으로 컬럼 -> 그 컬럼의 nunique()값으로 변경(=매핑)
- 그리고 그 결과가 list로 생성되고 object_nunique로 생성
zip
- "컬럼이름"과 "컬럼의 nunique()" 값을 zip
dict
- 앞에서 "컬럼이름" "컬럼의 nunique()"의 ziq을 dict
- 직관적으로 보면 "컬럼이름", "유니크값" 으로 생긴 dictionary가 생성
sorted
- 대상을 key를 기준으로 정렬하는데
- 대상 : d.items(), key : lambda
- lambda를 살펴보면 lambda x : x[1]로 되어있음
- x는 d.items의 하나의 원소 일테고, ("컬럼이름", "유니크값") 형태일 것임
- 그 원소의 [1] 값, 즉 "유니크값"
- 결국 d.items()를 "유니크값" 기준으로 정렬