Как использовать файл метаданных .SAS или SPS для чтения CSV как кадра данных Pandas? - PullRequest
4 голосов
/ 24 октября 2019

У меня большой файл CSV, и он поставляется с двумя файлами описания метаданных. Один имеет расширение .sas, а другой - .sps. Открывая их, они описывают формат данных CSV и категории. Файлы описывают формат данных и возможные категории каждого столбца. Например, столбец со значениями 1 или 2 отображается на да и нет .

Как я могу использовать эти файлы метаданных, чтобы помочь мне прочитатьФайл CSV?

Я легко могу прочитать его, используя read_csv, но эти файлы полезны для автоматического создания моих столбцов с возможными категориями. Я могу создать для них парсер, но для этого должен быть пакет или функция. Возможно я не использую правильные условия поиска.

Вот файл .sas (извините, это португальский):

proc format;
Value $SG_AREA
        CH='Ciךncias Humanas'
        CN='Ciךncias da Natureza'
        LC='Linguagens e Cףdigos'
        MT='Matemבtica';

Value $TP_LINGUA
        0='Inglךs'
        1='Espanhol';

Value $IN_ITEM_ADAPTADO
        0='Nדo'
        1='Sim';


DATA WORK.ITENS_2018;
INFILE 'C:\ITENS_PROVA_2018.csv' /*local do arquivo*/
        LRECL=33
        FIRSTOBS=2
        DLM=';'
        MISSOVER
        DSD ;

INPUT
        CO_POSICAO       : BEST2.
        SG_AREA          : $CHAR2.
        CO_ITEM          : BEST6.
        TX_GABARITO      : $CHAR1.
        CO_HABILIDADE    : BEST2.
        TX_COR           : $CHAR7.
        CO_PROVA         : BEST3.
        TP_LINGUA        : $CHAR1.
        IN_ITEM_ADAPTADO : $CHAR1. ;

ATTRIB  SG_AREA          FORMAT = $SG_AREA20.;         
ATTRIB  TP_LINGUA        FORMAT = $TP_LINGUA8.;       
ATTRIB  IN_ITEM_ADAPTADO FORMAT = $IN_ITEM_ADAPTADO3.;

LABEL
CO_POSICAO='Posiחדo do Item na Prova'
SG_AREA='ֱrea de Conhecimento do Item'
CO_ITEM='Cףdigo do Item'
TX_GABARITO='Gabarito do Item'
CO_HABILIDADE='Habilidade do Item'
TX_COR='Cor da Prova'
CO_PROVA='Identificador da Prova'
TP_LINGUA='Lםngua Estrangeira '
IN_ITEM_ADAPTADO='Item pertencente א prova adaptada para Ledor'

;RUN;

И здесь вы можете увидеть эквивалентный файл .sps:

GET DATA
  /TYPE=TXT
  /FILE= "C:\ITENS_PROVA_2018.csv" /*local do arquivo*/ 
  /DELCASE=LINE
  /DELIMITERS=";"
  /ARRANGEMENT=DELIMITED
  /FIRSTCASE=2
  /IMPORTCASE= ALL
  /VARIABLES=
CO_POSICAO F2.0
SG_AREA A2
CO_ITEM F6.0
TX_GABARITO A1
CO_HABILIDADE F2.0
TX_COR A7
CO_PROVA F3.0
TP_LINGUA A1       
IN_ITEM_ADAPTADO A1.
CACHE.
EXECUTE.
DATASET NAME ITENS_18 WINDOW=FRONT.

VARIABLE LABELS
CO_POSICAO  Posiחדo do Item na Prova
SG_AREA     ֱrea de Conhecimento do Item
CO_ITEM     Cףdigo do Item
TX_GABARITO Gabarito do Item
CO_HABILIDADE   Habilidade do Item
TX_COR      Cor da Prova
CO_PROVA    Identificador da Prova
TP_LINGUA       Lםngua Estrangeira
IN_ITEM_ADAPTADO    Item pertencente א prova adaptada para Ledor.


VALUE LABELS
SG_AREA
        "CH"    Ciךncias Humanas
        "CN"    Ciךncias da Natureza
        "LC"    Linguagens e Cףdigos
        "MT"    Matemבtica
/TP_LINGUA
        0   Inglךs
        1   Espanhol
/IN_ITEM_ADAPTADO
        0   Nדo
        1   Sim.

Вы можете видеть, что они описывают метаданные для каждого столбца.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

.sas - это расширение файла программы для SAS, предназначенное для использования через SAS. По сути, это командный файл, служащий в качестве файла словаря.

.sps - это расширение файла программы для SPSS, предназначенное для использования через SPSS. По сути, это командный файл, служащий файлом словаря. Я бы также дал здесь удобную ссылку, но SPSS - это продукт IBM, а их документация - адский пейзаж, который никто не должен наступать.

Несмотря на это, то, что вы пытаетесь сделать, должно быть возможным. Панд сам по себе недостаточно, поскольку в нем нет встроенных функций для решения этих ситуаций. Поддержка Pandas для SAS распространяется только на файлы данных .sas7bdat, а для SPSS распространяется только на файлы данных .sav.

Python (и Pandas) могут читать расширения .sas и .sps, поскольку они представляют собой текстовые файлы, но на самом деле ничего не могу с ними сделать.


Вот два пути, чтобы получить то, что вам нужно.

1) Установите SAS или SPSS на пробную версию, используйте ее для чтения данных и затем экспортируйтев альтернативном формате.

2) Установите и попытайтесь использовать расширение pyreadstat для Pandas.

Звучит так, как будто вы предпочитаете фреймворк pandas, и для того, чтобы это работало, вам нужно расширить возможности. В этом случае с расширением pyreadstat . Он предназначен для работы с файлами данных SAS и SPSS и обрабатывает их гораздо эффективнее, чем панды. Это решение поставляется с оговоркой.

Pyreadstat сам по себе является преобразованием ReadStat. Цитирование файла readme pyreadstat:

This module is a wrapper around the excellent Readstat C library by Evan Miller. 
Readstat is the library used in the back of the R library Haven, 
meaning pyreadstat is a python equivalent to R Haven.

Если вы посмотрите только на файлы pyreadstat, вы не найдете ничего касающегося файлов .sas или .sps или словаря в целом. Вместо этого вам нужно посмотреть readme для ReadStat, найденного здесь . В нем есть раздел, специально посвященный таким обстоятельствам.

На данный момент я не тестировал команды и функции ReadStat, которые существуют для файлов словарей в pyreadstat, поэтому есть вероятность, что это не будет работать.

Если вы попробуете это решение, и оно вам не поможет, проследите за обсуждением, и я помогу вам устранить неполадки.

0 голосов
/ 30 октября 2019

Чистым способом было бы экспортировать данные SAS как файлы формата XPORT или SAS7BDAT.

После этого вы можете использовать функцию панд pandas.read_sas:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_sas.html

Импортировать numpy как np Импортировать pandas как pd

df = pd.read_sas('test.sas7bdat')

Если у вас есть большие файлы, которые вы можете использовать, тогда параметр chunksize позволяет читать только x строк файла за раз, возвращает итератор. Или вы можете использовать параметр iterator, чтобы возвращать итератор для считывания файла постепенно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...