본문 바로가기
Data Science/파이썬으로 데이터분석 하기

파이썬으로 데이터 분석하자 (2) - IPython 사용하기

by 싸코 2017. 9. 27.

파이썬 IPython  - 파이썬 라이브러리를 활용한 데이터 분석 中

※본 포스팅은 "파이썬 라이브러리를 활용한 데이터 분석"을 공부하면서 기억이 나지 않을 때 다시 돌아볼 목적으로 필요 내용만 간단하게 정리하였습니다.



IPython 사용하기


자기관찰 ?

?는 일반정보, ??는 가능한 경우 함수 소스코드
variable?
function??

dir()을 알았을 때의 기쁨을 자기관찰(?, ??)을 알았을 때 또 느꼈다!!!!


%run

%run script.py
python scipt.py와 동일하게 동작하며 ipython 네임스페이스에 해당 스크립트에서 정의된 모든 변수들이 정의되어 접근이 가능


%paste, %cpaste

클립보드에 있는 내용 붙여넣기할 때 오류를 일으키지 않도록 해줌



단축키[각주:1]

 ctrl+p 

command를 역순으로 검색 

 ctrl+n 

command를 최근 순으로 검색 

 ctrl+shift+v

클립보드 텍스트 붙여넣기 

 ctrl+c

실행중인 코드 중지 

 ctrl+e

커서를 끝으로(e), 처음으로(a)

 ctrl+k

커서가 놓인곳부터 지우기(k), 모두지우기(u) 

 ctrl+f

한글자씩 이동 앞으로(f), 뒤로(b) 

 ctrl+l

화면 클리어(r, unix 등과 비슷) 

 ctrl + s, r

검색 가능 




매직명령어[각주:2]

IPython에서 시스템 동작을 쉽게 제어할 수 있는 특수 명령어
?를 통해 각 매직명령어의 옵션을 확인할 수 있음

 %quickref

 IPython의 빠른 도움말 표시 

 %magic 

 모든 매직함수에 대한 상세 도움말 출력

 %debug 

 최근 예외처리문 하단에서 대화형 디버거 실행 

 %hist 

 명령어를 입력하고 나서 선택적으로 히스토리 출력 

 %pdb 

 예외가 발생하면 자동으로 디버거 실행 

 %paste 

 클리보드에 저장된 파이썬 코드를 에러 없이 가져올 수 있도록 함

 %cpaste 

 실행중인 파이썬 코드를 수동으로 붙여넣기 가능하도록 프롬프트에 표시 

 %reset 

 네임스페이스에 있는 모든 변수와 이름 삭제 

 %page OBJECT 

 객체를 pager로 가독성 있게 출력 

 %run script.py 

 IPython 내에서 스크립트를 실행해 줌 

 %prun statement 

 cProfile을 통해 statement를 실행하고 프로파일링 결과 출력

 %time statement 

 단일 statement의 실행 시간을 출력한다 

 %timeit statement 

 statement를 반복적으로 실행하고 평균 시간을 출력하는 방법으로 아주 짧은 시간 안에 실행이 완료되는 코드의 실행 시간을 측정할 때 유용하다 

 %who, %who_ls, %whos 

 네임스페이스 내에 정의된 변수를 다양한 방법으로 표시한다 R의 ls()와 비슷한듯

 %xdel variable

 variable을 삭제하고 IPython 내부적으로 해당 객체를 참조하는 모든 참조를 제거한다 



IPython에서 GUI 콘솔을 사용하는 방법

  ipython qtconsole --pylab=inline  


--pylab 옵션을 ipython 실행시 함께 입력하면 gui 콘솔 사용이 가능하다



명령어

입출력 변수 _ , __ , _i#

IPython은 자동적으로 마지막 2개의 결과를 저장하는 것 같다. 마지막 2개의 결과를 보려면 _ , 와 __ 를 입력하면 된다
또한 입출력은 IPython 콘솔에서 In[116], Out[116] 이런 형식으로 나타나며 116은 일종의 index로 이 index번호를 입력해서 해당 내용을 출력할 수 있다.
ex. 27번째 입력내용을 보려면 _i27 입력

%logstart

IPython 상에서의 입출력을 포함한 전체 콘솔 세션의 로그를 기록하는 매직명령어이다. 작업한 내용을 저장하고 싶을 때 실행하면 된다.
%logstart의 docstring을 참조하면 (%logstart??) 출력파일의 경로 변경 및 다양한 옵션을 확인할 수 있다.
%logoff, %logon, %logstate, %logstop 등도 있다



운영체제 명령어 사용

 !cmd

 시스템 쉘에서 cmd 명령어를 실행 

 output = !cmd args

 cmd명령어를 실행하고 출력과를 output에 저장 

 %alias alias_name cmd 

 시스템(쉘) 명령어에 대한 별칭을 정의 

 %bookmark 

 IPython의 디렉터리 북마크 시스템을 활용 

 %cd directory 

 시스템의 작업 디렉터리를 directory로 변경

os.chdir() 와 동일

 %pwd 

 현재 시스템의 작업 디렉토리를 반환 

os.getcwd() 와 동일

 %pushd directory 

 현재 디렉토리를 스택에 추가하고 새로운 디렉토리로 이동

 %popd 

 스택에 저장된 디렉토리를 꺼내서 그 디렉토리로 이동

 %dirs 

 현재 디렉토리 스택에 저장된 디렉토리 목록 출력 

 %dhist 

 접근했던 디렉토리 히스토리 출력 

 %env 

 시ㅡ템 환경 변수를 dict 타입으로 출력 



!명령어

위의 !cmd에서 본 것처럼 !는 시스템 쉘 상에서 해당 명령어를 실행하라는 의미이다. rm 이나 del 같은 배쉬 명령어를 사용가능하다는 소리다.

!python 입력시 파이썬이 쉘샹에서 실행된다. 이때 IPython의 제어권은 사라지고 exit하면 돌아온다.

!ls

달러 기호 $를 붙이면 IPython 상에서 정의된 변수를 의미한다. 아래와 같이 파일 검색에 활용이 가능하다

foo = 'a*'

!ls %foo

> a1.py  a2.py  a3.py



별칭(%alias)과 북마크(%bookmark)

별칭과 북마크로 자주사용하는 쉘명령어에 대한 사용자 단축키를 만들 수 있다. 필요하면 구글링으로 찾아보자.



디버깅 (%debug)

예외가 발생하고 %debug를 입력하면 디버거가 실행된다. u(위로), d(아래로)를 눌러서 스택 트레이스 사이를 이동 가능하다.
%pdb 명령어를 실행하면 예외 발생시 IPython이 자동적으로 디버거를 실행한다.
디버거는 개발중에 스크립트나 함수를 실행하는 과정에서 단계 하나하나를 검증하거나 break point를 설정하고 싶을 때 주로 사용한다.

%run 에 -d 옵션을 넣어주면 스크립트 실행전에 디버거를 먼저 실행한다.
- s(스텝)을 누르면 스크립트로 진입한다.
- b #(number)를 누르면 해당 줄로 진입한다.
- c(계속)를 누르면 브레이크 포인트에 걸릴 때까지 스크립트를 실행한다
- n(다음)을 누르면 다음줄을 실행한다
- ! 디버거 명령과 같은 변수가 있으면 느낌표를 누른다

디버거 명령은 h, help, c, q, b #, s, n, u, d, a, debug statement, l statement, w 가 있다.


코드시간 측정 %time, %timeit

import time
start = time.time()
for i in range(iterations):
    시간측정을 하고자 하는 코드
elapsed_per = (time.time() - start) / iterations

실행시간을 재는 흔한 방법이라고 한다.

이를 %time으로 성능을 확인할 수 있고, %timeit으로 반복적으로 실행해 평균 성능을 구할수 있다.


%prun, %lprun

.... (추가 예정)



$ ipython notebook --pylab=inline





IPython 추가 팁

reload(모듈) , dreload(모듈)

작업을 하다 모듈을 수정했을 때  수정된 모듈을 작업중에 반영하기 위해 IPython을 재시작해야 하는 번거로움이 있다. import로 다시 입력해도 이전에 입력된 모듈이 그대로 적용되기 때문이다. 이때 reload(모듈)을 써서 수정된 버전으로 다시 불러올 수 있다.

만약 해당 모듈에 의존하는 모듈이 많아질수록 reload를 반복해서 사용해야하며 이 문제를 해결하기 위해서 dreload(모듈)로 의존된 다른 모듈들까지 다시 불러오도록 할 수 있다.

관련성이 높은 데이터과 객체는 글로벌 네임스페이스에 저장되도록 하자. 프로그램을 실행할 때 해당 스크립트 파일의 if __name__ == '__main__': 에서 데이터나 객체가 생성되도록 해야 IPython에서 프로그램 실행 결과나 객체에 접근이 가능하다.


모듈 하나가 크고 긴 것이 여러 파일로 나눠서 파일 관리를 복잡하게 하는 것보다 낫다






IPython을 좀더 자세하게 알게되니 지금까지는 몰랐던 IPython의 편리함과 그 기능의 우수함을 새삼 깨닫게 느껴진다. IPython이 진짜 최고의 파이썬 개발툴인 것 같다




  1. 참조: "파이썬 라이브러리를 활용한 데이터 분석", 81p [본문으로]
  2. 참조: "파이썬 라이브러리를 활용한 데이터 분석", 83p [본문으로]

댓글