つまりなにしたの?
カテゴリデータで構成されるpandasのpd.Seriesを入力すると、One Hot Encodingをして、
pd.DataFrameとして返してくれる関数(one_hot_encoding)を用意した。
問題設定
CSV形式のデータセットの中にはカテゴリで表現されるデータが含まれていた。
そこで、あるカテゴリに含まれるか否か?という系列に変換することにした。
カテゴリで表現されるデータのpd.Series(データフレームの1列)を引数にして
カテゴリごとに含まれるか否か?のBooleanが格納されたpd.DataFrameを返す関数を作成する。
例題
ラスベガスのホテルに関するレビューのデータセットがあったのでこちらを利用させていただく
UCI Machine Learning Repository: Las Vegas Strip Data Set
LasVegasTripAdvisorReviews-Dataset.csv
というセミコロン(;)区切りのデータをダウンロードして、作業ディレクトリに配置する。
この中に5段階のスコアを表すScoreというSeriesが含まれているのでコレをOne Hot Encodingして
Score-1 Score-2 Score-3 Score-4 Score-5という系列のDataFrameにする。
DataFrameにした後は結合して使えば良い。
イメージ的にはこんな感じ↓
コード
関数のコード
from sklearn.preprocessing import LabelEncoder, OneHotEncoder def one_hot_encoding(series): le = LabelEncoder() lvl = le.fit_transform(series) ohe = OneHotEncoder() enced = ohe.fit_transform(lvl.reshape(-1,1)).astype(int) names = [(series.name+"-")+str(s) for s in le.classes_] r_df = pd.DataFrame(index=series.index, columns=names, data=enced.toarray(), dtype=bool) return r_df
使い方(関数のコードは実行済とする)
import pandas as pd df = pd.read_csv('LasVegasTripAdvisorReviews-Dataset.csv', ';') one_hot_encoding(df.Score)
うれしさ
一度用意しておくと便利で嬉しい。
参考文献
UCI Machine Learning Repository: Las Vegas Strip Data Set
Moro, S., Rita, P., & Coelho, J. (2017). Stripping customers' feedback on hotels through data mining: The case of Las Vegas Strip. Tourism Management Perspectives, 23, 41-52.