我正在将具有两列(A和B)的记录列表转换为矩阵表示.我一直在使用pandas中的pivot函数,但结果却相当大.pandas是否支持转换为稀疏格式?我知道我可以转动它然后把它变成某种稀疏表示,但不像我想的那样优雅.我的最终目标是将其用作预测模型的输入.
或者,在熊猫之外是否存在某种稀疏枢轴能力?
编辑:这是一个非稀疏数据透视的示例
import pandas as pd
frame=pd.DataFrame()
frame['person']=['me','you','him','you','him','me']
frame['thing']=['a','a','b','c','d','d']
frame['count']=[1,1,1,1,1,1]
frame
person thing count
0 me a 1
1 you a 1
2 him b 1
3 you c 1
4 him d 1
5 me d 1
frame.pivot('person','thing')
count
thing a b c d
person
him NaN 1 NaN 1
me 1 NaN NaN 1
you 1 NaN 1 NaN
Run Code Online (Sandbox Code Playgroud)
这创建了一个矩阵,可以包含所有可能的人和事物的组合,但它并不稀疏.
http://docs.scipy.org/doc/scipy/reference/sparse.html
稀疏矩阵占用的空间较少,因为它们可能意味着NaN或0之类的东西.如果我有一个非常大的数据集,这个旋转函数可以生成一个由于大量NaN或0而应该稀疏的矩阵.我希望通过生成一些稀疏的东西而不是创建一个密集矩阵然后将其转换为稀疏来节省大量空间/内存.
我需要从大约6000万行的数据集中创建一个2000列的数据透视表,大约30-50万行.我尝试在100,000行的块中进行旋转,这是有效的,但是当我尝试通过执行.append()后跟.groupby('someKey').sum()来重新组合DataFrame时,我的所有内存都被占用了和python最终崩溃.
如何利用有限的RAM量对这么大的数据进行调整?
编辑:添加示例代码
下面的代码包括各种测试输出,但最后一个打印是我们真正感兴趣的.请注意,如果我们将segMax更改为3而不是4,则代码将产生正确输出的误报.主要问题是如果一个shipmentid条目不在每个和(wawa)看的块中,它就不会出现在输出中.
import pandas as pd
import numpy as np
import random
from pandas.io.pytables import *
import os
pd.set_option('io.hdf.default_format','table')
# create a small dataframe to simulate the real data.
def loadFrame():
frame = pd.DataFrame()
frame['shipmentid']=[1,2,3,1,2,3,1,2,3] #evenly distributing shipmentid values for testing purposes
frame['qty']= np.random.randint(1,5,9) #random quantity is ok for this test
frame['catid'] = np.random.randint(1,5,9) #random category is ok for this test
return frame
def pivotSegment(segmentNumber,passedFrame):
segmentSize = 3 #take 3 rows at a time
frame = passedFrame[(segmentNumber*segmentSize):(segmentNumber*segmentSize + …
Run Code Online (Sandbox Code Playgroud) 我在使用text_analysis上的Kaggle竞赛中的一些数据,每当我尝试使用我的算法时,我总是会在标题中描述这个相当奇怪的错误.我查了一下,它有一些东西与我的矩阵密集填充非零元素,同时呈现为稀疏矩阵.我认为这个问题在于我的代码中的train_labels,标签由24列组成,开头不常见,标签是0到1之间的浮点数(包括0和1).尽管对问题是什么有一些了解,但我不知道如何正确处理它,而我以前的尝试并没有那么好.你们对我如何解决这个问题有什么建议吗?
码:
import numpy as np
import pandas as p
import nltk
from sklearn.feature_extraction.text import TfidfVectorizer
import os
from sklearn.linear_model import RidgeCV
dir = "C:/Users/Anonymous/Desktop/KAGA FOLDER/Hashtags"
def clean_the_text(data):
alist = []
data = nltk.word_tokenize(data)
for j in data:
alist.append(j.rstrip('\n'))
alist = " ".join(alist)
return alist
def loop_data(data):
for i in range(len(data)):
data[i] = clean_the_text(data[i])
return data
if __name__ == "__main__":
print("loading data")
train_text = loop_data(list(np.array(p.read_csv(os.path.join(dir,"train.csv")))[:,1]))
test_set = loop_data(list(np.array(p.read_csv(os.path.join(dir,"test.csv")))[:,1]))
train_labels = np.array(p.read_csv(os.path.join(dir,"train.csv")))[:,4:]
#Vectorizing
vectorizer = TfidfVectorizer(max_features = 10000,strip_accents = "unicode",analyzer = …
Run Code Online (Sandbox Code Playgroud)