2016-04-19 10 views
0

私は、scikitの学習用データセットを準備し、それを決定木クラス分類器に送るためにpandasデータフレームを構築することを計画しています。scikitの意思決定ツリーのデータ準備

データはさまざまな基準を持つさまざまな企業を表していますが、特定の企業でSMB、中堅企業、企業などの「顧客セグメント」など複数の値を持つことができます。このような複数の可能な値を持つ他の基準/列があります。私は個人的な価値観を集約するのではなく、SMBの会社A、Midmarketの会社A、SMBや中堅の顧客Aの「グループ分け」ではなく、個々の価値観に基づいて決定する必要があります。

これを処理する方法についてのガイダンスはありますか?ある企業が学習ルーチンに入るためには、すべてのバリアントに対して行を生成する必要がありますか?

Company,Segment 
A,SMB:MM:ENT 

なる: - 例えば「顧客垂直」はまた、複数の値を含むことができる

A, SMB 
A, MM 
A, ENT 

ならびに追加の基準/列から来るかもしれない任意の他の変異体のための入力は、そのような?これにより、データセットのサイズが大幅に増加するようです。このデータを構造化し、そして/またはこのシナリオを処理するより良い方法はありますか?

最終的な目標は、簡単な質問で簡単な調査を行い、その回答を値にマッピングして、適切な企業、特定のセグメント、業種、製品カテゴリなどの予測を得ることです。それを達成するために正しい学習データセットを構築するのに苦労しています。

答えて

0

お試しください。

df = pd.DataFrame({'company':['A','B'], 'segment':['SMB:MM:ENT', 'SMB:MM']}) 
expended_segment = df.segment.str.split(':', expand=True) 
expended_segment.columns = ['segment'+str(i) for i in range(len(expended_segment.columns))] 
wide_df = pd.concat([df.company, expended_segment], axis=1) 
result = pd.melt(wide_df, id_vars=['company'], value_vars=list(set(wide_df.columns)-set(['company']))) 
result.dropna() 
+0

これはサブカテゴリを個々の行に展開する「機械的」な側面にかなり関わっていますが、私の根本的な質問は - そのような拡張は全く必要ですか?あるいは、有効な結果を得るデシジョンツリーにデータを送る前に、このデータを準備する別の方法がありますか?おそらく私はその側面をより明確にするために私の質問を言い換える必要がありますが、あなたのコードは有効であり、グループ化された基準を必要に応じて適切に展開します。 –

関連する問題