2017-07-11 18 views
1

機械学習の初心者です。私はいくつかのデータを扱うためにpandas/tensorflowを使用しようとしています。 私はデータを持っているとき、私は知っている:マシンラーニングデータパンダによる前処理

+----+------+ 
| ID | asset| 
+----+------+ 
| A | 1 | 
| B | 2 | 
| C | 3 | 
| D | 4 | 
+----+------+ 

私はちょうどtensorflowを使用して[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]に転送そして、リスト[1,2,3,4]としてCOL「資産」を得ることができます。

しかし、私はこのようになり、データがある場合:

+----+------+ 
| ID | asset| 
+----+------+ 
| A | 1 | 
| A | 2 | 
| A | 3 | 
| B | 1 | 
+----+------+ 

そして、このようになり、別のテーブル:

+----+------+ 
| ID | debt | 
+----+------+ 
| D | 1 | 
| D | 2 | 
| D | 3 | 
| A | 1 | 
+----+------+ 

言うことですが、私は3つの異なったタイプがあり、顧客Aを持っています3種類の債務を有する資産と顧客DのクライアントDは最初のテーブルにも存在しないことに注意してください。

最初の質問は、これらのテーブルを組み合わせて、資産/債務と一致するクライアントを見つける方法です。私はそれらのテーブルに参加するだけですか? (パンダではpd.merge()) このようにして、クライアントDは資産に対してヌル値を持ちます。それとも、すべてのテーブルに存在するクライアントを選ぶだけですか?私はどうすればいいのですか?

第2の質問は、テーブルAを[[1,1,1], [1,0,0]]にどのように転送できますか?

私は説明が意味があると思います。私が間違ったことを言ったら、私を訂正してください。あなたが欠落しているデータまたはでサンプルを削除したい場合は

(あなたのデータを前処理することへの答えは本当にあなたの機械学習の問題に依存し、あなたが望む方法:長い質問:(

+0

もっと具体的にできるのであれば、私は第2の質問を理解できませんでしたか?ありがとうございます –

+0

はい、テーブルAから、クライアントAは資産タイプ1,2,3を持ち、クライアントBはタイプ1を持つことがわかります。したがって、それらは '[[1,1,1]、[1、 0,0]] '。 – Davvvvad

+0

データはすべて 'csv'形式なので、テーブルAは1つのcsvファイル、テーブルBはもう1つのテーブルとなります。 – Davvvvad

答えて

1

最初の質問のため申し訳ありませんあなたがデータセットを準備する必要がある場合の最初の問題かもしれないので、thisをご覧ください。

ここで欠損値を削除することを決定した場合は、このようなinner mergeを実行してください:

df = pd.merge(df1,df2,"inner") 

のように、あなたはdf1df2の間の交差点をとっているだけです。

あなたは欠損値を転嫁することを選択した場合、このようなouter merge行います

df = pd.merge(df1,df2,"outer") 

を、あなたがリンクで提案した方法は、一つの方法ですどのようにあなたが好きな今までに(あなたの欠損値を埋めることができるはずですそれをするために)。

2番目の質問:この質問のための

は、しかし、よりよい方法があるかもしれません(しかし、私は完全にそれが実際に存在する場合は、その名前を忘れてしまった)が、これはうまく同様に行う必要があります。

a = df1.groupby('ID')['asset'].unique() 
# to have something like 
#ID 
#A [1, 2, 4] 
#B   [1] 

x = a.size 
y = max([max(x) for x in a]) 
z = np.zeros((x,y)) 
# just instantiating the final matrix with the right shape and zeros 

、あなたが実際にこのように適切な場所に1'sを入れてnumpy.putを使用することができます。

for row in range(x): 
    np.put(z[row],a[row]-1,1) 

O/P(あなたの例):ご質問や改善点がある場合は

[[ 1. 1. 1.] 
[ 1. 0. 0.]] 

私はコメントを残してください、これは役立ちました願っています。