سؤال

لقد بدأت مؤخرًا باستخدام سيف* لإنشاء تقارير عن التحليلات التي يتم تشغيلها مع R ، وأنا الآن أتطلع إلى فعل الشيء نفسه مع البرامج النصية Python الخاصة بي.

لقد وجدت إشارات إلى تضمين الثعبان في Sweave مستندات ، ولكن هذا يبدو وكأنه جزء من الاختراق. هل قام أي شخص بحل حلاً أفضل ، أم أن هناك ما يعادل بيثون لست على علم به؟

* Sweave هي أداة تسمح بتضمين رمز R لتحليل البيانات الكامل في مستندات LaTeX

هل كانت مفيدة؟

المحلول

لا أعتقد أن هناك ما يعادلها مباشرة ، لذا فإن اقتراح رومان فرانسوا (في رابطك) ربما يكون الأفضل. قد ترغب أيضًا في النظر في ما يلي:

  1. القي نظرة على بليت و Pyreport والتي هي مخصصة للبرمجة القراءة والكتابة مع بيثون.
  2. أبو الهول أمر رائع للتوثيق مع بيثون ، ويمكن أن يخرج اللاتكس.
  3. هنا قائمة أدوات البرمجة القراءة والكتابة. بعض هذه تعمل مع أي لغة برمجة.

نصائح أخرى

لقد كتبت تنفيذ Python من Sweave يسمى Pweave الذي ينفذ الوظائف الأساسية وبعض خيارات Sweave لرمز Python المضمن في المستند الراحة أو اللاتكس. يمكنك الحصول عليه هنا: http://mpastell.com/pweave وشاهد منشور المدونة الأصلي هنا: http://mpastell.com/2010/03/03/pweave-sweave-for-python/

ديكسي هو منتج مشابه جدا لتجول. ميزة واحدة من Dexy هي أنها ليست حصرية بلغة واحدة. يمكنك إنشاء مستند Dexy الذي يتضمن رمز R ، أو رمز Python ، أو أي شيء آخر.

هذا متأخر بعض الشيء ، لكن للرجوع إليه في المستقبل ، قد تفكر في بيثونتكس حزمة LATEX. يتيح لك Pythontex إدخال رمز Python في مستند LaTex ، وتشغيله ، وإعادة الإخراج. ولكن على عكس Sweave ، فإن المستند الذي تحريره فعليًا هو مستند .TEX صالح (وليس .snw أو .rnw) ، لذا فإن تحرير الجزء غير الرمز من المستند سريع ومريح.

يوفر Pythontex العديد من الميزات ، بما في ذلك ما يلي:

  • يمكن تجميع المستند دون تشغيل أي رمز بيثون ؛ الرمز يحتاج فقط إلى تنفيذه عند تعديله.
  • يتم حفظ جميع الإخراج Python أو تخزين مؤقت.
  • يتم تشغيل التعليمات البرمجية في جلسات محددة من قبل المستخدم. إذا كانت هناك جلسات متعددة ، فإن الجلسات تعمل تلقائيًا بالتوازي باستخدام جميع النوى المتاحة.
  • تتم مزامنة الأخطاء والتحذيرات مع أرقام خط الوثيقة .tex ، حتى تعرف بالضبط من أين أتوا.
  • يمكن تنفيذ التعليمات البرمجية أو نوعها أو نوعها وتنفيذها. يتم توفير تمييز بناء الجملة بواسطة Pygments.
  • يتم إحضار أي شيء طبعه Python تلقائيًا إلى وثيقة .tex.
  • يمكنك التخصيص عند إعادة تنفيذ التعليمات البرمجية (تعديل ، أخطاء ، تحذيرات ، إلخ).
  • تتوفر فئة Pythontex Utilities في جميع التعليمات البرمجية التي يتم تنفيذها. يسمح لك بتتبع التبعيات تلقائيًا وتحديد الملفات التي يجب تنظيفها. على سبيل المثال ، يمكنك تعيين المستند لاكتشاف متى يتم تعديل البيانات التي تعتمد عليها ، بحيث يتم إعادة تنفيذ الكود.

يبدو ملف Pythontex الأساسي مثل هذا:

\documentclass{article}
\usepackage{pythontex}

\begin{document}

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

\end{document}

قد تفكر في Noweb ، وهي اللغة المستقلة وهي أساس Sweave. لقد استخدمته لبيثون وهو يعمل بشكل جيد.

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

لقد قمت بإعادة هيكلة Matti's Pweave قليلاً ، بحيث يكون من الممكن تحديد "المعالجات القطنية" التعسفية كوحدات إضافية. هذا يجعل من السهل تمديد العديد من تطبيقات المعالجة النصية المستندة إلى قطعة. النسخة المعاد هيكلتها متوفرة في https://bitbucket.org/edgimar/pweave/src. على سبيل المثال ، يمكنك كتابة مستند LaTex-Pove التالي (لاحظ أن "اسم المعالج" في هذا المثال محدد باسم "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}

بامكانك ان تحاول ساجيتكس الذي ينفذ وظائف تشبه sweave ل المريمية منصة الرياضيات. لم ألعب معها بقدر ما أرغب في ذلك ، لكن Sage هي في الأساس قذيفة Python وتقييم Python كما هي اللغة الأم.

لقد فكرت أيضًا في نفس الشيء عدة مرات. بعد قراءة أسئلتك والنظر في الرابط الخاص بك ، قمت بإجراء تعديلات صغيرة على برنامج تشغيل Python Sweave المخصص ، الذي ترتبط به. لقد قمت بتعديله للحفاظ على الكود المصدري وإنتاج الإخراج وكذلك نفس الطريقة التي يعمل بها Sweave لـ R.

لقد نشرت النسخة المعدلة ومثال هنا: http://mpastell.com/2010/02/09/python-in-sweave-document/

منحت ، إنها ليست مثالية ، لكنني سعيد جدًا بالإخراج وأحب القدرة على تضمين كل من R و Python في نفس المستند.

تحرير حول Pylit:

أنا أيضًا أحب Pylit وعلى عكس إجابتي الأصلية ، يمكنك التقاط Ouput معها أيضًا ، على الرغم من أنها ليست أنيقة مثل Sweave! فيما يلي مثال صغير على كيفية القيام بذلك:

import sys

# Catch PyLit output

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

# .. include:: output.txt

ما تبحث عنه يتحقق مع GNU emacs و وضع ORG*. org-mode يفعل بعيد أكثر مما يمكن تفصيله في استجابة واحدة ، ولكن النقاط ذات الصلة هي:

  • دعم البرمجة القراءة والكتابة مع القدرة على دمج لغات متعددة في نفس المستند (بما في ذلك استخدام نتائج لغة ما كمدخلات للغة أخرى).
  • تكامل الرسومات.
  • التصدير إلى اللاتكس ، HTML ، PDF ، ومجموعة متنوعة من التنسيقات الأخرى أصلاً ، تلقائيًا توليد العلامات (ولكن يمكنك القيام بذلك يدويًا أيضًا).
  • كل شيء 100 ٪ قابلة للتخصيص, ، مما يسمح لك بتكييف المحرر مع احتياجاتك.

ليس لدي Python مثبتة على نظامي ، ولكن فيما يلي مثال على لغتين مختلفتين يتم تشغيلهما في نفس الجلسة. يتم تعديل المقتطف من الرائع تعليمي ORG-mode r بقلم إريك إيفرسون الذي يفسر الإعداد والاستخدام الفعال لـ org-mode لمهام البرمجة القراءة والكتابة. هذه عرض Scipy 2013 يوضح كيف org-mode يمكن دمجها في سير العمل (ويحدث لاستخدام Python).

enter image description here

قد يبدو emacs مخيفًا. ولكن بالنسبة للإحصاءات/علوم البيانات ، فإنه يوفر قدرات هائلة لا يتم تقديمها في أي مكان آخر أو تنتشر عبر أنظمة مختلفة. يتيح لك Emacs دمجها جميعًا في واجهة واحدة. أعتقد أن دانيال جوبار يقول أنه من الأفضل في كتابه EMACS البرنامج التعليمي,

هل أنتم يا رفاق كسول؟ أعني ، هيا ، فقط اقرأ البرنامج التعليمي يا رجل.

ساعة أو نحو ذلك مع تعليمي EMACS يفتح الباب لبعض الأدوات القوية للغاية.

* يأتي emacs مع org-mode. لا يلزم تثبيت منفصل.

جيد مع شبكي وهو أفضل تنفيذ حديث لواجهة Python في R ، يمكنك متابعة استخدام Sweave واتصال Python Imment باستخدام مترجم R. على سبيل المثال ، يعمل هذا الآن في ملف Markdown أو .rmd.

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

```{python}
import pandas
data = pandas.read_csv("./data.csv")
print(data.head())
```
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top