Importation de données SAS fichier en python bloc de données
Je suis en train de travailler sur un ensemble de données (PSID) qui donne des données dans un format SAS (un .txt et un autre fichier contenant des instructions pour l'interprétation des données). Je ne trouve rien en Python pour lire ce type de données.
Personne ne sait d'une pré-existant/module de script pour lire les données SAS?
Modifier (ajout d'un commentaire à une réponse): Les données en ascii/texte et le début d'une ligne de données ressemble à ceci:
3 10 1015000 150013200 00 002500 00 00
- Un fichier txt n'est pas un ensemble de données SAS. Ouvrir le fichier et de l'examiner, il est plus probable CSV ou délimité par des tabulations.
- Si je me souviens bien, PSID fichiers de données sont fournis à titre fixe-format des fichiers texte, avec un SAS de données ou de l'étape de Stata fichier dct étant nécessaire pour lire les données et de les assigner les variables et les formats. D'où la nécessité apparente de lire les données dans SAS puis les importer dans Python.
- Me semble que vous pourrait lire en Python directement au lieu de passer par SAS? SAS les données de l'étape de la saisie d'un fichier texte est extrêmement facile à analyser.
- Selon combien de milliers de variables OP sélectionné pour télécharger, il n'est probablement pas quelque chose que vous aimeriez faire à la main. Ne connaissant pas la syntaxe pour lire fixe-format de données en Python, je ne sais pas comment il serait difficile de convertir les données de l'étape de code d'un programme. Je suis sûr que c'est beaucoup plus facile de passer au travers de SAS ou Stata, si elles sont disponibles.
- En passant, j'ai vérifié le PSID site web, et ils donnent aussi la possibilité de télécharger dBase fichier de données si vous avez sélectionné au moins de 1024 variables. Je parie que vous avez pu lire un fichier dBase directement en Python, éliminant la nécessité d'utiliser SAS ou Stata pour lire les fichiers ASCII.
- Malheureusement, ce n'est pas vrai. PSID ne pas fournir une Stata fichier de données (.dta). Il fournit un fixe-format de fichier ASCII avec le logiciel Stata code (.n') pour lire le fichier ASCII dans un .fichier dta. En va de même pour les SAS et SPSS. Vous voir si vous êtes allé tout le chemin à la page de téléchargement.
- désolé, mon mauvais. De ma lecture rapide j'ai pensé PSID était en fait que de fournir une variété de formats que d'autres endroits le font souvent. Donc, si PSID n'est fournie dans le texte/ascii, la meilleure approche de python/les pandas peuvent être
read_csv
ouread_table
si c'est difficile à dire sans voir exactement comment les PSID sorties de données. Aussi, il n'est pas rare pour la 3ème parties à fournir des SAS ou stata ensembles de données de données accessibles au public, bien que je ne pouvais pas trouver que pour PSID. Je serais surpris si ce n'était pas hébergé quelque part, sauf si il y a une raison spécifique, il ne peut pas être fait (comme le PSID les gens de l'interdire) - En effet, votre premier commentaire était juste sur les deux fichiers. Je suis en train de travailler sur la conversion d'un package R, psidR qui construit les panneaux de la première psid ensembles de données, à Python.
- Je n'utilise pas de R, mais je crois que R et les pandas peuvent partager des données via HDF, de sorte que vous pourriez aussi lire dans R, enregistrer sous HDF, puis de les lire que dans les pandas sans qu'il soit besoin pour la traduction d'un code de R pour les pandas.
- Je pense que ce serait la plus practicle de la solution, et je préfère utiliser HDF, mais je voulais écrire un outil qui est entièrement en Python.
Vous devez vous connecter pour publier un commentaire.
À partir de la version 17, les Pandas prend désormais en charge la lecture de fichiers sas avec les .xpt l'extension de fichier. Voir ce lien aux pandas de la documentation pour plus de détails.
Lorsque vous avez l'option de télécharger un SAS dataset vous auront également la possibilité de télécharger un logiciel Stata dataset (c'est effectivement le cas pour PSID btw). Dans ce cas, le plus simple sera probablement à l'importation avec
read_stata
(cela pourrait changer dans l'avenir, mais, je crois, un très précis de la déclaration d'aujourd'hui).Moins pratique, mais presque toujours une option, c'est de télécharger un fichier texte (généralement appelées texte, ascii, csv). Ceux qui ont tendance à provenir de deux types: les délimité par des virgules ou des tabulations), ou séparés par un espace (en colonne ou en tableaux). Si le fichier est par des virgules ou des tabulations, utilisez
read_csv
et de définir le séparateur selon le cas. Si c'est l'espace délimité ou tabulaires, vous pourriez avoir de la chance avec desread_csv
, ou vous pourriez être mieux avecread_fwf
ouread_table
. Dépend un peu sur les types de variables et de mise en forme.De ce que j'ai lu,
sas7bdat
mentionné par @hd1 semble bien fonctionner mais ne fait pas partie des pandas encore. Pour cette raison, j'ai tendance à défaut deread_stata
ouread_csv
mais j'espère quesas7bdat
fonctionne aussi bien et peut-être sera amené dans les pandas dans le futur. Aussi, je m'interroge sur la vitesse desas7bdat
.read_csv
a été assez rapide pour une longue période etread_stata
est très rapide dans les dernières versions (depuis 15.0, je crois). Je ne suis pas sûr de la vitesse desas7bdat
?J'ai donc écrit un package qui permet d'importer les données. Il peut être trouvé ici:
https://pypi.python.org/pypi/psid_py
C'est mon premier paquet, donc désolé pour le travail bâclé. En outre, il n'a été testé contre le PSID ensembles de données et je suis positif qu'il y a des erreurs pour les autres SAS formats. Cependant, quelque chose est mieux que rien.
- Delà de la lecture de données sas, il sera également construire un panel de données pour vous, dans le cas où vous êtes dans ce genre de chose.
Regarder le code SAS que vous obtenez. Vous devez voir qu'il est très régulièrement mises en forme, de sorte que vous pouvez analyser les noms de variables et les colonnes à lire pour ces variables. Par exemple, dans ce papier https://psidonline.isr.umich.edu/Guide/FileStructure.pdf vous pouvez voir que l'instruction d'ENTRÉE est de la forme:
Donc il suffit de lire le programme SAS et de générer le Python approprié pour lire le fichier texte en utilisant les mêmes noms de variables.
Les données est fixe avec le tableau. Fixe avec des moyens que, par exemple, la 3ème valeur commence dans chaque ligne, lors de la 15e lettre et va jusqu'au 114 lettre.
1.Ouvrez votre SAS ou SPSS instruction d'entrée. Dans le cas de SAS, vous trouverez quelque chose comme ceci:
le chiffre de gauche correspond à la colonne (en nombre de lettres, où la fonction de valeur)
2.Dans le script ci-dessous, remplissez les colonnes, la première est le nom de la colonne seconde le tuple est la première et la colonne de la première et de la dernière lettre/numéro de la variable. NOTEZ QUE SAS commence à compter à 1 et python à 0.
//pd.read_fwf est le fixe avec lecteur de pandas.