programing

주피터 노트북에서 마크다운 출력을 프로그래밍 방식으로 생성하는 방법은 무엇입니까?

stoneblock 2023. 7. 18. 21:28

주피터 노트북에서 마크다운 출력을 프로그래밍 방식으로 생성하는 방법은 무엇입니까?

저는 주피터 노트에 수업 보고서를 쓰고 싶습니다.저는 몇 가지를 세고, 몇 가지 결과를 생성하여 가격 인하에 포함시키고 싶습니다.셀 출력을 마크다운으로 해석하도록 설정할 수 있습니까?
다음과 같은 명령이 필요합니다.print '$\phi$'마크다운에서처럼 파이 기호를 생성합니다.
즉, 저는 마크다운 방식으로 템플릿을 만들고 노트북에 프로그램에서 생성된 값을 삽입하고 싶습니다.노트북을 다시 계산하면 새 결과가 생성되고 새 값이 삽입된 새 마크다운이 생성됩니다.이 소프트웨어로 가능한가요, 아니면 직접 값을 교체해야 하나요?

원하는 기능은 IPython.display 모듈에 있습니다.

from IPython.display import display, Markdown, Latex
display(Markdown('*some markdown* $\phi$'))
# If you particularly want to display maths, this is more direct:
display(Latex('\phi'))

당신은 기본적으로 두 가지 다른 것을 요구하고 있습니다.

  1. 코드 결과를 출력하는 셀을 표시합니다.

    몇 가지 항목을 세고, 몇 가지 결과를 생성하여 마크다운에 포함시키고 싶습니다. [...] 템플릿을 마크다운으로 만들고 프로그램에서 생성한 값을 노트북에 삽입하고 싶습니다.

  2. 마크다운을 출력하는 코드 셀

    다음과 같은 명령이 필요합니다.print '$\phi$'마크다운에서처럼 파이 기호를 생성합니다.

2.는 이미 다른 답변에 포함되어 있으므로(기본적으로: 사용)Latex()또는Markdown()에서 가져온.IPython.display), 첫 번째 항목에 중점을 두겠습니다.


삽입된 변수가 있는 템플릿 표시

주피터 확장 Python Markdown을 사용하면 실제로 사용자가 설명한 대로 정확히 수행할 수 있습니다.

설치 지침은 nbextensions의 github 페이지에서 확인할 수 있습니다.주피터 명령 또는 확장 구성자를 사용하여 파이썬 마크다운 확장을 사용하도록 설정해야 합니다.

확장 기능을 사용하면 변수에 액세스할 수 있습니다.{{var-name}}이러한 마크다운 템플릿의 예는 다음과 같습니다.

마크다운 셀의 Python 코드

변수 a는 {{a}}입니다.

LateX: {{b}}도 여기에 넣을 수 있습니다!

이미지까지 포함 가능: {{i}}

자연스럽게 모든 변수 또는 이미지a,b,i이전 코드에서 설정해야 합니다.그리고 물론 Markdown-Latex 스타일의 표현을 사용할 수도 있습니다(예:$\phi$print 명령을 사용하지 않습니다.이 이미지는 확장의 Wiki에서 가져온 것으로, 기능을 보여줍니다.

example from wiki


ipython/jupyter에 통합되는 이 기능에 대한 자세한 내용은 ipythonjupyter에 대한 문제 추적기에서 설명합니다.

토마스의 대답에 덧붙여. 또 은 마다운마을렌는또하다같다습니음과다방법을 사용하는 것입니다.display_markdown에서 합니다.IPython.display모듈:

from IPython.display import display_markdown

display_markdown('''## heading
- ordered
- list

The table below:

| id |value|
|:---|----:|
| a  |  1  |
| b  |  2  |
''', raw=True)

아래 출력:

enter image description here

사용 예는 Google Colab 노트북에서 찾을 수 있습니다.

또 다른 옵션은 마크다운 렌더링에는 리치를 사용하고 기호에는 유니코드It를 사용하는 것입니다.예를 들어 Rich는 테이블을 지원하지 않는 CommonMark를 사용하기 때문에 몇 가지 제한이 있습니다.그러나 리치에는 테이블을 렌더링하는 다른 방법이 있습니다. 자세한 내용은 설명서에 나와 있습니다.

다음은 예입니다.

from rich.markdown import Markdown
import unicodeit

alpha = unicodeit.replace('\\alpha')
epsilon = unicodeit.replace('\\epsilon')
phi = unicodeit.replace('\\phi')

MARKDOWN = f"""
# This is an h1

Rich can do a pretty *decent* job of rendering markdown.

1. This is a list item
2. This is another list item

## This is an h2

List of **symbols**:

- alpha: {alpha}
- epsilon: {epsilon}
- phi: {phi}

This is a `code` snippet:

```py
# Hello world
print('Hello world')
```

This is a blockquote:

> Rich uses [CommonMark](https://commonmark.org/) to parse Markdown.

---

### This is an h3

See [Rich](https://github.com/Textualize/rich) and [UnicodeIt](https://github.com/svenkreiss/unicodeit) for more information.
"""

Markdown(MARKDOWN)

다음과 같은 출력을 생성합니다.

Rich + UnicodeIt output

from tabulate import tabulate
from IPython.display import Markdown
A2 = {
    'Variable':['Bundle Diameter','Shell Diameter','Shell Side Cross Flow area','Volumetric Flowrate','Shell Side Velocity'],
    'Result':[3.4, 34, 78.23, 1.0 ,  2.0],
    'Unit' : ['$in$', '$in$', '$ft^2$', '$ft^{3}s^{-1}$', '$fts^{-1}$']}
temp_html=tabulate(A2, headers='keys', tablefmt='html')
Markdown(temp_html.replace('<table>','<table style="width:50%">'))

.replace()를 사용하면 라텍스 코드가 깨지지 않고 열이 과도하게 늘어나는 것을 방지할 수 있습니다.이 방법으로 라텍스로 테이블을 동적으로 생성할 수 있습니다.

옵션 하나 더.주피터 노트북을 웹 앱으로 변환하기 위한 오픈 소스 프레임워크가 있습니다.그것은 수성이라고 불립니다.라는 기능을 가지고 있습니다.Markdown모든 문자열을 마크다운으로 표시합니다.여기 설명서가 있습니다.

다음은 마크다운을 동적으로 표시하는 노트북의 예입니다.

import mercury as mr
slider = mr.Slider(label="Favorite number", value=5)
name = "Piotr"
mr.Markdown(f"""# Hello {name}

## Your variable is {slider.value}
""")

notebook with markdown

머큐리로 만든 노트북과 웹 앱.동적 마크다운이 있습니다.

노트북의 표준 마크다운 렌더러를 mystjs 렌더러로 바꿀 jupyterlab-myst라는 흥미로운 연구실 확장이 있습니다.

즉, 변수 값을 마크다운으로 직접 보간할 수 있는 것을 포함하여 마크다운 셀에서 표준 이상의 공통 마크다운을 렌더링할 수 있습니다.이것들은 간단한 변수, 이미지, 셀 출력, 심지어 ipy 위젯일 수 있습니다.

이를 통해 코드 셀의 계산 결과와 노트북의 마크다운 콘텐츠를 결합하는 방법에 대해 훨씬 더 많은 가능성이 열립니다.노트북이 다시 실행되면 마크다운의 보간된 값이 업데이트됩니다.

OP의 사용 사례에도 도움이 될 수 있는 보고서 작성에 도움이 되는 다른 기능이 있습니다.

Example of ipywidgets rendered in a markdown cell

언급URL : https://stackoverflow.com/questions/36288670/how-to-programmatically-generate-markdown-output-in-jupyter-notebooks