Есть ли модуль Python для открытия файлов SPSS?

Есть ли модуль для Python для открытия файлов IBM SPSS (например .sav)? Было бы здорово, если бы что-то обновленное, которое не требует каких-либо дополнительных DLL файлов/библиотек.

Ответы

Ответ 1

В зависимости от того, что вы хотите сделать - обрабатывайте данные с помощью R-связанных команд из rpy2 или переключитесь на Python-- решение, предоставленное @Spacedman в соответствующем потоке, может быть легко адаптировано в соответствии с вашими потребностями.

В противном случае Pandas включает удобную оболочку для rpy2. Вот пример использования с массивом Peat и Barton weights.sav:

>>> import pandas.rpy.common as com
>>> filename = "weights.sav"
>>> w = com.robj.r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename)
>>> w = com.convert_robj(w)
>>> w.head()
     ID  WEIGHT  LENGTH  HEADC  GENDER  EDUCATIO              PARITY
1  L001    3.95    55.5   37.5  Female  tertiary  3 or more siblings
2  L003    4.63    57.0   38.5  Female  tertiary           Singleton
3  L004    4.75    56.0   38.5    Male    year12          2 siblings
4  L005    3.92    56.0   39.0    Male  tertiary         One sibling
5  L006    4.56    55.0   39.5    Male    year10          2 siblings

Ответ 2

В качестве примечания для выводов для людей позже (например, я): pandas.rpy устарел в новейших версиях pandas ( > 0,16), как указано . Эта страница содержит информацию об обновлении кода для использования интерфейса rpy2.

Ответ 3

Но преимущество использования библиотек IBM заключается в том, что они получают этот довольно сложный формат двоичного файла. Они бесплатны, освобождают вас от бремени написания кода для этого формата, и лицензия позволяет вам перераспределять их. Что еще вы можете спросить?

Ответ 4

Здесь вы, вероятно, интересуетесь пакетами

Ответ 5

У меня был тот же вопрос, что и @Pyderman о том, как обновить его для pandas ( > 0.16). Вот что я придумал:

from rpy2.robjects import pandas2ri, r
filename = 'weights.sav'
w = r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename)
df = pandas2ri.ri2py(w)
df.head()

Ответ 7

Вы можете использовать интерфейс python для R, а затем импортировать данные с помощью read.spss в library(foreign).