๊ธฐ๋ณธ์ ์ผ๋ก python์์ pandas๋ฅผ ํ์ฉํ์ฌ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก OneHot Encoding์ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ฅผ ์ญ๋ณํํ๋ ํจ์๋ ํจํค์ง๋ฅผ ํตํด ์ ๊ณต๋๊ณ ์์ง๋ ์๋ค. ๊ทธ๋ ์ง๋ง ์๋์ reference์์ ์ข์ ํจ์๋ฅผ ๋ง๋ค์ด์ ๊ณต์ ํด์ฃผ์
์ ์ด๋ฅผ ๊ณต์ ํ๊ณ ์ ํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
def undummify(df, prefix_sep="_"):
cols2collapse = {
item.split(prefix_sep)[0]: (prefix_sep in item) for item in df.columns
}
series_list = []
for col, needs_to_collapse in cols2collapse.items():
if needs_to_collapse:
undummified = (
df.filter(like=col)
.idxmax(axis=1)
.apply(lambda x: x.split(prefix_sep, maxsplit=1)[1])
.rename(col)
)
series_list.append(undummified)
else:
series_list.append(df[col])
undummified_df = pd.concat(series_list, axis=1)
return undummified_df
|
์์์ prefix_sep="_"๋ก ์ค์ ํด๋ ์ด์ ๋, pd.get_dummies()์์ ๋ช
๋ชฉํ ๋ณ์๋ฅผ ๋ณ์๋ช
_๋ด์ฉ์ผ๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ํน์ ๋ชจ๋ฅผ ์๋ฌ๋ฅผ ๋ฐฉ์ง ํ๊ธฐ ์ํด์ ์๋ ์ฝ๋๋ฅผ ์ค์ํด์ค ํ์์ฑ์ด ์๋ค.
1
2
3
|
data.columns = ['.'.join(col_split) for col_split in data.columns.to_series().str.rsplit('_')]
# data column ์ค์์ ์ค๊ฐ์ '_'๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ '.'๋ก ๊ต์ฒดํด์ค๋ค.
# ์ถํ one_hot encoding inverse_transform์์ ์๋ฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํจ.
|
Reference
[1] https://preservsun.tistory.com/entry/%EB%8D%94%EB%AF%B8%EB%B3%80%EC%88%98-%EC%A0%84%ED%99%98-%EC%A0%84%ED%99%98-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0-python-code