2017-10-10 19 views
0

複数値のフィーチャー(genre_ids)を前処理する方法は?前処理多値機能?

私は1列の各行に1つの数値を割り当てる必要がありますが、このgenre_idsをどのくらい効率的に前処理できますか?

msno |city |bd |gender| song_id| song_length| genre_ids| artist_name 
1  12 33 0  11  222   372    89 
2  11 23 1  1  202   372|374|375  99 
3  14 22 1  2  300   386    78 
+0

SO一方通行の戦争は、各genre_idの列を構築し、多分疎行列(One_Hot_encoding)としてそれをコードします。しかし、この巨大な行列を凝縮するには、監督されていない学習方法を試してみることができますか? – Quickbeam2k1

答えて

1

あなたはあなたのタスクを解決するためにpandasパッケージを使用することができます。

import pandas as pd 

df = pd.DataFrame({'msno': [1, 2, 3], 
        'city': [12, 11, 14], 
        'bd': [33, 23, 22], 
        'gender': [0, 1, 1], 
        'song_id': [11, 1, 2], 
        'song_length': [222, 202, 300], 
        'genre_ids': ['372', '372|374|375', '386'], 
        'artist_name': [89, 99, 78]}) 

genre_ids_dummies = (pd.get_dummies(df.genre_ids.apply(lambda x: x.split('|')) 
               .apply(pd.Series) 
               .stack()).sum(level=0)) 
df_processed = pd.concat(objs=[df.drop(labels='genre_ids', axis=1), 
           genre_ids_dummies], axis=1)