[프로그래밍 팁] SAS 유니버시티 에디션으로 파이썬 코딩하기

1

‘국영수코(co)’라는 신조어 들어보셨나요? 국어, 영어, 수학, 코딩(coding)의 약자인데요. 교육부의 ‘2015 개정교육과정’에 따라 올해 3월부터 중학생, 내년부터는 초등학교 5, 6학년 학생의 소프트웨어(SW) 교육이 의무화되면서 코딩 교육과 관련 자격증 열풍이 불고 있습니다.

미국, 영국 등 IT 선진국들은 이미 발 빠르게 코딩 교육을 의무화하며, 4차 산업혁명 시대의 인재 확보에 나섰는데요. SAS 역시 2014년, 학습이나 비상업적인 목적의 연구 활동을 지원하기 위한 무료 소프트웨어 ‘SAS 유니버시티 에디션(SAS University Edition)’의 한글 버전을 출시하고 국내 분석 전문가 양성을 위해 앞장서고 있습니다.

SAS 유니버시티 에디션 다운로드 및 설치

SAS는 지속적인 업데이트를 통해 SAS 유니버시티 에디션의 기능을 강화하고 있는데요. 지난해 말 업데이트를 통해 SAS 유니버시티 에디션의 주피터(Jupyter) 노트북 인터페이스에서 사용할 수 있는 SASPy 패키지가 업데이트됐습니다.

SAS 유니버시티 에디션은 이미 오래 전부터 노트북 스타일 환경에서 SAS 프로그램을 작성하고 실행할 수 있는 주피터 노트북을 지원해왔는데요. 하지만 이전까지는 주피터 노트북으로 파이썬(Python) 프로그램을 이용할 수 없었습니다. 이제 최근 업데이트된 SASPy 라이브러리를 이용해 파이썬 코더(coder)와 같은 SAS 기능을 사용할 수 있게 됐습니다!

SAS 유니버시티 에디션 – 주피터 노트북

이게 끝이 아닙니다. 이제 SAS와 파이썬을 이용해 SSL 암호 기반의 HTTPS 웹사이트 데이터에 접근할 수 있습니다. 이전 버전은 이처럼 암호화된 연결을 지원하기 위한 요소를 제공하지 않았는데요. 이제 REST API를 사용할 수 있는 것은 물론, 웹 데이터를 훨씬 더 쉽게 다운로드할 수 있습니다! 그럼 지금부터 최신 SAS 유니버시티 에디션으로 HTTPS를 활용하는 방법을 예시와 함께 설명해드리겠습니다.

SAS 유니버시티 에디션에서 파이썬 노트북 생성하기

웹 브라우저에서 SAS 유니버시티 에디션에 접속하면 다음과 같은 ‘Welcome’ 창이 나타납니다. 여기에서 SAS 스튜디오(SAS Studio) 또는 주피터 노트북을 시작할 수 있는데요. 오늘은 주피터 노트북을 이용한 예시를 소개해드리고자 합니다. 그렇지만 SAS 스튜디오를 이용하시면 다양한 SAS 기능을 배우실 수 있답니다!

노트북 인터페이스를 시작하면 주피터 홈페이지에 접속됩니다. 파이썬을 시작하려면 오른쪽 메뉴에서 ‘New → Python 3(파이썬 3)’을 선택하세요. 그러면 새로운 무제(Untitled) 노트북이 생깁니다. 여기서는 노트북 인터페이스로 작업하는 방법을 알고 있다는 가정 하에 새로운 SAS 기능으로 이 방법을 이용해보겠습니다.

팬더스(pandas) 데이터 프레임에서 SAS로 데이터 이동하기

팬더스(pandas) 는 데이터로 작업하는 파이썬 프로그래머를 위한 표준인데요. SAS 유니버시티 에디션에 포함된 팬더스 모듈을 이용해 테이블과 같은 데이터 프레임을 읽고 조작할 수 있습니다. 다음은 GitHub에서 데이터 파일을 가져와 데이터 프레임에 로드하는 예시인데요. 이제 SAS 유니버시티 에디션에서 HTTPS를 사용하는 GitHub에 접근할 수 있습니다. GitHub 파일에 대한 자세한 내용은 SAS 블로그를 통해 확인하실 수 있습니다.

import saspy

import pandas as pd


df = pd.read_csv('https://raw.githubusercontent.com/zonination/perceptions/master/probly.csv')

df.describe()

결과는 다음과 같습니다. 모두 파이썬으로 작성됐으며, 아직 SAS는 사용하지 않았습니다.

이 데이터에 SAS 기능을 적용하려면 데이터를 SAS 데이터 세트로 옮겨와야 하는데요. SASPy는 파이썬 팬더스 데이터 프레임을 SAS 라이브러리와 데이터 세트로 가져올 수 있는 dataframe2sasdata() 메소드(일명 df2sd)를 제공합니다. 이때 이 메소드는 SASdata 오브젝트를 출력합니다. 이 예시에서는 SAS 세션에서 데이터를 WORK.PROBLY로 복사해보겠습니다.

sas = saspy.SASsession()

probly = sas.df2sd(df,'PROBLY')

probly.describe()

추가로 SASdata 오브젝트는 팬더스에서 얻은 것과 유사한 결과를 도출하는 describe() 메소드를 포함합니다.

파이썬으로 SAS procedures 처리하기

SASPy에는 SAS procedures에 API를 제공하는 오브젝트 및 메소드 콜렉션이 내장돼 있습니다. 가장 일반적으로 사용되는 것들인데요. API는 수행하려는 작업에 대한 간단한 ‘Python-ic’ 스타일의 접근 방식을 제공합니다. 예를 들어, 데이터 세트의 변수에 대한 SAS 기반의 히스토그램을 작성하려면 간단하게 hist() 메소드를 사용하면 하면 됩니다.

SASPy는 통계, 머신러닝, 시계열 등을 나타내는 수십 개의 간단한 API 메소드를 제공합니다. GitHub 프로젝트 페이지에서 관련 문서를 찾을 수 있는데요. SAS 유니버시티 에디션이 모든 SAS 제품을 포함하지는 않기 때문에 이러한 API 메소드 중 일부는 작동하지 않을 수 있습니다. 예를 들어, HPFOREST procedure을 나타내는 SASml.forest() 메소드는 SAS 엔터프라이즈 마이너(SAS Enterprise Miner)가 있는 경우에만 작동합니다.

Teach me SAS: 파이썬 코드로부터 SAS 코드 생성하기

SASPy에서 모든 메소드는 SAS 프로그램 코드를 만들어냅니다. 현재 결과가 마음에 들거나 사용된 SAS 코드에 대해 배우고 싶다면 SASPy에서 ‘teach me SAS’ 모드를 사용하면 됩니다!

sas.teach_me_sas('true')

SASPy는 앞에서 살펴본 describe(), hist() 메소드를 다음과 같이 나타냅니다.

흥미로운 코드죠? PROC MEANS의 STACKEDODSOUTPUT 옵션이나 PROC SGPLOT의 SCALE= 옵션에 대해서도 궁금하신 분들이 계실 텐데요!

오늘 학습한 SAS 문(statements)을 실험하실 때 지금의 노트북을 종료하고 다시 시작하지 않아도 됩니다. 또 이 SAS 문(statements) 중 몇 가지를 시험 삼아 사용해 볼 수 있는 %%SAS ‘magic command’가 내장되어 있습니다.

%%SAS

proc means data=sashelp.cars stackodsoutput n nmiss median mean std min p25 p50 p75 max;run;

SAS 유니버시티 에디션의 파이썬 기능 제한

SAS 유니버시티 에디션은 주피터 노트북에서의 작업을 지원하는 300개 이상의 파이썬 모듈을 지원합니다. 파이썬 노트북에서 help(‘modules’) 명령어를 실행해 전체 목록을 볼 수 있는데요. 이 목록에는 팬더스와 NumPy와 같이 데이터 작업에 필요한 공통 파이썬 패키지가 포함돼 있습니다. 그렇지만 많이 사용되는 파이썬 기반의 머신러닝 모듈이나 데이터 시각화를 지원하는 모듈은 포함되어 있지 않습니다. 대신! 이러한 기능의 대부분은 SASPy의 API 내에서 지원됩니다. 이 정도면 충분 하겠죠?

SAS 유니버시티 에디션은 변경할 수 없는 가상 시스템으로 구성되어 있기 때문에 추가 파이썬 모듈을 설치할 수는 없습니다. 또 shell-like 인터페이스로부터 시스템을 제어하는 주피터 터미널(terminal)에 접속할 수 없습니다. 이러한 기능은 모두 자체 SASPy 인스턴스로 SAS를 설치했을 때 이용할 수 있습니다. SAS 유니버시티 에디션의 학습 환경을 뛰어넘어 SAS 기술을 활용해볼 준비가 됐나요? 이 모든 기능이 기다리고 있습니다!

더 알고 싶다면

SAS 블로그를 통해 파이썬에서 SAS 9.4로 코딩하는 방법과 파이썬 코드를 이용해 SAS에 접근(access)하는 방법 등 SASPy의 새로운 기능에 대해 더 자세히 알아보세요!


해당 기사는 Chris Hemedinger의 기사를 일부 편집한 내용입니다.
Share

About Author

Jeanne (Hyunjin) Byun

Related Posts

1 Comment

  1. 안녕하세요 SAS와 Python 사이에서 방황하던 저에게는 너무나도 도움이 되는 컨텐츠입니다.
    혹시 한가지만 여쭤볼수 있을까요
    sas.teach_me_sas('true')
    probly.describe()
    를 실행하면 아래와같은 에러메시지가 뜨는데요, 혹시 제가 뭘잘못한건지 알수있을까요..?
    ---------------------------------------------------------------------------
    AttributeError Traceback (most recent call last)
    in
    ----> 1 sas.teach_me_sas('true')
    2 probly.describe()

    AttributeError: 'SASsession' object has no attribute 'teach_me_sas'

Leave A Reply

Back to Top