Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用sklearn TF-IDF矢量器进行文本转换会生成过大的csv文件_Python_Csv_Scikit Learn_Text Processing_Tf Idf - Fatal编程技术网

Python 使用sklearn TF-IDF矢量器进行文本转换会生成过大的csv文件

Python 使用sklearn TF-IDF矢量器进行文本转换会生成过大的csv文件,python,csv,scikit-learn,text-processing,tf-idf,Python,Csv,Scikit Learn,Text Processing,Tf Idf,我有1000个文本,每个文本有200-1000个单词。文本csv文件的大小约为10 MB。当我用这段代码对它们进行矢量化时,输出CSV的大小异常大(2.5 GB)。我不确定我做错了什么。非常感谢你的帮助。代码: import numpy as np import pandas as pd from copy import deepcopy import glob from sklearn.feature_extraction.text import TfidfVectorizer from nu

我有1000个文本,每个文本有200-1000个单词。文本csv文件的大小约为10 MB。当我用这段代码对它们进行矢量化时,输出CSV的大小异常大(2.5 GB)。我不确定我做错了什么。非常感谢你的帮助。代码:

import numpy as np
import pandas as pd
from copy import deepcopy
import glob
from sklearn.feature_extraction.text import TfidfVectorizer
from numpy import savetxt
df = pd.read_csv('data.csv')
#data has two columns: teks and groups
filtered_df = deepcopy(df)
vectorizer = TfidfVectorizer()
vectorizer.fit(filtered_df["teks"])
vector = vectorizer.transform(filtered_df["teks"])
print(vector.shape)     # shape (1000, 83000)
savetxt('dataVectorized1.csv', vector.toarray(), delimiter=',')
稀疏矩阵(如此处的
向量
)不应转换为密集矩阵(如使用
.toarray()
)并保存为CSV文件;这样做毫无意义,而且会使稀疏矩阵本身的整个概念失效。有鉴于此,这么大的尺寸并不令人惊讶

<>你应该认真考虑将你的稀疏<代码>矢量< /代码>保存到适当的格式,例如使用:

有关其他可能的选项,请参见

如果出于任何原因,您必须坚持使用CSV文件进行存储,您可以尝试通过在文件名中使用
.gz
扩展名来压缩输出文件;从
np.savetxt()

如果文件名以
.gz
结尾,则该文件将自动以压缩的gzip格式保存
loadtxt
透明地理解gzip文件

因此,这应该起到作用:

np.savetxt('dataVectorized1.csv.gz', vector.toarray(), delimiter=',')
然而,我并不真的建议这样做;请记住:

  • 除了便于教程和介绍性展示之外,CSV文件并不像您可能相信的那样,作为ML任务的输入,实际上并不具有任何“特殊”状态
  • 效率更高的
    .npz
    文件不能用作进一步下游任务(如分类、可视化和聚类)的输入,这绝对是没有原因的;相反,在类似情况下,使用它是非常合理的,并建议使用

  • 在您的两行之后(我不太确定):#方式一:“arr=datavectoried.npz”“arr.tofile('datavectoried.csv',sep=',')”)。#方式二:“arr=np.read(datavectoried.npz)“#将数组转换为数据帧”DF=pd.dataframe(arr)“#将数据框另存为csv文件'DF.to_csv(“dataVetorized.csv”)”@tursunWali不知道您在这里想说什么,也不知道您为什么坚持另存为csv(这不是一个好主意,甚至是必要的);最好省去代码(它在注释中看起来从来都不好)并进行解释?是的,我想保存在CSV文件中。我想将CSV作为其他过程的输入,如分类、聚类、可视化等。@tursunWali请参阅更新的回答我测试了您的解决方案。gz文件的大小大约为17MB,但当我提取压缩文件时,它的真实大小显示为2.78GB,与我用最上面的代码得到的大小相似。我认为这不是一个适当的解决办法。正常大小应该是14MB,我尝试使用TFIDF和另一个python模块。然而,我仍然希望减小输出文件“dataVectorized1”的大小,我认为这种解决方案更透明。
    np.savetxt('dataVectorized1.csv.gz', vector.toarray(), delimiter=',')