在没有 SPSS 许可证的情况下从 Python、Java(groovy/grails)或 C++ 应用程序访问 SPSS 数据?
Posted
技术标签:
【中文标题】在没有 SPSS 许可证的情况下从 Python、Java(groovy/grails)或 C++ 应用程序访问 SPSS 数据?【英文标题】:Access SPSS data from a Python, Java (groovy/grails)' or C++ app without license for SPSS? 【发布时间】:2011-10-08 05:30:00 【问题描述】:我在谷歌搜索中发现了混合的结果。我需要解析 SPSS .sav 文件以发现数据布局并提取调查结果。第一步是读取数据的“模式”。例如,我需要知道问题及其允许回答的类型。我计划在我自己的 SQL 表中对这些数据进行建模,这样我就可以根据我的应用程序要求对其进行切片和切块。第二步是用受访者的答案填充我的数据模型。查看 SPSS sav 文件,我相信它具有我正在寻找的两种类型的数据。
如果我不严格要求,我不需要也不想要昂贵的 SPSS 软件。我们不会对这些数据进行统计,只是根据答案过滤器选择受访者的子集。 SPSS 文件将由获得 SPSS 许可的合作伙伴公司提供。我不需要将任何数据输出回 SPSS;我的用例是只读的。
我可以在我的解析器程序中使用 Python、带有或不带有 Groovy 的 Java、C/C++。该程序将在数据收集结束时运行一次,因此性能并不是特别重要。理想情况下,我希望我的代码是跨平台的,这样我就可以在我的 Mac 上开发并部署到 Linux,但如果必须,我可以使用 windows,
我发现的很多东西要么是 2004 年的 java 类,要么是需要 IBM 的 DLL 且特定于 Windows 的现代 Python 代码。根据我对需求的快速解释,我将感谢 SO 社区的建议。我认为我的需求很简单,但还没有找到我所希望的。一个开源库是理想的,但我什至愿意以合理的价格购买一个简单的商业解决方案。
【问题讨论】:
【参考方案1】:您可以免费获得带有详细文档的 SPSS i/o 模块,以便构建您自己的应用程序来读取(或写入)sav 文件。这些模块适用于 SPSS Statistics 支持的所有平台。
转到http://www.ibm.com/developerworks/spssdevcentral 的 SPSS 社区站点,然后点击 SPSS 下载链接。您必须注册,但这是免费的。
SAV 文件是一种具有许多复杂结构的二进制格式,因此最好使用 i/o 模块。而且,如果向 SAV 文件添加新功能(这种情况经常发生),则 i/o 模块会同时更新,因此您的代码不会过时。
HTH, 乔恩·派克
【讨论】:
【参考方案2】:GNU PSPP 显然可以读取 SPSS 数据文件。我还在 PSPP 源代码中 found 一个指向 a description of the format 的链接,尽管它带有警告“不要尝试直接读/写这种格式。”
【讨论】:
谢谢。我现在正在下载那个。我在谷歌搜索中看到了这一点,但希望只是一个能让我从 Python 访问的库。但是如果有必要,我非常愿意用 C 语言编写我的解析器,这是一个合理的地方。我会在继续为 Python 或 Java 寻找更小的组件的同时检查这一点。 Wikipedia says 确实可以通过库使用某些 PSPP 功能,并且由于存在显然可以读取系统文件的Perl wrapper,因此至少原则上应该可以创建Python 的类似包装器。或者,您也许可以编写一个 PSPP 脚本来读取数据并以更易于管理的格式输出,然后以非交互方式调用它。 到目前为止,我最好的选择似乎是 code.activestate.com/recipes/… 。我今天要试试。唯一令人沮丧的是窗口依赖,所以我一直在尝试其他解决方案。似乎也有可用的 ODBC 驱动程序。所以似乎有选择。仍然愿意接受以前这样做过的人的更多想法或建议。【参考方案3】:这里有一个java库:
http://sourceforge.net/projects/spss-writer/
【讨论】:
以上是关于在没有 SPSS 许可证的情况下从 Python、Java(groovy/grails)或 C++ 应用程序访问 SPSS 数据?的主要内容,如果未能解决你的问题,请参考以下文章
在没有提示的情况下从 python-fabric 重置 mysql root 密码
如何在没有授权令牌的情况下从 python 脚本查询 google-bigquery 中的私有表?
是否可以在没有 OAuth2 身份验证对话框的情况下从 Google App-Engine (python) 连接和查询 BigQuery 表?