Sweave pour python

J'ai récemment commencé à utiliser Sweave * pour créer des rapports d'analyses exécutées avec R, et je cherche maintenant à faire la même chose avec mes scripts python.

J'ai trouvé des références à intégrer python dans Sweave docs, mais cela semble être un peu un hack. Quelqu'un a-t-il élaboré une meilleure solution, ou y a-t-il un équivalent pour python dont je ne suis pas au courant?

* Sweave est un outil qui permet d'intégrer le code R pour des analyses de données complètes dans des documents latex

27
demandé sur mdsumner 2010-01-29 13:03:56

10 réponses

Je ne crois pas qu'il y ait un équivalent direct, donc la suggestion de Romain Francois (dans votre lien) est probablement la meilleure. Vous pouvez également considérer ce qui suit:

  1. jetez un oeil à PyLit et PyReport {[5] } qui sont destinés à la programmation alphabétisée avec Python.
  2. Sphinx est idéal pour documenter avec python, et peut produire LaTex.
  3. Voici une liste d'outils pour la programmation alphabétisée . Certains d'entre eux fonctionnent avec n'importe quel langage de programmation.
18
répondu Shane 2010-01-29 13:17:13

J'ai écrit une implémentation Python de Sweave appelée Pweave qui implémente les fonctionnalités de base et certaines options de Sweave pour le code Python intégré dans le document reST ou Latex. Vous pouvez l'obtenir ici: http://mpastell.com/pweave et voir le blog original ici: http://mpastell.com/2010/03/03/pweave-sweave-for-python/

23
répondu Matti Pastell 2010-03-11 09:49:08

Dexy est un produit très semblable à Sweave. Un avantage de Dexy est qu'il n'est pas exclusif à une seule langue. Vous pouvez créer un document Lexy qui comprenait du code R, du code Python ou autre chose.

15
répondu JD Long 2011-11-09 18:39:44

C'est un peu tard, mais pour référence future, vous pouvez considérer mon paquet PythonTeX Pour LaTeX. PythonTeX vous permet d'entrer du code Python dans un document LaTeX, de l'exécuter et de ramener la sortie. Mais contrairement à Sweave, le document que vous modifiez est valide .tex document (et non pas .Snw ou .Rnw), donc l'édition de la partie non-code du document est rapide et pratique.

PythonTeX fournit de nombreuses fonctionnalités, y compris les suivantes:

  • le document peut être compilé sans exécution de tout code Python; le code ne doit être exécuté que lorsqu'il est modifié.
  • toutes les sorties Python sont enregistrées ou mises en cache.
  • le Code s'exécute dans des sessions définies par l'utilisateur. S'il y a plusieurs sessions, les sessions s'exécutent automatiquement en parallèle en utilisant tous les cœurs disponibles.
  • les Erreurs et les avertissements sont synchronisés avec les numéros de ligne de la .document tex, donc vous savez exactement d'où ils viennent.
  • le Code peut être exécuté, typeset ou typeset et exécuté. La coloration syntaxique est fourni par Pygments.
  • Tout ce qui est imprimé par Python est automatiquement introduit dans le .document tex.
  • , Vous pouvez personnaliser lorsque le code est ré-exécuté (modifié, erreurs, avertissements, etc.).
  • La classe pythontex utilities est disponible dans tout le code exécuté. Il vous permet de suivre automatiquement les dépendances et spécifier les fichiers créés doivent être nettoyées. Par exemple, vous pouvez définir le document pour détecter quand les données dont il dépend sont modifiées, de sorte que le code sera ré-exécuté.

Un fichier pythontex de base ressemble à ceci:

\documentclass{article}
\usepackage{pythontex}

\begin{document}

\begin{pycode}
#Whatever you want here!
\end{pycode}

\end{document}
8
répondu G. Poore 2013-01-23 02:55:58

Vous pourriez envisager noweb, qui est indépendant de la langue et est la base de Sweave. Je l'ai utilisé pour Python et cela fonctionne bien.

Http://www.cs.tufts.edu/~nr/noweb/

5
répondu John Horton 2010-03-04 01:39:36

J'ai un peu restructuré le Pweave de Matti, de sorte qu'il est possible de définir des "processeurs de blocs" arbitraires en tant que modules de plugin. Cela facilite l'extension pour plusieurs applications de prétraitement de texte basées sur des blocs. La version restructurée est disponible sur https://bitbucket.org/edgimar/pweave/src . par exemple, vous pouvez écrire le document LaTeX-Pweave suivant (notez que le" nom du processeur " dans cet exemple est spécifié avec le nom 'mplfig'):

\documentclass[a4paper]{article}
\usepackage{graphicx}
\begin{document}
\title{Test document}
\maketitle

Don't miss the great information in Figure \ref{myfig}!


<<p=mplfig, label=myfig, caption = "Figure caption...">>=
import sys
import pylab as pl

pl.plot([1,2,3,4,5],['2,4,6,8,10'], 'b.', markersize=15)
pl.axis('scaled')
pl.axis([-3,3, -3,3]) # [xmin,xmax, ymin,ymax]
@

\end{document}
4
répondu Mark 2011-02-01 21:50:37

Vous pouvez essayer SageTeX qui implémente des fonctionnalités de type Sweave pour la plate-forme de mathématiques SAGE. Je n'ai pas joué avec autant que je le voudrais, mais SAGE est fondamentalement un shell python et évalue python comme sa langue maternelle.

3
répondu Sharpie 2010-02-01 05:32:43

J'ai aussi pensé à la même chose plusieurs fois. Après avoir lu vos questions et regardé dans votre lien, j'ai fait de petites modifications au pilote Python Sweave personnalisé, que vous liez. Je l'ai modifié pour conserver également le code source et produire la sortie de la même manière que Sweave pour R.

, j'ai posté la version modifiée, et un exemple ici: http://mpastell.com/2010/02/09/python-in-sweave-document/

Certes, ce n'est pas optimal mais je suis plutôt content avec la sortie et j'apprécie la possibilité d'inclure à la fois R et Python dans le même document.

Modifier à propos de PyLit :

J'aime aussi plit et contrairement à ma réponse originale, vous pouvez attraper ouput avec elle aussi, bien que ce ne soit pas aussi élégant que Sweave! Voici un petit exemple comment le faire:

import sys

# Catch PyLit output

a = range(3)
sys.stdout = open('output.txt', 'w')
print a
sys.stdout = sys.__stdout__

# .. include:: output.txt
3
répondu Matti Pastell 2010-02-10 15:53:09

Ce que vous cherchez est réalisé avec GNU Emacs et org-mode - *. org-mode fait loin plus que ce qui peut être détaillé dans une seule réponse, mais les points pertinents sont:

  • Prise en charge de la programmation alphabétisée avec la possibilité d'intégrer plusieurs langues dans le même document (y compris en utilisant les résultats d'une langue comme entrée pour une autre langue).
  • intégration graphique.
  • Exporter vers LaTeX, HTML, PDF et une variété d'autres formats nativement, générant automatiquement le balisage (mais vous pouvez le faire manuellement, aussi).
  • Tout est 100% personnalisable , vous permettant d'adapter l'éditeur à vos besoins.

Je N'ai pas Python installé sur mon système, mais voici un exemple de deux langages différents exécutés dans la même session. L'extrait est modifié du merveilleux tutoriel org-mode R d'Erik Iverson qui explique la mise en place et l'utilisation efficace de org-mode pour les lettrés les tâches de programmation. Cette présentation SciPy 2013 montre comment org-mode peut être intégré dans un workflow (et utilise Python).

entrez la description de l'image ici

Emacs peut sembler intimidant. Mais pour les statistiques / la science des données, il offre d'énormes capacités qui ne sont offertes nulle part ailleurs ou qui sont réparties sur divers systèmes. Emacs vous permet de les intégrer tous dans une seule interface. Je pense que Daniel Gopar le dit le mieux dans son tutoriel Emacs ,

Vous êtes si paresseux? Je veux dire, allez, lis le tutoriel, mec.

Une heure environ avec le tutoriel Emacs ouvre la porte à des outils extrêmement puissants.

* Emacs est livré avec org-mode. Aucune installation séparée n'est requise.

2
répondu Lorem Ipsum 2017-05-29 16:05:23

Eh bien, avec reticulate qui est une implémentation récente d'une interface Python dans R, Vous pouvez continuer à utiliser Sweave et appeler Python inline en utilisant L'interpréteur R. Par exemple, cela fonctionne maintenant dans un .Rnw ou .Mdm démarque de fichier.

```{r example, include=FALSE}
library(reticulate)
use_python("./dir/python")
```

```{python}
import pandas
data = pandas.read_csv("./data.csv")
print(data.head())
```
0
répondu Oliver 2018-08-08 17:14:52