2017-01-27 18 views
2

私は、次のデータセットがあります。パンダのデータフレームにTF-IDF行列を変換し

test_set = ("The sun in the sky", "The sun in the light", "Do not blame it on moonlight", "Do not blame it on sunshine") 

は、今私は私が望むどのようなTF-IDF行列

from sklearn.feature_extraction.text import TfidfTransformer 
from sklearn.feature_extraction.text import CountVectorizer 

vectorizer = CountVectorizer() 
vectorizer.fit_transform(test_set) 

smatrix = vectorizer.transform(test_set) 
smatrix.todense() 

tfidf = TfidfTransformer(norm="l2") 
tfidf.fit(smatrix) 
tf_idf_matrix = tfidf.transform(smatrix) 

を作成するために、次のコードを使用しますこの行列をknnクラスタアルゴリズムに 'フィードする'ことです。 したがって、このような例:

import pandas as pd 
df = pd.DataFrame([[0.2, 0.3, 0.4], [0.2, 0.3, 0.41], [0.2, 0.1, 0.05], [0.1, 0.1, 0.08]], columns=('column1', 'column2', 'column3')) 

k_means = cluster.KMeans(n_clusters=2) 
k_means.fit(df) 
print(k_means.labels_) 

私はしかしDFに行列を変換するように見える傾けます。私が行う場合:データフレームのコンストラクタが正常に呼び出されていない:

df = pd.DataFrame(tf_idf_matrix) 

私は

Traceback (most recent call last): 
File "/Users/marcvanderpeet/PycharmProjects/untitled/test.py", line 47, in <module> 
df = pd.DataFrame(tf_idf_matrix) 
File "/Library/Python/2.7/site-packages/pandas/core/frame.py", line 345, in __init__ 
raise PandasError('DataFrame constructor not properly called!') 

pandas.core.common.PandasErrorを入手します!

私はこれをどのように変換することができますか?

+0

は、あなたが他のモジュールをインポートし、 'pd'それを名付け、偶然がありますか? –

+0

いいえ、ちょうどパンダ –

+2

'pd.DataFrame'は' pd.Dataframe'ではありません。 – Psidom

答えて

2

tf_idf_matrixは、タイプscipy.sparse.csr.csr_matrixです。これを確認するには、type(tf_idf_matrix)と入力します。 pd.DataFrameクラスのpandasドキュメントでは、numpy ndarray(構造化または同種)、dict、またはDataFrameだけを渡すクラスのインスタンスを取得できることがわかります。 tf_idf_matrixをnumpy表現に変換するには、次のようにします:tf_idf_matrix = tf_idf_matrix.todense()。この行はscipy.sparse.csr.csr_matrixnumpy.matrixlib.defmatrix.matrixに変換することができ、pd.DataFrameはこのタイプのデータで動作することができます。その後、dfを取得し、k_means.fit()メソッドに渡すことができます。

1

バージョン0.20以降に直接パンダのSparseDataFrameを作成するためにscipyのダウンロードスパース行列を使用することができます:

sp_arr = csr_matrix(arr) 
sdf = pd.SparseDataFrame(sp_arr) 
関連する問題