Jupyter Notebook에서 Magic Command 사용하기

록으327·2020년 2월 2일
1

General Tips

목록 보기
2/5

Magic Command란?

IPython시스템에서 제공하는 add-on function들이며
접두사로 % 또는 %%를 사용하는 키워드들로 사용된다

  • % 의 경우 한 줄의 코드에서만 실행되며
  • %% 의 경우 여러 줄, 즉 한 셀의 내용 전체에서 실행된다

이게 도대체 무슨 말일까? 일단 Magic Command가 어떻게 사용되는지 보면 바로 이해가 갈 것이다


%alias

  • 시스템 명령어를 정의할 수 있다

    %alias alias_name cmd 와 같이 정의하면 된다

    아래 예를 보자

    In [1]: alias bracket echo "Input in brackets: <%l>"
    In [2]: bracket hello world
    Out [2]: "Input in brackets: <hello world>"
    
    In [3]: alias parts echo first %s second %s
    In [4]: %parts hello world
    Out [4]: first hello second world

%l은 라인 전체, %s는 단어 하나를 포맷팅한다. %l와 %s는 상호 베타적이므로 하나의 명령어에는 둘 중 하나만 사용될 수 있다

  • 현재 시스템 명령어들을 볼 수 있다
    In [5]: alias
    Total number of aliases: 8
    Out [5]:[('bracket', 'echo "Input in brackets: <%l>"'),
    				 ('copy', 'copy'),
    				 ('ddir', 'dir /ad /on'),
    				 ('echo', 'echo'),
    				 ('ldir', 'dir /ad /on'),
    				 ('ls', 'dir /on'),
    				 ('mkdir', 'mkdir'),
    				 ('parts', 'echo first %s second %s'),
    				 ('ren', 'ren'),
    				 ('rmdir', 'rmdir')]```

위에서 만든 명령어들이 결과에 포함되어 있다

>### %automagic

- `%` 접두사를 붙이지 않고 Magic Command를 사용하게 해준다

위에서 `%alias` ****를 설명할때, 잘 보면 어떤 경우엔 앞에 %를 붙이기도 하고 안붙이기도 했다

이는 기본적으로 Automagic이 ON 상태이기 때문이다

만약 `%automagic`으로 해당기능을 끄면 반드시 앞에 `%` 를 붙여야 한다
```python
    In [6]: %automagic
    Automagic is OFF, % prefix IS needed for line magics.
    In [7]: alias
    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-36-2ba6570be30e> in <module>
    ----> 1 alias
    
    NameError: name 'alias' is not defined
    
    In [8]: %automagic
    Automagic is ON, % prefix IS NOT needed for line magics.
    In [9]: alias
    Out [9]:[('bracket', 'echo "Input in brackets: <%l>"'),
    				 ('copy', 'copy'),
    				 ('ddir', 'dir /ad /on'),
    				 ('echo', 'echo'),
    				 ('ldir', 'dir /ad /on'),
    				 ('ls', 'dir /on'),
    				 ('mkdir', 'mkdir'),
    				 ('parts', 'echo first %s second %s'),
    				 ('ren', 'ren'),
    				 ('rmdir', 'rmdir')]

참고로 System Command < Magic Command < Python Normal Variables 순으로 우선순위가 결정되기 때문에, 파이썬에 같은 이름의 변수나 함수가 있다면 그쪽이 우선적으로 실행된다. 이를 방지하기 위해선 같은이름의 파이썬 변수, 함수등을 삭제하거나, % 키워드를 사용하여 구분해주면 된다

%run

  • 외부 Python 스크립트를 실행한다
    test.py
    
    def sayHello(x):
        print("Hi, I'm {0}".format(x))
    
    print("Excuse me?")
    a = 42
    -----------------------------------------------
    
    In [10]: %run test.py
    Excuse me?

한 번 실행시킨 파이썬 스크립트 안에 있는 변수나 함수 또한 사용 가능하다

    In [11]: sayHello("Harry")
    Hi, I'm Harry
    In [12]: a
    Out [12]: 42

%timeit, %time

%time 은 코드가 실행되는데 걸리는 시간을 측정해준다

    In [13]: %time sum(range(100))
    Wall time: 641 µs
    Out [13]: 4950

%timeit은 보다 복잡한 조작을 가능하게 해준다(자세한것은 %timeit?참조)

    In [14]: %%timeit
    				a = 1
    				b = 1
    				sum = 0
    				for i in range(10):
    				    sum += a
    				    a,b = b, a+b
    2.33 µs ± 798 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit은 주어진 코드를 여러번 실행해보고 그 평균시간을 알려준다

%pylab

numpy, matplotlib와같은 모듈을 임포트하고 Jupyter Notebook상에서 인터렉티브하게 동작하도록 한다

간단히 말해서 %pylab 커맨드를 사용하는것은 다음 코드를 실행시키는 것과 같다

    import numpy
    import matplotlib
    from matplotlib import pylab, mlab, pyplot
    np = numpy
    plt = pyplot
    
    from IPython.display import display
    from IPython.core.pylabtools import figsize, getfigs
    
    from pylab import *
    from numpy import *```

- `--no-import-all` 옵션을 주면 마지막 `from pylab import *` 과 `from numpy import *` 는 적용되지 않는다


>### %matplotlib

- matplotlib를 인터랙티브하게 동작하도록 만들어준다

Jupyter로 데이터 엔지니어링좀 만져봤다면 `%matplotlib inline` 로 익숙한 Magic일 것이다

 `%matplotlib --list` 를 보면 inline 외에도 *'tk', 'gtk', 'gtk3', 'wx', 'qt4', 'qt5', 'qt', 'osx', 'nbagg', 'notebook', 'agg', 'svg', 'pdf', 'ps', 'inline', 'ipympl', 'widget'* 등의 gui를 사용할 수 있다

>### %magic, %lsmagic

- `%magic` 는 Magic Command에 대한 정보를 제공하며
- `%lsmagic`은 현재 사용 가능한 Magic Command들을 보여준다

>### ?

- Magic Command 뒤에 붙이면 해당 Magic에 대한 설명을 보여준다

    In [15]: %lsmagic?
    Docstring: List currently available magic functions.
    File:      c:\program files (x86)\microsoft visual studio\shared\anaconda3_64\lib\site-packages\ipython\core\magics\basic.py

---

이 포스트는 [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do), [IPython - Built-in magic commands](https://ipython.readthedocs.io/en/stable/interactive/magics.html)의 내용을 바탕으로 작성되었다

또한 이 글은 Jupyter Notebook에서 사용할 수 있는 Magic Command(중 아주 약간)만을 설명했다. Jupyter Notebook과 IPython은 약간의 차이점이 있기 때문에 IPython에는 있지만 Jupyter에는 없는 Magic Command들도 있다
profile
log327

0개의 댓글