有没有办法将SPSS数据集导入Python,最好是NumPy rearray格式? 我环顾四周但找不到任何答案。
俊
SPSS 与 Python 进行了广泛的集成,但这意味着与 SPSS(现在称为 IBM SPSS Statistics)一起使用。有一个 SPSS ODBC 驱动程序,可以与 Python ODBC 支持一起使用来读取 sav 文件。
选项1 正如 rkbarney 指出的那样,可以通过 pypi 使用 Python savReaderWriter。我遇到了两个问题:
选项2 我选择使用 R 作为中间人。使用 rpy2,我设置了一个简单的函数来将文件读入 R 数据帧,并将其再次输出为 CSV 文件,随后将其导入到 python 中。这有点像鲁布-戈德堡,但确实有效。当然,这需要 R,这在您的环境中安装可能也很麻烦(并且针对不同平台有不同的二进制文件)。
您可以让 Python 对 spssread 进行外部调用,这是一个 Perl 脚本,可以按照您想要的方式输出 SPSS 文件的内容。
也许这会有所帮助: 用于 spss sav 文件的 Python 读取器 + 写入器(Linux、Mac 和 Windows) http://code.activestate.com/recipes/577811-python-reader-writer-for-spss-sav-files-linux-mac-/
需要明确的是,SPSS ODBC 驱动程序不需要安装 SPSS。
如果我有代码,我很难找出如何在 google Coolab 中使用 SPDS: 将 pandas 导入为 pd 将 numpy 导入为 np 从 pandas 导入 DataFrame 从 sklearn.feature_extraction.text 导入 TfidfVectorizer
导入nltk 从 nltk.corpus 导入停用词 导入javalang
“从解析器导入解析器” “从分词器导入分词器” stop_words = [';', '@', '(', ')', '{', '}', '*', ',', '/']
类解析器: slots = ['name'] # 更快的属性访问
def __init__(self, name): # Constructor
self.name = name
def pre_processing(self): # pre-processing function
AST = None
src = open(self.name, 'r')
# loop to parse each source code
for x in range(1):
src = src.read()
attributes = []
variables = []
# Source parsing
try:
AST = javalang.parse.parse(src) # This will return AST
for path, node in AST: # Index, Element
if 'ReferenceType' != node:
AST.remove(node)
print(node, "\n")
# print(path,"\n")
except:
pass
vectorizer = TfidfVectorizer(stop_words='english') # Create the vectorize/transform
vectorizer.fit([str(AST)]) # Learns vocab " CompilationUnit, Imports, path, static, true, util, io "
print('---------------------------check 2----------------------------------')
print(vectorizer.vocabulary_)
print("STOPPPPING WORDS", vectorizer.get_stop_words())
vector = vectorizer.transform([str(AST)]) # transform document to matrix
print(vector)
print('---------------------check 3-------------------------------------------------------------')
a = np.array(vector.toarray())
print(a)
print('---------------------check 4-------------------------------------------------------------')
df = DataFrame(a)
print(df)
# print("Features")
# print(vectorizer.get_feature_names())
df.to_csv('featuresExtraction.csv', mode='a', header=False, index=False)
if name == 'main': parser = Parser('') # 创建类解析器的对象
filesNames = pd.read_csv('defectprediction.csv') # Read all files names
path = filesNames.iloc[:, 1] # select column 1, all rows
filesNames = filesNames.iloc[:, 0] # select column 0, rows from 0 to length
filesNames = np.array(filesNames) # Convert to numpy array
path = np.array(path) # Convert to numpy array
foundsrc = 0
notdound = 0
fileNum = 1
for i in range(path.shape[0]):
fileNum+=1
#print("CURRENT\m")
#print(filesNames[i]," File number: ", fileNum)
try:
fh = open(path[i] + ".java", 'r')
foundsrc += 1 # Increment found counter
parser = Parser(path[i] + ".java")
parser.pre_processing()
except FileNotFoundError:
notdound += 1 # Increment not found counter
data = {'Name': [filesNames[i]],
'Path': [path[i]],
'Status': ['NotFound']}
df = DataFrame(data) # add them to data frame
df.to_csv('NotFoundDefectPrediction.csv', mode='a', index=False, header=False) # Write missing files in csv
print("\n\nfound\t\t", foundsrc)
print("notfound\t", notdound)