【发布时间】:2017-01-31 17:20:28
【问题描述】:
关于使用groupby 处理稀疏矩阵有几个问题。然而,输出似乎是列表、dictionaries、dataframes 和其他对象。
我正在处理一个 NLP 问题,并希望在处理过程中将所有数据保存在稀疏 scipy 矩阵中,以防止内存错误。
这是上下文:
我已经对一些文档进行了矢量化处理(sample data here):
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
df = pd.read_csv('groupbysparsematrix.csv')
docs = df['Text'].tolist()
vectorizer = CountVectorizer()
train_X = vectorizer.fit_transform(docs)
print("Dimensions of training set: {0}".format(train_X.shape))
print type(train_X)
Dimensions of training set: (8, 180)
<class 'scipy.sparse.csr.csr_matrix'>
从原始数据框中,我使用日期(一年中的一天)来创建我想总结的组:
from scipy import sparse, hstack
df['Date'] = pd.to_datetime(df['Date'])
groups = df['Date'].apply(lambda x: x.strftime('%j'))
groups_X = sparse.csr_matrix(groups.astype(float)).T
train_X_all = sparse.hstack((train_X, groups_X))
print("Dimensions of concatenated set: {0}".format(train_X_all.shape))
Dimensions of concatenated set: (8, 181)
现在我想应用groupby(或类似函数)来查找每天每个令牌的总和。我希望输出是另一个稀疏的 scipy 矩阵。
输出矩阵为 3 x 181,如下所示:
1, 1, 1, ..., 2, 1, 3
2, 1, 3, ..., 1, 1, 4
0, 0, 0, ..., 1, 2, 5
其中第 1 到 180 列代表令牌,第 181 列代表一年中的某一天。
【问题讨论】:
-
你说的是
pandasgroupby吗?你能举一个密集数组的工作例子吗?有一个 pandas 稀疏格式,但它与稀疏矩阵的交互仍在开发中。 -
第 181 列 - 是否稀疏?
-
column 181 (groups_X) 是一个
scipy.sparse.csc.csc_matrix,但实际上它是密集的,因为每个观察都有一个日期。